电子科技大学数字信号处理实验4-滤波器设计

更新时间:2023-09-07 12:05:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

电 子 科 技 大 学

实 验 报 告

学生姓名:好心的学长 学 号: 指导教师:

一、实验室名称:数字信号处理实验室 二、实验项目名称:数字滤波器的设计及实现 三、实验原理:

一.数字滤波器设计:

1.数字滤波器设计步骤:

(1) 根据给定的滤波器设计要求,得到参数化描述,即通带,阻带截

止频率 p和 s,通带阻带纹波 p和 s等数据。

(2) 找一个数字系统函数G(z),使其频率响应逼近设计要求。 (3) 择合适的滤波器结构对满足要求的传递函数G(z)进行实现。

2.数字滤波器设计中的注意事项:

(1) 设计要求的参数化:图1给出了一个典型的数字低通滤波器的幅

频特性说明。理解每个参数的物理含义。

过渡带

P 通带 P S 阻带 S

图1.典型的数字LPF幅频特性

(2) 滤波器类型选择:在数字滤波器实现中可选择IIR滤波器和FIR

滤波器两种。在实现相同幅频特性时,IIR滤波器的阶数会相对FIR滤波器的更低;而在实现中,对相同阶数的两种滤波器来看,对每个采样值所做的乘法数量,IIR约为FIR的两倍;另外,FIR

还可以方便地设计成线性相位滤波器。总的来说,IIR滤波器除不能实现线性相位这一点外,由于阶数的原因,从计算复杂度上较FIR滤波器有很大的优势。根据以上这些区别,结合实际的设计要求,就可以选择一款合适的滤波器。

(3) 波器设计的方法:由于IIR滤波器和FIR滤波器各自的结构特点,

所以它们的设计方法也不一样。在IIR滤波器的设计中,常用的

方法是:先根据设计要求寻找一个合适的模拟原型滤波器Ha(s),然后根据一定的准则将此模拟原型滤波器转换为数字滤波器

G(z),即为我们需要设计的数字滤波器。在FIR滤波器设计中,

一般使用比较直接的方法:根据设计的要求在时域对理想的冲击响应序列进行加窗逼近,或从频域对需要实现的频率响应特性进行采样逼近然后进行反FFT。

(4) 波器阶数估计:IIR滤波器的阶数就等于所选的模拟原型滤波器

的阶数,所以其阶数确定主要是在模拟原型滤波器设计中进行的。FIR滤波器阶数估计可以根据很多工程中的经验公式,这些公式可以直接从设计的参数要求中估计滤波器阶数。例如,对FIR低

通滤波器,已知通带截止频率 p,阻带截止频率 s,最大通带纹波 p和最大最带纹波 s,则可以使用下面的公式估计其阶数:

N

20log10(p s) 1314.6( s p)/2

3.数字滤波器的设计方法:

(1) IIR滤波器设计方法:

(a)冲击响应不变法:

A. 满足设计要求的模拟原型滤波器Ha(s)进行部分分式展开为:

Ha(s)

Ak

k 1s sk

N

(Re(sk)max 0)

B. 由于 g(n) ha(nT),可以得到:

Ak

G(z) skT 1

zk 11 e

N

(b)双线性变换法:

A. 设计要求中给出的边界频率进行预畸处理,然后用得到的频

率进行模拟滤波器设计,得到模拟原型滤波器Ha(s)。 B. 用双线性变换法求出数字滤波器:G(z) Ha(s)|

1 z 1z

1 z。

(2) FIR滤波器设计方法:

(a)窗函数法:

A. 根据设计的要求选择合适的窗函数w(n),然后根据此窗计算

阶数等参数N。

B. 写出冲击响应序列的表达式:h(n) hd(n)wN(n),其中,

hd(n)为理想的冲击响应序列,一般为无限长的,wN(n)为

长度为N的窗函数。

C. 计算所得冲击响应序列h(n)的DTFT,然后验证其是否满足设计要求。 (b)频率采样法:

A. 根据设计要求估算滤波器阶数N。 B. 对要求的频率响应特性进行采样,获得N个离散样点值H(k)。 C. 对H(k)求N点IFFT,得到所需要的滤波器冲击响应序列h(n)。

D. 计算所得冲击响应序列h(n)的DTFT,然后验证其是否满足设

计要求。

4.滤波器的实现结构

