【Python】可视化的离散傅里叶变换+快速傅里叶变换后时域信号的频域分析
生活随笔
收集整理的這篇文章主要介紹了
【Python】可视化的离散傅里叶变换+快速傅里叶变换后时域信号的频域分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前面的知識這里就不介紹了,下面是Python語言實現的離散傅里葉變換的處理:
時域信號的函數表達
要處理的時域信號:
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)
繪制函數圖像
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()下面是可視化出來的時域中信號在一個2π周期內的形態:
Python的fft工具對這段時域信號進行頻域分析
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))# 由于對稱性,因此只取一半區域 xf_half = xf[range(int(len(x)/2))]# 執行完fft以后,對各頻率的能量進行歸一化處理 yf = abs(fft(y))/len(x)# 由于對稱性,因此只取一半區間 yf_half = yf[range(int(len(x)/2))]plt.plot(xf_half, yf_half)plt.show()
可見,圖中三個能量最高的峰值點,正對應時域函數
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)
中合成的三個諧波頻率,且能量也和各諧波函數取模后的比例保持一致。
總結
以上是生活随笔為你收集整理的【Python】可视化的离散傅里叶变换+快速傅里叶变换后时域信号的频域分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 巧用HashSet装载非重数据(洛谷P2
- 下一篇: 【Python】Matplotlib绘制