循环卷积与圆周卷积.docx
- 文档编号:291673
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:10
- 大小:104.98KB
循环卷积与圆周卷积.docx
《循环卷积与圆周卷积.docx》由会员分享,可在线阅读,更多相关《循环卷积与圆周卷积.docx(10页珍藏版)》请在冰点文库上搜索。
循环卷积与圆周卷积
循环卷积与圆周性卷积的实现
一、实验目的
(1)进一步理解并掌握循环卷积与线性卷积和圆周卷积和的概念。
(2)理解掌握三者的关系。
二、实验原理
两个序列的N点循环卷积定义为
(9-16)
从定义中可以看到,循环卷积和线性卷积的不同之处在于:
两个N点循环卷积的结果仍为N点序列,而它们的线性卷积的结果的长度则为2N-1;循环卷积对序列的移位采取循环移位,而线性卷积对序列采取线性移位。
正是这些不同,导致了线性卷积和循环卷积有不同的结果和性质。
循环卷积和线性卷积虽然是不同的概念,但它们之间由一个有意义的公式联系在一起
(9-17)
其中
也就是说,两个序列N点循环卷积是它们的线性卷积以N为周期的周期延拓,设序列h(n)的长度为
,序列x(n)的长度为
,此时,线性卷积结果的序列的点数为
,因此如果循环卷积的点数N小于
,那么上述周期延拓的结果就会产生混叠,从而两种卷积会有不同的结果。
而如果N满足
的条件,就会有
(9-18)
这就意味着在时域不会产生混叠。
因此,我们得出结论:
若通过在序列的末尾充填适当的零值,使得x(n)和h(n)成为
点序列,并作出这两个序列的
循环卷积,那么循环卷积与线性卷积的结果在
范围内相同。
根据DFT循环卷积性质中的卷积定理
(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仿真,
方法一:
functiony=circonv1(x1,x2,N)
%realizecircularconvolutionusedftmethod
iflength(x1)>N
error('Nmustnotbelessthanlengthofx1')
end
iflength(x2)>N
error('Nmustnotbelessthanlengthofx2')
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);
forn=1:
1:
N;
H(n,:
)=cirshifted(x2,n-1,N);
end
y1=x1*H';
functiony=cirshifted(x,m,N)
iflength(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);
方法二:
functiony=circonv2(x1,x2,N)
%realizecircularconvolutionusedftmethod
iflength(x1)>N
error('Nmustnotbelessthanlengthofx1')
end
iflength(x2)>N
error('Nmustnotbelessthanlengthofx2')
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];
subplot(3,1,1);
stem(ny1,y1n);
subplot(3,1,2);
stem(ny1,y2n);
subplot(3,1,3);
stem(ny2,y3n);
axis[0,25,0,6];
仿真图像为:
圆周卷积题:
计算两序列X1(n)={1,2,3,4,5},X2(n)={1,2,3,4,5,4,3,2,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
function[Xk]=dft(xn,N)
%计算离散付利叶变换 %[Xk]=dft(xn,N)
%Xk=在0<=k<=N-1间的DFT系数数组
%xn=N 点有限长度序列
%N=DFT 的长度
n=[0:
1:
N-1]; %n de hangxiangliang
k=[0:
1:
N-1]; %k de hangxiangliang
WN=exp(-j*2*pi/N);
nk=n'*k;
WNnk=WN.^nk;
Xk=xn*WNnk;
end
function [xn]=idft(Xk,N)
%计算离散傅里叶变换
n=[0:
1:
N-1];
k=[0:
1:
N-1];
WN=exp(-j*2*pi/N);
nk=n'*k;
WNnk=WN.^(-nk);
xn=(Xk*WNnk)/N;
end
clearall
closeall
clc
x1=[1,2,3,4,5];
x2=[1,2,3,4,5,4,3,2,1];
N=length(x1)+length(x2);
n=0:
N-1;
n1=0:
N-2;
n2=0:
N-3;
y1=circonvt(x1,x2,N);
y2=circonvt(x1,x2,N-1);
y3=circonvt(x1,x2,N-2);
x1=[x1zeros(1,N-length(x1))];
x2=[x2zeros(1,N-length(x2))];
Xf1=dft(x1,N);
Xf2=dft(x2,N);
Xf=Xf1.*Xf2;
x=idft(Xf,N)
x=real(x);
subplot(231)
stem(n,x1);
title('x1(n)')
subplot(232);
stem(n,x2);
title('x2(n)')
subplot(233);
stem(n,x);
title('x(n)=IDFT(X(k))')
subplot(234)
stem(n,y1);
title('N点圆周卷积')
subplot(235)
stem(n1,y2);
title('N-1点圆周卷积')
subplot(236)
stem(n2,y3);
title('N-2点圆周卷积')
仿真图像为:
实验结论:
(1)通过本次实验仿真,加深了我对循环卷积和圆周卷积的相关概念的理解。
(2)通过和同学的交流,能加深对matlab的理解,更好的学习。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 循环 卷积 圆周