如何实现matlab中的cconv?

时间:2018-06-01 17:57:19

标签: matlab fft convolution

我的理解是,这三个应该是相同的,但是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)

1 个答案:

答案 0 :(得分:1)

From the documentation

  

模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结果中的任何一个都不同。