0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FFT太慢太死板?滑動(dòng)DFT讓計(jì)算飛起來(lái)!

電子工程師 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 2018-02-19 01:01 ? 次閱讀

引言:

本欄目旨在和大家分享電子設(shè)計(jì)中的各種技巧。這里是DSP、Electronic、Embedded以及FPGA共同構(gòu)成的“四維世界”。這里沒(méi)有長(zhǎng)篇大論,助你“修煉成仙”的功法,只有一針見(jiàn)血,將問(wèn)題“斬于馬下”的“秘技”。這里面的“秘技”雖說(shuō)不能獨(dú)步天下,但足以給各位大俠的“修煉之路”提供借鑒。

簡(jiǎn)介

在許多應(yīng)用中信號(hào)在頻域中檢測(cè)或處理比在時(shí)域中有優(yōu)勢(shì)。有時(shí)優(yōu)勢(shì)就只是一個(gè)比較簡(jiǎn)單或概念直白的算法,但頻域最大的難點(diǎn)往往是包含在快速傅里葉變換中的復(fù)雜度或延遲。如果在一個(gè)實(shí)時(shí)應(yīng)用中頻域數(shù)據(jù)經(jīng)常更新,F(xiàn)FT的復(fù)雜性和延遲會(huì)成為實(shí)現(xiàn)系統(tǒng)目標(biāo)和保持低成本、低功耗的一個(gè)主要障礙。許多現(xiàn)實(shí)應(yīng)用,比如醫(yī)學(xué)成像、雷達(dá)、觸屏感應(yīng)以及通信系統(tǒng),都使用頻域算法來(lái)檢測(cè)和處理信號(hào)。在許多實(shí)現(xiàn)中復(fù)雜性或功耗必須要低,同時(shí)要最小化延遲,在上述方面滑動(dòng)DFT比FFT的頻域計(jì)算性能更好。

數(shù)學(xué)理論基礎(chǔ)

滑動(dòng)DFT的推導(dǎo)是相當(dāng)簡(jiǎn)單的,并且和DFT完全等價(jià)。也就是說(shuō),滑動(dòng)DFT算法相比傳統(tǒng)DFT或FFT算法沒(méi)有信息丟失或失真。下面有完整的推導(dǎo)過(guò)程,沒(méi)有興趣的讀者可以跳過(guò)這一節(jié),因?yàn)樗菀鬃屓讼胨X(jué)。使用滑動(dòng)DFT的基本前提是很長(zhǎng)一段時(shí)域數(shù)據(jù)流在一個(gè)長(zhǎng)度為N的比較短的轉(zhuǎn)換窗口里。以一幅頻譜圖為例,頻譜圖是對(duì)很長(zhǎng)一段或連續(xù)的時(shí)域采樣數(shù)據(jù)流按照一定的間隔實(shí)施到長(zhǎng)度為N的窗口的頻域轉(zhuǎn)換。

對(duì)于滑動(dòng)DFT的推導(dǎo),我們首先假設(shè)變換使用的是非常新的時(shí)域采樣,這樣的話一個(gè)長(zhǎng)度為N的變換窗口將保持與時(shí)域數(shù)據(jù)流的每一次采樣同步。輸入采樣流用Xk表示,(其中k的范圍比N要廣)在每個(gè)K采樣輸入時(shí)都能實(shí)現(xiàn)長(zhǎng)度為N的變換。按照DFT的傳統(tǒng)定義我們可以得到下面的第K個(gè)采樣的變換,其中f表示頻率,n表示長(zhǎng)度為N的窗口中的標(biāo)度:



滑動(dòng)序列的下一次變換是第K+1個(gè)采樣,可以表示為:

下一步我們要做的是設(shè)p=n+1,用p代替等式二中的n+1,這樣p的范圍就是從1到n,而不是0到n-1。接下來(lái)計(jì)算和前面是一樣的,只是下標(biāo)的范圍發(fā)生了變化。


第N個(gè)式子可以從總和中獨(dú)立出來(lái)表示。同時(shí)引入p=0的式子,只要在最后減去。這樣看上去雖然很不優(yōu)美,但是很有用:

上式可以被表示成:

在等式5中,由于f是整數(shù)值,所以Xk+N項(xiàng)的指數(shù)的值有且只有可能是1+j0,所以此項(xiàng)的值可化簡(jiǎn)為Xk+N。
而方括號(hào)中的和式正是第K個(gè)采樣值的DFT,只是下標(biāo)由n變?yōu)閜。因此,等式5可以表示為:

