【问题标题】:n-fold FFT convolution and circular overlapn-fold FFT卷积和循环重叠
【发布时间】:2012-03-06 01:40:28
【问题描述】:

问题描述

我使用了卷积定理来有效地计算卷积。假设有两个实际信号s1s2,每个信号长度为N。然后我可以从

获得卷积
import numpy as np
import numpy.fft as fft

size = len(s1)
fft_size = int(2 ** np.ceil(np.log2(2 * size - 1))) #The size for the FFT algorithm

S1 = fft.rfft(s1, fft_size) #Take FTs
S2 = fft.rfft(s2, fft_size)

convolution = fft.irfft(S1 * S2) #Take IFT

但是,如果我有 k 信号,则必须将 fft_size 修改为读取

fft_size = int(2 ** np.ceil(np.log2(k * size - 1)))

为了避免圆形重叠。

不幸的是,我不知道k 先验。一种选择是选择最大值k_max,但如果不是绝对必要,我宁愿不必使用大量内存,并且我宁愿在每次 k 变化时都不要再次评估 FT。

问题

是否可以做以下之一

  • 根据需要对k=1 和“傅里叶空间中的零填充”的信号进行 FFT?
  • 防止在 FFT 中循环环绕?

【问题讨论】:

    标签: python fft convolution


    【解决方案1】:
    1. 频域中的零填充是可能的,但比在时域中执行它需要更多的计算工作(触发器)。 IFFT、zeropad 和 re-FFT 为每个额外的快速卷积创建“空间”可能会更快。

    2. 完整卷积的较长结果必须在某个地方,所以不,使用 FFT 时无法防止循环卷积。即使补零也不会阻止循环重叠的计算,它只是确保结果中的重叠相当于加零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      • 2018-11-24
      • 2016-12-31
      • 1970-01-01
      • 2013-04-11
      • 2011-11-01
      • 2016-08-18
      相关资源
      最近更新 更多