转载自:

      http://blog.sina.com.cn/s/blog_892508d5010120dn.html

 

  

前两天看了下线性卷积和圆周卷积,并对他们之间的关系作出验证。。

    线性卷积与圆周卷积

    离散线性卷积的定义:设长度为N1的序列x(n)和长度为N2的序列h(n)进行线性卷积,得到长度为N1+N2-1的y(n):

                                        线性卷积与圆周卷积

 

    离散圆周卷积的定义:圆周卷积是定义在有限长序列之间的。设有限长序列x(n)和h(n)的长度分别为N1和N2,取N>=max(N1,N2),定义它们的N点圆周卷积为:

                                            线性卷积与圆周卷积

 

    圆周卷积定理:设有限长序列x(n)和h(n)的长度分别为N1和N2,取N>=max(N1,N2),分别对x(n)和h(n)取N点的DFT,将结果取N点的IDFT得到y(n),且y(n)=线性卷积与圆周卷积.

    圆周卷积定理建立起圆周卷积与DFT之间的关系,因此求圆周卷积只须用DFT进行计算即可,而DFT可用FFT实现。

    圆周卷积与线性卷积之间的关系:当有限长序列x(n)和h(n)的长度分别为N1和N2,取N>=max(N1,N2),当N>=N1+N2-1,则线性卷积与圆周卷积相同。

    对于线性卷积,一般直接比较麻烦,由上可知当取点数足够多时(点数不够补零),可求解圆周卷积即可,而圆周卷积又可通过FFT实现,从而实现线性卷积通过FFT和IFFT实现。

  线性卷积与圆周卷积

MATLAB实现

x=[1 0 1 2 1],h=[1 1 0 1 2],分别计算它们的线性卷积,5点圆周卷积,9点圆周卷积,12点圆周卷积,得到结果如图:

线性卷积与圆周卷积

图中应证了结果,当取N>=N1+N2-1时,线性卷积等于圆周卷积。

clear;
clc;
x=[1 0 1 2 1];n1=0:1:4;
h=[1 1 0 1 2];n2=0:1:4;
y=conv(x,h);n=0:1:8;
figure(1);
%subplot(311);stem(n1,x,\'.\');axis([0 10 0 7]);title(\'x(n)序列\');grid;
%subplot(312);stem(n2,h,\'.\');axis([0 10 0 7]);title(\'h(n)序列\');grid;
subplot(221);stem(n,y,\'.\');axis([0 10 0 7]);title(\'线性卷积后序列\');grid;

N=5;
x1=[x zeros(1,N-length(x))];
h1=[h zeros(1,N-length(h))];
y1=conv(x1,h1);

z1=[zeros(1,N) y1(1:(N-1))];
z2=[y1((N+1):(2*N-1)) zeros(1,N)];
z=z1(1:(2*N-1))+z2(1:(2*N-1))+y1(1:(2*N-1));
y2=z(1:N);
%figure(2);
subplot(222);stem((0:N-1),y2,\'.\');axis([0 12 0 8]);title(\'5点圆周卷积\');grid;

N=9;
x1=[x zeros(1,N-length(x))];
h1=[h zeros(1,N-length(h))];
y1=conv(x1,h1);

z1=[zeros(1,N) y1(1:(N-1))];
z2=[y1((N+1):(2*N-1)) zeros(1,N)];
z=z1(1:(2*N-1))+z2(1:(2*N-1))+y1(1:(2*N-1));
y2=z(1:N);
subplot(223);stem((0:N-1),y2,\'.\');axis([0 12 0 8]);title(\'9点圆周卷积\');grid;

N=12;
x1=[x zeros(1,N-length(x))];
h1=[h zeros(1,N-length(h))];
y1=conv(x1,h1);

z1=[zeros(1,N) y1(1:(N-1))];
z2=[y1((N+1):(2*N-1)) zeros(1,N)];
z=z1(1:(2*N-1))+z2(1:(2*N-1))+y1(1:(2*N-1));
y2=z(1:N);
subplot(224);stem((0:N-1),y2,\'.\');axis([0 12 0 8]);title(\'12点圆周卷积\');grid;