您好,登錄后才能下訂單哦!
我們經(jīng)常使用傅里葉變換來計算數(shù)字信號的頻譜,進而分析數(shù)字信號,離散時間傅里葉變換的公式為:
可是自己動手實現(xiàn)一遍才是最好的學(xué)習(xí)。
在數(shù)字分析里面,傅里葉變換默認等時間間隔采樣,不需要時間序列,只需要信號數(shù)組即可分析。
分析過程如下:
n/2+1
個使用方法:
從以上過程得到數(shù)字序列的傅里葉變換之后,如果想要得到真正頻譜,還需要做處理:
完整程序:
# 離散時間傅里葉變換的 python 實現(xiàn) import numpy as np import math import pylab as pl import scipy.signal as signal import matplotlib.pyplot as plt sampling_rate=1000 t1=np.arange(0, 10.0, 1.0/sampling_rate) x1 =np.sin(15*np.pi*t1) # 傅里葉變換 def fft1(xx): # t=np.arange(0, s) t=np.linspace(0, 1.0, len(xx)) f = np.arange(len(xx)/2+1, dtype=complex) for index in range(len(f)): f[index]=complex(np.sum(np.cos(2*np.pi*index*t)*xx), -np.sum(np.sin(2*np.pi*index*t)*xx)) return f # len(x1)
xf=fft1(x1)/len(x1) freqs = np.linspace(0, sampling_rate/2, len(x1)/2+1) plt.figure(figsize=(16,4)) plt.plot(freqs,2*np.abs(xf),'r--') plt.xlabel("Frequency(Hz)") plt.ylabel("Amplitude($m$)") plt.title("Amplitude-Frequency curve") plt.show()
plt.figure(figsize=(16,4)) plt.plot(freqs,2*np.abs(xf),'r--') plt.xlabel("Frequency(Hz)") plt.ylabel("Amplitude($m$)") plt.title("Amplitude-Frequency curve") plt.xlim(0,20) plt.show()
此處實現(xiàn)的是傳統(tǒng)的傅里葉變換,這種方法實際已經(jīng)不用了,現(xiàn)在使用快速傅里葉變換,其實兩種是等價的,但是快速傅里葉變換時間復(fù)雜度要小很多。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。