Описание проблемы
Я использовал теорему о свертке для эффективного вычисления свертки.Предположим, есть два реальных сигнала s1
и s2
длиной 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
, но я бы предпочел не использовать большие объемы памяти, если в этом нет крайней необходимости, и я бы предпочел не оценивать FT снова каждый раз при изменении k.
Вопрос
Можно ли выполнить одно из следующих действий:
- Принимать БПФ сигнала для
k=1
и "нулевую площадку в пространстве Фурье" при необходимости? - Предотвратить круговую упаковку в БПФ?