当前位置:文档之家› 数字信号处理实验报告一

数字信号处理实验报告一

武汉工程大学数字信号处理实验报告姓名:周权学号:1204140228班级:通信工程02一、实验设备计算机,MATLAB语言环境。

二、实验基础理论1.序列的相关概念2.常见序列3.序列的基本运算4.离散傅里叶变换的相关概念5.Z变换的相关概念三、实验内容与步骤1.离散时间信号(序列)的产生利用MATLAB语言编程产生和绘制单位样值信号、单位阶跃序列、指数序列、正弦序列及随机离散信号的波形表示。

四实验目的认识常用的各种信号,理解其数字表达式和波形表示,掌握在计算机中生成及绘制数字信号波形的方法,掌握序列的简单运算及计算机实现与作用,理解离散时间傅里叶变换,Z变换及它们的性质和信号的频域分实验一离散时间信号(序列)的产生代码一单位样值x=2;y=1;stem(x,y);title('单位样值 ')单位阶跃序列n0=0;n1=-10;n2=10;n=[n1:n2];x=[(n-n0)>=0];stem(n,x);xlabel('n');ylabel('x{n}');title('单位阶跃序列');实指数序列n=[0:10];x=(0.5).^n;stem(n,x);xlabel('n');ylabel('x{n}');title('实指数序列');正弦序列n=[-100:100];x=2*sin(0.05*pi*n); stem(n,x);xlabel('n');ylabel('x{n}');title('正弦序列');随机序列n=[1:10];x=rand(1,10); subplot(221); stem(n,x);xlabel('n'); ylabel('x{n}'); title('随机序列');实验二序列的运算(1)利用MATLAB语言编程实现信号平滑运算。

(2)利用MATLAB语言编程实现信号的调制。

(3)利用MATLAB语言编程实现信号卷积运算。

(4)利用MATLAB语言编程实现信号离散傅立叶的正反变换。

利用MATLAB语言编程实现信号的圆周移位、圆周卷积,验证DFT 的圆周时移、圆周卷积性质和圆周卷积与线性卷积的关系。

验证一个周期实序列奇偶部分的DFT与此序列本身的DFT之间的关系。

实验二序列的运算平滑运算r=51;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('Time index n');ylabel('Amplitude');legend('d[n]','s[n]','x[n]');x1=[0 0 x]; x2=[0 x 0]; x3=[x 0 0];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('Time index n');ylabel('Amplitude');调制程序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('xx');subplot(2,2,3);plot(y);xlabel('t(s)');ylabel('y');title('xy');subplot(2,2,4);plot(Y);plot([-128:127],fftshift(abs(Y)));xlabel('w');ylabel('Y(jw)');title('yy');卷积M函数function[y,ny]=conv_m(x,nx,h,nh)nyb=nx(1)+nh(1);nye=nx(length(x))+nh(length(h)); ny=[nyb:nye];y=conv(x,h);卷积程序x=[0 0.5 1 1.5 0];nx=0:4;h=[1 1 1 10 0];nh=0:4;[y,ny]=conv_m(x,nx,h,nh);subplot(2,2,1);stem(nx,x);title('xulie x'); xlabel('n');ylabel('x(n)');subplot(2,2,2);stem(nh,h);title('xulie h'); xlabel('n');ylabel('h(n)');subplot(2,2,3);stem(ny,y);title('junji');xlabel('n');ylabel('y(n)');Dftfunction[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;Idftfunction[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;程序xn=[1,1,1,1];N=4;xk=dft(xn,N)'xk=[4,0,0,0];N=4;xk=idft(xn,N)'Matlab程序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));grid;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)]);序列的圆周移位已知序列X(n)=10(0.8)n(0≤n ≤10),序列圆周向右移m=3,绘制原序列波形和圆周移位序列波形cigmod 函数function m=sigmod(n,N);m=rem(n,N);m=m+N;m=rem(m,N); cirshhift 函数function y=cirshift(x,m,N);if length(x)>Nerror('N must be greater then length(x)');endx=[x zeros(1,N-length(x))];n=[0:N-1];n=sigmod(n-m,N);y=x(n+1);圆周移位程序n=[0:10];M=6;N=11;x=10*0.8.^n;y=cirshift(x,M,N);subplot(211)stem(n,x);title('原序列波形');xlabel('n');ylabel('x(n)');subplot(212)stem(n,y);title('圆周移位序列波形');xlabel('n');ylabel('y(n)');圆周卷积已知X1=[1 2 2],x2=[1 2 3 4],试计算x1○4x2程序卷积程序function y=circonvt(x1,x2,N)if length(x1)>Nerror('Length(x1)is not great than N'); endif length(x2)>Nerroe('Lengeh(x2)is not greater than N'); 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);for n=1:N;H(n,:)=cirshift(x2,n-1,N); endy=x1*H';运算程序x1=[1 2 2];x2=[1 2 3 4];disp('N=5')N=5;y=circonvt(x1,x2,N)Z变换求(n-1)u(n)的Z变换F=ztrans(sym('n-1'))F=simplify(F)F =z/(z - 1)^2 - z/(z - 1)F =-(z*(z - 2))/(z - 1)^2结果分析:将函数分解为nu(n)-3u(n),再分别进行Z变换。

其中用到了ztrans函数和simplify函数逆Z变换求X(z)=z-1/(1+z-1-20z-2),4<|z|<5a=[1 1 -20];b=[0 1 0];[r,p,k]=residuez(b,a)结果分析:r=-1,1为函数z变换后的系数,p为逆变换后系数。

验证一个周期实序列奇偶部分的DFT与此序列本身的DFT之间关系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;Idft程序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;function[xev,xod]=circevod(x)if any(imag(x)~=0)error('不是实序列')endN=length(x);n=0:(N-1);xev=0.5*(x+x(sigmod(-n,N)+1));xod=0.5*(x-x(sigmod(-n,N)+1));已知序列X(n)=10(0.8)n,序列长度N=21绘出傅里叶的奇数部分和偶数部分并求它们的DFT n=[0:20];N=length(n);x=10*0.8.^n;[xev,xod]=circevod(x);subplot(221);stem(n,xev);title('奇部');xlabel('n');ylabel('xev(n)'); subplot(222)stem(n,xod);title('偶部');xlabel('n');ylabel('xod(n)');hold on plot(n,zeros(1,N))hold offXkev=dft(xev,N);Xkod=dft(xod,N);Xkse=dft(x,N);subplot(223);stem(n,real(Xkev));xlabel('n');ylabel('Xkev(k)');title('偶部分的DFT');subplot(224);stem(n,imag(Xkod));xlabel('k');ylabel('Xkod(k)');title('奇部分的DFT');hold onplot(n,zeros(1,N))hold off四:实验总结通过这几个实验对MATLAB有了简单的认识,并学会了基本的编写方法,也从中了解到了一些基本运算函数。

相关主题