close
大家好
這篇文章要跟大家介紹的是"離散傅立葉轉換"(Discrete Fourier Transform)
簡稱DFT
為什麼我們需要DFT呢?
因為DFT能將一段數位訊號轉換成其各個離散頻率的弦波分量
而電腦就能利用這些離散的訊號進行"數位訊號處理"(Digital Signal Process)
接下來要介紹的是一支實作DFT的C++程式
假設我們將輸入訊號表示成一段序列x[n] n=0~N-1
那麼DFT的公式為:
X[k]=(1/N)*Sn=0N-1 x[n]*exp(-j*2p*n*k/N), k=0, ..., N-1
接著再加入輸入訊號皆為實數(real number)的條件
則DFT的公式可以化簡如下:
x[n] = X[0] + 2*Sk=1N/2-1mk*cos(2p*n*k/N + pk) + mN/2*cos(p*n + pN/2)
也就是說輸入一段實數序列訊號
經過離散傅立葉轉換後
會輸出一段"複數"(complex number)序列訊號
程式中有寫一個class區分實部以及虛部如下:
程式中實作DFT公式的部分如下:
最後就讓我們實際RUN這支程式看看
設定序列大小為5
輸入的實數序列為0,1,2,3,4
得到輸出的複數序列結果如下:
全站熱搜
留言列表