实验一 离散系统的时域分析一、实验目的1、掌握离散时间信号的MATLAB 表示;2、信号运算;3、差分方程的求解;4、离散时间信号的卷积运算。
二、实验原理1、离散时间信号离散时间信号只在某些离散的瞬时给出函数值,而在其他时刻无定义。
它是时间上不连续按一定先后次序排列的一组数的集合,称为时间序列,用x(n)表示,n 取整数代表时间的离散时刻。
在matlab 中用向量来表示一个有限长度的序列。
2、序列的类型为了分析的方便,在数字信号处理中规定了一些基本的序列。
a) 单位采样序列 function [x,n]=impseq(n1,n2,n0) n=[n1:n2];x=[(n-n0)==0]; 调用该函数 [x,n]=impseq(-2,8,2);stem(n,x)0010()001()0n n n n nn n n n δδ =⎧=⎨ ≠⎩=⎧-⎨≠⎩单位采样序列的另一种生成方法n0=-2; n=[-10:10]; nc=length(n); x=zeros(1,nc); for i=1:nc if n(i)==n0 x(i)=1 end end stem(n,x)b) 单位阶跃序列function [x,n]=stepseq(n1,n2,n0) n=[n1:n2];x=[(n-n0)>=0];调用该函数 [x,n]=stepseq(-2,8,2); stem(n,x)00010()001()0n n n n n n n n nεε >=⎧=⎨ <⎩ >=⎧-⎨ <⎩c) 实数指数序列x(n)=an (运算符“.^”)n=[0:10]; x=0.9.^n; stem(n,x)d) 复数指数序列 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)()()j nx n e αω+=(0.1j0.3)n x(n)e (10n 10)-+= -<<e) 正弦和余弦序列 n=[0:10];x=3*cos(0.1*pi*n+pi/3); stem(n,x)f)随机序列rand(1,N)产生其元素在[0,1]之间均匀分布长度为N 的随机序列。
randn(1,N)产生均值为0,方差为1,长度为N 的高斯随机序列。
3、信号运算a) 信号时移 b) 信号倒置 c) 信号加 d) 信号乘 e) 信号微分 f)信号积分等0()sin()x n n ωθ=+0()cos()x n n ωθ=+4、序列运算在matlab 中进行序列运算要求参与运算的序列的长度要一样,如果出现长度不一样或者长度相同但采样位置不同时,不能直接利用加减运算符,利用matlab 中的下标运算使其具有相同的长度。
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;移位function [y,n]=sigshift(x,m,n0) n=m+n0; y=x;例: 求出下列波形x1(n)=2x(n-5)-3x(n+4)n=[-2:10]; x=[1:7,6:-1:1];[x11,n11]=sigshift(x,n,5); [x12,n12]=sigshift(x,n,-4);[x1,n1]=sigadd(2*x11,n11,-3*x12,n12); stem(n1,x1)5、差分方程在《信号与系统》和《数字信号处理》课程中,我们知道描述线性移不变离散时间系统的数学模型是常系数差分方程,它与系统的结构流图之间可以互相推导。
迭代解法(也称递推解法)是求解差分方程的最简单也最适用的方法,也是实现数字滤波器的一种基本方法。
(){1,2,3,4,5,6,7,6,5,4,3,2,1}x n差分方程通式为:x(n)与y(n)分别为系统的激励和响应。
6、差分方程MATLAB 实现MATLAB 以函数filter(num , den , x),来计算在给定输入和差分方程系数时求差分方程的数值解。
num,den 分别为系统方程的系数向量。
x 是输入序列。
已知某一系统方程为:y[n]-y[n-1]+0.9y[n-2]=x[n]计算并画出脉冲响应h(n),n=(-20,100)n=[-20:100];num=[1]; den=[1 -1 0.9]; x=impseq(-20,100,0); h=filter(num,den,x); stem(n,h)xlabel('时间序号N'); ylabel('脉冲响应h'); title('脉冲响应');离散卷积的计算公式如下: 序列x(n)、h(n) 可以是有限长或无限长,但为了在计算机上绘图观察方便,我们主要讨论有限长序列。
如果x(n) 和h(n)长度分别为M 和N ,则响应序列y(n) 也为有限长序列,其长度为 L=M+N-1 。
于是,上式可以“形象”地描述为两个有限长序列的反褶、移位、相乘、累加过程,这使计算机编程十分方便。
卷积函数conv(a,b)实现两个序列a,b 的卷积。
例:假定两个序列。
x=[3,11,7,0,-1,4,2]; y=[2,3,0,-5,2,1]; c=conv(x,y); stem(c)[]()[]()N Nk r a k y n k b r x n r ==-=-∑∑()()*()()()m y n x n h n x m h n m +∞=-∞==-∑将函数conv 稍加扩展为函数conv-m ,它可以对任意的序列求卷积。
格式如下:function [y,ny]= conv_m(x,nx,h,nh,p) %信号处理的改进卷积程序 nyb=nx(1)+nh(1);nyc=nx(length(x))+nh(length(h)); ny=[nyb:p:nyc]; y=conv(x , h);♦ 已知试求卷积C(t)=f1(t)*f2(t),并绘制出f1、f2及卷积以后的波形。
p=0.1;t1= [0:p:1]; f1=t1.*(t1>0); t2= [-1:p:2];f2=t2.*exp(-t2).*(t2>=0)+exp(t2).*(t2<0); [y,ny]=conv_m(f1,t1,f2,t2,p); Subplot(3,1,1); stem(t1,f1) Subplot(3,1,2); stem(t2,f2) Subplot(3,1,3); stem(ny,y)12()()01,0()12,0tt f t t t t te t f t t e t ε-= ≤≤⎧>=⎪= -≤≤⎨<⎪⎩四、实验报告要求1、简述实验目的和实验原理。
2、用笔算求出你选定的序列x(n)、h(n)的卷积结果并与计算机计算结果相比较。
实验二 离散傅立叶变换一、实验目的1. 掌握离散傅里叶变换的有关性质。
2. 利用matlab 验证有关性质。
3. 利用傅立叶变换进行相关运算。
二、实验原理及方法在工程技术的许多分支中,要掌握的基本内容之一就是正确理解时域和频域的关系。
对于数字系统来说,就是要精通离散傅立叶变换,因此离散傅立叶变换在数字信号处理中占有十分重要的地位。
在实际应用中,有限长序列有相当重要的地位,由于计算机容量的限制,只能对过程进行逐段分析。
由于有限长序列,引入DFT(离散付里叶变换)。
傅里叶变换建立以时间t 为自变量的“信号”与以频率f 为自变量的“频率函数”(频谱)之间的某种变换关系。
所以“时间”或“频率”取连续还是离散值, 就形成各种不同形式的傅里叶变换对。
四种不同傅里叶变换对1. 傅里叶级数(FS):连续时间, 离散频率的傅里叶变换。
周期连续时间信号傅里叶级数(FS)得到非周期离散频谱密度函数。
2. 傅里叶变换(FT):连续时间, 连续频率的傅里叶变换。
非周期连续时间信号通过连续付里叶变换(FT)得到非周期连续频谱密度函数。
3. 序列的傅里叶变换(DTFT):离散时间,连续频率的傅里叶变换。
非周期离散的时间信号(单位园上的Z 变换(DTFT))得到周期性连续的频率函数。
4. 离散傅里叶变换(DFT):离散时间, 离散频率的傅里叶变换。
上面讨论的前三种傅里叶变换对,都不适用在计算机上运算, 因为至少在一个域( 时域或频域)中, 函数是连续的。
因为从数字计算角度我们感兴趣的是时域及频域都是离散的情况, 这就是第四种离散傅里叶变换。
离散傅里叶级数(DFS)设 为周期为N 的周期序列, 则其离散傅里叶级数(DFS) 变换对为: 正变换 逆变换 其中 利用MATLAB 实现傅立叶级数计算编写函数实现DFS 计算function xk=dfs(xn,N) n=[0:1:N-1]; k=n;WN=exp(-j*2*pi/N);21100()[()]()()---=====∑∑N N j nknk N N n n X k DFS x n x n e x n W π2110011()[()]()()---=====∑∑N N j nk nkN N n k x n IDFS X k X k e X k W N N π2j N N W e π-=()x nnk=n'*k; WNnk=WN.^nk; xk=xn* WNnk;例:xn=[0,1,2,3],N=4xn=[0,1,2,3]; N=4; xk=dfs(xn,N)'逆运算IDFSfunction xn=idfs(xk,N) n=[0:1:N-1]; k=n;WN=exp(-j*2*pi/N); nk=n'*k; WNnk=WN.^(-nk); xn=xk*WNnk/N;离散傅立叶变换的正、逆变换定义为:比较正、逆变换的定义式可以看出,只要把DFT 公式中的系数 改为 ,并最后乘以1/N ,那么,DFT 的计算程序就可以用来计算IDFT 。