|
|
在Python中,可以使用numpy庫的fft模塊來進行傅立葉變換,并使用matplotlib庫來繪制信號的頻譜圖。以下是一個簡單的示例,演示如何對一個簡單的正弦波信號進行頻譜分析:
- import numpy as np
- import matplotlib.pyplot as plt
-
- # 定義信號參數(shù)
- A = 1.0 # 振幅
- fs = 1000.0 # 采樣頻率
- T = 1.0/fs # 采樣間隔
- L = 1000 # 信號長度
- t = np.arange(L) * T # 時間向量
- f = 50.0 # 信號頻率
-
- # 生成正弦波信號
- signal = A * np.sin(2 * np.pi * f * t)
-
- # 計算FFT
- fft_signal = np.fft.fft(signal)
-
- # 計算雙邊頻譜(默認情況下,fft給出的是單邊頻譜)
- fft_magnitude = np.abs(fft_signal)
-
- # 為了得到正確的頻率軸,我們需要在fft_magnitude的前半部分和后半部分分別乘以兩邊對應(yīng)的頻率
- N = len(fft_magnitude)
- freqs = np.fft.fftfreq(N, T)
-
- # 繪制頻譜圖
- plt.figure()
- plt.stem(freqs[:N // 2], fft_magnitude[:N // 2] * 2 / N, 'b', markerfmt=" ", basefmt="-b")
- plt.stem(freqs[-N // 2:], fft_magnitude[-N // 2:] * 2 / N, 'r', markerfmt=" ", basefmt="-r")
- plt.title('Frequency spectrum of a sine wave')
- plt.xlabel('Frequency (Hz)')
- plt.ylabel('Magnitude')
- plt.grid()
- plt.show()
復(fù)制代碼![]()
這段代碼首先定義了一個簡單的正弦波信號,然后使用numpy.fft.fft計算信號的快速傅立葉變換(FFT)。接著,計算了FFT的幅度,并使用matplotlib.pyplot.stem繪制了頻譜圖。注意,由于FFT是對信號進行周期性擴展的,因此我們只需要考慮頻率軸的正半軸即可。雙邊頻譜的幅度是單邊頻譜幅度的兩倍,除以FFT點數(shù)的一半可以歸一化到單邊頻率范圍內(nèi)。最后,使用matplotlib.pyplot.show()顯示結(jié)果。
|
|