用MATLAB编写一段程序对比格型滤波器和普通滤波器的频率响应
时间: 2023-09-22 15:07:56 浏览: 39
好的,以下是MATLAB代码实现:
```matlab
% 设置滤波器参数
fc = 1000; % 截止频率
fs = 8000; % 采样频率
N = 100; % 滤波器阶数
% 普通滤波器
b = fir1(N, fc/(fs/2));
[H1, w1] = freqz(b, 1, 512, fs);
% 格型滤波器
b = firgr(N, [0 fc/fs 2*fc/fs 1], [1 1 0 0]);
[H2, w2] = freqz(b, 1, 512, fs);
% 画图
subplot(2,1,1);
plot(w1, abs(H1));
title('普通滤波器频率响应');
xlabel('频率(Hz)');
ylabel('幅度');
grid on;
subplot(2,1,2);
plot(w2, abs(H2));
title('格型滤波器频率响应');
xlabel('频率(Hz)');
ylabel('幅度');
grid on;
```
解释一下代码:
- `fc` 是滤波器的截止频率,这里设置为 1000Hz;
- `fs` 是采样频率,这里设置为 8000Hz;
- `N` 是滤波器的阶数,这里设置为 100;
- `fir1()` 是 MATLAB 自带的函数,用于设计普通滤波器;
- `firgr()` 是 MATLAB 自带的函数,用于设计格型滤波器;
- `freqz()` 是 MATLAB 自带的函数,用于计算滤波器的频率响应;
- `subplot()` 是 MATLAB 自带的函数,用于在同一张图中画多个图形;
- `plot()` 是 MATLAB 自带的函数,用于画图;
- `title()`、`xlabel()`、`ylabel()`、`grid on` 等是设置图形的标签和样式。
运行这段代码后,就可以看到普通滤波器和格型滤波器的频率响应了。