数字信号处理实 验 指 导 书实验一 时域离散信号的产生一、实验目的1、了解常用时域离散信号及其特点;2、掌握MATLAB程序的编程方法;3、熟悉MATLAB函数的调用方法二、实验原理在时间轴上的离散点取值的信号,称为离散时间信号离散时间信号只在某些离散的瞬时给出函数值,而在其他时刻无定义它是时间上不连续按一定先后次序排列的一组数的集合,称为时间序列,用x(n)表示,n取整数代表时间的离散时刻在MATLAB中用向量来表示一个有限长度的序列常用离散信号:1、单位抽样序列2、单位阶跃序列3、实指数序列4、复指数序列5、正(余)弦序列6、随机序列 在利用计算机进行系统的研究时,经常需要产生随机信号,MATLAB提供一个工具函数rand来产生随机信号7、周期序列 三、实验用函数1、stem功能:绘制二维图形调用格式:stem(n,x);n为横轴,x为纵轴的线性图形2、length功能:计算某一变量的长度或采样点数调用格式:N=length(t);计算时间向量t的个数并赋给变量N3、axis功能:限定图形坐标的范围调用格式:axis([x1,x2,y1,y2]);横坐标从x1—x2,纵坐标从y1—y2。
4、zeros功能:产生一个全0序列调用格式:x=zeros(1,n);产生n个0的序列5、ones功能:产生一个全1序列调用格式:y=ones(1,n);产生n个1的序列四、参考实例例1.1 用Matlab产生单位抽样序列先建立函数impseq(n1,n2,n0)function [x,n]=impseq(n1,n2,n0) n=[n1:n2]; x=[(n-n0)==0];%编写主程序调用该函数[x,n]=impseq(-2,8,2);stem(n,x)程序运行结果如图1-1所示:图1-1 单位抽样序列例1.2实数指数序列(运算符“.^”)Matlab程序如下:n=[0:10];x=0.9.^n;stem(n,x)程序运行结果如图1-2所示图1-2 实数指数序列例1.3复数指数序列()Matlab程序如下:n=[-10:10]; alpha=-0.1+0.3*j; x=exp(alpha*n);real_x=real(x); image_x=imag(x);mag_x=abs(x); phase_x=angle(x);subplot(2,2,1); stem(n,real_x)subplot(2,2,2); stem(n,image_x)subplot(2,2,3); stem(n,mag_x)subplot(2,2,4); stem(n,phase_x)程序运行结果如图1-3所示图1-3 复数指数序列例1.4正、余弦序列()Matlab程序如下:n=[0:10];x=3*cos(0.1*pi*n+pi/3);stem(n,x)程序运行结果如图1-4所示图1-4 正、余弦序列例1.5随机序列rand(1,N)产生其元素在[0,1]之间均匀分布长度为N的随机序列randn(1,N)产生均值为0,方差为1,长度为N的高斯随机序列例1.6周期序列如何生成周期序列 1、 将一个周期复制p次; 2、借助矩阵运算、matlab下标能力。
先生成一个包含p列x(n)值的矩阵,然后用结构(:)来把p列串接成一个长周期序列因为这个结构只能用于列向,最后还需要做矩阵转置获得所需序列Matlab程序如下:x=[1,2,3]; %一个x(n)xn=x'*ones(1,3) %生成p列x(n)xn=xn(:)' %将p列串接成长列序列并转置stem(xn)程序运行的结果如图1-5所示图1-5 周期序列五、实验任务1、调试部分例题程序,掌握Matlab基本操作方法2、编写程序,完成下列函数波形: 1)利用zeros函数生成单位抽样序列; 2)利用zeros函数和ones函数生成单位阶跃序列; 六、实验报告1、简述实验目的、原理2、写出上机调试通过的实验任务的程序并描述其图形曲线实验二 离散序列的基本运算一、实验目的1、加强MATLAB运用2、了解离散时间序列在时域中的基本运算3、熟悉相关函数的使用方法,掌握离散序列运算程序的编写方法二、实验原理离散序列的时域运算包括信号的相加、相乘,信号的时域变换包括信号的移位、反折、倒相及尺度变换等在MATLAB中,序列的相加和相乘运算是两个向量之间的运算,因此参加运算的两个序列必须具有相同的长度,否则不能直接进行运算,需要进行相应的处理后再进行运算。
三、实验用函数1、find功能:寻找非零元素的索引号调用格式:find((n>=min(n1))&(n<=max(n1))):在符号关系运算条件的范围内寻找非零元素的索引号2、fliplr功能:对矩阵行元素进行左右翻转调用格式:x1=fliplr(x):将x的行元素进行左右翻转,赋给变量x1四、实例1、信号的时域变换1)序列移位将一个离散序列进行移位,形成新的序列:x1(n)=x(n-m)当m>0时,原序列向右移m位,当m<0时,原序列向左移建立移位函数(sigshift(x,m,n0))function [y,n]=sigshift(x,m,n0) n=m+n0; y=x; 2)序列反折在这个运算中,x(n)以n=0为基准点,以纵轴为对称轴反折得到一个新的序列 y(n)=|x(-n)|在MATLAB中提供了fliplr函数实现序列反折建立反折函数(sigfold(x,n))function [y,n]=sigfold(x,n) y=fliplr(x); n=-fliplr(n); 3)序列倒相是求一个与原序列的向量值相反,对应的时间向量不变的新序列。
4)序列的尺度变换通过对时间轴的放大或压缩形成新的序列2、序列的算术运算 1)序列相加 序列相加是指两个序列中相同序号的序列值逐项对应相加,形成新的序列 参加运算的两个序列的维数不同时 %建立通用函数function [y,n]=sigadd(x1,n1,x2,n2)n=min(min(n1),min(n2)) : max(max(n1),max(n2));y1=zeros(1,length(n));y2=y1;y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;y=y1+y2;1)序列相乘 序列相加是指两个序列中相同序号的序列值逐项对应相乘,形成新的序列 参加运算的两个序列的维数不同时处理方法与序列相加相同五、实验任务1、理解序列运算的性质,了解函数语句的意义2、利用例题函数完成下列序列运算 1)已知x1(n)=u(n+1) (-3
2、列写上机调试通过的程序,并描绘其波形曲线实验三 离散卷积的原理及应用一、实验目的1、通过实验进一步理解卷积定理,了解卷积过程;2、掌握应用线性卷积求解离散时间系统响应的基本方法二、实验原理对于线性移不变离散系统,任意的输入信号x(n)可以用及其位移的线性组合来表示,即 当输入为时,系统的输出y(n)=h(n),由系统的线性移不变性质可以得到系统对x(n)的响应y(n)为 称为离散系统的线性卷积,简写为 y(n)=x(n)*h(n)也就是说,如果已知系统的冲激响应,将输入信号与系统的冲激响应进行卷积运算,即可求得系统的响应三、实验用函数1、卷积函数conv功能:进行两个序列的卷积运算调用格式:y=conv(x,h);用于求解两有限长序列的卷积2、sum功能:求各元素之和调用格式:y=sum(x);求序列x中各元素之和3、hold功能:控制当前图形窗口是否刷新的双向切换开关调用格式:hold on:使当前图形窗口中的图形保持且不被刷新,准备接受绘制新的图形hold off:使当前图形窗口中的图形不具备不被刷新的性质。
4、impz功能:求解数字系统的冲激响应调用格式:[h,t]=impz(b,a);求解数字系统的冲激响应h,取样点数为缺省值[h,t]=impz(b,a,n);求解数字系统的冲激响应h,取样点数由n确定impz(b,a);在当前窗口用stem(t,h)函数绘制图形5、dstep功能:求解数字系统的阶跃响应调用格式:[h,t]=dstep(b,a);求解数字系统的冲激响应h,取样点数为缺省值[h,t]=dstep(b,a,n);求解数字系统的冲激响应h,取样点数由n确定dstep(b,a);在当前窗口用stairs(t,h)函数绘制图形四、参考实例在利用Matlab提供的卷积函数进行卷积运算时,主要是确定卷积结果的时间区间conv函数默认两信号的时间序列从n=0开始,卷积结果对应的时间序列也从n=0开始如果信号不是从0开始,则编程时必须用两个数组确定一个信号,其中,一个数组是信号波形的幅度样值,另一个数组是其对应的时间向量建立一个适用于信号从任意时间开始的通用函数function [y,ny]=sconv(x,h,nx,nh,p) y=conv(x,h); n1=nx(1)+nh(1); %计算y的非零样值的起点位置 n2=nx(length(x))+nh(length(h)); %计算y的非零样值的宽度 ny=n1:p:n2; %确定y的非零样值的时间向量五、实验任务已知一个IIR数字低通滤波器的系统函数公式为输入一个矩形信号序列 x=square(n/5) (-2
六、实验报告1、简述实验目的、原理2、写出上机调试通过的实验任务的程序并描述其图形曲线。