假设我有一个看起来像
import numpy as np
import matplotlib.pyplot as plt
s = lambda t: np.sin(2 * np.pi * t / 13)
s_sampled = np.array([s(i) for i in range(50)])
plt.plot(s_sampled)
现在我想对信号进行离散傅里叶变换并重建整个原始信号。由于信号只有 13 个周期。对前 13 个点进行傅里叶变换应该足够了。
fourier_coefficients = np.fft.fft(s_sampled[:13])
但是,使用 numpy 的逆变换我只能得到 13 分。
plt.plot(np.fft.ifft(fourier_coefficients))
我怎样才能得到其余的(现在只是重复的)信号?我试图自己构建一个函数,但它并不完全奏效......
def inverse_fourier(x, t):
"""Evaluate Fourier coefficients at point t.
Args:
x: The Fourier coefficients.
t: The time point at which to evaluate the function.
"""
x = x.flatten()
n = len(x)
k = np.arange(n)
y = x @ np.exp(2j * np.pi * t * k / n)
return y / n
plt.plot(np.array([inverse_fourier(fourier_coefficients, t) for t in range(50)]))
提供有关该问题的更多详细信息。我想取不同正弦曲线之间随时间变化的信号之间的近似差异,但本质上是相移的。所以我的想法是取最后个时间点,估计傅里叶系数,取傅里叶空间中的差异,并评估由时间点的系数表示的结果函数。因此,我想知道如何评估处的系数。我知道我在其间变化的信号的周期,因此可以返回足够的点来捕获所有相关频率。