代码之家  ›  专栏  ›  技术社区  ›  Suhail Gupta

为什么单个正弦信号的傅里叶变换会出现多个峰值?[副本]

  •  0
  • Suhail Gupta  · 技术社区  · 7 年前

    我一直在读关于傅里叶变换及其重要性的书。为了让自己感觉到它,我尝试了一些东西。

    • 绘制了一个信号及其傅里叶变换
    • 绘制了两个不同频率(但振幅相同)的信号及其傅里叶变换
    • 绘制了3个不同频率(但振幅相同)的信号及其傅里叶变换

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

    enter image description here

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

    enter image description here

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

    enter image description here

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

    据我所知,傅里叶变换有助于分解信号,从而给出构成主信号的成分。换句话说,我们得到了主信号所包含的不同频率的数目。但我不了解上述结果。如果我们考虑存在单个信号的第一信号,并计算其傅立叶变换。为什么有4个山峰?每个峰值代表什么?我假设输出为单个信号的一个峰值,2个信号的两个峰值和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")
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   DrBwts    7 年前

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

    here.