(a) FIR滤波器:

直接型实现结构 级联结构 并联结构 多相实现结构 线性相位型结构 (b) IIR滤波器:

直接型实现结构:I型和II型 级联结构 并联结构

具体结构形式参见教材第六章内容。 二.在滤波器设计中使用到的MATLAB命令:

1. IIR滤波器设计函数:butter, buttord, chebwin, cheb1ord, cheb2ord, cheby1, cheby2, ellip, ellipord。

例如:用下面的MATLAB命令可估算一个Butterworth滤波器的阶数:

[N, Wn] = buttord(Wp, Ws, Rp, Rs)

2. FIR滤波器设计函数:fir1, fir2, remez, remezord, kaiser, kaiserord, hanning, hamming, blackman。

例如:用下面的MATLAB命令可根据式(7.18)估算一个FIR滤波器阶

数:[N, fpts,mag,wt] = remezord(fedge,mval,dev)

3. MATLAB中提供的滤波器设计辅助设计软件(在命令窗口中键入“fdatool”即可启动),界面如下图1所示。在本界面中填写需要设计的滤波器参数,即可设计出需要的滤波器。还可以通过本工具提供的幅度,相位观察窗口观察设计出来的滤波器的幅度,相位特性等,并可以将设计好的滤波器冲激响应系数导出进行实现。

图1 MATLAB中滤波器辅助设计软件界面

四、实验目的:

从理论上讲,任何的线性时不变(LTI)离散时间系统都可以看做一个数字滤波器,因此设计数字滤波器实际就是设计离散时间系统。

本实验通过使用MATLAB函数和滤波器辅助设计软件对数字滤波器进行设计和实现,加深学生对数字滤波器的常用指标、设计过程及实现的理解。

五、实验内容:

对给定的输入信号(基带二进制码元为500Hz,两个载频分别为2kHz和4kHz的FSK调制信号)进行滤波。利用MATLAB编程设计一个数字低通滤波器,指标要求如下:通带截止频率:fp 2.1kHz;阻带截止频率:fs 3.5kHz;采样频率

fp 20kHz;通带峰值起伏: p 1[dB];最小阻带衰减: S 40[dB]。要求分

别用MATLAB中的IIR和FIR设计命令进行滤波器设计,得出需要的滤波器系数。再将得到的滤波器系数在MATLAB中编程进行实现(选择直接型实现结果),对输

入信号进行滤波,观察滤波结果。

在提供的DSP实验板上编程对本滤波器过程进行实现,观察实际的滤波结果,并与理论结果对比。

六、实验器材(设备、元器件):

安装MATLAB软件的PC机一台,DSP实验演示系统一套。

七、实验步骤:

(1) 给定输入信号:FSK信号(输入的二进制待调信号为随机信号,

码元频率为500Hz,两个载频分别为2kHz和4kHz,采样频率为20kHz,)。利用MATLAB编程产生本信号,画出其时域和频域的图像。

(2) 利用MATLAB编程设计一个数字低通滤波器,指标要求如下: 通带截止频率:fp 2.2kHz;阻带截止频率:fs 3.5kHz;采样频率

fp 20kHz;通带峰值起伏: p 1[dB];最小阻带衰减: S 40[dB]。

(3) 分别用MATLAB中的IIR和FIR设计命令进行滤波器设计,得出需

要的滤波器系数。

(4) (拓展要求)用MATLAB滤波器辅助设计软件对上述滤波器进行设

计,并将得到的滤波器系数对输入信号进行滤波,观察滤波实现。

(5) 将得到的滤波器系数在MATLAB中编程进行实现(选择直接型实现

结果进行实现),对(1)中的输入信号进行滤波(分别用FIR和IIR滤波器进行),观察滤波结果,画出时域和频域图像。

(6) (拓展要求)修改需要设计的滤波器的指标要求,比如:将通带

截止频率修改为2kHz,或者将最小阻带衰减改为 S 20[dB],这

时再重复(3)和(5)的步骤,观察所得到的滤波器效果,并对这一结果进行解释。

(7) (拓展要求)在提供的DSP实验板上编程对滤波器滤波过程进行

实现,观察实际的滤波结果,并与理论结果对比。

八、实验数据及结果分析:

程序:(1)产生输入FSK信号的程序

x=randn(10,1)>0; fl=2000; fh=4000; fs=20000; ts=1/500;

