Python n次FFT卷积和循环重叠 问题描述
我使用卷积定理来有效地计算卷积。假设有两个长度分别为Python n次FFT卷积和循环重叠 问题描述,python,fft,convolution,Python,Fft,Convolution,我使用卷积定理来有效地计算卷积。假设有两个长度分别为N的实信号s1和s2。然后我可以从中得到卷积 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, f
N
的实信号s1
和s2
。然后我可以从中得到卷积
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\u大小
修改为读取
fft_size = int(2 ** np.ceil(np.log2(k * size - 1)))
以避免圆形重叠
不幸的是,我不知道k
的先验知识。一种选择是选择一个最大值k_max
,但如果不是绝对必要的话,我宁愿不使用大量内存,也不希望每次k改变时都再次计算FT
问题:
是否可以执行以下操作之一
- 根据需要对
的信号进行FFT和“傅里叶空间中的零点填充”k=1
- 防止FFT中的循环缠绕