我一直在阅读傅立叶变换及其重要性。为了亲自体验一下,我尝试了一些方法。
这就是我得到的。
一个信号及其傅立叶变换:
两个信号及其傅立叶变换:
三个信号及其傅立叶变换:
注意:橙色线代表傅立叶变换,蓝色线代表正在处理的信号。
我了解傅立叶变换有助于分解信号,以提供构成主要信号的成分。换句话说,我们得到组成主信号的不同频率的数量。但是我不明白上面的输出。如果我们考虑第一个信号存在单个信号,并计算其傅里叶变换。为什么有4个峰?每个峰代表什么?我假设输出是单个信号的一个峰值,两个信号的两个峰值,三个信号的三个峰值。
这是我用来生成上述图像的代码。
import numpy as np
import scipy.fftpack as fft
import matplotlib.pyplot as plt
sample_points = np.arange(0,100,1)
signal_1 = np.sin(sample_points) # 1x frequency
signal_2 = np.sin(20*sample_points) # 20x frequency
signal_3 = np.sin(100*sample_points) # 100x frequency
combined_signal = signal_1 + signal_2
fourier_transform = fft.fft(combined_signal)
plt.plot(sample_points, combined_signal)
plt.plot(sample_points, fourier_transform)
plt.xlabel("Sample points")
plt.gca().legend(('Combined Signal', 'Fourier Transform'))
#plt.show()
plt.savefig("combined_signal_ft.png")
plt.clf()
plt.plot(sample_points, signal_1)
plt.plot(sample_points, fft.fft(signal_1))
#plt.show()
plt.savefig("mono_ft.png")
plt.clf()
plt.plot(sample_points, signal_1 + signal_2 + signal_3)
plt.plot(sample_points, fft.fft(signal_1 + signal_2 + signal_3))
plt.savefig("tri_ft.png")
答案 0 :(得分:3)
scipy.fftpack.fft
返回正负频率,您只需要将正负频率存储在fourier_transform[1:len(signal)/2]
中即可。 See scipy.fftpack.fft documentation here
由于正弦和余弦函数的周期性,离散傅里叶变换的数学必须考虑负频率,更多信息here.