【Python】可视化的离散傅里叶变换+快速傅里叶变换后时域信号的频域分析
生活随笔
收集整理的這篇文章主要介紹了
【Python】可视化的离散傅里叶变换+快速傅里叶变换后时域信号的频域分析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
前面的知識這里就不介紹了,下面是Python語言實(shí)現(xiàn)的離散傅里葉變換的處理:
時(shí)域信號的函數(shù)表達(dá)
要處理的時(shí)域信號:
f(t)=sin(t)+2sin(3t)+2cos(2t)+4sin(15t)f(t) = sin(t) + 2sin(3t) + 2cos(2t) + 4sin(15t)f(t)=sin(t)+2sin(3t)+2cos(2t)+4sin(15t)
繪制函數(shù)圖像
import numpy as npimport matplotlib.pyplot as pltdef f(x):return np.sin(x) + 2*np.sin(3*x) + 2*np.cos(3*x) + 4*np.sin(15*x)x = np.linspace(0, 2*np.pi, 2048)plt.scatter(x, f(x))plt.gridplt.show()下面是可視化出來的時(shí)域中信號在一個(gè)2π周期內(nèi)的形態(tài):
Python的fft工具對這段時(shí)域信號進(jìn)行頻域分析
import numpy as npfrom scipy.fftpack import fftimport matplotlib.pyplot as pltx = np.linspace(0, 2*np.pi, 128) y = np.sin(x) + 2*np.sin(3*x) + 2*np.cos(3*x) + 4*np.sin(15*x)# 離散頻率 xf = np.arange(len(y))# 由于對稱性,因此只取一半?yún)^(qū)域 xf_half = xf[range(int(len(x)/2))]# 執(zhí)行完fft以后,對各頻率的能量進(jìn)行歸一化處理 yf = abs(fft(y))/len(x)# 由于對稱性,因此只取一半?yún)^(qū)間 yf_half = yf[range(int(len(x)/2))]plt.plot(xf_half, yf_half)plt.show()
可見,圖中三個(gè)能量最高的峰值點(diǎn),正對應(yīng)時(shí)域函數(shù)
f(t)=sin(t)+2sin(3t)+2cos(2t)+4sin(15t)f(t) = sin(t) + 2sin(3t) + 2cos(2t) + 4sin(15t)f(t)=sin(t)+2sin(3t)+2cos(2t)+4sin(15t)
中合成的三個(gè)諧波頻率,且能量也和各諧波函數(shù)取模后的比例保持一致。
總結(jié)
以上是生活随笔為你收集整理的【Python】可视化的离散傅里叶变换+快速傅里叶变换后时域信号的频域分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 巧用HashSet装载非重数据(洛谷P2
- 下一篇: websocket python爬虫_p