数字信号处理实验教案
信息工程学院-通信工程教研室
数字信号处理是一门理论和实际密切结合的课程,为深入掌握课程内容,最好在学习理论的同时,做习题和上机实验。上机实验不仅可以帮助读者深入的理解和消化基本理论,而且能锻炼同学们的独立解决问题的能力。本讲义在第三版的基础上编写了五个实验,前2个实验属基础性的验证性实验,第3、4、5个实验属基本应用综合性实验。
实验一离散时间信号的MATLAB实现
实验二线性卷积与循环卷积的原理及应用
实验三频率采样定理
实验四离散系统的因果性和稳定性及频率响应特性
实验五基于MATLAB的快速傅里叶变换
根据教学进度,理论课结束后进行相关实验。
实验一时域离散信号的产生
一实验目的
(1)了解常用的时域离散信号及其特点。
(2)掌握MATLAB产生常用时域离散信号的方法。
二实验内容
(1) 编写程序,产生下列离散序列:
A.f(n)=δ(n) (-3 B.f(n)=e(0.1+j1.6π)n (0 (2)一个连续的周期性三角波信号频率为50Hz,信号幅度在0~+2V之间,在窗口上显示2 个周期信号波形,对信号的一个周期进行16点采样来获取离散信号。试显示原连续信号和 采样获得的离散信号波形。 (3)一个连续的周期性方波信号频率为200Hz,信号幅度在-1~+1V之间,在窗口上显示2个周 期信号波形,用Fs=4kHz的频率对连续信号进行采样,试显示原连续信号和采样获得的离散 信号波形。 三实验步骤 (1) 在matlab命令窗口中逐行输入下列语句 >> n1=-3;n2=4;n0=0; %在起点n1、终点n2的范围内,于n0处产生冲激 >> n=n1:n2; %生成离散信号的时间序列 >> x=[n==n0]; %生成离散信号x(n) >> stem(n,x,'filled'); %绘制杆状图,且圆心处用实心圆表示 >> title('单位脉冲序列'); >> xlabel('时间(n)');ylabel('幅度x(n)'); 在上述语句输入完成之后,敲击回车键,弹出图形窗口,显示出如下图形,即已经满足题干所述条件,产生了 f(n)=δ(n),(-3 (2) 在matlab命令窗口中逐行输入下列语句 >> n1=16;a=0.1;w=1.6*pi; >> n=0:n1; >> x=exp((a+j*w)*n); >>subplot(2,1,1),stem(n,real(x)); %在指定位置描绘图像 >> title('复指数序列的实部'); >> subplot(2,1,2),stem(n,imag(x)); >> title('复指数序列的虚部'); 在上述语句输入完成之后,敲击回车键,弹出图形窗口,显示出如下图形,即已经满足题干所述条件,产生了f(n)=e(0.1+j1.6π)n,(0 (3) 在matlab命令窗口中逐行输入下列语句 >> f=50;Um=1;nt=2; %输入信号频率、振幅、显示周期 >> N=16;T=1/f; %N为信号一个采样周期的采样点数,T为信号周期 >> dt=T/N; %采样时间间隔 >> n=0:nt*N-1; %建立离散时间的时间序列 >> tn=n*dt; %确定时间序列样点在时间轴上的位置 >> f=Um*sawtooth(2*f*pi*tn)+1; >> subplot(2,1,1),stem(tn,f); %显示经采样的信号 >> title('离散信号'); >> subplot(2,1,2),plot(tn,f); %显示原连续信号 >> title('连续信号'); 在上述语句输入完成之后,敲击回车键,弹出图形窗口,显示出如下图形,即已经满足题干所述条件,显示了原连续信号和采样获得的离散信号波形 (4) 在matlab命令窗口中逐行输入下列语句 >> f=200;Um=1;nt=2; %输入信号频率、振幅、显示周期 >> Fs=4000;N=Fs/f;T=1/f; %输入采样频率、求采样点数N、T为信号周期 >> dt=T/N; %采样时间间隔 >> n=0:nt*N-1; %建立离散时间的时间序列 >> tn=n*dt; %确定时间序列样点在时间轴上的位置 >> f=Um*sin(2*f*pi*tn); >> subplot(2,1,2),plot(tn,f); %显示原连续信号 >> title('连续信号'); >> subplot(2,1,1),stem(tn,f); %显示经采样的信号 >> title('离散信号'); 在上述语句输入完成之后,敲击回车键,弹出图形窗口,显示出如下图形,即已经满足 题干所述条件,显示了原连续信号和采样获得的离散信号波形 四思考题 (1) 如何在matlab下生产f(n)=3sin(nπ/4)(0 (2)改变实验步骤中最后两个实验的频率参数,分别重新生成相关的信号? 实验二 线性卷积与循环卷积的原理及应用 一 、实验目的 (1)掌握两种卷积的原理和两者的异同。 (2)掌握MATLAB 实现两种卷积的计算和比较。 二、实验内容 (1)用MATLAB 设计线性卷积; (2)调试写出线性卷积和源代码; (3)用MATLAB 设计循环卷积; 三 实验步骤 1 线性卷积定理 1)线性卷积的引入 在实际应用中,为了分析时域离散线性非移变系统或者对序列进行滤波处理等,需要计算两个序列的线性卷积。线性卷积既可以在时域中直接计算,也可以通过变换在频域中计算得到。 2)线性卷积的时域计算方法 计算卷积的基本运算是翻转、移位、相乘和相加,这类卷积称为序列的线性卷积。如果两个序列的长度为N 和M ,那么卷积结果的长度为N+M-1。线性卷积有四步运算:①卷积运算时,y(n)要先反折得到y(-n);②m>0表示y(-n)序列右移,m<0表示左移,不同的m 表示不同的值。 假设()h n 和()x n 都是有限长序列,长度分别为N 和M ,它们的线性卷积可以表示如下: 1 ()()()() N l m h n x n h m x n m y -==*= -∑ MATLAB 信号处理工具箱提供了conv 函数,该函数用于计算两个有限序列的卷积。 2 循环卷积定理 1)循环卷积的引入 为了提高线性卷积的速度,希望用DFT(FFT)计算线性卷积。从而引入循环卷积来 运用DFT 快速计算线性卷积。循环卷积运用到离散傅立叶变换的循环移位性质,即时域循环移位定理。 2)循环卷积的时域计算方法 假设()h n 和()x n 都是有限长序列,长度分别为N 和M ,它们的L 点循环卷积可以表 示如下: 1 ()()() () (())L L c L m h n x n n y h m x n m R -==*=-∑ max[,]L N M ≥ L 称为循环卷积区间长度。n 和m 的变化区间均是[0,L-1],直接计算该式比较麻烦。计 算机中采用矩阵相乘或快速傅里叶变换(FFT )的方法计算循环卷积。用矩阵相乘的方法计算两个序列的循环卷积,这里关键是先形成循环卷积矩阵。如果h(n)的长度N 3)线性卷积与循环卷积的关系 ()()() L c l q n n qL n y y R ∞ =-∞ = +∑ 上式说明, ()c n y 等于()l n y 以L 为周期的周期延拓序列的主值序列。()l n y 的长度 为1N M +-,因此只有当循环卷积长度L ≥1N M +-时, ()l n y 以L 为周期进行周期延 拓才无混叠现象。因此取其主值序列就满足()c n y =()l n y 。即满足条件L ≥1N M +-。 四 思考题 (1)比较线性卷积和循环卷积在序列长度不同时两者的联系? (2)试着写出循环卷积的源代码? 实验三 时域采样理论与频域采样定理验证 一、实验目的 1时域采样理论与频域采样理论是数字信号处理中的重要理论。要求掌握模拟信号采样前后频谱的变化,以及如何选择采样频率才能使采样后的信号不丢失信息;要求掌握频率域采样会引起时域周期化的概念,以及频率域采样定理及其对频域采样点数选择的指导作用。 二、实验原理及方法 时域采样定理的要点是: (a)对模拟信号 ) (t x a 以间隔T 进行时域等间隔理想采样,形成的采样信号的频谱)(? Ωj X 是 原模拟信号频谱()a X j Ω以采样角频率s Ω(T s /2π=Ω)为周期进行周期延拓。公式 为: )](?[)(?t x FT j X a a =Ω )(1∑∞ -∞ =Ω-Ω=n s a jn j X T (b )采样频率 s Ω必须大于等于模拟信号最高频率的两倍以上,才能使采样信号的 频谱不产生频谱混叠。 利用计算机计算上式并不方便,下面我们导出另外一个公式,以便用计算机上进行实验。 理想采样信号 )(?t x a 和模拟信号 ) (t x a 之间的关系为: ∑∞ -∞ =-=n a a nT t t x t x )()()(?δ 对上式进行傅立叶变换,得到: dt e nT t t x j X t j n a a Ω-∞∞ -∞ -∞ =?∑-=Ω])()([)(?δ dt e nT t t x t j n a Ω-∞ -∞ =∞ ∞ -∑ ? -)()( δ= 在上式的积分号内只有当nT t =时,才有非零值,因此: ∑∞ -∞ =Ω-=Ωn nT j a a e nT x j X )()(? 上式中,在数值上 ) (nT x a =)(n x ,再将T Ω=ω代入,得到: ∑∞ -∞ =-=Ωn n j a e n x j X ω)()(? 上式的右边就是序列的傅立叶变换 )(ωj e X ,即 T j a e X j X Ω==Ωωω)()(? 上式说明理想采样信号的傅立叶变换可用相应的采样序列的傅立叶变换得到,只要将自变量ω用T Ω代替即可。 频域采样定理的要点是: a) 对信号x(n)的频谱函数X(ej ω)在[0,2π]上等间隔采样N 点,得到 2()() , 0,1,2,,1 j N k N X k X e k N ωπω===- 则N 点IDFT[ () N X k ]得到的序列就是原序列x(n)以N 为周期进行周期延拓后的主值区序 列,公式为: ()IDFT[()][()]() N N N N i x n X k x n iN R n ∞ =-∞ ==+∑ (b)由上式可知,频域采样点数N 必须大于等于时域离散信号的长度M(即N ≥M),才能使时域不产生混叠,则N 点IDFT[() N X k ]得到的序列 () N x n 就是原序列x(n),即 () N x n =x(n)。如果N>M , () N x n 比原序列尾部多N-M 个零点;如果N () N x n =IDFT[ () N X k ]发生了 时域混叠失真,而且 () N x n 的长度N 也比x(n)的长度M 短,因此。 () N x n 与x(n)不相同。 在数字信号处理的应用中,只要涉及时域或者频域采样,都必须服从这两个采样理论的要点。 对比上面叙述的时域采样原理和频域采样原理,得到一个有用的结论,这两个采样理论具有对偶性:“时域采样频谱周期延拓,频域采样时域信号周期延拓”。因此放在一起进行实验。 三 实验步骤 (1)时域采样理论的验证。 给定模拟信号, ) ()sin()(0t u t Ae t x t a Ω=-α 式中A=444.128,α=502π,0Ω =502πrad/s ,它的幅频特性曲线如图10.2.1 图10.2.1 ) (t x a 的幅频特性曲线 现用DFT(FFT)求该模拟信号的幅频特性,以验证时域采样理论。 安照) (t x a 的幅频特性曲线,选取三种采样频率,即 s F =1kHz ,300Hz ,200Hz 。观测时 间选 ms T p 50=。为使用DFT ,首先用下面公式产生时域离散信号,对三种采样频率, 采样序列按顺序用)(1n x ,)(2n x ,) (3n x 表示。 ) ()sin()()(0nT u nT Ae nT x n x nT a Ω==-α 因为采样频率不同,得到的)(1n x ,)(2n x ,) (3n x 的长度不同, 长度(点数)用 公式 s p F T N ?=计算。选FFT 的变换点数为M=64,序列长度不够64的尾部加零。 X(k)=FFT[x(n)] , k=0,1,2,3,-----,M-1 式中k 代表的频率为 k M k πω2= 。 要求: 编写实验程序,计算)(1n x 、)(2n x 和) (3n x 的幅度特性,并绘图显示。观察分 析频谱混叠失真。 (2)频域采样理论的验证 给定信号如下: ?? ? ??≤≤-≤≤+=其它026 14271301)(n n n n n x 编写程序分别对频谱函数 ()FT[()]j X e x n ω =在区间]2,0[π上等间隔采样32 和16点,得到 ) ()(1632k X k X 和: 32232 ()() , 0,1,2,31 j k X k X e k ωπ ω= == 16216 ()() , 0,1,2,15 j k X k X e k ωπω= == 再分别对 ) ()(1632k X k X 和进行32点和16点IFFT ,得到 )()(1632n x n x 和: 323232()IFFT[()] , 0,1,2,,31x n X k n == 161616()IFFT[()] , 0,1,2, ,15 x n X k n == 分别画出 ()j X e ω、)()(1632k X k X 和的幅度谱,并绘图显示x(n)、)()(1632n x n x 和的波形, 进行对比和分析,验证总结频域采样理论。 提示:频域采样用以下方法容易变程序实现。 ① 直接调用MATLAB 函数fft 计算3232 ()FFT[()]X k x n =就得到 ()j X e ω在]2,0[π的32点频率域采样 ② 抽取 32() X k 的偶数点即可得到 ()j X e ω 在]2,0[π的16点频率域采样16()X k ,即1632()(2) , 0,1,2, ,15 X k X k k ==。 ○3 当然也可以按照频域采样理论,先将信号x(n)以16为周期进行周期延拓,取其主值区 (16点),再对其进行16点DFT(FFT),得到的就是 ()j X e ω 在]2,0[π的16点频率域采样16() X k 。 四 思考题 如果序列x(n)的长度为M ,希望得到其频谱()jXe ω在]2,0[π上的N 点等间隔采样,当N 实验四 离散系统的零极点分析 一、实验目的 1. 熟悉MATLAB 的仿真及应用环境 2. 在MATLAB 的环境下研究控制系统稳定性 二、实验内容和要求 1.了解离散系统的零极点与系统因果性和稳定性的关系。 2.观察离散系统零极点对系统冲激响应的影响。 3.熟悉MATLAB 中进行离散系统零极点分析的常用子函数。 三 实验步骤 一)MATLAB 子函数 1.zplane 功能:显示离散系统的零极点分布图。 调用格式: zplane(z ,p);绘制由列向量z 确定的零点、列向量 p 图。 zplane(b ,a);绘制由行向量b 和a 构成的系统函数确定的零极点分布图。 [hz ,hp ,ht ]=zplane(z ,p);执行后可得到3个句柄向量:hz 为零点线句柄,hp 为极点线句柄,ht 为坐标轴、单位圆及文本对象的句柄。 2.roots 功能:求多项式的根。 调用格式: r =roots(a);由多项式的分子或分母系数向量求根向量。其中,多项式的分子或分母系数按降幂排列,得到的根向量为列向量。 二)实验原理 1.离散系统的因果性和稳定性 1)因果系统 由理论分析可知,一个离散系统的因果性在时域中必须满足的充分必要条件是: h(n)=0 n<0 即系统的冲激响应必须是右序列。 在变换域,极点只能在z 平面上一个有界的以原点为中心的圆内。如果系统函数是一个多项式,则分母上z 的最高次数应大于分子上z 的最高次数。 2)稳定系统 在时域中,离散系统稳定的充分必要条件是:它的冲激响应绝对可加,即 在变换域,则要求所有极点必须在z 平面上以原点为中心的单位圆内。 3)因果稳定系统 综合系统的因果性和稳定性两方面的要求可知,一个因果稳定系统的充分必要条件是:系统函数的全部极点必须在z 平面上以原点为中心的单位圆内。 ∞<∑ ∞=0 n h(n) 2.系统极点的位置对系统响应的影响 系统极点的位置对系统响应有着非常明显的影响。下面举例说明系统的极点分别是实数和复数时的情况,使用MATLAB 提供的zplane 子函数制作零极点分布图进行分析。 3.系统的因果稳定性实例分析 在MATLAB 中提供了roots 子函数,用于求多项式的根。配合使用zplane 子函数制作零极点分布图,可以帮助我们进行系统因果稳定性的分析。 4.实验任务 求该系统的零极点及零极点分布图,并判断系统的因果稳定性。 四 思考题 1结合本次实验与书本上相关原理,对书本后面的习题进行相关的matlab 软件仿真? 2因果稳定的离散系统必须满足的充分必要条件是什么?MATLAB 提供了哪些进行零极点求解的子函数?如何使用? j) 1j)(z 1(z 0.3)(z (z)H 3++-+-=3 213 212z 0.4z 0.35z 0.41z 4z 1.6z 1.64(z)H -------+++--= 实验五 基于MATLAB 的快速傅里叶变换 一 实验目的 学习用FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的误差及其原因,以便正确应用FFT 。 二 实验原理 用FFT 对信号作频谱分析是学习数字信号处理的重要内容。经常需要进行谱分析的信号是模拟信号和时域离散信号。对信号进行谱分析的重要问题是频谱分辨率D 和分析误差。频谱分辨率直接和FFT 的变换区间N 有关,因为FFT 能够实现的频率分辨率是N/2π,因此要求DN ≤/2π。可以根据此式选择FFT 的变换区间N 。误差主要来自于用FFT 作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当N 较大时离散谱的包络才能逼近于连续谱,因此N 要适当选择大一些。 周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT ,得到的离散谱才能代表周期信号的频谱。如果不知道信号周期,可以尽量选择信号的观察时间长一些。 对模拟信号进行谱分析时,首先要按照采样定理将其变成时域离散信号。如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。 三 实验步骤及内容 (1)对以下序列进行谱分析。 )4()(41R n x n+1 0≤n ≤3 x2(n)={ 8-n 4≤n ≤7 0 其它n 4-n 0≤n ≤3 X3(n)={ n-3 4≤n ≤7 0 其它n 选择FFT 的变换区间N 为8和16 两种情况进行频谱分析。分别打印其幅频特性曲线。 并进行对比、分析和讨论。 (2)对以下周期序列进行谱分析。 n n x 4cos )(3π = 选择FFT 的变换区间N 为8和16 两种情况分别对以上序列进行频谱分析。分别打印其幅频特性曲线。并进行对比、分析和讨论。 (3)对模拟周期信号进行谱分析 t t t n x πππ20cos 16cos 8cos )(4++= 选择 采样频率HzFs64=,变换区间N=16,32,64 三种情况进行谱分析。分别打印其幅频特性,并进行分析和讨论。 四 思考题 (1)对于周期序列,如果周期不知道,如何用FFT 进行谱分析? (2)如何选择FFT 的变换区间?(包括非周期信号和周期信号)