Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python n次FFT卷积和循环重叠 问题描述_Python_Fft_Convolution - Fatal编程技术网

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

问题: 是否可以执行以下操作之一

  • 根据需要对
    k=1
    的信号进行FFT和“傅里叶空间中的零点填充”
  • 防止FFT中的循环缠绕
  • 在频域中进行零填充是可能的,但与在时域中进行相比,需要更多的计算工作量(flops)。IFFT、zeropad和重新FFT可能会更快,以便为每个额外的快速卷积创造“空间”

  • 完整卷积的较长结果必须在某个地方,因此不,在使用FFT时不可能防止循环卷积。即使零填充也不会阻止循环重叠的计算,它只是确保结果中的重叠等同于零的相加

  • 在频域中进行零填充是可能的,但与在时域中进行相比,需要更多的计算工作量(flops)。IFFT、zeropad和重新FFT可能会更快,以便为每个额外的快速卷积创造“空间”

  • 完整卷积的较长结果必须在某个地方,因此不,在使用FFT时不可能防止循环卷积。即使零填充也不会阻止循环重叠的计算,它只是确保结果中的重叠等同于零的相加