搜索
您的当前位置:首页正文

基于MATLAB 的数字滤波器设计(2)

来源:知库网


数字信号处理实验报告(六)

一、 实验题目:基于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.0010.0001)1317914.60.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:

通过观察,通带止带波动始终在要求的范围内,符合要求。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top