武汉工程大学信号分析与处理实验一专业:通信02班学生姓名:李瑶华学号:1304200113完成时间:2020年1月2日实验一:离散时间信号的分析一、实验目的1.认识常用的各种信号,理解其数学表达式和波形表示。2.掌握在计算机中生成及绘制数字信号波形的方法。3.掌握序列的简单运算及计算机实现与作用。4.理解离散时间傅立叶变换、Z变换及它们的性质和信号的频域特性。二、实验设备计算机,MATLAB语言环境。三、实验基础理论1.序列的相关概念2.常见序列单位取样序列0n0,0n1n,)(单位阶跃序列0,00,1)(nnnu单位矩形序列其他,010,1)(NnnRN实指数序列)()(nuanxn复指数序列njwenx)(0)(正弦型序列)nsin()(0wAnx3.序列的基本运算移位y(n)=x(n-m)反褶y(n)=x(-n)和)()()(21nxnxny积)()()(21nxnxny标乘y(n)=mx(n)累加nmmxny)()(差分运算)1()()()()1()(xnxnxnxnxnxn后相差分前向差分4.离散傅里叶变换的相关概念定义njwnjwenxeX)()(两个性质1))2()2()2()()(,2)(wjnnwjjwnwjjwnjweXenxeXeeweX故有。由于的周期函数,周期为是2)当x(n)为实序列时,)(jweX的幅值)(jweX在20w区间内是偶对称函数,相位)(argjweX是奇对称函数。5.Z变换的相关概念定义nnznxzX)()((双边Z变换)0)()(nnznxzX(单边Z变换)四、实验内容与步骤1.离散时间信号(序列)的产生利用MATLAB语言编程产生和绘制单位样值信号、单位阶跃序列、指数序列、正弦序列及随机离散信号的波形表示。1.单位取样序列的产生函数function[x,n]=impseq(n0,n1,n2)%产生x(n)=delta(n-n0);n1=n,n0=n2;%[x,n]=impseq(n0,n1,n2)if((n0n1)|(n0n2)|(n1n2))error('参数必须满足n1=n0=n2')endn=[n1:n2];%x=[zeros(1,(n0-n1)),1,zeros(1,(n2-n0))];x=[(n-n0)==0];2.单位阶跃序列的产生函数function[x,n]=stepseq(n0,n1,n2)%产生x(n)=u(n-n0);n1=n,n0=n2;%[x,n]=stepseq(n0,n1,n2)if((n0n1)|(n0n2)|(n1n2))error('参数必须满足n1=n0=n2')endn=[n1:n2];%x=[zeros(1,(n0-n1)),ones(1,(n2-n0+1))];x=[(n-n0)=0];Matlab产生各种常见序列的程序n=[-5:5];x1=impseq(0,-5,5);subplot(2,2,1);stem(n,x1);title('单位取样序列');xlabel('n');ylabel('x(n)');n=[-3:10];x2=stepseq(0,-3,10);subplot(2,2,2);stem(n,x2);title('单位阶跃序列');xlabel('n');ylabel('x(n)');n=[-10:10];x3=(0.5).^n;subplot(2,2,3);stem(n,x3);title('实指数序列');xlabel('n');ylabel('x(n)');n=[0:20];x4=sin(0.3*n);subplot(2,2,4);stem(n,x4);title('正弦序列');xlabel('n');ylabel('x(n)');Matlab产生复指数序列的程序n=[0:1:20];alpha=-0.1+0.5j;x=exp(alpha*n);subplot(2,2,1);stem(real(x));title('实部');xlabel('n');subplot(2,2,2);stem(imag(x));title('虚部');xlabel('n');subplot(2,2,3);stem(abs(x));title('振幅');xlabel('n');subplot(2,2,4);stem(n,(180/pi)*angle(x));title('相位');xlabel('n');Matlab产生随机离散信号的程序n=[1:10];x=rand(1,10);figure;stem(n,x);xlabel('n');ylabel('x(n)');title('随机序列');grid2.序列的运算(1)利用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--');legend('y[n]','s[n]');xlabel('n');ylabel('振幅');(2)利用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语言编程实现信号卷积运算。序列卷积的产生函数function[y,ny]=conv_m(x,nx,h,nh)%信号处理的卷积程序%[y,ny]=conv_m(x,nx,h,nh)%y=卷积结果%ny=y的基底(support)%x=基底nx上的第一个信号%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);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)');(4)利用MATLAB语言编程实现信号离散傅立叶的正反变换。离散傅立叶正变换的产生函数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;离散傅立叶反变换的产生函数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;(5)利用MATLAB语言编程实现信号的圆周移位,圆周卷积,验证DFT的圆周时移、圆周卷积性质和圆周卷积与线性卷积的关系。functionm=sigmod(n,N);m=rem(n,N);m=m+N;m=rem(m,N);functiony=cirshift(x,m,N);iflength(x)Nerror('Nmustbegreaterthenlength(x)');endx=[xzeros(1,N-length(x))];n=[0:N-1];n=sigmod(n-m,N);y=x(n+1);Matlab实现圆周移位的程序n=[0:10];M=6;N=11;x=15*0.4.^n;y=cirshift(x,M,N);subplot(2,1,1);stem(n,x);xlabel('n');ylabel('x(n)');title('原序列波');subplot(2,1,2);stem(n,y);xlabel('n');ylabel('y(n)');title('圆周移位序波形')圆周卷积functiony=circonvt(x1,x2,N)iflength(x1)Nerror('length(x1)isnotgreatthanN')endiflength(x2)Nerror('length(x2)isnotgreaterthanN')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';Matlab实现圆周卷积的程序x1=[2,4,3];x2=[4351];disp('N=7')N=7;y=circonvt(x1,x2,N)subplot(3,1,1);stem(x1);xlabel('n');ylabel('x1(n)');subplot(3,1,2);stem(x2);xlabel('n');ylabel('x2(n)');subplot(3,1,3);stem(y);xlabel('n');ylabel('y(n)');title('圆周卷积');(6)验证一个周期实序列奇偶部分的DFT与此序列本身的DFT之间的关系。function[x1,x2]=circevod(x)ifany(imag(x)~=0)error('不是实序列0')endN=length(x);n=0:(N-1);x1=0.5*(x+x(sigmod(-n,N)+1));x2=0.5*(x-x(sigmod(-n,N)+1));n=[0:20];N=length(n);x=15*0.7.^n;[x1,x2]=circevod(x);subplot(2,2,1);stem(n,x1);title('奇部');xlabel('n');ylabel('xev(n)');subplot(2,2,2);stem(n,x2);title('偶部');xlabel('n');ylabel('xod(n)');holdon;plot(n,zeros(1,N));holdoff;Xk1=dft(x1,N);Xk2=dft(x2,N);Xk=dft(x