If I have a waveform x
such as
x = [math.sin(W*t + Ph) for t in range(16)]
with arbitrary W
and Ph
, and I calculate its (Real) FFT f
with
f = numpy.fft.rfft(x)
I can get the original x
with
numpy.fft.irfft(f)
Now, what if I need to extend the range of the recovered waveform a number of samples to the left and to the right? I.e. a waveform y
such that len(y) == 48
, y[16:32] == x
and y[0:16], y[32:48]
are the periodic extensions of the original waveform.
In other words, if the FFT assumes its input is an infinite function f(t)
sampled over t = 0, 1, ... N-1
, how can I recover the values of f(t)
for t<0
and t>=N
?
Note: I used a perfect sine wave as an example, but in practice x
could be anything: arbitrary signals such as x = range(16)
or x = np.random.rand(16)
, or a segment of any length taken from a random .wav
file.