编写一个matlab脚本程序:matlab通过“ideal_lp设计理想高通滤波器_IIR数字滤波器,设计一个FIR高通滤波器,使其满足ωp=0.8π,Rp=0.1dB,ωs=0.7π,As=60dB
时间: 2024-03-06 11:47:34 浏览: 74
好的,以下是实现你要求的 MATLAB 代码:
```matlab
% 使用 Matlab 的 ideal_lp 函数来设计理想高通 IIR 数字滤波器
% 然后使用 fir1 函数来设计 FIR 高通滤波器
% ωp=0.8π, Rp=0.1dB, ωs=0.7π, As=60dB
% 计算通带和阻带边界频率
wp = 0.8*pi;
ws = 0.7*pi;
% 计算通带和阻带的最大增益
Rp_db = 0.1; % 通带最大允许衰减
As_db = 60; % 阻带最小要求衰减
Rp = 10^(Rp_db/20); % 转换为幅度比
As = 10^(As_db/20); % 转换为幅度比
% 使用 ideal_lp 函数设计理想高通 IIR 数字滤波器
[n, wn] = buttord(wp, ws, Rp, As, 's');
[b, a] = butter(n, wn, 'high', 's');
% 使用 bilinear 函数将 IIR 数字滤波器转换为 FIR 数字滤波器
fs = 2*pi; % 采样频率
[B, A] = bilinear(b, a, fs);
% 使用 fir1 函数设计 FIR 高通滤波器
M = 61; % 滤波器阶数
h = fir1(M-1, wp/pi, 'high');
% 绘制滤波器的幅频响应
omega = 0:0.01:pi; % 频率范围
[H_butter, omega] = freqs(b, a, omega);
[H_fir, omega] = freqz(h, 1, omega);
H_butter_db = 20*log10(abs(H_butter));
H_fir_db = 20*log10(abs(H_fir));
figure;
plot(omega/pi, H_butter_db, omega/pi, H_fir_db);
legend('IIR高通滤波器', 'FIR高通滤波器');
xlabel('频率/\pi');
ylabel('增益/dB');
title('高通滤波器的幅频响应');
grid on;
```
代码中,我们首先计算了通带和阻带的边界频率,然后使用 `buttord` 函数计算出理想高通 IIR 数字滤波器的阶数和截止频率,再使用 `butter` 函数设计出该滤波器的系数。接着,使用 `bilinear` 函数将 IIR 数字滤波器转换为 FIR 数字滤波器。另外,我们也使用 `fir1` 函数设计了一个 FIR 高通滤波器。最后,我们绘制了两个滤波器的幅频响应,并进行了对比。
阅读全文