算法實(shí)現(xiàn)

等式6就是推導(dǎo)后得出的滑動(dòng)DFT的表達(dá)式。第K+1變換的頻域值Xf,k+1可以從第k個(gè)變換的頻域值Xf,k遞歸計(jì)算而來(lái)。第K+1個(gè)采樣的頻域值可以用前一個(gè)采樣(第K個(gè))的頻域值加上最新輸入的時(shí)域采樣值中的Xk+N與第K個(gè)采樣值中的Xk的差,再乘以就可以得到最新的輸出。

相比于使用FFT,滑動(dòng)DFT的優(yōu)勢(shì)是非常明顯的?;瑒?dòng)DFT避免了很多不必要的運(yùn)算,降低計(jì)算復(fù)雜性,節(jié)省了很多的計(jì)算資源,從而降低功耗。圖1表示了實(shí)現(xiàn)等式6的信號(hào)流程圖,它的初始延遲和相加是所有計(jì)算共用的,復(fù)數(shù)遞歸乘法以及累加在每個(gè)頻率值計(jì)算的時(shí)候被重復(fù)。


圖1 等式6的信號(hào)流程圖

滑動(dòng)DFT的另一個(gè)優(yōu)點(diǎn)是如果不需要對(duì)每個(gè)輸入采樣進(jìn)行變換的話,它可減少不必要的計(jì)算。例如,一個(gè)變換只需要M個(gè)采樣輸入,當(dāng)所有的計(jì)算完成時(shí),滑動(dòng)DFT的計(jì)算復(fù)雜性是N×M,而FFT完成相同的工作的計(jì)算復(fù)雜性卻是N×log2(N)。

初始化

滑動(dòng)DFT算法的遞歸性意味著需要一些初始化方法。要想輸出的Xf,k+1有效,那么Xf,k也必須是有效的。且每個(gè)輸出依賴于前N采樣輸入。有兩種常用的算法初始化方法:

1、在循環(huán)采樣數(shù)據(jù)之前,先使用0來(lái)刷新延遲線。類似地,如果緩沖寄存器復(fù)位,在循環(huán)數(shù)據(jù)之前,要重置信號(hào)路徑存儲(chǔ)器為0,完成刷新。當(dāng)N個(gè)數(shù)據(jù)采樣完成循環(huán),輸出是有效的。

