数字信号处理实验报告(六)
一、 实验题目:基于MATLAB 的数字滤波器设计(2)
二、 实验目的:1. 掌握线性滤波器的设计方法
2.区别利用函数fipmord估算滤波器的长度与利用公式法计算滤波器的长度
三、 实验原理:
线性相位滤波器的一种广泛采用的方法是Parks-McClellan 算法 ,它能够设计出等波动的最优滤波器。 在matlab 7.0 及以上的版本中,用函数“firpm”来实现这一算法。函数的基本形式为 b=firpm(N,F,A,W) 。其中b 是长为N+1 的系统单位脉冲响应向量,以z-1 的升幂排列。 F 是频率向量,取值范围为0 到1. 滤波器的理想幅度在A 中标明。理想的通带和止带波动可以通过向量W 来加权。 滤波器的级数N 可以通过函数 “firpmord”来估算,它的形式为: [N, F, A, W]=firpmord(F,A,Dev,Fs).
滤波器的长度可以通过公式
来计算。其中数N=L-1.
p为通带波动,
s为止带波动。Δf 是归一化的过渡带宽。滤波器的阶
四、 实验内容与要求:
设计一个高通FIR 滤波器,其系数如下:
止带截止频率: 4 kHz
通带截止频率: 4.5 kHz
通带波动: 0.001
止带衰减: 80dB
采样频率 : 10 kHz
(1) 分别用公式和“firpmord”估计滤波器的长度。
(2) 根据用公式计算得到的滤波器长度,用“firpm”设计FIR 滤波器。 用freqz 画出频率响应, 会打开一个图形窗口。点击 “zoom in” 和 “zoom out” 按钮,确定通带和止带波动是否符合设计要求。
(3) 重复(2)用 “firpmord”得到的长度。
(4) 两种情况下的滤波器都符合设计要求吗? 如果不,如何进行改进?
(5) 画出你得到的符合要求的最终滤波器。滤波器的长度是多少?(实验报告中需要显示最终滤波器的通带和止带细节。
五、程序
(1)信号长度为
L-20log10(0.0010.0001)1317914.60.05
用firpmord函数
a1=0.0001;a2=0.001;
fs=10000;f=[4000 4500];
a=[0 1];
dev=[a1 a2];
[n,fo,ao,w]=firpmord(f,a,dev,fs)
求得:n =80
(2)当用公式计算时L=79,
a1=0.001;a2=0.0001;
fs=10000;f=[4000 4500];
a=[0 1];
dev=[a1 a2];
[n,fo,ao,w]=firpmord(f,a,dev,fs);
b=firpm(79,fo,ao,w);
[h,f]=freqz(b,1,1024,fs);fudu=abs(h);ph=angle(h);
subplot(2,1,1);plot(f,fudu);xlabel('frequency/Hz');ylabel('amplify');grid on;
subplot(2,1,2);plot(f,ph);xlabel('frequency/Hz');ylabel('phase');grid on;
观察波形可知:用ZOOM IN、OUT观察发现通带止带均不符合要求。
(3)a1=0.001;a2=0.0001;
fs=10000;f=[4000 4500];
a=[0 1];
dev=[a1 a2];
[n,fo,ao,w]=firpmord(f,a,dev,fs);
b=firpm(81,fo,ao,w);
[h,f]=freqz(b,1,1024,fs);fudu=abs(h);ph=angle(h);
subplot(2,1,1);plot(f,fudu);xlabel('frequency/Hz');ylabel('amplify');grid subplot(2,1,2);plot(f,ph);xlabel('frequency/Hz');ylabel('phase');grid on;
on;
观察波形可知:用ZOOM IN、OUT观察发现通带阻带均不符合要求。
(4)两种情况下的滤波器都不符合设计要求,通过增大滤波器的阶数来改进..令N=81:
通过观察,通带止带波动始终在要求的范围内,符合要求。
因篇幅问题不能全部显示,请点此查看更多更全内容