tt=(0:1/fs:ts);

t=[tt;tt+ts;tt+2*ts;tt+3*ts;tt+4*ts;tt+5*ts;tt+6*ts;tt+7*ts;tt+8*ts;tt+9*ts];

y=zeros(10,length(tt));

i=1;

while i<=10

y(i,:)=x(i)*sin(2*pi*fh*t(i,:))+~x(i)*sin(2*pi*fl*t(i,:)); i=i+1; end

t=reshape(t',length(tt)*10,1); y=reshape(y',length(tt)*10,1); subplot(211); plot(t,y);

title('时域波形'); n=length(y); r=fft(y)/n; r=fftshift(r);

f=linspace(-fs/2,fs/2,n); subplot(212); plot(f,abs(r)); title('频谱图');

(2) FIR滤波器设计程序

[n,wn,beta,type]=kaiserord([2200 3500],[1,0],[0.01 0.01],20000); b=fir1(n,wn,kaiser(n+1,beta)); [h,omega]=freqz(b,1,512);

plot(omega/pi, 20*log10(abs(h))); ylabel('magnitude'); xlabel('\omega/\pi');

title('magnitude response of the filter'); (3) IIR滤波器设计程序

[n,wn]=cheb1ord(2*2200/20000,2*3500/20000,1,40); [b,a]=cheby1(n,1,wn); [h,omega]=freqz(b,a);

plot(omega/pi,20*log10(abs(h))); ylabel('magnitude'); xlabel('\omega/\pi');

title('magnitude response of the filter');

(4) FIR滤波器实现程序(用滤波器系数对输入信号进行滤波)

x=randn(10,1)>0; fl=2000; fh=4000; fs=20000; ts=1/500;

tt=(0:1/fs:ts);

t=[tt;tt+ts;tt+2*ts;tt+3*ts;tt+4*ts;tt+5*ts;tt+6*ts;tt+7*ts;tt+8*ts;t

t+9*ts];

y=zeros(10,length(tt)); i=1; while i<=10

y(i,:)=x(i)*sin(2*pi*fh*t(i,:))+~x(i)*sin(2*pi*fl*t(i,:)); i=i+1; end

t=reshape(t',length(tt)*10,1); y=reshape(y',length(tt)*10,1);

[n,wn,beta,type]=kaiserord([2200 3500],[1,0],[0.01 0.01],20000); b=fir1(n,wn,kaiser(n+1,beta)); y1=filter(b,1,y); plot(t,y1);

ylabel('magnitude'); xlabel('n');

title('filtered signal');

(5) IIR滤波器实现程序(用滤波器系数对输入信号进行滤波)。

x=randn(10,1)>0; fl=2000; fh=4000; fs=20000; ts=1/500;

tt=(0:1/fs:ts);

t=[tt;tt+ts;tt+2*ts;tt+3*ts;tt+4*ts;tt+5*ts;tt+6*ts;tt+7*ts;tt+8*ts;tt+9*ts];

y=zeros(10,length(tt)); i=1; while i<=10

y(i,:)=x(i)*sin(2*pi*fh*t(i,:))+~x(i)*sin(2*pi*fl*t(i,:)); i=i+1; end

t=reshape(t',length(tt)*10,1); y=reshape(y',length(tt)*10,1);

[n,wn]=cheb1ord(2*2200/20000,2*3500/20000,1,40); [b,a]=cheby1(n,1,wn); y1=filter(b,a,y); plot(t,y1);

ylabel('magnitude'); xlabel('n');

title('filtered signal');

结果:(1)产生的输入FSK信号的时域和频域波形

时域波形

10.5

0-0.5-10

0.005

0.01

频谱图

0.40.3

0.20.10-1

-0.5

0.5

x 10

1

4

0.0150.020.025

(2)FIR滤波结果,时域和频域波形。

(3)IIR滤波结果,时域和频域波形。

九、实验结论:

实验成功使用了IIR和FIR滤波器对输入信号进行滤波. 十、总结及心得体会:

实践了使用iir和fir滤波器对输入信号进行滤波的过程.

十一、对本实验过程及方法、手段的改进建议: 应该再对滤波出来的信号做频谱分析 看是否满足条件.

报告评分:

指导教师签字:

本文来源:https://www.bwwdw.com/article/zp9h.html

Top