为什么单个正弦信号的傅立叶变换有多个峰值?

Why there are multiple peaks from the Fourier transform of a single sine signal?

我一直在阅读有关傅立叶变换及其重要性的资料。为了亲身体验,我尝试了一些东西。

这是我得到的。

一个信号及其傅立叶变换:

两个信号及其傅里叶变换:

三个信号及其傅里叶变换:

注意:橙色线代表傅立叶变换,蓝色线代表正在处理的信号。

我知道傅里叶变换有助于分解信号以给出构成主要信号的成分。换句话说,我们得到了组成主信号的不同频率的数量。但我不明白上面的输出。如果我们考虑存在单个信号的第一个信号,则计算其傅立叶变换。为什么有4个峰?每个峰代表什么?我假设输出是单个信号的单个峰值,2 个信号的 2 个峰值和 3 个信号的 3 个峰值。

这是我用来生成上述图像的代码。

    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")

scipy.fftpack.fft returns 正负频率,您只需要代码中存储在 fourier_transform[1:len(signal)/2] 中的正频率。 See scipy.fftpack.fft documentation here

由于正弦和余弦函数的周期性,离散傅里叶变换的数学必须考虑负频率,更多信息 here.