当前位置:文档之家› 利用MATLAB实现循环卷积.doc

利用MATLAB实现循环卷积.doc

一、实验目的
1.利用MATLAB 实现循环卷积。

2.比较循环卷积与线性卷积的区别。

二、实验条件
PC 机,MATLAB7.0
三、实验内容
1)循环卷积的定义:两个序列的N 点循环卷积定义为:
)0()()()]()([1
0N n m n x m h n x n h N k N N <≤-=⊗∑-=
利用MATLAB 实现两个序列的循环卷积可以分三个步骤完成:
(1)初始化:确定循环点数N ,测量输入2个序列的长度。

(2)循环右移函数:将序列x(n)循环右移,一共移N 次(N 为循环卷积的循环次数),最后将每次循环成的新序列组成一个矩阵V 。

(3)相乘:将x(n)移位后组成的矩阵V 与第二个序列h(n)对应相乘,即得循环卷积结果。

程序如下:
程序一:
clear;close all ;
N=10;
x1=[6 15 -6 3 5 7 0 1];
x2=[7 1 2 9 4 3 20 6];
xn1=length(x1);
xxn1=0:xn1-1;
xn2=length(x2);
xxn2=0:xn2-1;
subplot(3,1,1);
stem(xxn1,x1);
subplot(3,1,2);
stem(xxn2,x2);
x11=fft(x1,N);
x12=fft(x2,N);
y11=x11.*x12;
y1=ifft(y11,N);
subplot(3,1,3);
n=0:length(y1)-1;
stem(n,y1,'.');
title('循环卷积的结果');
xlabel('n');ylabel('y1(n)');
运行后所得图形如下:
观察所得的循环卷积结果发现并没有呈现周期性的序列,因此将程序做下列改变。

程序二:
clear;close all;
N=40;
x1=[6 15 -6 3 5 7 0 1];
x2=[7 1 2 9 4 3 20 6];
x2=[x2,x2,x2,x2];
xn1=length(x1);
xxn1=0:xn1-1;
xn2=length(x2);
xxn2=0:xn2-1;
subplot(3,1,1);
stem(xxn1,x1);
subplot(3,1,2);
stem(xxn2,x2);
x11=fft(x1,N);
x12=fft(x2,N);
y11=x11.*x12;
y1=ifft(y11,N);
subplot(3,1,3);
n=0:length(y1)-1;
stem(n,y1,'.');
title('循环卷积的结果');
xlabel('n');ylabel('y1(n)');
从图中可以看出循环卷积的结果已经呈循环序列。

将程序进一步改进——在x2序列之间加一些零矩阵;程序如下:
clear;close all;
N=50;
x1=[6 15 -6 3 5 7 0 1];
x2=[7 1 2 9 4 3 20 6];
x2=[x2,zeros(1,7),x2,zeros(1,7),x2,zeros(1,7),x2];
xn1=length(x1);
xxn1=0:xn1-1;
xn2=length(x2);
xxn2=0:xn2-1;
subplot(3,1,1);
stem(xxn1,x1);
subplot(3,1,2);
stem(xxn2,x2);
x11=fft(x1,N);
x12=fft(x2,N);
y11=x11.*x12;
y1=ifft(y11,N);
subplot(3,1,3);
n=0:length(y1)-1;
stem(n,y1,'.');
title('循环卷积的结果');
xlabel('n');ylabel('y1(n)');
2)线性卷积与循环卷积的区别:
从循环卷积的定义公式中可以看出,循环卷积和线性卷积的不同之处在于:①两个N 点序列的N点循环卷积的结果仍为N点序列,而两个N点序列线性卷积的结果的长度则变为为2N-1;②循环卷积对序列的移位采取循环移位,而线性卷积对序列则是
采取线性位移。

而就是这两点不同,导致循环卷积和线性卷积有不同的结果和性质。

然而虽然循环卷积和线性卷积虽然是不同的概念,但是它们之间有一个有意义的
公式联系在一起)()(')]()([)(n G rN n y n x n h n y N r N ⎪⎭
⎫ ⎝⎛-=⊗=∑∞-∞=,其中)(*)()('n x n h n y =;也就是说,两个序列的N 点循环卷积是他们的线性卷积以N 为周期的周期延阔。

设序列h(n)的长度为1N ,序列x(n)的长度为2N ,此时,线性卷积结果的序列的点数为1-'21N N N +=;因此如果循环卷积的点数N 小于121-+N N ,那么上述周期性延阔的结果就会产生混叠,从而两种卷积会有不同的结果。

而如果N 满足'N N =的条件,就会有)0)((')(N n n y n y <≤=。

这就会意味着在时域不会产生混叠。

因此,可以得出结论:若通过在序列的末尾填充适当的零值,使得x(n)和h(n)成为121-+N N 点序 列,并作出这两个序列的121-+N N 循环卷积与线性卷积的结果在N n <≤0范围内相同。

将循环卷积的结果与线性卷积做对比,程序如下:
clear;close all ;
N=50;
x1=[6 15 -6 3 5 7 0 1];
x21=[7 1 2 9 4 3 20 6];
x2=[x21,zeros(1,7),x21,zeros(1,7),x21,zeros(1,7),x21];
xn1=length(x1);
xxn1=0:xn1-1;
xn2=length(x2);
xxn2=0:xn2-1;
subplot(4,1,1);
stem(xxn1,x1);
subplot(4,1,2);
stem(xxn2,x2);
x11=fft(x1,N);
x12=fft(x2,N);
y11=x11.*x12;
y1=ifft(y11,N);
subplot(4,1,3);
n=0:length(y1)-1;
stem(n,y1,'.');
title('循环卷积的结果');
xlabel('n');ylabel('y1(n)');
y2=conv(x1,x21);
subplot(4,1,4)
stem(y2,'.');
title('线性卷积的结果');
xlabel('n');ylabel('y2(n)');
关于循环卷积,需要知道循环卷积仅仅是针对离散傅里叶变换;然而,这里的循环是针对周期序列而言的;而线性卷积是针对有限长序列,要用DFT求线性卷积,必然要求周期序列的一个周期内求卷积能和有限长序列求线性卷积等值。

因此需要求N点长度的循环卷积必然要和线性卷积的长度一致。

至少N要不少于线性卷积的长度。

相关主题