循环卷积与圆周卷积
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
循环卷积与圆周性卷积的实现
一、实验目的
(1)进一步理解并掌握循环卷积与线性卷积和圆周卷积和的概念。
(2)理解掌握三者的关系。
二、实验原理
两个序列的N 点循环卷积定义为
[]∑-=-=⊗1
0))(()()()(N k N N m n x m h n x n h )0(N n ≤≤ (9-16)
从定义中可以看到,循环卷积和线性卷积的不同之处在于:两个N 点循环卷积的结果仍为N 点序列,而它们的线性卷积的结果的长度则为2N-1;循环卷积对序列的移位采取循环移位,而线性卷积对序列采取线性移位。正是这些不同,导致了线性卷积和循环卷积有不同的结果和性质。
循环卷积和线性卷积虽然是不同的概念,但它们之间由一个有意义的公式联系在一起
[])())('()()()(1
0n G rN n y n x n h n y N N k N ∑-=-=⊗= (9-17)
其中)(*)()('n x n h n y =
也就是说,两个序列N 点循环卷积是它们的线性卷积以N 为周期的周期延拓,设序列h (n )的长度为1N ,序列x (n )的长度为2N ,此时,线性卷积结果的序列的点数为1'21-+=N N N ,因此如果循环卷积的点数N 小于121-+N N ,那么上述周期延拓的结果就会产生混叠,从而两种卷积会有不同的结果。而如果N 满足'N N =的条件,就会有
)(')(n y n y = )0(N n ≤≤ (9-18)
这就意味着在时域不会产生混叠。因此,我们得出结论:若通过在序列的末尾充填适当的零值,使得x (n )和h (n )成为121N N +-点序列,并作出这两个序列的11N N +-循环卷积,那么循环卷积与线性卷积的结果在0n N ≤≤范围内相同。
根据DFT 循环卷积性质中的卷积定理
{}[()()][()][()]N DFT h n x n DFT x n DFT h n ⊗=• (9-19)
便可通过两种方法求两个序列的循环卷积:一是直接根据定义计算,二是根据性质线分别求两个序列的N 点DFT ,并相乘,然后取IDFT 以得到循环卷积。第二种方法看起来要经过若干过程,但由于序列的DFT 和IDFT 都有快速算法,因此它的效率比第一种方法高得多。
同样,根据线性卷积和循环卷积的关系,可以通过计算循环卷积以求得线性卷积,提高计算序列线性卷积的效率。
三、例题及理论计算
已知有限长序列x (n )与h (n )如图试画出:
(1) x (n )与h (n )的线卷积
(2) x (n )与h (n )的7点圆卷积
(3) x (n )与h (n )的5点圆卷积
五点卷积图
四、matlab仿真
用matlab仿真,
方法一:
function y=circonv1(x1,x2,N)
%realize circular convolution use dft method if length(x1)>N
error('N must not be less than length of x1') end
if length(x2)>N
error('N must not be less than length of x2') end
X1k=[x1,zeros(1,N-length(x1))];
X2k=[x2,zeros(1,N-length(x2))];
n=[0:1:N-1]
x2=x2(mod(-n,N)+1);
H=zeros(N,N);
for n=1:1:N;
H(n,:)=cirshifted(x2,n-1,N);
end
y1=x1*H';
function y=cirshifted(x,m,N)
if length(x)>N
error('N必须大于等于x的长度')
end
x=[x,zeros(1,N-length(x))];
n=[0:1:N-1];
n=mod(n-m,N);
y=x(n+1);
方法二:
function y=circonv2(x1,x2,N)
%realize circular convolution use dft method
if length(x1)>N
error('N must not be less than length of x1') end
if length(x2)>N
error('N must not be less than length of x2') end
X1k=fft(x1,N);
X2k=fft(x2,N);
Yk=X1k.*X2k;
Y=ifft(Yk);
If(all(imag(x1)==0))&(all(imag(x2)==0))
Y=real(y);
end
运行程序:
n=[0:1:4];m=[0:1:4];
N1=length(n);N2=length(m);
xn=ones(1,N1);
hn=m;
y1n=conv(xn,hn);
y2n=circonv1(xn,hn,N1+N2-1);
y3n=circonv2(xn,hn,N1);
ny1=[0:1:length(y1n)-1];
ny2=[0:1:length(y3n)-1];