Python實(shí)現(xiàn)DFT與FFT記錄

一、信號(hào)函數(shù)

假設(shè)采集128個(gè)點(diǎn)

數(shù)學(xué)表達(dá)

\chi[n]=\cos\left(2\pi\times\frac{2n}{1024}+\frac{\pi}{3}\right)+0.5\cos\left(2\pi\times\frac{5n}{1024}\right), n = 0,1,2,...,127

Python表達(dá)
import numpy as np

N = 128
n = np.arange(N)
y = np.cos(2 * np.pi * 2 * (n / N) + np.pi / 3) + 0.5 * np.cos(2 * np.pi * 5 * (n / N))
print(n.shape, y.shape)

輸出(128,) (128,)

信號(hào)莖葉圖
from matplotlib import pyplot as plt
plt.stem(n, y) #莖葉圖
plt.show()
128點(diǎn)莖葉圖

二、官方FFT函數(shù)驗(yàn)證

  • 模長(zhǎng)莖葉圖
r1 = np.fft.fft(y) #計(jì)算FFT
mag = abs(r1) #取模
#畫圖
plt.figure(figsize = (20, 5))
plt.stem(n, mag) #莖葉圖
image.png

因?yàn)閳D像是左右對(duì)稱的所以我們只看前一半。
輸出數(shù)組,小于0.0001的值處理為0

mag_new = []
for i in range(int(len(mag)/2)):
    num = mag[i]
    if num < 0.0001:
        num = 0
    mag_new.append(num)
    print("mag[%d] = %d" % (i, num))

輸出

mag[0] = 0
mag[1] = 0
mag[2] = 64
mag[3] = 0
mag[4] = 0
mag[5] = 32
mag[6] = 0
mag[7] = 0
mag[8] = 0
mag[9] = 0
mag[10] = 0
mag[11] = 0
mag[12] = 0
mag[13] = 0
mag[14] = 0
mag[15] = 0
mag[16] = 0
mag[17] = 0
mag[18] = 0
mag[19] = 0
mag[20] = 0
mag[21] = 0
mag[22] = 0
mag[23] = 0
mag[24] = 0
mag[25] = 0
mag[26] = 0
mag[27] = 0
mag[28] = 0
mag[29] = 0
mag[30] = 0
mag[31] = 0
mag[32] = 0
mag[33] = 0
mag[34] = 0
mag[35] = 0
mag[36] = 0
mag[37] = 0
mag[38] = 0
mag[39] = 0
mag[40] = 0
mag[41] = 0
mag[42] = 0
mag[43] = 0
mag[44] = 0
mag[45] = 0
mag[46] = 0
mag[47] = 0
mag[48] = 0
mag[49] = 0
mag[50] = 0
mag[51] = 0
mag[52] = 0
mag[53] = 0
mag[54] = 0
mag[55] = 0
mag[56] = 0
mag[57] = 0
mag[58] = 0
mag[59] = 0
mag[60] = 0
mag[61] = 0
mag[62] = 0
mag[63] = 0

可以看出只在 mag[2], mag[5]時(shí)存在數(shù)值

  • 振幅

把傅里葉變換后的模長(zhǎng)除以\frac{N}{2}就是各個(gè)分量的振幅

mag_new = np.asarray(mag_new, dtype=float)
print(mag_new / (N/2))

輸出

[0.  0.  1.  0.  0.  0.5 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
 0.  0.  0.  0.  0.  0.  0.  0.  0.  0. ]
  • 頻率

假設(shè)1秒采樣128點(diǎn), 采樣頻率128HZ
所以傅里葉變換后的分辨率為1HZ
mag[2] => 2HZ
mag[5] => 5HZ

  • 相位
phase = np.pi/np.angle(r1)
print(phase[2], phase[5])

3.0000000000000013 -1430726521854752.5
可以看出x[2]的相位為\frac{\pi}{3},x[2]的相位為\frac{\pi}{-1430726521854752} => 0

二、樸素算法DFT計(jì)算

設(shè)F(x)是把上面128個(gè)點(diǎn)y(n_i), i=0,1,...,127當(dāng)作系數(shù)的多項(xiàng)式
\omega_n^k帶入F(x)的點(diǎn)值表達(dá)式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 目錄: 代碼規(guī)范性 Git常用指令 Json 自動(dòng)反序列化篇 自動(dòng)化測(cè)試篇 代碼規(guī)范性 Dart代碼format默...
    Yue_Q閱讀 511評(píng)論 0 0
  • 最近,在DataFountain平臺(tái)由中國(guó)計(jì)算機(jī)學(xué)會(huì) & 西門子舉辦了一個(gè)“離散制造過(guò)程中典型工件的質(zhì)量符合率預(yù)測(cè)...
    南海金雕閱讀 1,801評(píng)論 1 3
  • 起飛吧,這鬧人又鬧心的青春 夜已深,周圍的人都已睡去,屋外偶爾有兩聲狗叫,蛐蛐和各路昆蟲開始了午夜交響樂第七章???..
    強(qiáng)強(qiáng)愛做夢(mèng)閱讀 293評(píng)論 0 1
  • DNS Prefetch,即DNS預(yù)獲取,是前端優(yōu)化的一部分。一般來(lái)說(shuō),在前端優(yōu)化中與 DNS 有關(guān)的有兩點(diǎn): 一...
    贈(zèng)前端閱讀 2,006評(píng)論 0 0
  • 在我最看不起自己的時(shí)候,在我最孤獨(dú)時(shí)候,在我最難過(guò)的時(shí)候,在我覺得生活是那樣失敗的時(shí)候……我能得到你第一時(shí)間的回應(yīng)...
    汪汪的愛閱讀 161評(píng)論 0 0

友情鏈接更多精彩內(nèi)容