gpt4 book ai didi

r - R中的卷积

转载 作者:行者123 更新时间:2023-12-04 13:34:52 33 4
gpt4 key购买 nike

我试图直接在R中进行卷积,然后使用FFT取反。但是从简单的观察看来,这是不正确的。看这个例子:

# DIRECTLY
> x2$xt
[1] 24.610 24.605 24.610 24.605 24.610
> h2$xt
[1] 0.003891051 0.003875910 0.003860829 0.003845806 0.003830842
> convolve(h2$xt,x2$xt)
[1] 0.4750436 0.4750438 0.4750435 0.4750437 0.4750435

# USING INVERSE FOURIER TRANSFORM
> f=fft(fft(h2$xt)*fft(x2$xt), inv=TRUE)
> Re(f)/length(f)
[1] 0.4750438 0.4750435 0.4750437 0.4750435 0.4750436
>

假设索引为0。在0处,卷积应为x2 $ xt(24.610)的最后一个值乘以h2 $ xt(0.003891051)的第一个值,后者应在索引0 = 24.610 * 0.003891051 = 0.09575877处进行卷积从0.4750436离开

难道我做错了什么?为什么这些值与预期如此不同?

最佳答案

convolvefft都是圆形的。卷积的第一个元素必须是这两个系列的点积。从这个意义上说,您获得的结果是正确的。

要执行线性卷积,请使用:

convolve(h2$xt,x2$xt,type="open")

在这种情况下,还应用了循环卷积,但是将所需数量的零填充到输入中以实现线性卷积。

我相信没有直接的方法可以在R中使用 fft实现线性卷积。但这并不重要,因为 convolve本身使用您发布的FFT方法。

循环卷积

如果存在周期 N ,则离散信号 x 是周期性的,使得所有 n x [n] = x [n + N] 。这样的信号可以用 N 样本表示,从 x [0] x [N-1]
... x[-2] x[-1] x[0] x[1] x[2] ... x[N-2] x[N-1] x[N] x[N+1] ...
^ this part is sufficient ^

非周期性 x y 之间的卷积的常规定义为:
(x * y)[n] = sum{k in [-inf, inf]}(x[k]y[n-k])

但是,对于周期性信号,此公式不会产生有限的结果。为了克服这个问题,我们定义了周期 x y 之间的循环卷积。
(x * y)[n] = sum{k in [0, N-1]}(x[i]y[n-k])

当这两个信号仅用 N个值表示时,我们可以使用 y [n-k + N] 代替 y [n-k] 来表示 n-k 的负值。

圆形卷积的妙处在于它可以计算盒信号之间的线性卷积,盒信号是具有有限数量的非零元素的离散信号。

长度为 N 的盒信号可以循环为 2N 周期性, N 用于原始样本,并在末尾填充 N 零。结果将是带有 2N 样本的圆形卷积,带有 2N-1 的线性卷积和一个额外的零。

循环卷积通常比直接线性卷积实现要快,因为它可以利用快速傅立叶变换,这是一种快速算法,用于计算仅针对周期性离散信号定义的离散傅立叶变换。

请参见:
  • http://www.centerspace.net/blog/nmath/convolution-correlation-and-the-fft/

  • 另请参阅:
  • http://en.wikipedia.org/wiki/Circular_convolution
  • http://en.wikipedia.org/wiki/Discrete_Fourier_transform
  • 关于r - R中的卷积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5221870/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com