使用连续正弦波绘制 FFT 离散信号?!

Drawing FFT discrete signal using continuous sine-waves ?!

我用 np.fft.fft() 将离散信号分解为频率。 然后我选择前 N 个频率,现在我想使用以下公式绘制这些频率总和的信号:

 amp * np.sin( 2 * np.pi * freq * time + phase )

我根据它们在数组中的位置 (fftfreqs)、np.abs(complex_num) 的振幅和 np.angle(complex_num、deg 的相位提取频率=True),根据我从 fft() 调用中获得的数据。

好像效果不是很好

我做错了什么? 我是否正确理解 complex-num 包含 sinusoid 的放大器和相位?我必须使用 sin&cos 来绘图吗? 关于 fft() 结果的准确解释,文档非常稀少。

PS> 我知道我可以使用 np.fft.ifft() 来得出近似值,但这种方法仅限于原始信号的时间范围。 我想 draw/fit 原始信号在原始时间范围内具有前 N 个频率,但也想在此时间范围后使用这些频率绘制信号的 "continuation",即扩展信号。

我发现了我的错误..首先计算波的正确方法是(topN 频率的总和):

cos_amp * np.cos( 2 * np.pi * freq * time) + sin_amp * np.sin( 2 * np.pi * freq * time)

不仅仅是 sin()..其次,从复数阵列中使用绝对振幅和角相位提取是不正确的。 实部包含 cos-amp,负虚部包含 sin 振幅,即一旦我从 fft() 中得到复数数组,我就会这样做:

fft_res = np.fft.fft(signal)
.... topN_freqs_idx = find top freqs from PSD
all_freqs = np.fft.fftfreq(N)
freqs = all_freqs[topN_freq_idx]
norm = fft_res[topN_freq_idx] / (N/2)
cos_amp = np.real(norm)
sin_amp = -np.imag(norm)

我是从这里了解到的: http://www.dspguide.com/ch8/5.htm