%本文将针对一个含有 5Hz 、 15Hz 和 30Hz 的混和正弦波信号, 设计一个 FIR 带通滤波器,
%给出利用 MATLAB 实现的三种方法: 程序设计法、 FDATool 设计法和 SPTool 设计法。 参
%数要求:采样频率 fs=100Hz ,通带下限截止频率 fc1=10 Hz ,通带上限截止频率 fc2=20Hz ,过渡带宽 6 Hz,通阻带波动 0.01 ,采用凯塞窗设计。
fc1 =10 ;
fc2 =20 ;
fs=100 ;
[n,Wn,beta,ftype]=kaiserord([7 13 17 23],[0 1 0],[0.01 0.01 0.01],100);
%得出滤波器的阶数 n=38 , beta=3.4
w1=2*fc1/fs; w2=2*fc2/fs;% 将模拟滤波器的技术指标转换为数字滤波器的技术指
window=kaiser(n+1,beta);% 使用 kaiser 窗函数
b=fir1(n,[w1 w2],window); %使用标准频率响应的加窗设计函数 fir1
freqz(b,1,512);% 数字滤波器频率响应
t = (0:100)/fs;
s = sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30);% 混和正弦波信号
sf = filter(b,1,s); %对信号 s 进行滤波
采用[n,Wn,beta,ftype] = kaiserord(f,a,dev)函数来估计滤波器阶数等,得到凯塞窗滤波器。
这里的函数kaiserord(f,a,dev)或者kaiserord(f,a,dev,fs):
f为对应的频率,fs为采样频率;当f用数字频率表示时,fs则不需要写。
a=[1 0]为由f指定的各个频带上的幅值向量,一般只有0和1表示;a和f长度关系为(2*a的长度)- 2=(f的长度)
devs=[0.05 10^(-2.5)]用于指定各个频带输出滤波器的频率响应与其期望幅值之间的最大输出误差或偏差,长度与a相等。
其中fir1(n,Wn)归一化频率的含义
Wn是一个归一化频率,在滤波器设计中是用fs/2进行归一。
在fir1滤波器设计时采用的是归一化频率。实际采样频率为fs,实际的截止频率为fc,设归一化截止频率为fcm,fcm=fc/(fs/2)。
filter函数 参考 https://blog.csdn.net/u012111020/article/details/73744234
b=fir1(n,Wn)返回截止频率为Wn的N阶FIR低通滤波系数行列向量b。