(用matlab语言做,要求有图,代码完整)一,用窗函数(至少选用三种窗)法设计一个FIR线性相应相位低通数字滤波器,已知Wc=0.5π,N=21. 二,编写调试程序,要求绘制相应的幅频特性曲线,观察3dB和20dB带宽以及阻带最小衰减。
时间: 2024-12-29 14:31:00 浏览: 14
在MATLAB中,你可以使用`fir1`函数结合各种窗函数(如汉明窗、矩形窗和海明窗)来设计一个FIR低通滤波器。首先,我们需要导入所需的库,然后选择窗函数并设计滤波器。这里是一个例子:
```Matlab
% 设定系统参数
fc = 0.5; % Cutoff frequency (normalized to Nyquist rate)
Wc = pi * fc;
N = 21; % Filter length
% 选择窗口函数
window_options = {'hanning', 'rectangle', 'hamming'}; % 汉明窗、矩形窗和海明窗
for i = 1:length(window_options)
window_name = window_options{i};
% 设计FIR滤波器
b = fir1(N, Wc, 'low', 'Window', window_name);
% 创建频率响应图
[H, f] = freqz(b, 1, Nfft); % 假设Nfft足够大以获得良好的频率分辨率
Hdb = 20*log10(abs(H)); % 转换为分贝
% 绘制幅频特性曲线
subplot(3, 1, i), plot(f, Hdb), grid on
title(sprintf('FIR Lowpass Filter with %s Window', window_name));
xlabel('Frequency (Normalized)'), ylabel('Magnitude (dB)');
% 计算3dB和20dB带宽,以及阻带最小衰减
bandwidth_index = find(max(Hdb) - 3 <= abs(Hdb)) - 1; % 3dB带宽
two_db_bw = f(bandwidth_index + 1) - f(bandwidth_index); % 20dB带宽
min_stopband_attenuation = min(min(Hdb(Hdb < -40))); % 阻带最小衰减
disp(sprintf('For %s window:\n3dB Bandwidth: %.4f\n20dB Bandwidth: %.4f\nMin Stopband Attenuation: %.2fdB', ...
window_name, two_db_bw, min_stopband_attenuation, min_stopband_attenuation))
end
```
这个脚本会创建三个子图,每个子图表示一种窗口函数下FIR滤波器的幅频特性,并计算相应的3dB带宽、20dB带宽和阻带最小衰减。
阅读全文