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