用matlab频率采样法设计1型FIR数字滤波器,技术指标:wp=0.25pi,wst=0.35pi,As=20dB,Rp=2dB,给出h(n)表达式并绘制幅频特性
时间: 2024-12-20 13:14:42 浏览: 20
在MATLAB中,可以使用`fir1`函数设计一型有限 impulse response (FIR) 数字滤波器,满足给定的技术指标。对于指定的截止频率 wp 和 wst、衰减比 As 和 Rp,以下是步骤:
1. 首先,我们需要计算所需的滤波器长度 N。由于未直接提供具体的衰减率要求,通常会选取适当的比例来保证滤波效果。假设我们选择 `At = As / 20` 来表示相对于最大衰减的倍数,`Rp` 则对应于频率响应的平坦度。
2. 计算滤波器长度:
```matlab
At = 20; % 可以根据需要调整衰减率的具体值
wp_dB = 20 * log10(1 + As); % wp 的对数值
wp_rad = wp_dB / (2 * pi);
wst_rad = wst / (2 * pi);
% 滤波器长度一般取 wp 的倒数作为下限,wst 的倒数加1作为上限,加上额外的安全系数
N = ceil((1 / wp_rad - 1 / wst_rad) / At) + 1;
```
3. 设计滤波器:
```matlab
h = fir1(N, [wp_rad wst_rad], 'low'); % 设定低通滤波器结构,'low' 表示最小误差设计
```
4. 绘制幅频特性:
```matlab
[H, W] = freqz(h, 1, 8000); % 生成频率响应数据
figure;
plot(W/pi, 20*log10(abs(H))); % 幅频图
grid on;
xlabel('Normalized Frequency (\times \pi rad/sample)');
ylabel('Magnitude (dB)');
title(['Filter Design: wp=' num2str(wp) ', wst=' num2str(wst) ', As=' num2str(As) ', Rp=' num2str(Rp)]);
```
这里的 `h(n)` 表达式就是设计好的FIR滤波器系数数组,但是为了简洁,这里并没有显示整个数组。完整的系数可以通过 `disp(h)` 查看。
阅读全文