首發(fā)于個(gè)人博客
FFT前置知識(shí)
FT和DFT
傅里葉變換FT(fourier transform)用于將時(shí)域信號(hào)和頻域信號(hào)之間變換,公式如下所示:
對(duì)于計(jì)算機(jī)系統(tǒng)中剥汤,無(wú)法處理連續(xù)的過程,因此離散化為離散傅里葉變換DFT(Discrete Fourier Transform):
取,可將DFT改寫為以下公式:
DFT改進(jìn)(削減計(jì)算量)
首先分析原始公式的計(jì)算量,取一個(gè)8點(diǎn)DFT算法炕横,對(duì)于一個(gè)點(diǎn):
- 需要復(fù)數(shù)乘法N次,每次復(fù)數(shù)乘法由四次實(shí)數(shù)乘法和兩次實(shí)數(shù)加法實(shí)現(xiàn)
- 需要復(fù)數(shù)加法N-1次葡粒,每次復(fù)數(shù)加法由兩次實(shí)數(shù)加法構(gòu)成
因此份殿,對(duì)于一個(gè)點(diǎn),需要實(shí)數(shù)乘法共4N次塔鳍,實(shí)數(shù)加法共(2N-2+2N)=4N-2次伯铣。削減計(jì)算量的主要重點(diǎn)在上,使用歐拉公式有:
考慮的情況轮纫,有以下公式:
同理有腔寡,因此以一個(gè)4點(diǎn)DFT為例,有以下公式:
可減少所需要的復(fù)數(shù)乘法的次數(shù)掌唾,進(jìn)而減少對(duì)應(yīng)的實(shí)數(shù)乘法和加法的數(shù)量
FFT
基2FFT
基2FFT指點(diǎn)數(shù)為的FFT變換放前,取的FFT變換如下所示:
將一個(gè)N點(diǎn)的FFT分解為兩個(gè)FFT,一個(gè)為奇數(shù)項(xiàng)的FFT糯彬,另一個(gè)為偶數(shù)項(xiàng)的FFT凭语。對(duì)于而言,考慮以下變化:
帶入上式撩扒,有以下:
取和分別是兩個(gè)長(zhǎng)度為的FFT運(yùn)算似扔,有:
上述有,考慮后半段結(jié)果搓谆,有:
同理有炒辉,因此當(dāng)時(shí),考慮的周期性泉手,有:
綜上所述對(duì)于一個(gè)N點(diǎn)的FFT運(yùn)算黔寇,有
其中,為對(duì)偶數(shù)序列的點(diǎn)FFT斩萌;為對(duì)應(yīng)奇數(shù)序列的點(diǎn)FFT缝裤。該操作將一個(gè)N點(diǎn)FFT分解為兩個(gè)點(diǎn)的FFT屏轰。
蝶形運(yùn)算
蝶形運(yùn)算為一個(gè)二輸入二輸出的運(yùn)算,公式如下所示:
其中為兩個(gè)輸入憋飞;為兩個(gè)輸出霎苗;W為權(quán)值,均為復(fù)數(shù)搀崭。蝶形運(yùn)算可以用于映射基2FFT叨粘,首先考慮2點(diǎn)FFT猾编,兩點(diǎn)FFT公式如下所示:
因此可以使用一個(gè)蝶形運(yùn)算實(shí)現(xiàn)瘤睹,權(quán)值為,現(xiàn)考慮一個(gè)4點(diǎn)FFT答倡,首先將其分解為2個(gè)兩點(diǎn)FFT轰传,分解的公式為
分解步驟也可以用蝶形運(yùn)算實(shí)現(xiàn),因此整體運(yùn)算如下圖所示:
更多點(diǎn)數(shù)的FFT可以類似的進(jìn)行瘪撇,即不斷分解為長(zhǎng)度為一半的奇偶序列的FFT變換分層實(shí)現(xiàn)获茬。