2、第一種方法中N個(gè)循環(huán)的初始化延遲可以通過(guò)前N個(gè)輸入采樣的FFT初始化Xf,k來(lái)避免。在一些系統(tǒng)中,特別是離線應(yīng)用,這個(gè)方法很有優(yōu)勢(shì)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FFT
    FFT
    +關(guān)注

    關(guān)注

    15

    文章

    430

    瀏覽量

    59017
  • DFT
    DFT
    +關(guān)注

    關(guān)注

    2

    文章

    224

    瀏覽量

    22607
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    論壇秘密,急于求助時(shí)就冷淡,沒(méi)有問(wèn)題時(shí)人多飛起來(lái)!覺(jué)得進(jìn)來(lái)頂

    本帖最后由 gk320830 于 2015-3-9 12:22 編輯 看了標(biāo)題就知道我的意思了急于求助時(shí)就冷淡,沒(méi)有問(wèn)題時(shí)人多飛起來(lái)
    發(fā)表于 05-20 10:23

    FFTDFT計(jì)算時(shí)間的比較及圓周卷積代替線性卷積的有效性實(shí)

    實(shí)驗(yàn)二 FFTDFT計(jì)算時(shí)間的比較及圓周卷積代替線性卷積的有效性實(shí)驗(yàn):一 實(shí)驗(yàn)?zāi)康?:掌握FFT基2時(shí)間(或基2頻率)抽選法,理解其提高減少乘法運(yùn)算次數(shù)提高運(yùn)算速度的原理。2:掌握
    發(fā)表于 12-29 21:52

    你的代碼飛起來(lái)》 教你如何優(yōu)化代碼

    你的代碼飛起來(lái)
    發(fā)表于 04-18 12:09

    DFT算法與FFT算法的優(yōu)劣分析

    本文參考銀河電氣官網(wǎng):DFT算法與FFT算法的優(yōu)劣分析DFT與它的快速算法FFT相比可能更有優(yōu)勢(shì),而FFT卻存在某些局限性.在只需要求出部分
    發(fā)表于 05-22 20:43

    歪果仁做的超大殲星艦,可以飛起來(lái)的哦!

    ,這兩個(gè)不同尺寸版本的殲星艦都飛了起來(lái)!小型版本殲星艦的制作時(shí)間只有幾個(gè)小時(shí),在測(cè)試過(guò)程中我們收集了關(guān)于飛機(jī)平衡等方面的信息,為我們制作4米長(zhǎng)的大型殲星艦打下了基礎(chǔ)。結(jié)構(gòu)制造過(guò)程要讓一個(gè)大東西飛起來(lái)首先要
    發(fā)表于 12-28 14:59

    你的軟件飛起來(lái)

    你的軟件飛起來(lái)
    發(fā)表于 11-05 14:54

    四軸不夠力飛起來(lái)

    四軸整重52g。程序參考匿名。不加PID,直接調(diào)油門,加到最大,就平移一點(diǎn),不夠力飛起來(lái)。但是就算是加到最大,電機(jī)轉(zhuǎn)速也沒(méi)到最大。直接調(diào)轉(zhuǎn)速的的話。就是占空比大約在380/1000左右最大,再上去
    發(fā)表于 04-22 00:35

    DFTFFT的運(yùn)算量

    首先給大家提供DFTFFT的運(yùn)算量的教程,內(nèi)容有直接用DFT計(jì)算運(yùn)算量與用FFT計(jì)算的運(yùn)算量比
    發(fā)表于 09-08 00:01 ?71次下載

    滑動(dòng)DFT算法在功率譜估計(jì)中的應(yīng)用

    基于滑動(dòng)DFT算法推導(dǎo)出一種改進(jìn)的周期圖功率譜估計(jì)方法,并在軟件系統(tǒng)界面中應(yīng)用。根據(jù)傳統(tǒng)的功率譜估計(jì)方法和滑動(dòng)DFT算法推導(dǎo)出改進(jìn)的功率譜估計(jì)算
    發(fā)表于 09-09 11:02 ?0次下載
    <b class='flag-5'>滑動(dòng)</b><b class='flag-5'>DFT</b>算法在功率譜估計(jì)中的應(yīng)用

    離散傅里葉變換(DFT)及其快速算法(FFT)

    第2章-離散傅里葉變換(DFT)及其快速算法(FFT)
    發(fā)表于 12-28 14:23 ?0次下載

    你的程序飛起來(lái)

    你的程序飛起來(lái)
    發(fā)表于 10-25 10:18 ?12次下載
    <b class='flag-5'>讓</b>你的程序<b class='flag-5'>飛起來(lái)</b>

    電腦卡慢惹人煩 這五個(gè)妙招可以Linux飛起來(lái)

    玩兒電腦最怕的就是卡慢,那么電腦卡慢應(yīng)該怎么解決呢?對(duì)于windows系統(tǒng)來(lái)說(shuō),你可能有各種免費(fèi)的殺毒軟件、全家桶幫你清空系統(tǒng)空間,那么Linux系統(tǒng)怎么辦?今天筆者就為大家介紹幾種方法,清空你的Ubuntu或者其他基于Ubuntu的Linux系統(tǒng),Linux系統(tǒng)“飛起來(lái)
    發(fā)表于 04-18 15:26 ?1444次閱讀

    旋轉(zhuǎn)飛椅為什么會(huì)飛起來(lái)?

    旋轉(zhuǎn)飛椅為什么會(huì)飛起來(lái)?
    發(fā)表于 04-06 16:45 ?0次下載
    旋轉(zhuǎn)飛椅為什么會(huì)<b class='flag-5'>飛起來(lái)</b>?

    超簡(jiǎn)單:用PythonExcel飛起來(lái)

    超簡(jiǎn)單:用PythonExcel飛起來(lái)
    發(fā)表于 05-25 10:46 ?53次下載

    fftdft的區(qū)別聯(lián)系

    fftdft的區(qū)別聯(lián)系 快速傅里葉變換(FFT)和離散傅里葉變換(DFT)是信號(hào)處理和數(shù)學(xué)計(jì)算領(lǐng)域中最常見(jiàn)的技術(shù)之一。它們都是用于將離散信
    的頭像 發(fā)表于 09-07 16:43 ?5933次閱讀