武汉工程大学数字信号处理实验报告二专业班级:14级通信03班学生姓名:秦重双学号:1404201114实验时间:2017年5月3日实验地点:4B315指导老师:杨述斌实验一离散时间信号的分析实验一、实验目的①认识常用的各种信号,理解其数学表达式和波形表示。②掌握在计算机中生成及绘制数值信号波形的方法。③掌握序列的简单运算及计算机实现与作用。④理解离散时间傅里叶变换、Z变换及它们的性质和信号的频域特性。二、实验设备计算机,MATLAB语言环境。三、实验基础理论1、序列的相关概念离散时间信号用一个称为样本的数字序列来表示。一般用{x[n]}表示,其中自变量n的取值范围是﹣∞到﹢∞之间的整数。为了表示方便,序列通常直接用x[n]表示。离散时间信号可以是一个有限长序列,也可以是一个无限长序列。有限长(也称为有限时宽)序列仅定义在有限的时间间隔中:﹣∞≤N1≤N2≤+∝.有限长序列的长度或时宽为N=N1-N2+1。满足x[n+kN]=x[n](对于所有n)的序列称为周期为N的周期序列,其中N取任意正整数;k取任意整数;2、常见序列常见序列有单位取样值信号、单位阶跃序列、矩形序列、斜变序列、单边指数序列、正弦序列、复指数序列等。3、序列的基本运算序列的基本运算有加法、乘法、倒置(反转)、移位、尺度变换、卷积等。4、离散傅里叶变换的相关概念5、Z变换的相关概念四.实验内容与步骤1、知识准备认真复习以上基础理论,理解本实验所用到的实验原理。2、离散时间信号(序列)的产生利用MATLAB语言编程和绘制单位样值信号、单位阶跃序列、指数序列、正弦序列及随机离散信号的波形,以加深对离散信号时域表示的理解。①单位取样值信号Matlab程序x=0;y=1;stem(x,y);title('单位样值');axis([-2,2,0,1]);②单位阶跃序列Matlab程序n0=0;n1=-5;n2=5;n=[n1:n2];x=[(n-n0)=0];stem(n,x);xlabel('n');ylabel('x(n)');title('单位阶跃序列');③指数序列、正弦序列Matlab程序n=[0:10];x=(1/3).^n;stem(n,x);xlabel('n');ylabel('x(n)');title('指数序列');n=[-20:20];x=2*sin(0.5.*n);stem(n,x);xlabel('n');ylabel('x(n)');axis([-20,20,-3,3]);title('正弦序列');④随机离散信号矩形序列Matlab程序n=[1:10];x=rand(1,10);stem(n,x);xlabel('n');ylabel('x(n)');title('随机序列');3、序列的运算数字信号处理的目的,就是从一个或几个给定的离散时间信号中产生一个具有所需性质的信号。处理算法由加法、乘法、倒置(反转)、移位、尺度变换、卷积等基本运算组合构成。此部分实验将通过几个简单常见的例子说明这些基本运算的实际运用,以便进一步理解序列的简单运算及计算机实现与作用。(1)信号平滑利用MATLAB语言编程实现信号平滑运算。信号平滑是数字信号处理应用中的一个常见的算法,以虑出被加性噪声污染的信号中的噪声。假定信号s[n]被噪声d[n]所污染,得到了一个含有加性噪声的信号x[n]=s[n]+d[n]。要得到无污染的信号,可用简单的信号平滑即信号的加法实现。例如,采用三点(可选,以信号特点来定)平滑来实现。y[n]=(x[n-1]+x[n]+x[n+1])/3由此可以理解平滑滤波的处理方法。Matlab程序r=65;d=0.8*(rand(r,1)-0.5);m=0:r-1;s=2*m.*(0.9.^m);x=s+d';subplot(2,1,1);plot(m,d','r-',m,s,'g--',m,x,'b-.');xlabel('n');ylabel('振幅');legend('d[n]','s[n]','x[n]');x1=[00x];x2=[0x0];x3=[x00];y=(x1+x2+x3)/3;subplot(2,1,2);plot(m,y(2:r+1),'r-',m,s,'g--');legand('y[n]','s[n]');xlabel('n');ylabel('振幅');(2)调制信号的产生利用MATLAB语言编程实现信号的调制。调制信号是工程应用中常用的一类信号,调制信号的产生可以通过序列的乘法运算得到。例如,用低频调制信号xL[n]=cos(wln)来调制高频正弦信号xH[n]=cos(wHn),就可得到振幅调制信号y[n]。y[n]=A(1+m*xL[n])xH[n]=A(1+mcos(wLn))cos(wHn)其中m称为调制指数,用来确保(1+m*xL[n])在所有可能的n的情况下m都是正数。以上式进行编程即可实现调制的目的。Matlab程序Fm=10;Fc=100;Fs=500;k=0:199;t=k/Fs;x=sin(2*pi*Fm*t);y=x.*cos(2*pi*Fc*t);X=fft(x,256);Y=fft(y,256);subplot(2,2,1);plot(x);xlabel('t(s)');ylabel('x');title('原信号');subplot(2,2,2);plot(X);plot([-128:127],fftshift(abs(X)));xlabel('w');ylabel('X(jw)');title('原信号频谱');subplot(2,2,3);plot(y);xlabel('t(s)');ylabel('y');title('调制信号');subplot(2,2,4);plot(Y);plot([-128:127],fftshift(abs(Y)));xlabel('w');ylabel('Y(jw)');title('调制信号频谱');(3)卷积的计算用MATLAB语言编程可实现信号卷积运算。卷积是数字信号处理中非常重要的一个运算,用卷积可以计算一个序列通过离散系统后的响应信息。如可以编程实现9点对7点(序列长度可以自己设定)的序列卷积运算。Matlab程序x=[00.511.50];nx=0:4;h=[11100];nh=0:4;[y,ny]=conv_m(x,nx,h,nh);subplot(2,2,1);stem(nx,x);title('序列x');xlabel('n');ylabel('x(n)');subplot(2,2,2);stem(nh,h);title('序列h');xlabel('n');ylabel('h(n)');subplot(2,2,3);stem(ny,y);title('两序列卷积');xlabel('n');ylabel('y(n)');conv_m函数程序function[y,ny]=conv_m(x,nx,h,nh)%信号处理的卷积程序%[y,ny]=conv_m(x,nx,h,nh)%y=卷积结果%ny=y的基底(support);%nx=x的基底;%h=基底nh上的第二个信号%nh=h的基底nyb=nx(1)+nh(1);nye=nx(length(x))+nh(length(h));ny=[nyb:nye];y=conv(x,h);end(4)序列的离散傅里叶变换,Z变换及信号频域特性用MATLAB语言编程实现信号离散傅里叶的正反变换。Matlab程序xn=[1,1,1,1];N=4;k=dft(xn,N)'Xk=[4,0,0,0];N=4;Xk=idft(xn,N)'xn=[1,1,1,1];N=length(xn);n=0:N-1;k=0:N-1;Xk=xn*exp(-j*2*pi/N).^(n'*k);x=(Xk*exp(j*2*pi/N).^(n'*k))/N;subplot(1,2,2);stem(k,abs(Xk));gridon;title('|X(k)|');axis([-1,N,1.1*min(abs(Xk)),1.1*max(abs(Xk))]);subplot(1,2,1);stem(n,xn);grid;title('x(n)');axis([-1,N,1.1*min(xn),1.1*max(xn)]);dft函数程序function[Xk]=dft(xn,N)n=[0:1:N-1];k=n;WN=exp(-j*2*pi/N);nk=n'*k;WNnk=WN.^nk;Xk=xn*WNnk;endidft函数程序function[Xk]=idft(xn,N)n=[0:1:N-1];k=n;WN=exp(-j*2*pi/N);nk=n'*k;WNnk=WN.^(-nk);Xk=xn*WNnk/N;end用MATLAB语言编程实现信号的圆周移位、圆周卷积、验证DFT的圆周时移、圆周卷积性质和圆周卷积与线性卷积的关系。圆周移位Matlab程序n=[0:10];M=6;N=11;x=10*0.8.^n;y=cirshift(x,M,N);subplot(2,1,1);stem(n,x);title('ÔÐòÁв¨ÐÎ');xlabel('n');ylabel('x(n)');subplot(2,1,2);stem(n,y);title('Ô²ÖÜÒÆλÐòÁв¨ÐÎ');xlabel('n');ylabel('y(n)');sigmod函数程序function[m]=sigmod(n,N);m=rem(n,N);m=m+N;m=rem(m,N);endcirshift函数程序function[y]=cirshift(x,m,N);iflength(x)Nerror('Nmustbegreaterthanlength(x)');endx=[xzeros(1,N-length(x))];n=[0:N-1];n=sigmod(n-m,N);y=x(n+1);end圆周卷积Matlab程序x1=[122];n1=[0:2];x2=[1234];n2=[0:3];disp('N=5');n3=[0:4];N=5;y=circonvt(x1,x2,N)subplot(3,1,1);stem(n1,x1);title('x1');xlabel('n1');ylabel('x1(n)');subplot(3,1,2);stem(n2,x2);title('x2');xlabel('n2');ylabel('x2(n)');subplot(3,1,3);stem(n3,y);title('圆周卷积');xlabel('n3');ylabel('y(n)');circonvt函数程序function[y]=circonvt(x1,x2,N);iflength(x1)Nerror('Length(x1)isnotgreatthanN');endiflength(x2)Nerror('Length(x2)isnotgreatthanN');endx1=[x1,zeros(1,N-length(x1))];x2=[x2,zeros(1,N-length(x2))];m=[0:N-1];x2=x2(mod(-m,N)+1);H=zeros(N,N);forn=1:N;H(n,:)=cirshift(x2,n-1,N);endy=x1*H';end验证一个实周期序列奇偶部分的DFT与此序列本身的DFT之间的关系。Matlab程序function[xe,xo,m]=evenodd(x,n)ifany(imag(x)~=0)errorendm=-fliplr(n);m1=min([m,n]);m2=max([m,n]);m=m1:m2;nm=n(1)-m(1);n1=1:length(n);x1=zeros(1,length(m));x1(n1+nm)=x;x=x1;xe=0.5*(x+fliplr(x));xo=0.5