日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

频谱分析:基于python画出时域频域波形

發布時間:2025/3/12 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 频谱分析:基于python画出时域频域波形 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一,FFT解釋

FFT(Fast Fourier Transformation)是離散傅氏變換(DFT)的快速算法。即為快速傅氏變換。它是根據離散傅氏變換的奇、偶、虛、實等特性,對離散傅立葉變換的算法進行改進獲得的。

二、基于python畫出時域頻域波形

1.python代碼

依據快速傅里葉算法得到信號的頻域,將其各個頻率分量的幅值繪制成圖。為便于計算,我們將采樣頻率8000次近似設為8192次
正弦波表達式為: s(t) = 0.6 sin( 2π 50t ) 和s(t) = 0.6 sin( 2π 500t )

import numpy as np#導入一個數據處理模塊import matplotlib.pyplot as plt#導入一個繪圖模塊# 依據快速傅里葉算法得到信號的頻域 def test_fft():sampling_rate = 8192 # 采樣率fft_size = 8192 # FFT取樣長度t = np.arange(0, 8.192, 1.0 / sampling_rate)#np.arange(起點,終點,間隔)產生8.192s長的取樣時間x=0.6*np.sin(2*np.pi*500*t)+0.6*np.sin(2*np.pi*50*t)# 兩個正弦波疊加,500HZ和50HZ# N點FFT進行精確頻譜分析的要求是N個取樣點包含整數個取樣對象的波形。# 因此N點FFT能夠完美計算頻譜對取樣對象的要求是n*Fs/N(n*采樣頻率/FFT長度),# 因此對8KHZ和512點而言,完美采樣對象的周期最小要求是8000/512=15.625HZ,# 所以156.25的n為10,234.375的n為15。xs = x[:fft_size]# 從波形數據中取樣fft_size個點進行運算xf = np.fft.rfft(xs) / fft_size # 返回fft_size/2+1 個頻率#利用np.fft.rfft()進行FFT計算,rfft()是為了更方便對實數信號進行變換,# 由公式可知 / fft_size為了正確顯示波形能量# rfft函數的返回值是N/2+1個復數,分別表示從0(Hz)到sampling_rate/2(Hz)的分。# 于是可以通過下面的np.linspace計算出返回值中每個下標對應的真正的頻率:freqs = np.linspace(0, sampling_rate*10, fft_size/2+1 ) # 表示頻率#freqs = np.linspace(0, sampling_rate/2 , fft_size/2 + 1) # 表示頻率xfp = 20 * np.log10(np.clip(np.abs(xf), 1e-20, 1e100))#xfp = np.abs(xf) * 2 # 代表信號的幅值,即振幅# 最后我們計算每個頻率分量的幅值,并通過 20*np.log10()將其轉換為以db單位的值。# 為了防止0幅值的成分造成log10無法計算,我們調用np.clip對xf的幅值進行上下限處理plt.figure(figsize=(8, 4))plt.subplot(211)plt.plot(t[:fft_size], xs)plt.xlabel(u"時間(秒)", fontproperties='FangSong')plt.title(u"500Hz和50Hz的波形和頻譜", fontproperties='FangSong')plt.subplot(212)plt.plot(freqs, xfp)plt.xlabel(u"頻率(Hz)", fontproperties='FangSong')#字體FangSongplt.ylabel(u'幅值', fontproperties='FangSong')plt.subplots_adjust(hspace=0.4)'''subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)有六個可選參數來控制子圖布局。值均為0~1之間。其中left、bottom、right、top圍成的區域就是子圖的區域。wspace、hspace分別表示子圖之間左右、上下的間距。實際的默認值由matplotlibrc文件控制的。'''plt.show()test_fft()

2.結果顯示

總結

以上是生活随笔為你收集整理的频谱分析:基于python画出时域频域波形的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。