MOD-N 循环卷积

信息处理 离散信号 卷积
2021-12-31 01:21:21

如何找到两个序列的MOD-2 循环卷积h=[1,3,2,1]x=[1,1,2,1,3,2,1,2].

我知道答案是7 0来自matlab,但我不知道如何以图形或数学方式找到它

2个回答

h(z)=1+3z2z2+z3并计算h(z)mod(z21),也就是除h(z)经过z21并只取其余部分。虽然这看起来很复杂,但如果你想一想你会发现你所做的只是分割[13 21]进入[13][21]并添加较短的向量以获得[34]. 重复 x=[1 1 213212]添加四个长度向量2要得到 [34]. 尽管我对建议特定命令的语法不够熟悉,但这在 MATLAB 中可能并不难做到。接下来,计算循环卷积[34][34] 最好不调用 MATLAB 函数。 结果是

[{(3)×3+4×4}{(3)×4+4×3}]=[70]

从数学上讲,你正在做的是计算h(z)x(z)mod(z21) 这可以通过首先找到来完成h(z)x(z)使用 FFT 以及您遵循了什么mod(z21)计算(这有效地将长向量切成小块并将它们相加),或者更简单地通过首先计算h^(z)=h(z)mod(z21)x^(z)=x(z)mod(z21)(分割成更短的向量并将它们相加)然后计算循环卷积 z^(z)x^(z)mod(z21)这很容易做到。

Chop-add-convolve 比 convolve-chop-add 更容易

一种方法是“重新包装”一个全尺寸的圆形卷积:

sum(reshape(ifft(fft(x, 8) .* conj(fft(h, 8))), 2, 8 / 2), 2)

另一种实现是直接抽取 FFT:

N = 2;
Xf = fft(x); Xf = Xf(1:length(Xf) / N:end);
Hf = fft(h); Hf = Hf(1:length(Hf) / N:end);
ifft(Xf .* conj(Hf))

如果您要重现的是 matlab 中 cconv 的行为,最好只查看 matlab 文件中的源代码 :)