##1.圆周卷积(circular convolution)
圆周卷积,也叫循环卷积,两个长度为N的有限场序列x(n)x\left ( n \right )x(n)和h(n)h\left ( n \right )h(n)的循环卷积定义为
y(n)=[∑m=0N−1x(m)h((n−m))N]RN(n)=xn⨂yn
y\left ( n \right ) = [\sum_{m = 0}^{N-1}x\left ( m \right )h((n-m))_{N}]R_{N}(n) = x_{n}\bigotimes y _{n}
y(n)=[m=0∑N−1x(m)h((n−m))N]RN(n)=xn⨂yn
即循环卷积相当于周期延拓后的序列x~(n)\widetilde{x}(n)x(n)做周期卷积后再取主值区间,若x(n)x(n)x(n)和h(n)h(n)h(n)的离散傅里叶变换为X(K)X(K)X(K)和H(K)H(K)H(K),则有
DFT[y(n)]=X(K)H(K) DFT[y(n)]=X(K)H(K) DFT[y(n)]=X(K)H(K)
即时域中的循环卷积对应于其离散傅里叶变换的乘积,循环卷积的结果y(n)y(n)y(n)长度为NNN
图解循环卷积:
记x1(n)=R4(n),x2(n)=R4(n−2)x_{1}(n)=R_{4}(n),x_{2}(n)=R_{4}(n-2)x1(n)=R4(n),x2(n)=R4(n−2),求x1(n)x_{1}(n)x1(n)与x2(n)x_{2}(n)x2(n)的N=6点循环卷积x(n)x(n)x(n)。
x1(n)x_{1}(n)x1(n)与x2(n)x_{2}(n)x2(n) 波形如下
先将x2(n)x_{2}(n)x2(n)做周期延拓(以N为周期),然后再反褶,得到x2((−m))6R6(n)x_{2}((-m))_{6}R_{6}(n)x2((−m))6R6(n),如下图
然后再进行循环移位,注意,现在是在对一个周期N= 6 的函数移位,因为最后只取主值区间,因此只需要移位N= 6次,即只需要得到x2((−m))6R6(n)x_{2}((-m))_{6}R_{6}(n)x2((−m))6R6(n)、x2((1−m))6R6(n)x_{2}((1-m))_{6}R_{6}(n)x2((1−m))6R6(n),……,x2((5−m))6R6(n)x_{2}((5-m))_{6}R_{6}(n)x2((5−m))6R6(n),移位如下图
最后,将上图中的x1(m)x_{1}(m)x1(m)在对应点与各移位图相乘累加即得到最终结果
附上程序
close all
N = 6;
x1 = [1,1,1,1,0,0,0,0];
x2 = [0,0,1,1,1,1,0,0];
figure
subplot(2,1,1),stem(0:7,x1)
xlim([-2,8]),ylim([0,2])
xlabel('m'),title('x_1(m)')
subplot(2,1,2),stem(0:7,x2)
xlim([-2,8]),ylim([0,2])
xlabel('m'),title('x_2(m)')
x3 = [1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1];
figure,
subplot(2,1,1),
stem(-8:8,x3)
xlim([-8,8]),ylim([0,2])
xlabel('m'),title('x_2(m)以N = 6为周期延拓((x_2(m)))_6')
subplot(2,1,2),
stem(-8:8,fliplr(x3))
xlim([-8,8]),ylim([0,2])
xlabel('m'),title('x_2(m)以N = 6为周期延拓 反褶((x_2(-m)))_6')
x_m = fliplr(x3);
x4 = [1,0,0,1,1,1,x_m];
figure
for i = 0:N-1
subplot(7,1,i+1),
stem(0:6,x4(9-i:15-i))
xlim([-2,8]),ylim([0,1.5])
ylabelString = '(x_2(%d-m))_6';
str = sprintf(ylabelString,i);
ylabel(str,'rotation',90,'FontSize',8);
%xlabel('m'),title('x_2(m)以N = 6为周期延拓 反褶((x_2(-m)))_6')
end
subplot(7,1,7)
stem(0:6,x1(1:7))
xlim([-2,8]),ylim([0,1.5])
ylabelString = '(x_2(%d-m))_6';
str = sprintf(ylabelString,i);
ylabel('x_1(m)','rotation',90,'FontSize',8);
x = cconv(x1,x2,6)
figure,stem(0:5,x)
xlim([-2,8]),ylim([0,5])