公务员期刊网 论文中心 正文

Matlab的数字信号处理课程实验设计

Matlab的数字信号处理课程实验设计

摘要:本文设计了一个基于Matlab的“数字信号处理”课程综合性实验。该实验把“数字信号处理”课程中的许多离散的知识点串接了起来,包括采样、量化、滤波器设计、滤波器实现、DFT/FFT和滤波器的有限字长效应等。教学实践表明该实验有利于巩固学生课堂上学到的理论知识,提高学生的理论联系实际的能力和动手解决问题的能力。

关键词:数字信号处理;综合性实验;Matlab

0引言

“数字信号处理”课程的主要内容包括z变换、离散傅里叶变换(DFT)、快速傅里叶变换(FFT)、数字滤波器设计和实现以及数字信号处理中的有限字长效应等等[1]。在学习理论知识的同时或之后,引入实验将有助于学生更好地理解和掌握课程内容[2-3]。笔者在教学过程中,设计了Matlab综合性实验。该实验在不失趣味性的同时,能把该课程中许多分散的知识点串接起来。教学实践表明,该实验可以帮助学生更深入地理解本门课程,取得了较好的教学效果。

1综合实验内容设计

笔者所设计的Matlab实验如下:对下式所示的输入信号进行滤波。x=sin(100πt)+sin(480πt)(1)具体步骤为(1)将输入的模拟信号x进行采样和量化,得到12位精度的数字信号;(2)设计一个低通无限冲激响应(IIR)滤波器,将输入信号中的240Hz的干扰滤除,要求滤波器的输出信号中240Hz处的噪声功率比50Hz处的信号功率低60dB。(3)设计一个高通有限冲激响应(FIR)滤波器,将输入信号中的50Hz的干扰滤除,要求滤波器的输出信号中50Hz处的噪声功率比240Hz处的信号功率低60dB。(4)对于上述两个滤波器,要求:给出理想滤波器的传输函数及频率响应;给出系数量化后所得的新的滤波器的传输函数及频率响应;确定滤波器实现所采用的结构,并给出该结构中所用加法器和乘法器的位数;将输入的数字信号通过前一步实现的滤波器,画出输出信号的频谱,确保滤波器性能满足设计要求。顺利完成上述Matlab实验,需要解决以下问题:(1)采样频率和FFT点数的选取:根据采样定理,采样频率只要不低于信号中所包含的最高频率的两倍,就可以从采样后的离散时间信号中恢复出原始的模拟信号。根据式(1),采样频率只要不小于480Hz即可。但是当需要使用FFT对信号进行频谱分析时,在确定采样频率时,除了要满足采样定理外,还需要考虑其他条件。例如:在做FFT时,信号频率应为频率分辨率的整数倍,这样才能准确地从频谱中看到该频率信号的功率,避免谱泄漏,即下式中的k应为整数:k=ffs=N(2)其中f,fs和N分别为信号频率、采样频率和FFT的点数。fs/N为频率分辨率,N一般为2的幂次方。在k不为整数时,为了减小谱泄漏的影响,可以在做FFT之前对采样所得的信号进行加窗处理[1]。(2)模数转换器的实现:实验中要求对输入信号进行量化,得到12位精度的数字信号。在将输入信号进行量化时,涉及到如何确定模数转换器的满量程范围、结构、量化方式(舍入还是截断)以及如何进行有符号数的量化等。(3)IIR滤波器类型的选择和设计:双线性变换是设计数字IIR滤波器的常用方法。它首先要将所要设计的数字滤波器的归一化边界角频率进行预畸变,然后再设计出满足性能要求的模拟滤波器。模拟滤波器有四种类型,分别为巴特沃斯滤波器,切比雪夫I型滤波器、切比雪夫II型滤波器以及椭圆滤波器。只有了解了这四种滤波器的特性,才能根据实际需求来选择合适的滤波器类型。在选择好滤波器类型后,将滤波器的性能指标输入相应的Matlab函数,就可以得到滤波器的传输函数,完成滤波器的设计。以椭圆滤波器为例,可以依次调用函数elli-pord(),函数ellipap()和函数zp2tf()来获得滤波器的阶数、零极点、增益和s域传输函数;也可以直接调用函数ellip()来得到滤波器的s域传输函数。最后再通过调用函数bilinear()得到相应数字滤波器的传输函数。(4)FIR滤波器的设计:在用窗函数法来设计FIR滤波器时,首先要根据滤波器的性能参数(如过渡带宽度、阻带衰减等)选取合适的窗函数以及确定窗函数的长度,之后将得到的窗函数与理想滤波器的单位脉冲响应序列相乘得到FIR滤波器的单位脉冲响应序列。以Kaiser窗为例,在Matlab中,函数kaiserord()用于预估FIR滤波器的阶数,函数kaiser()用于产生相应长度的Kaiser窗函数,函数fir1()用于实现采用该Kaiser窗设计的FIR滤波器,输出为滤波器的单位脉冲响应序列。(5)滤波器的实现:在用硬件实现滤波器时,必须考虑滤波器的有限字长效应,即滤波器系数的量化、滤波器中加法器和乘法器的有限字长效应以及运算结果的有限字长等等。滤波器的实现结构有直接型、级联型和并联型等。由于IIR滤波器存在量化噪声的积累,所以在选择结构时,需要考虑各种结构对有限字长效应的灵敏度。高阶IIR滤波器通常采用级联型或并联型结构来实现。Matlab中的函数residuez(B,A)用于计算传输函数B(z)/A(z)的留数、极点和直接项,从而得到有理式的部分分式展开;利用传输函数的部分分式展开,并通过适当的合并,可以得到滤波器的并联型结构。函数tf2sos()则可用于将传输函数转换成二阶节,得到滤波器的级联型结构。图3给出了系数量化前后高通滤波器的频率响应。为了能够判断所设计和实现的滤波器的性能是否达到设计指标,需要对滤波器的输出序列做N点的FFT。这时需要注意两点:一要能正确地区分输出序列中的暂态响应部分和稳态响应部分;二要从稳态响应部分选取连续的N个输出值做N点的FFT。

