日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2025/3/12 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 频谱分析:基于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画出时域频域波形的全部內容,希望文章能夠幫你解決所遇到的問題。

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