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區分實部以及虛部如下:

1  

 

程式中實作DFT公式的部分如下:

2

 

最後就讓我們實際RUN這支程式看看

 

設定序列大小為5

輸入的實數序列為0,1,2,3,4

3  

 

得到輸出的複數序列結果如下:

4  

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 pshr355188 的頭像
    pshr355188

    pshr355188的部落格

    pshr355188 發表在 痞客邦 留言(0) 人氣()