2.用凯塞窗设计一FIR低通滤波器,通带边界频率0,=0.3π,阻带边界频率 0=0.5π,阻带衰减As不小于50dB。 要求:求出FIR数字滤波器的冲激响应,绘出它们的幅度和相位频响曲线。 用MATLAB进行编写
时间: 2024-12-13 15:21:44 浏览: 55
要在MATLAB中用凯撒窗(Kaiser window)设计一个FIR低通滤波器,首先需要选择一个适当的滤波器类型,这里我们以Butterworth滤波器为例,因为它在整个通带内具有平坦的群延迟特性。由于给出的具体要求是阻带衰减A_s不小于50dB,我们可以假设这是一个6th-order Butterworth滤波器,因为这个阶数可以在低通滤波器中提供足够的阻带衰减。
下面是MATLAB代码示例:
```matlab
% 定义参数
fc = [0.3 pi]; % 通带中心频率
fs = 1; % 采样率
order = 6; % 过滤器阶数
As = 50; % 阻带衰减目标 (dB)
beta = kaiserord(As, order); % 获取Kaiser窗的形状因子
% 计算滤波器参数
[b, a] = butter(order, fc/(fs/2), 'low'); % Butterworth滤波器设计
w = linspace(0, fs/2, length(b)); % 频率轴
% 应用Kaiser窗
h_kaiser = kaiser(length(b), beta);
windowed_b = b .* h_kaiser;
% 计算幅相响应
H = freqz(windowed_b, a, w);
% 绘制幅相响应图
figure;
subplot(2,1,1);
plot(w/pi, abs(H));
title('幅度响应');
xlabel('Normalized Frequency [rad/sample]');
ylabel('Magnitude');
subplot(2,1,2);
angle_H = unwrap(angle(H));
plot(w/pi, angle_H, 'r');
title('相位响应');
xlabel('Normalized Frequency [rad/sample]');
ylabel('Phase [rad]');
% 冲激响应
impulse_response = filter(b, a, zeros(1000,1)); % 可视化前1000个点
stem(0:length(impulse_response)-1, impulse_response);
title('Impulse Response');
xlabel('Sample Index');
ylabel('Amplitude');
```
这段代码将创建一个6阶Butterworth滤波器,采用Kaiser窗,并绘制其幅相响应和冲激响应图。请注意,你可以根据实际情况调整滤波器阶数、频率范围和其他参数。
阅读全文