用双线性变换法设计原型低通为巴特沃斯型的IIR数字高通滤波器,要求通带边界频率 为500Hz,阻带边界频率分别为400Hz,通带最大衰减1dB,阻带最小衰减40dB,抽样频 率为2000Hz,用MATLAB画出幅频特性,画出并分析滤波器系统函数的零极点;
时间: 2024-03-25 19:38:24 浏览: 113
好的,我可以为您提供一个 Matlab 的例子。
根据题目要求,我们需要设计一个抽样频率为 2000Hz,通带边界频率为 500Hz,阻带边界频率为 400Hz,通带最大衰减为 1dB,阻带最小衰减为 40dB 的巴特沃斯型高通滤波器。由于要求使用 IIR 滤波器,因此我们可以使用双线性变换进行设计。
首先,我们需要计算原型低通滤波器的极点频率:
```matlab
fs = 2000; % 抽样频率
fc = 500; % 通带截止频率
fs2 = 400; % 阻带截止频率
Ap = 1; % 通带最大衰减
As = 40; % 阻带最小衰减
% 计算原型低通滤波器的极点频率
wp = 2*pi*fc/fs;
ws = 2*pi*fs2/fs;
Rp = 1 - 10^(-Ap/20);
Rs = 10^(-As/20);
[n, wc] = buttord(wp, ws, Rp, Rs);
[z, p, k] = butter(n, wc, 'high', 's');
```
接下来,我们需要将原型低通滤波器转换为高通滤波器。这可以通过将所有极点取倒数和零点保持不变来实现:
```matlab
% 将原型低通滤波器转换为高通滤波器
zh = 0;
ph = ws./p;
kh = k*prod(-1./p);
```
现在,我们可以使用双线性变换将模拟滤波器转换为数字滤波器:
```matlab
% 双线性变换
[num, den] = bilinear(kh, ph, zh, fs);
```
接下来,我们可以使用 `freqz` 函数绘制滤波器的幅频特性:
```matlab
% 绘制幅频特性
[h, f] = freqz(num, den, 512, fs);
plot(f, 20*log10(abs(h)));
hold on;
plot([0 fs2 fs2 f(end)], [-As -As -Ap -Ap], 'r');
plot([fc fc f(end)], [0 -1 -1], 'r');
hold off;
xlim([0 fs/2]);
ylim([-50 5]);
xlabel('频率/Hz');
ylabel('幅度/dB');
title('设计的巴特沃斯型高通滤波器的幅频特性');
```
最后,我们可以使用 `zplane` 函数画出滤波器系统函数的零极点图:
```matlab
% 画出滤波器系统函数的零极点图
zplane(num, den);
title('滤波器系统函数的零极点图');
```
这样,我们就得到了一个通带边界频率为 500Hz,阻带边界频率为 400Hz,通带最大衰减为 1dB,阻带最小衰减为 40dB 的巴特沃斯型高通滤波器,并绘制了其幅频特性和零极点图。从零极点图可以看出,该滤波器具有 $n$ 个极点和 $n$ 个零点,其中极点和零点的数目相等。
阅读全文