我的理解是,这三个应该是相同的,但是matlab给出了完全不同的结果。第一个和第三个与我手工计算的同步,第二个是不同的。
x_1 = [1, 2, 0, 5];
x_2 = [1/2, -1/4, 1, 0, 3/4];
y_2_1 = ifft(fft(x_1, 2) .* fft(x_2, 2))
y_2_2 = cconv(x_2, x_1, 2)
y_2_3 = cconv(x_2(1:2), x_1(1:2), 2)
答案 0 :(得分:1)
模2循环卷积相当于将线性卷积分成两个元素阵列并对数组求和。
所以做不一样
res = cconv(x_2, x_1, 2);
至于
res2 = cconv(x_2, x_1);
res2 = res(1:2);
前者相当于
res = cconv(x_2, x_1);
res = res(1:2) + res(3:4) + res(5:6) + ...;
(如果res
的大小为奇数,则用零填充。)
另一方面,
res3 = ifft(fft(x_1, 2) .* fft(x_2, 2));
相当于
res3 = fft(x_1(1:2)) .* fft(x_2(1:2));
res3 = ifft(res3);
并且与两个cconv
结果中的任何一个都不同。