數(shù)學(xué)實(shí)現(xiàn)信號分析[4]: 離散傅里葉變換

***?越來越簡潔的封面 ***
在之前說過了普通的傅里葉變換, 而且也講過在計(jì)算機(jī)里是不存在連續(xù)的東西, 針對計(jì)算機(jī)的離散數(shù)據(jù), 專門有一種東西叫做離散傅里葉變換 (Discrete Fourier transform), 在學(xué)習(xí)DFT之前希望讀者可以看一下下面關(guān)于FT的視頻, 這種"纏繞機(jī)器"的概念始終貫穿在DFT中 (特別是后面的快速傅里葉變換FFT)


之前說到在計(jì)算機(jī)里時(shí)間是不重要的, 重要的是數(shù)據(jù)排列順序,?為了方便理解"頻率"這個(gè)屬性, 我們吧一串間隔相同的數(shù)列緊湊地放在? t?∈ [0, 1)? 中,?這樣頻率就有了相應(yīng)的定義了. 如下圖

為了適應(yīng)離散數(shù)據(jù), 原傅里葉變換必須作一些調(diào)整
這里記總數(shù)據(jù)數(shù)為 n,? 則第 i 個(gè)數(shù)據(jù)對應(yīng)的t為?i / n , 那么原傅里葉變換再根據(jù)定積分的定義可以得到DFT的計(jì)算式子, 并且因?yàn)閿?shù)據(jù)是分布在0到1之間, 那么頻率必須是整數(shù)倍, 數(shù)據(jù)之間間隔為1/n, 那么最大頻率為n就已經(jīng)足夠了, 更有在積分定義式里的dt也可以直接無視, 因?yàn)榻Y(jié)果只會(huì)相差n倍,?那么得到:


圖解:
黑色點(diǎn)為原點(diǎn)0, 藍(lán)色點(diǎn)為DFT結(jié)果/n (既是重心)









現(xiàn)在就來嘗試一下用代碼實(shí)現(xiàn)DFT吧
首先要定義基本的東西

然后就是DFT

我們可以來檢驗(yàn)一下

我們可以看到計(jì)算結(jié)果是和numpy里精確的結(jié)果一樣 (忽略浮點(diǎn)數(shù)誤差的話)


拓展:
傅里葉變換通常都有相應(yīng)的反變換 (即由頻率還原f(t)), DFT也有相應(yīng)的反變換 iDFT, 我這里直接扔代碼(無注釋), 推到正確的iDFT就當(dāng)作是作業(yè)吧? ?(這里我假設(shè)輸入數(shù)據(jù)全為實(shí)數(shù))


終于結(jié)束啦, 發(fā)一下上一期的那首歌的DFT結(jié)果

下一篇預(yù)告: FFT >> DFT