matlab编写程序设计参数αs=40dB,αp=1dB,wp=0.25π,ws=0.5π的FIR数字低通滤波器
时间: 2023-11-21 18:06:20 浏览: 14
好的,以下是 MATLAB 代码实现:
```matlab
% 设计参数
alpha_s = 40; % 阻带衰减
alpha_p = 1; % 通带波纹
wp = 0.25*pi; % 通带截止频率
ws = 0.5*pi; % 阻带截止频率
% 根据设计参数计算滤波器阶数
delta_p = (10^(0.05*alpha_p)-1)/(10^(0.05*alpha_p)+1);
delta_s = 10^(-0.05*alpha_s);
A = -20*log10(delta_p*delta_s);
N = ceil((A-8)/(4.57*(ws-wp)));
% 计算截止频率
wc = (ws+wp)/2;
% 计算滤波器系数
n = 0:N;
h = wc/pi*sinc(wc/pi*(n-N/2));
w = hamming(N+1)';
h = h.*w;
```
注:此处使用了汉明窗对滤波器进行了窗口函数设计,可根据需要更改为其他窗口函数。
相关问题
数字滤波器的技术指标如下:𝜔_𝑝=0.4𝜋 rad,𝜔_𝑝=0.5dB,𝜔_𝑠=0.6𝜋 rad,𝛼_𝑠=50dB编写MATLAB程序,采用窗函数法设计一个FIR数字滤波器
根据指标,我们可以使用窗函数法设计一个FIR数字滤波器。其中,𝜔_𝑝和𝜔_𝑠是通带和阻带的截止角频率,𝛼_𝑠是衰减量。
MATLAB程序如下:
```matlab
% 设计FIR数字滤波器
wp = 0.4*pi; % 通带截止角频率
ws = 0.6*pi; % 阻带截止角频率
Rp = 0.5; % 通带最大衰减量
As = 50; % 阻带最小衰减量
% 计算滤波器阶数和截止频率
delta_p = (10^(Rp/20)-1)/(10^(Rp/20)+1);
delta_s = 10^(-As/20);
A = -20*log10(delta_p*delta_s);
if A <= 21
n = ceil(5/wp);
elseif A > 21 && A <= 50
n = ceil((A-8)/(4.57*(ws-wp)));
else
n = ceil(5.79/(ws-wp));
end
wc = (wp+ws)/2;
% 生成矩形窗口
w = rectwin(n+1);
% 计算滤波器系数
h = fir1(n, wc/pi, w);
% 绘制幅频响应曲线
[H, w] = freqz(h, 1, 512);
mag = abs(H);
mag = 20*log10(mag);
plot(w/pi, mag);
grid on;
xlabel('归一化频率');
ylabel('幅度(dB)');
title('FIR数字滤波器幅频响应');
```
运行程序后,得到的幅频响应曲线如下所示:
![FIR数字滤波器幅频响应曲线](fir_filter.png)
可以看到,该数字滤波器的通带截止频率在0.4π处,阻带截止频率在0.6π处,通带最大衰减量为0.5dB,阻带最小衰减量为50dB。
阅读全文