##1.圆周卷积(circular convolution)
圆周卷积,也叫循环卷积,两个长度为N的有限场序列 x ( n ) x\left ( n \right ) x(n)和 h ( n ) h\left ( n \right ) h(n)的循环卷积定义为
y ( n ) = [ ∑ m = 0 N − 1 x ( m ) h ( ( n − m ) ) N ] R N ( n ) = x n ⨂ y n 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),则有
D F T [ 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)长度为 N N N
记 x 1 ( n ) = R 4 ( n ) , x 2 ( n ) = R 4 ( n − 2 ) x_{1}(n)=R_{4}(n),x_{2}(n)=R_{4}(n-2) x1(n)=R4(n),x2(n)=R4(n−2),求 x 1 ( n ) x_{1}(n) x1(n)与 x 2 ( n ) x_{2}(n) x2(n)的N=6点循环卷积 x ( n ) x(n) x(n)。
x 1 ( n ) x_{1}(n) x1(n)与 x 2 ( n ) x_{2}(n) x2(n) 波形如下
先将 x 2 ( n ) x_{2}(n) x2(n)做周期延拓(以N为周期),然后再反褶,得到 x 2 ( ( − m ) ) 6 R 6 ( n ) x_{2}((-m))_{6}R_{6}(n) x2((−m))6R6(n),如下图
然后再进行循环移位,注意,现在是在对一个周期N= 6 的函数移位,因为最后只取主值区间,因此只需要移位N= 6次,即只需要得到 x 2 ( ( − m ) ) 6 R 6 ( n ) x_{2}((-m))_{6}R_{6}(n) x2((−m))6R6(n)、 x 2 ( ( 1 − m ) ) 6 R 6 ( n ) x_{2}((1-m))_{6}R_{6}(n) x2((1−m))6R6(n),……, x 2 ( ( 5 − m ) ) 6 R 6 ( n ) x_{2}((5-m))_{6}R_{6}(n) x2((5−m))6R6(n),移位如下图
最后,将上图中的 x 1 ( 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])