《数字信号处理》上机实验指导书-1-《数字信号处理》上机实验指导书一、引言“数字信号处理”是一门理论和实验密切结合的课程,为了深入地掌握课程内容,应当在学习理论的同时,做习题和上机实验。上机实验不仅可以帮助学生深入地理解和消化基本理论,而且能锻炼初学者的独立解决问题的能力。所以,根据本课程的重点要求编写了四个实验。第一章、二章是全书的基础内容,抽样定理、时域离散系统的时域和频域分析以及系统对输入信号的响应是重要的基本内容。由于第一、二章大部分内容已经在前期《信号与系统》课程中学习完,所以可通过实验一帮助学生温习以上重要内容,加深学生对“数字信号处理是通过对输入信号的一种运算达到处理目的”这一重要概念的理解。这样便可以使学生从《信号与系统》课程顺利的过渡到本课程的学习上来。第三章、四章DFT、FFT是数字信号处理的重要数学工具,它有广泛的使用内容。限于实验课时,仅采用实验二“用FFT对信号进行谱分析”这一实验。通过该实验加深理解DFT的基本概念、基本性质。FFT是它的快速算法,必须学会使用。所以,学习完第三、四章后,可安排进行实验二。数字滤波器的基本理论和设计方法是数字信号处理技术的重要内容。学习这一部分时,应重点掌握IIR和FIR两种不同的数字滤波器的基本设计方法。IIR滤波器的单位冲激响应是无限长的,设计方法是先设计模拟滤波器,然后再通过S~Z平面转换,求出相应的数字滤波器的系统函数。这里的平面转换有两种方法,即冲激响应不变法和双线性变换法,后者没有频率混叠的缺点,且转换简单,是一种普遍应用的方法。学习完第六章以后可以进行实验三。FIR滤波器的单位冲激响应是有限长的,设计滤波器的目的即是求出符合要求的单位冲激响应。窗函数法是一种基本的,也是一种重要的设计方法。学习完第七章后可以进行实验四。以上所提到的四个实验,可根据实验课时的多少恰当安排。例如:实验一可根据学生在学习《信号与系统》课程后,掌握的程度来确定是否做此实验。若时间紧,可以在实验三、四之中任做一个实验。建议实验二必做,因为DFT和FFT是学习数字信号处理必须掌握的内容。二、关于使用计算机语言由于数字信号处理实验的主要目的是验证数字信号处理的有关理论,进一步理解巩固所学理论知识。所以,实现实验用的算法语言可以有许多种,但为了提高实验效率,要求学生用编程效率比C语言高好几倍的MATLAB语言。下面介绍MATLAB的主要特点。(有关MATLAB的启动、程序运行和有关信号处理工具箱函数等内容将放到最后附录中介绍。)MATLAB是一种交互式的以矩阵为基本数据结构的系统。在生成矩阵对象时,不要求明确的维数说明。所谓交互式,是指MATLAB的草稿纸编程环境。即用户每输入一条命令并按回车键,MATLAB系统便解释执行之,并显示执行结果。根据该结果,用户立即知道刚输入的命令的正确性,或利用中间结果进行其他处理等。与C语言或FORTRON语言做科学数值计算的程序设计相比较,利用MATLAB可节省大量的编程时间。将其用于数字信号处理实验,则可大大提高实验效率,在有限的上机时间内,实验内容可增加几倍。例如,C语言FFT子程序有70多行,而用MATLAB只调用一个fft函数即可实现对序列进行FFT计算。另外,MATLAB的工具箱及图形显示(打印)功能,可满足各层次人员直观、方《数字信号处理》上机实验指导书-2-便的进行分析、计算和设计工作,从而可大大节省时间。例如,序列的卷积、滤波,系统函数H(z)的幅频特性和相频特性等计算,均有现成的工具箱函数。而用其它算法语言完成这些计算的编程比较麻烦,且程序较长。由于上述特点,在美国一些大学里,MATLAB已成为辅助教学的有益工具。MATLAB已成功地用于数字信号处理课程中的问题分析、实验、滤波器设计及计算机模拟。附录中所介绍的信号处理工具箱函数及绘图函数基本可满足本教材所要求的上机实验需要。对序列进行谱分析的MATLAB程序及运行结果见附录。三、上机实验实验一:信号、系统及系统响应1.实验目的①熟悉连续信号经过理想抽样前后的频谱变化关系,加深对时域抽样定理的理解。②熟悉时域离散系统的时域特性。③利用卷积方法观察分析系统的时域特性。④掌握序列傅里叶变换的计算机实验方法,利用序列的傅里叶变换对连续信号、离散信号及系统响应进行频域分析。2.实验原理与方法抽样是连续信号数字处理的第一个关键环节。对抽样过程的研究不仅可以了解抽样前后信号时域和频域特性发生的变化以及信号信息不丢失的条件,而且可以加深对傅里叶变换、Z变换和序列傅里叶变换之间关系式的理解。我们知道,对一个连续信号xa(t)进行理想抽样的过程可用(1.1)式表示。)(ˆtxa=)(txaδT(t)——(1.1)其中)(ˆtxa为xa(t)的理想抽样,δT(t)为周期冲激脉冲,即nTnTtt)()(——(1.2))(ˆtxa的傅里叶变换)(ˆjXa为)(ˆjXa=ksakjXT)]([1——(1.3)(1.3)式表明)(ˆjXa为)(jXa的周期延拓,其延拓周期为抽样角频率(Ωs=2π/T)。抽样前后信号的频谱示意图见“参考教材1图1-29”。只有满足抽样定理时,才不会发生频率混叠失真。在计算机上用高级语言编程直接按(1.3)式计算理想抽样)(ˆtxa的频谱)(ˆjXa很不方便。下面导出用序列的傅里叶变换来计算)(ˆjXa的公式。将(1.2)式代入(1.1)式并进行傅里叶变换,1数字信号处理教程(程佩青)《数字信号处理》上机实验指导书-3-)(ˆjXa=dtetxtja)(ˆ=dtenTtnTxtjna)()(=nnTjadtnTtenTx)()(=nnTjaenTx)(——(1.4)式中的xa(nT)就是采样后得到的序列x(n),即x(n)=xa(nT)x(n)的序列傅里叶变换为X(ejω)=nnjenx)(——(1.5)比较(1.5)和(1.4)可知)(ˆjXa=X(ejω)|ω=ΩT——(1.6)这说明两者之间只在频率度量上差一个常数因子T。实验过程中应注意这一差别。离散信号和系统在时域均可用序列来表示。序列图形给人以形象直观的印象,它可加深我们对信号和系统的时域特征的理解。本实验还将观察分析几种信号及系统的时域特性。为了在数字计算机上观察分析各种序列的频域特性,通常对X(ejω)在[0,2π]上进行M点采样来观察分析。对长度为N的有限长序列x(n),有10)()(NnnjjkkenxeX——(1.7)其中kMk2,k=0,1,…,M-1通常M应取得大一些,以便观察谱的细节变化。取模|)(kjeX|可绘出幅频待性曲线。一个时域离散线性非移变系统的输入/输出关系为y(n)=x(n)*h(n)=mmnhmx)()(——(1.8)这里,y(n)为系统的输出序列,x(n)为输入序列。h(n)、x(n)可以是无限长,也可以是有限长。为了计算机绘图观察方便,主要讨论有限长情况。如果h(n)和x(n)的长度分别为N和M,则y(n)的长度为L=N+M-1。这样,(1.8)式所描述的卷积运算就是序列移位、相乘和累加的过程,所以编程十分简单。上述卷积运算也可以在频域实现(即卷积定理:时域卷积,频域相乘。)Y(ejω)=X(ejω)H(ejω)——(1.9)(1.9)式右边的相乘是在各频点{ωk}上的频谱值相乘。3.实验内容(1)连续信号分析①连续时间非周期信号的选择参考:信号与系统(第二版)上册;郑君里—附录三(P378)1单边指数脉冲;2双边指数脉冲;4钟形脉冲;10抽样脉冲;1.xa(t)=E*exp(-at)(a0);2.xa(t)=E*exp(-a*abs(t))(a0)《数字信号处理》上机实验指导书-4-②用MATLAB编制程序图1.1连续信号分析程序框图③时域观察,频域分析调整信号xa(t)参数,观察时域波形变化。分析频域波形,选取近似带限频率值fmax,确定对xa(t)→x(n)=xa(nT)的抽样周期T(T=1/fs),不失真的条件应该满足抽样频率fs≥2fmax(即:时域抽样定理)。例如图1.2给出了单边减幅余弦信号xa(t)=exp(-10*t).*cos(2*pi*25*t)的时域和幅频特性曲线,由此图可以近似选取xa(t)的抽样频率fs≥2fmax=2×150=300Hz。00.050.10.150.20.250.30.350.40.450.5-1-0.500.51tinsec.xa(t)AnalogSignal-200-150-100-5005010015020000.020.040.06FrequencyinHz|Xa(j2πf)|Continuous-timeFourierTransform图1.2xa(t)的时域和幅频特性曲线(2)离散信号分析①离散时间非周期信号x(n)的生成对前一个实验中的连续信号xa(t)抽样,用于产生实验中要用到的信号序列x(n)=xa(nT)。根据上一个实验分析结果选取近似带限频率值fmax,按照抽样频率fs=2fmax、fs2fmax和fs2fmax三种情况编制MATLAB源程序(T=1/fs)。开始结束产生信号xa(t)求连续时间非周期信号的傅氏变换Xa(jΩ)分别绘制xa(t),|Xa(jf)|图形《数字信号处理》上机实验指导书-5-②用MATLAB编制程序图1.3离散信号分析程序框图③时域观察,频域分析调整抽样频率fs=2fmax、fs2fmax和fs2fmax,观察时域波形变化,分析频域波形。根据时域、频域的变化验证时域抽样定理X(ej2πfT)=ksakffjXT)](2[1。改变程序中频率轴变量为:f(Hz)模拟频率、Ω(rad/s)模拟角频率和ω(rad)数字频率,观察频率特性的周期变化,并用所学理论对以上各种情况加以解释。例如图1.4给出了单边减幅余弦抽样信号x(n)的时域和幅频特性曲线,由此图可以观察分析选取抽样频率fs=2fmax=2×150=300Hz时的时域和幅频特性。00.050.10.150.20.250.30.350.40.450.5-1-0.500.51tinsec.x(n)SampleSignal-500-400-300-200-100010020030040050005101520FrequencyinHz|X(ej2πfT)|SampleSignalFourierTransform图1.4xa(t)的时域和幅频特性曲线开始结束对xa(t)抽样产生序列x(n)求序列x(n)的傅氏变换X(ejω)分别绘制x(n),|X(ej2πfT)|图形确定抽样频率fs,产生离散时间变量t=nT《数字信号处理》上机实验指导书-6-(3)系统响应分析①生成实验用的输入序列x(n)和系统单位冲激响应序列h(n)输入序列:x(n)=R10(n)单位冲激响应序列:h(n)=δ(n)+2.5δ(n-1)+2.5δ(n-2)+δ(n-3)②时域离散信号、系统和系统响应分析观察系统h(n)对输入信号x(n)=R10(n)的响应特性y(n)。即利用线性卷积求系统响应y(n),调用有限长序列线性卷积子程序,用于完成两个给定长度的序列的卷积。可以直接调用MATLAB语言中的卷积函数conv。conv用于两个有限长度序列的卷积,它假定两个序列都从n=0开始。调用格式如下:y=conv(x,h)改变输入信号x(n)长度,打印输出y(n)图形并判断y(n)图形及其非零值序列长度是否与理论计算结果一致。③卷积定理的验证a.调用序列博里叶变换数值计算子程序,求输出y(n)的频率响应Y(ejωk),观察|Y(ejωk)|特性曲线。b.调用序列博里叶变换数值计算子程序,分别求输入序列x(n)的频率响应X(ejωk)和离散系统的冲激响应序列h(n)的频率响应H(ejωk),计算Y(ejωk)=X(ejωk)×H(ejωk),并绘出|Y