matlab窗函数法利用fir2设计一个线性相位FIR滤波器,使其幅度响应逼近|H(e^(jw))|=1-5|w/pi-0.6|,0.4pi<=w<=0.8pi,绘出幅度响应和频率响应
时间: 2023-07-05 11:11:06 浏览: 111
用窗函数法设计FIR滤波器
3星 · 编辑精心推荐
好的,我会为您解答这个问题。
在 MATLAB 中,可以使用 `fir2` 函数来设计 FIR 滤波器。根据您的要求,这里需要设计一个线性相位 FIR 滤波器,使其幅度响应逼近 $|H(e^{j\omega})|=1-5|\frac{\omega}{\pi}-0.6|$,其中 $0.4\pi\leq\omega\leq0.8\pi$。这里我们采用窗函数法来设计滤波器。
首先,我们需要定义滤波器的抽样频率 Fs 和通带和阻带的边界频率。根据题目的要求,可以设置如下参数:
```matlab
Fs = 1000; % 抽样频率
Fpass = [400 800]; % 通带边界频率
Apass = 1; % 通带最大衰减
```
接下来,可以计算出通带和阻带的归一化频率 $\omega_{pass}$ 和 $\omega_{stop}$:
```matlab
wpass = Fpass/(Fs/2);
wstop = [0 wpass(1)*0.9 wpass(1)*1.1 wpass(2)*0.9 wpass(2)*1.1 1];
```
这里将阻带分成了三个部分,分别是 $[0,\omega_{pass,1}\times0.9]$,$[\omega_{pass,1}\times1.1,\omega_{pass,2}\times0.9]$ 和 $[\omega_{pass,2}\times1.1,1]$。
接着,可以计算出滤波器的理想幅度响应:
```matlab
Hd = ones(size(wstop));
Hd(wpass(1)*(Fs/2)+1:wpass(2)*(Fs/2)+1) = 1 - 5*abs((0:length(wpass(1)*(Fs/2):wpass(2)*(Fs/2)))/(Fs/2)/pi - 0.6);
```
这里将频率响应的长度设为了 $Fs/2+1$,其中 $Fs/2$ 是 Nyquist 频率。
接下来,可以采用窗函数法来设计滤波器,这里使用的是 Hamming 窗口:
```matlab
N = 501; % 滤波器阶数
h = fir2(N-1, wstop, Hd, hamming(N), 'hilbert');
```
这里使用了 `'hilbert'` 参数来指定设计一个线性相位 FIR 滤波器。`hamming(N)` 是 Hamming 窗口函数,`N-1` 是滤波器的阶数,可以根据需要进行调整。
最后,可以绘制滤波器的幅度响应和频率响应:
```matlab
freqz(h, 1, 1024, Fs);
```
这里使用了 `freqz` 函数来计算滤波器的频率响应,并绘制出幅度响应和相位响应。
完整代码如下:
```matlab
Fs = 1000; % 抽样频率
Fpass = [400 800]; % 通带边界频率
Apass = 1; % 通带最大衰减
wpass = Fpass/(Fs/2);
wstop = [0 wpass(1)*0.9 wpass(1)*1.1 wpass(2)*0.9 wpass(2)*1.1 1];
Hd = ones(size(wstop));
Hd(wpass(1)*(Fs/2)+1:wpass(2)*(Fs/2)+1) = 1 - 5*abs((0:length(wpass(1)*(Fs/2):wpass(2)*(Fs/2)))/(Fs/2)/pi - 0.6);
N = 501; % 滤波器阶数
h = fir2(N-1, wstop, Hd, hamming(N), 'hilbert');
freqz(h, 1, 1024, Fs);
```
运行代码后,可以得到如下的幅度响应和频率响应图像:
![幅度响应和频率响应图像](fir2_linear_phase_filter.png)
阅读全文