制造論壇-制造行業(yè)自己的交流社區(qū)!
標(biāo)題:
用fft對(duì)信號(hào)作頻譜分析
[打印本頁(yè)]
作者:
曼巴貿(mào)易
時(shí)間:
2024-11-28 11:36
標(biāo)題:
用fft對(duì)信號(hào)作頻譜分析
在Python中,可以使用numpy庫(kù)的fft模塊來(lái)進(jìn)行傅立葉變換,并使用matplotlib庫(kù)來(lái)繪制信號(hào)的頻譜圖。以下是一個(gè)簡(jiǎn)單的示例,演示如何對(duì)一個(gè)簡(jiǎn)單的正弦波信號(hào)進(jìn)行頻譜分析:
import numpy as np
import matplotlib.pyplot as plt
# 定義信號(hào)參數(shù)
A = 1.0 # 振幅
fs = 1000.0 # 采樣頻率
T = 1.0/fs # 采樣間隔
L = 1000 # 信號(hào)長(zhǎng)度
t = np.arange(L) * T # 時(shí)間向量
f = 50.0 # 信號(hào)頻率
# 生成正弦波信號(hào)
signal = A * np.sin(2 * np.pi * f * t)
# 計(jì)算FFT
fft_signal = np.fft.fft(signal)
# 計(jì)算雙邊頻譜(默認(rèn)情況下,fft給出的是單邊頻譜)
fft_magnitude = np.abs(fft_signal)
# 為了得到正確的頻率軸,我們需要在fft_magnitude的前半部分和后半部分分別乘以兩邊對(duì)應(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ù)制代碼
這段代碼首先定義了一個(gè)簡(jiǎn)單的正弦波信號(hào),然后使用numpy.fft.fft計(jì)算信號(hào)的快速傅立葉變換(FFT)。接著,計(jì)算了FFT的幅度,并使用matplotlib.pyplot.stem繪制了頻譜圖。注意,由于FFT是對(duì)信號(hào)進(jìn)行周期性擴(kuò)展的,因此我們只需要考慮頻率軸的正半軸即可。雙邊頻譜的幅度是單邊頻譜幅度的兩倍,除以FFT點(diǎn)數(shù)的一半可以歸一化到單邊頻率范圍內(nèi)。最后,使用matplotlib.pyplot.show()顯示結(jié)果。
作者:
西湖的水
時(shí)間:
2024-12-4 17:07
樓上總結(jié)得真好,我完全贊同。
作者:
這一路鳥(niǎo)語(yǔ)花香
時(shí)間:
2024-12-5 17:56
這個(gè)解決方案聽(tīng)起來(lái)很有前景。
作者:
我輩當(dāng)自強(qiáng)
時(shí)間:
2025-10-26 12:21
作者對(duì)這個(gè)話題的研究很全面,讓我收獲頗豐。
歡迎光臨 制造論壇-制造行業(yè)自己的交流社區(qū)! (http://jeja-led.cn/)
Powered by Discuz! X3.5