基于汉宁窗的FIR数字带通滤波器设计matlab代码
时间: 2023-09-06 08:09:44 浏览: 141
以下是基于汉宁窗的FIR数字带通滤波器设计的matlab代码示例:
```matlab
% 定义参数
fs = 1000; % 采样率
f1 = 50; % 通带起始频率
f2 = 150; % 通带截止频率
f3 = 200; % 阻带起始频率
f4 = 300; % 阻带截止频率
Rp = 1; % 通带最大衰减量,单位为dB
Rs = 60; % 阻带最小衰减量,单位为dB
% 计算通带和阻带的数字频率
Wp = [2*f1/fs 2*f2/fs];
Ws = [2*f3/fs 2*f4/fs];
% 计算通带和阻带的宽度和中心频率
wp = mean(Wp);
ws = mean(Ws);
BW = abs(diff(Wp));
wc = sqrt(Wp(1)*Wp(2));
% 计算滤波器的阶数和理想截止频率
[n, Wn] = buttord(Wp, Ws, Rp, Rs, 's');
% 计算滤波器的系数
[b, a] = butter(n, Wn, 'bandpass', 's');
[h, w] = freqz(b, a);
% 将系数进行加窗处理
M = length(b)-1;
n = 0:M;
h = h';
win = hann(M+1)';
b = b.*win;
h = h.*win;
% 绘制滤波器的频率响应图
figure;
plot(fs*w/(2*pi), 20*log10(abs(h)));
ylabel('幅值(dB)');
xlabel('频率(Hz)');
title('基于汉宁窗的FIR数字带通滤波器频率响应');
grid on;
```
上述代码中,使用了Butterworth滤波器设计函数`buttord`和`butter`,用于计算滤波器的阶数和系数。然后使用了汉宁窗进行加窗处理,得到最终的FIR数字带通滤波器系数。最后绘制了滤波器的频率响应图。需要注意的是,上述代码中的参数可以根据具体的应用进行调整。
阅读全文