用MATLAB设计一个线性相位 FIR 数字高通滤波器。技术指标为ωₚ=0.7π,ωₛₜ=0.5π,Aₛ=55dB,采用布莱克曼窗。画出幅度响应(以dB表示)及相位响应曲线。
时间: 2024-12-19 11:28:54 浏览: 12
在MATLAB中设计一个线性相位FIR数字高通滤波器,可以按照以下步骤进行:
1. **确定滤波器参数**:
- ω_p (截止频率) = 0.7π rad/s
- ω_s (转折频率) = 0.5π rad/s
- A_s (最小衰减) = 55 dB
2. **计算滤波器阶数**: 使用FIR设计工具,如fir1函数,需要确定适当的滤波器长度N。一般来说,可以通过计算过渡带宽度Δω (ω_s - ω_p) 和所需的阻带衰减来选择N。例如,可以设定阻带衰减为6dB/octave(每倍频程衰减6dB),然后估算N。
3. **设计窗函数**: 使用`blackman`命令生成布莱克曼窗函数。布莱克曼窗提供良好的频率响应特性和较小的旁瓣噪声。
4. **创建FIR滤波器**:
```matlab
% 布莱克曼窗长度
window_length = 80; % 根据需要调整
% 创建布莱克曼窗
window = blackman(window_length);
% 计算滤波器系数
[b, a] = fir1(N, [0.5*(1+ω_p), 0.5*(1+ω_s)], 'high', window);
```
5. **绘制幅频特性(AFT)**:
```matlab
[freq, h] = freqz(b, a);
H_db = 20*log10(abs(h));
semilogx(freq, H_db, '-b');
xlabel('Frequency (rad/sample)');
ylabel('Magnitude (dB)');
title('Amplitude Response of Linear Phase FIR High Pass Filter');
```
6. **绘制相频特性(PFT)**:
```matlab
phase_degrees = unwrap(angle(h)) * 180 / pi;
plot(freq, phase_degrees, '-r');
grid on;
legend('Amplitude', 'Phase (degrees)');
xlabel('Frequency (rad/sample)');
ylabel('Phase (degrees)');
title('Phase Response of Linear Phase FIR High Pass Filter');
```
完成上述步骤后,你将得到一个线性相位FIR高通滤波器的设计,并且已经绘制出了幅度响应和相位响应图。如果你需要具体的数值结果,请告诉我你需要的窗口长度N,以便我可以给出详细的代码。同时,
阅读全文