2教学反馈

根据学生上交的实验报告,从他们所写的实验收获和实验心得可以看出这个实验对他们学好这门功课所起的作用。总结如下:(1)本次实验是FIR滤波器与IIR滤波器的设计,综合使用了大量数字滤波器的设计方法,比如双线性变换法,窗函数法等,加深了对课堂学习的理论知识的理解,如IIR和FIR滤波器的优缺点、滤波器的暂态响应和稳态响应、各种模拟滤波器的性能比较以及各种窗函数之间的差异等。(2)学生对采样定理和FFT有了更深的认识,明白了采样频率、FFT点数等对频谱分析结果的影响,并通过不断的摸索与尝试,总结出了使用FFT时的一些注意事项。(3)对数字信号处理中的有限字长效应有了更加直观的体会,认识到在设计滤波器的传输函数时,需要考虑量化对滤波器性能的影响,设计指标需要留出一定的裕量。(4)提高了用Matlab实现数字信号处理功能的能力,包括:熟悉了使用Matlab设计FIR和IIR滤波器的流程;学会使用Matlab中的一些函数,如fft,cheb1ord,cheby,bilinear,fir1等;学会了用Matlab编写程序来实现指定结构的滤波器;学会了从时域和频域观察滤波器的输出是否正确以及是否达到性能要求等。总而言之,通过这次实验,使学生真正了解了如何利用Matlab来进行滤波器的设计,感觉受益匪浅,对他们学好“数字信号处理”课程很有帮助。

3结语

笔者所设计的基于Matlab的综合性实验涵盖了“数字信号处理”课程中的主要知识点。从学生反馈的意见可以看出,本实验取得了良好的教学效果,这有利于提高学生学习兴趣以及增强他们解决实际问题的能力。

参考文献:

[1]程佩青,数字信号处理教程[M],北京:清华大学出版社,2007.

[2]曹建玲,刘焕淋,雷宏江.基于MATLAB的“数字信号处理”仿真实验[J].北京:中国电力教育,2012(32):88-89.

[3]易婷.“数字信号处理”课程课内配套实验的设计[J].南京:电气电子教学学报,2013,35(4):89-90.

作者:易婷 单位:复旦大学 微电子学院