循环反卷积

计算科学 信号处理
2021-12-25 08:43:06

假设我想生成一个向量y,当它与向量循环卷积时h给我一个向量x我可以通过FFT的划分找到这样一个向量,如下所示:

y = ifft(fft(x)./fft(h))           // (1)                  

例如:

x = [2,4,8];
h = [1,0.5,0];

那么y结果是:

y =  [-0.8889, 4.4444, 5.7778]

我可以通过循环卷积或 FFT 方法进行y计算,这两种方法都可以返回:xx

z = ifft(fft(y).*fft(h))           // (2)

要么

z = cconv(y,h,3)                   // (3)

z出来是[2,4,8]

我的问题是,类似于(3)如何将(2)实现为线性运算(循环卷积),是否有一种线性方法可以在不使用 FFT 的情况下实现(1)。我认为这种方法称为循环反卷积,但我不明白该怎么做。

我了解如何实现线性/循环卷积和线性反卷积 - 但不是循环卷积。

1个回答

由于卷积可以写成矩阵-向量积Ax=b循环矩阵或 Toeplitz 矩阵A作用于向量x,您可以通过 SVD 反转或伪反转A获得x=A1b. 也就是说,FFT 反卷积总是比这种方法快得多,除非核函数 (h在上面的示例中)在其频谱中具有零或接近零,以避免除以零。即使那样,也可能有一些我不知道的处理这种特殊情况的方法。