利用MATLAB编程,用窗函数法设计一个FIR数字滤波器,指标要求如下: 通带边缘频率:Ωp1=0.45π,Ωp2=0.65π,通带峰值起伏:αp≤1dB; 阻带边缘频率:Ωs1=0.3π,Ωs2=0.75π,,最小阻带衰减:αs≥40dB。
时间: 2023-08-16 19:06:24 浏览: 177
步骤如下:
1. 确定滤波器阶数N
根据指标要求,我们可以选择N=61作为滤波器的阶数。
2. 确定滤波器的截止频率
根据通带边缘频率和阻带边缘频率,可以计算出滤波器的通带带宽和阻带带宽:
ΔΩp = Ωp2 - Ωp1 = 0.2π
ΔΩs = Ωs2 - Ωs1 = 0.45π
根据这两个带宽,可以计算出滤波器的截止频率为:
Ωc = (Ωp1 + Ωp2) / 2 = 0.55π
3. 设计滤波器的理想频率响应
根据指标要求,我们可以设计出滤波器的理想频率响应,其通带增益为1,阻带增益为0,通带和阻带之间有一个过渡带,增益在过渡带内部以某种方式变化。
在MATLAB中,可以通过函数fir1来生成一个指定截止频率和滤波器阶数的FIR滤波器系数。具体代码如下:
```matlab
N = 61; % 滤波器阶数
Wp = [0.45 0.65]*pi; % 通带边缘频率
Ws = [0.3 0.75]*pi; % 阻带边缘频率
Rp = 1; % 通带峰值起伏
Rs = 40; % 最小阻带衰减
% 计算滤波器截止频率
Wn = (Wp(1) + Wp(2)) / 2;
% 计算滤波器理想频率响应
b = fir1(N, Wn/pi, 'low', kaiser(N+1, 5.65));
% 绘制滤波器的幅频响应
freqz(b, 1, 1024);
```
4. 应用窗函数对理想频率响应进行加窗
在设计滤波器时,我们使用了一种理想的频率响应,但实际上,我们需要将其转换为数字滤波器。在这个过程中,我们需要对理想频率响应进行加窗,以便使其适合数字滤波器。在MATLAB中,可以使用kaiser函数对理想频率响应进行加窗,生成最终的滤波器系数。具体代码如下:
```matlab
% 计算kaiser窗口系数
W = kaiser(N+1, 5.65);
% 应用kaiser窗口对理想频率响应进行加窗
b = b .* W';
% 绘制滤波器的幅频响应
freqz(b, 1, 1024);
```
5. 对滤波器进行归一化
为了使滤波器系数在数字信号处理中更易于使用,我们需要将其进行归一化。在MATLAB中,可以使用函数freqz来绘制归一化的滤波器幅频响应。具体代码如下:
```matlab
% 归一化滤波器系数
b = b / sum(b);
% 绘制归一化的滤波器幅频响应
freqz(b, 1, 1024);
```
最终得到的滤波器幅频响应如下图所示:
![FIR数字滤波器幅频响应](fir_filter_response.png)
阅读全文