数字信号处理实验4——线性卷积与圆周卷积的计算.pdf
7页数字信号处理实验 ——线性卷积与圆周卷积的计 算 通信中英2班 潘奕铭(16086214) 实验目的 通过编程、上机调试程序,进一步增强使用计算机解决问题的能力 掌握线性卷积与圆周卷积软件的实现方法,并验证两者之间的关系 基本原理 线性卷积: 圆周卷积:设两个有限长序列和,均为 点长,则它们的 的圆周卷积等价于 如下程序: 1. for i in range(0,n-1): 2. for j in range(0,n-1): 3. h[(i+j)%n)]+=x[i]*y[j]; 两个有限长序列的线性卷积:序列为点长,序列为点长,则它们的线性 卷积的最大长度为,也就是说当和时 圆周卷积和线性卷积的关系:序列为点长,序列为点长,若序列和 进行点的圆周卷积,其结果是否等于该两序列的线性卷积,完全取决于圆周卷积 的长度 当时,圆周(循环)卷积等于线性卷积 否则,圆周卷积等于两个序列的线性卷积加上相当于下式的时间混叠,即: 实验内容 已知两个有限长序列: 实验前,预先笔算好这两个序列的线性卷积及下列几种情况的圆周卷积: 线性卷积: 点圆周卷积: 点圆周卷积: 点圆周卷积: 点圆周卷积: 编写程序计算两个序列的线性卷积和各点的圆周卷积并打印出来。
思路:线性卷积自带了我们直接调用即可对于圆周卷积,我们要先回顾一般 计算圆周卷积的主要流程,即翻转 序列,每次计算完一个点的值以后对 序列循环移 位然后再 序列对应相乘相加计算新的位置的点值,所以这里我们的思路就是对于翻转 后的 序列我们构造一个矩阵后将其转置再左乘 序列后求得的序列即是我们 要的圆周卷积序列正确性不言而喻,就是把上面的过程用矩阵乘法的形式表现出来 波形图: 线性卷积和 点圆周卷积: 线性卷积和 点圆周卷积: 线性卷积和 点圆周卷积: 线性卷积和点圆周卷积: 程序清单: 1. % 用直接法实现圆周卷积 2. % y=circonv(x1,x2,N) 3. % y:输出序列 4. % x1,x2:输入序列 5. % N:圆周卷积的长度 6. function yc=circonv(x1,x2,N) 7. if length(x1)>N 8. error(N必须大于等于x1的长度) 9. end 10. if length(x2)>N 11. error(N必须大于等于x2的长度) 12. end 13. x1=[x1,zeros(1,N-length(x1))] 14. x2=[x2,zeros(1,N-length(x2))] 15. n=[0:1:N-1]; 16. x2=x2(mod(-n,N)+1);%对下标取模后重新排列,生成序列x2((-n))N 17. H=zeros(N,N); 18. for n=1:1:N 19. H(n,:)=cirshiftd(x2,n-1,N);%该矩阵第k行为x2((k-1-n))N 20. end 21. yc=x1*H;%矩阵转置后进行圆周卷积 22. 23. % 直接实现序列x的圆周移位 24. % y=cirshifed(x,m,N) 25. % x:输入序列,且它的长度小于N 26. % m:移位位数 27. % N:圆周卷积的长度 28. % y:输出的移位序列 29. function y=cirshiftd(x,m,N) 30. if length(x)>N 31. error(x的长度必须小于N); 32. end 33. x=[x,zeros(1,N-length(x))]; 34. n=[0:1:N-1]; 35. y=x(mod(n-m,N)+1); 36. 37. % 主程序,axis的坐标范围根据各自的圆周卷积后的长度进行调整 38. xn=[1,2,3,4,5]; 39. hn=[1,2,1,2]; 40. yln=conv(xn,hn); 41. ycn=circonv(xn,hn,5); 42. ny1=[0:1:length(yln)-1]; 43. ny2=[0:1:length(ycn)-1]; 44. subplot(2,1,1); 45. stem(ny1,yln); 46. subplot(2,1,2); 47. stem(ny2,ycn); 48. axis([0,5,0,25]); 将实验结果和预先笔算的结果进行比较,验证其正确性。
对比可知程序完全正确,输出结果完全一致 思考题 :有一些问题的答案已经渗透在上面的报告中,故这里不再赘述,只做一些补充 线性卷积的运算步骤一般可以分为哪几个部分? 翻转,平移,相乘,相加 另一种思路: 1. for i in range(0,n-1): 2. for j in range(0,m-1): 3. h[i+j]+=x[i]*y[j]; 采用圆周卷积运算代替线性卷积运算的原因? 时域上的圆周卷积对应于频域上相当于两个序列的相乘,而这一步我们可以用 从优化到,即对两个序列求得序列后相乘再用 回去,运行速度大大提升,可以运用到需要更大计算量的卷积中去。





