⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 f_firparks.m

📁 digital signal processing常用工具箱
💻 M
字号:
function [b,n] = f_firparks (m,F_p,F_s,delta_p,delta_s,ftype,fs)

% F_FIRPARKS: Design a Parks-McClellan equiripple FIR filter
%
% Usage: b = f_firparks (m,F_p,F_s,delta_p,delta_s,ftype,fs)
%
% Inputs: 
%         m       = filter order (m >= 2)
%         F_p     = passband cutoff frequency or frequencies
%         F_s     = stopband cutoff frequency or frequencies
%         delta_p = passband ripple
%         delta_s = stopband attenuation
%         ftype   = filter type
%
%                   0 = lowpass
%                   1 = highpass
%                   2 = bandpass (F_p and F_s are vectors)
%                   3 = bandstop (F_p and F_s are vectors)
%
%         fs      = sampling frequency in Hz
% Outputs: 
%          b = 1 by (m+1) coefficient vector of numerator 
%              polynomial 
%          n = optional estimate of filter order needed to 
%              meet specs.
%
% Note: This function uses an equiripple FIR filter 
%       implementation based  on a free C version developed 
%       by Jake Janovetz (janovetz@uiuc.edu).
%
% See also: F_FIRWIN, F_FIRIDEAL, F_FIRSAMP, F_FIRLS, 
%           F_FREQZ

% Initialize

m = f_clip (m,2,m);
if mod(m,2)
    m = m + 1;
end
p = m/2;
fs = f_clip (fs,0,fs);
F_p = f_clip (F_p,0,fs/2);
F_s = f_clip (F_s,0,fs/2);
delta_p = f_clip (delta_p,0,delta_p);
delta_s = f_clip (delta_s,0,delta_s);
T = 1/fs;
w = delta_s/delta_p;

% Compute estimate of required filter order

B = abs(F_p(1)-F_s(1))/fs;
n = ceil(-(10*log10(delta_p*delta_s)+13)/(14.6*B) + 1);

% Compute F, A, and W like in f_parks.dll

switch ftype
    case 0,                                               % low pass
        F_0 = [0 F_p F_s fs/2]/fs;
        A_0 = [1 0];
        W_0 = [w 1];
        numband = 2;
    case 1,                                               % high pass
        F_0 = [0 F_s F_p fs/2]/fs;
        A_0 = [0 1];
        W_0 = [1 w];
        numband = 2;
    case 2,                                               % bandpass
        F_0 = [0 F_s(1) F_p(1) F_p(2) F_s(2) fs/2]/fs;
        A_0 = [0 1 0];
        W_0 = [1 w 1];
        numband = 3;
    case 3,                                               % bandstop
        F_0 = [0 F_p(1) F_s(1) F_s(2) F_p(2) fs/2]/fs;
        A_0 = [1 0 1];
        W_0 = [w 1 w];
        numband = 3;
end

% Compute equiripple filter (uses local dll file)

type = 1;
b = f_parks (m+1,numband,F_0,A_0,W_0,type);
  
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -