1、大连理工大学实验报告学院(系): 电信 专业: 生物医学工程 班级: *1101 姓 名: * 学号: 201181* 组: _ 实验时间: 实验室: 实验台: 指导教师签字: 成绩: 实验一 线性卷积和圆周卷积一、实验程序1.给出序列x=3,11,7,0,-1,4,2,h=2,3,0,-5,2,1;用两种方法求两者的线性卷积y,对比结果。a) 直接调用matlab内部函数conv来计算。b) 根据线性卷积的步骤计算。clear;clc;x=3 11 7 0 -1 4 2;n1=0:1:length(x)-1;h=2 3 0 -5 2 1;n2=0:1:length(h)-1;y=conv(x
2、,h);n3=0:1:length(x)+length(h)-2;figure(1);subplot(121);stem(n1,x,.);axis(0 6 -15 15);title(x(n)序列);grid;subplot(122);stem(n2,h,.);axis(0 5 -10 10);title(h(n)序列);grid;figure(2);subplot(121);stem(n3,y,.);axis(0 12 -60 60);title(调用conv函数的线性卷积后序列);grid;N=length(x);M=length(h);L=N+M-1;for(n=1:L) y1(n)=0
3、; for(m=1:M) k=n-m+1; if(k=1&k=1&k=nx) y(n)=y(n)+h(m)*x(k); end; end;end;通过如下程序调用函数conv_mclear;clc;x=3,11,7,0,-1,4,2;h=2 3 0 -5 2 1;nx=length(x);nh=length(h);y,ny=conv_m(x,nx,h,nh);n=0:1:ny-1;subplot(121);stem(n,y,.);axis(0 12 -60 60);title(调用conv_m函数的线性卷积后序列);grid;结果如下与题1中所得结果相同。3.创建函数circonv,来实现序列
4、的圆周卷积,格式如下: function y=circonv(x1,x2,N)程序如下function y=circonv(x1,x2,N)x_1=x1 zeros(1,N-length(x1);h_1=x2 zeros(1,N-length(x2);y1=conv(x_1,h_1);z_1=zeros(1,N) y1(1:(N-1);z_2=y1(N+1):(2*N-1) zeros(1,N);z=z_1(1:(2*N-1)+z_2(1:(2*N-1)+y1(1:(2*N-1);y=z(1:N);通过如下函数调用circonvclear;clc;x1=1 0 1 2 1;x2=1 1 0 1
5、 2;y=circonv(x1,x2,5);subplot(121);stem(0:4),y,.);axis(0 5 0 8);title(圆周卷积);grid;得到结果如下4.求序列和,()的线性卷积a)N个点的圆周卷积b)3N/2个点的圆周卷积c)2N-1个点的圆周卷积d)用FFT变换实现其圆周卷积本次试验中调用了前面编写的circonv函数。clear;clc;close all;n=-5:50;N=56;x=heaviside(n)-heaviside(n-10);h=0.9.n.*heaviside(n);N1=N;x1=x zeros(1,N-length(x);h1=h zero
6、s(1,N-length(h);X1=fft(x1);H1=fft(h1);Y1=X1.*H1;y1=ifft(Y1);figuresubplot(131);stem(0:N-1),y1,.);axis(0 120 0 8);title(FFT的N点圆周卷积);grid;N2=(3*N)/2;x2=x zeros(1,N2-length(x);h2=h zeros(1,N2-length(h);X2=fft(x2);H2=fft(h2);Y2=X2.*H2;y2=ifft(Y2);subplot(132);stem(0:N2-1),y2,.);axis(0 120 0 8);title(FFT
7、的3*N/2点圆周卷积);grid;N3=2*N-1;x3=x zeros(1,N3-length(x);h3=h zeros(1,N3-length(h);X3=fft(x3);H3=fft(h3);Y3=X3.*H3;y3=ifft(Y3);subplot(133);stem(0:N3-1),y3,.);axis(0 120 0 8);title(FFT的2*N-1点圆周卷积);grid;y=circonv(x,h,N);figuresubplot(131);stem(0:N-1),y,.);axis(0 120 0 8);title(N点圆周卷积);grid;y=circonv(x,h,
8、3*N/2);subplot(132);stem(0:(3*N)/2-1),y,.);axis(0 120 0 8);title(3/2*N点圆周卷积);grid;y=circonv(x,h,2*N-1);subplot(133);stem(0:2*N-1-1),y,.);axis(0 120 0 8);title(2N-1点圆周卷积);grid;二、实验总结对于有限长序列,存在两种形式的卷积:线性卷积与圆周卷积。由于圆周卷积可以采用DFT的快速算法快速傅里叶变换进行运算,运算速度上有很大的优越性。 其中,设计线性卷积有4个步骤,反折、移位 、相乘、求和,而循环卷积则是通过循环移位后得到的矩阵与序列相乘。根据上DSP课上老师讲的求法,画出了思路的流程图,然后根据流程图写出程序,事半功倍。 将结果与直接调用matlab自带的函数比较,结果显示,自己设计的程序是正确的。 通过这次实训,我对线性卷积和循环的定义、原理、以及实现方法都有了深入的认识。同时也对MATLAB软件产生了更加浓厚的兴趣。在做完本次实训要求的线性卷积之后,我运用了同样的思路,设计出了循环卷积,算是对本次实训的一个扩展,同时也提高了自己的编程水平和对matlab的运用。