c语言写的fft程序,C语言编写FFT程序.pdf
DSP 課程作業
用 C 語言編寫 FFT 程序
1,快速傅里葉變換 FFT 簡介
快速傅氏變換 (FFT),是離散傅氏變換的快速算法,它是根據離散傅氏變換的奇、
偶、虛、實等特性,對離散傅立葉變換的算法進行改進獲得的。它對傅氏變換的理論并
沒有新的發現,但是對于在計算機系統或者說數字系統中應用離散傅立葉變換,可以說
是進了一大步。
我們假設 x (n)為 N 項的復數序列,由DFT 變換,任一 X (m)的計算都需要 N 次復
數乘法和 N-1 次復數加法,而一次復數乘法等于四次實數乘法和兩次實數加法,一次復
數加法等于兩次實數加法,即使把一次復數乘法和一次復數加法定義成一次 “運算”(四
次實數乘法和四次實數加法),那么求出N 項復數序列的X (m),即N 點 DFT 變換大約就
需要 N^2 次運算。當 N 1024 點甚至更多的時候,需要 N2 1048576 次運算,在 FFT 中,
利用 WN 的周期性和對稱性,把一個 N 項序列 (設 N 2k,k 為正整數),分為兩個 N/2 項的
子序列,每個 N/2 點 DFT 變換需要 (N/2)2 次運算,再用 N 次運算把兩個 N/2 點的 DFT
變換組合成一個N 點的DFT 變換。這樣變換以后,總的運算次數就變成N+2(N/2)2 N+N2/2。
繼續上面的例子,N 1024 時,總的運算次數就變成了 525312 次,節省了大約 50%的運算
量。而如果我們將這種 “一分為二”的思想不斷進行下去,直到分成兩兩一組的DFT 運
算單元,那么 N 點的 DFT 變換就只需要 Nlog2N 次的運算,N 在 1024 點時,運算量僅有
10240 次,是先前的直接算法的 1%,點數越多,運算量的節約就越大,這就是 FFT 的優
越性。
2,FFT 算法的基本原理
FFT 算法的基本思想:利用 DFT 系數的特性,合并 DFT 運算中的某些項,吧長序列的
DFT—>短序列的DFT,從而減少其運算量。
FFT 算 法 分 類 : 時 間 抽 選 法 DIT: Decimation-In-Time ; 頻 率 抽 選 法 DIF :
Decimation-In-Frequency
按時間抽選的基-2FFT 算法
1、算法原理
設序列點數 N 2L,L 為整數。
若不滿足,則補零。N 為 2 的整數冪的 FFT 算法稱基-2FFT 算法。將序列 x (n)按 n
的奇偶分成兩組: x 2r x r N
? ? 1? ? r 0,1,..., ?1
2
x 2r?1 x r
? ? 2 ? ?
則 x (n)的DFT: N?1 nk N?1 nk N?1 nk
X k x n W x n W ? x n W
? ? ? ? ? N ? ? ? N ? ? ? N
n 0 n 0 n 0
N ?1 N ?1
2 2
2r?1k
2rk ? ?
x 2r W ? x 2r?1 W
? ? ? N ? ? ? N
r 0 r 0
總結
以上是生活随笔為你收集整理的c语言写的fft程序,C语言编写FFT程序.pdf的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [html] 说说你对HTML5中“一
- 下一篇: [css] 当一个元素被设置为浮动后,