编写一个matlab脚本程序:设计一个FIR高通滤波器,使其满足ωp=0.8π,Rp=0.1dB,ωs=0.7π,As=60dB
时间: 2024-03-06 21:47:18 浏览: 61
好的,以下是实现你要求的 MATLAB 代码:
```matlab
% 设计高通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); % 转换为幅度比
% 计算通带和阻带的实际增益
omega = 0:0.01:pi; % 频率范围
A = (omega >= wp) .* 1 ./ sqrt(1 + Rp^2 * (1 ./ (omega.^2 - wp^2))); % 通带增益函数
A(omega >= ws) = As; % 阻带增益函数
% 计算滤波器系数
M = 61; % 滤波器阶数
N = (M-1)/2; % 窗函数的长度
n = 0:N;
hd = sin(n*wp) ./ (n*pi); % 理想滤波器的冲激响应
hd(N+1) = wp/pi; % 防止除零错误
w = hamming(M)'; % 使用 hamming 窗口
h = hd .* w; % 应用窗口
% 绘制滤波器的幅频响应
[H, omega] = freqz(h, 1, omega);
H_db = 20*log10(abs(H)); % 幅值转换为分贝
figure;
plot(omega/pi, H_db);
xlabel('频率/\pi');
ylabel('增益/dB');
title('高通FIR滤波器的幅频响应');
grid on;
```
代码中,我们首先计算了通带和阻带的边界频率,然后根据最大增益的要求,计算出通带和阻带的实际增益函数。接着,我们使用了一个理想的高通滤波器的冲激响应,然后应用了一个 Hamming 窗口来平滑滤波器的频率响应,得
阅读全文