【发布时间】:2014-10-26 18:53:23
【问题描述】:
我目前正在学习离散傅里叶变换,我正在使用 numpy 来更好地理解它。
我试图绘制一个“sin x sin x sin”信号,并获得了一个具有 4 个非零点的干净 FFT。我天真地告诉自己:“好吧,如果我用这些幅度和频率绘制一个“sin + sin + sin + sin”信号,我应该得到相同的“sin x sin x sin”信号,对吧?
嗯……不完全是
(第一个是“x”信号,第二个是“+”信号)
两者共享相同的幅度/频率,但不是相同的信号,即使我可以看到它们有一些相似之处。
好的,因为我只绘制了 FFT 的绝对值,我想我丢失了一些信息。
然后我绘制了两个信号的实部、虚部和绝对值:
现在,我很困惑。我该怎么办?我从数学的角度阅读了 DFT。我知道复杂的值来自单位圆。我什至必须了解希尔伯特空间才能理解它是如何工作的(这很痛苦!......而且我只触及了表面)。我只想了解这些真实/虚构的情节是否在数学世界之外具有任何具体含义:
- abs(fft):频率 + 幅度
- 真实(fft):?
- 虚构的(fft):?
代码:
import numpy as np
import matplotlib.pyplot as plt
N = 512 # Sample count
fs = 128 # Sampling rate
st = 1.0 / fs # Sample time
t = np.arange(N) * st # Time vector
signal1 = \
1 *np.cos(2*np.pi * t) *\
2 *np.cos(2*np.pi * 4*t) *\
0.5 *np.cos(2*np.pi * 0.5*t)
signal2 = \
0.25*np.sin(2*np.pi * 2.5*t) +\
0.25*np.sin(2*np.pi * 3.5*t) +\
0.25*np.sin(2*np.pi * 4.5*t) +\
0.25*np.sin(2*np.pi * 5.5*t)
_, axes = plt.subplots(4, 2)
# Plot signal
axes[0][0].set_title("Signal 1 (multiply)")
axes[0][0].grid()
axes[0][0].plot(t, signal1, 'b-')
axes[0][1].set_title("Signal 2 (add)")
axes[0][1].grid()
axes[0][1].plot(t, signal2, 'r-')
# FFT + bins + normalization
bins = np.fft.fftfreq(N, st)
fft = [i / (N/2) for i in np.fft.fft(signal1)]
fft2 = [i / (N/2) for i in np.fft.fft(signal2)]
# Plot real
axes[1][0].set_title("FFT 1 (real)")
axes[1][0].grid()
axes[1][0].plot(bins[:N/2], np.real(fft[:N/2]), 'b-')
axes[1][1].set_title("FFT 2 (real)")
axes[1][1].grid()
axes[1][1].plot(bins[:N/2], np.real(fft2[:N/2]), 'r-')
# Plot imaginary
axes[2][0].set_title("FFT 1 (imaginary)")
axes[2][0].grid()
axes[2][0].plot(bins[:N/2], np.imag(fft[:N/2]), 'b-')
axes[2][1].set_title("FFT 2 (imaginary)")
axes[2][1].grid()
axes[2][1].plot(bins[:N/2], np.imag(fft2[:N/2]), 'r-')
# Plot abs
axes[3][0].set_title("FFT 1 (abs)")
axes[3][0].grid()
axes[3][0].plot(bins[:N/2], np.abs(fft[:N/2]), 'b-')
axes[3][1].set_title("FFT 2 (abs)")
axes[3][1].grid()
axes[3][1].plot(bins[:N/2], np.abs(fft2[:N/2]), 'r-')
plt.show()
【问题讨论】:
标签: numpy signal-processing fft complex-numbers dft