国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      FFT處理器及運(yùn)算方法與流程

      文檔序號(hào):11142256閱讀:2006來源:國知局
      FFT處理器及運(yùn)算方法與制造工藝

      本發(fā)明涉及信號(hào)處理領(lǐng)域,特別涉及一種FFT處理器及運(yùn)算方法。



      背景技術(shù):

      傅里葉變換是一種將信號(hào)從時(shí)域變換到頻域的變換形式,是信號(hào)處理的重要分析手段。離散傅里葉變換(Discrete Fourier Transform,簡(jiǎn)稱“DFT”)是傅里葉變換在離散系統(tǒng)中的表示形式。但是DFT的計(jì)算量非常大??焖俑道锶~變化(Fast Fourier Transformation,簡(jiǎn)稱“FFT”)是一種DFT的高效算法,它根據(jù)DFT的奇、偶、虛、實(shí)等特性,對(duì)DFT算法進(jìn)行改進(jìn)而獲得,從而大大減小了DFT算法的運(yùn)算量。

      FFT處理器是一種FFT算法的硬件結(jié)構(gòu),現(xiàn)有技術(shù)中,能夠?qū)崿F(xiàn)FFT處理器功能的方法有很多種,但大多存在一定的局限性。對(duì)于有些實(shí)現(xiàn)方法,只能支持單一點(diǎn)數(shù)的FFT運(yùn)算,還有些方法則需要占用大量的資源,硬件電路面積較大。



      技術(shù)實(shí)現(xiàn)要素:

      本發(fā)明實(shí)施方式的目的在于提供一種FFT處理器及運(yùn)算方法,使得多點(diǎn)FFT運(yùn)算得以實(shí)現(xiàn),增加FFT處理器的應(yīng)用場(chǎng)景,同時(shí)占用較小電路面積,減低電路功耗,縮減電路成本。

      為解決上述技術(shù)問題,本發(fā)明的實(shí)施方式提供了一種FFT處理器,包括:兩個(gè)數(shù)據(jù)存儲(chǔ)單元、旋轉(zhuǎn)因子存儲(chǔ)單元、多個(gè)蝶形運(yùn)算單元、數(shù)據(jù)讀寫單元以及旋轉(zhuǎn)因子讀寫單元;

      數(shù)據(jù)讀寫單元連接于兩個(gè)數(shù)據(jù)存儲(chǔ)單元與各蝶形運(yùn)算單元;兩個(gè)數(shù)據(jù)存儲(chǔ)單元分別用于均勻存放多個(gè)蝶形運(yùn)算單元的N個(gè)輸入數(shù)據(jù)與N個(gè)輸出數(shù)據(jù);其中,N=2k,k≥3且k為整數(shù);

      旋轉(zhuǎn)因子讀寫單元連接于旋轉(zhuǎn)因子存儲(chǔ)單元與各蝶形運(yùn)算單元;旋轉(zhuǎn)因子存儲(chǔ)單元用于存放N/2個(gè)旋轉(zhuǎn)因子;

      其中,數(shù)據(jù)讀寫單元用于逐個(gè)讀取N個(gè)輸入數(shù)據(jù),并將逐個(gè)讀取的N個(gè)輸入數(shù)據(jù)依次輸入多個(gè)蝶形運(yùn)算單元;旋轉(zhuǎn)因子讀寫單元用于逐個(gè)讀取N/2個(gè)旋轉(zhuǎn)因子,并將逐個(gè)讀取的N/2個(gè)旋轉(zhuǎn)因子依次輸入多個(gè)蝶形運(yùn)算單元;數(shù)據(jù)讀寫單元還用于逐個(gè)存儲(chǔ)N個(gè)輸出數(shù)據(jù)。

      本發(fā)明的實(shí)施方式還提供了一種FFT運(yùn)算方法,包括:

      數(shù)據(jù)讀寫單元將從外部接收的N個(gè)輸入數(shù)據(jù)均勻地存放在其中一個(gè)數(shù)據(jù)存儲(chǔ)單元中;

      旋轉(zhuǎn)因子讀寫單元將從外部接收的N/2個(gè)旋轉(zhuǎn)因子存放在旋轉(zhuǎn)因子存儲(chǔ)單元;

      數(shù)據(jù)讀寫單元逐個(gè)讀取N個(gè)輸入數(shù)據(jù),并將逐個(gè)讀取的N個(gè)輸入數(shù)據(jù)依次輸入多個(gè)蝶形運(yùn)算單元;

      旋轉(zhuǎn)因子讀寫單元逐個(gè)讀取N/2個(gè)旋轉(zhuǎn)因子,并將逐個(gè)讀取的N/2個(gè)旋轉(zhuǎn)因子依次輸入多個(gè)蝶形運(yùn)算單元;

      各蝶形運(yùn)算單元根據(jù)接收的各輸入數(shù)據(jù)與各旋轉(zhuǎn)因子運(yùn)算得到各輸出數(shù)據(jù);

      數(shù)據(jù)讀寫單元將各輸出數(shù)據(jù)逐個(gè)存儲(chǔ)至另一個(gè)數(shù)據(jù)存儲(chǔ)單元;

      其中,各輸出數(shù)據(jù)作為下一級(jí)運(yùn)算的各輸入數(shù)據(jù),且進(jìn)行k級(jí)循環(huán)運(yùn)算。

      本發(fā)明實(shí)施方式相對(duì)于現(xiàn)有技術(shù)而言,數(shù)據(jù)均勻存放在兩個(gè)數(shù)據(jù)存儲(chǔ)單元中,對(duì)于不同點(diǎn)數(shù)的輸入數(shù)據(jù)而言,可以采用同一讀取規(guī)律進(jìn)行讀取,因此可以實(shí)現(xiàn)支持多點(diǎn)的運(yùn)算。并且,數(shù)據(jù)讀寫單元逐個(gè)讀取輸入數(shù)據(jù),并將逐個(gè)讀取的輸入數(shù)據(jù)依次輸入多個(gè)蝶形運(yùn)算單元,并將各蝶形運(yùn)算單元的輸出數(shù)據(jù)逐個(gè)存儲(chǔ),即同一時(shí)間內(nèi),有一個(gè)輸入和一個(gè)輸出數(shù)據(jù),因此,只需要兩個(gè)數(shù)據(jù)存儲(chǔ)單元進(jìn)行數(shù)據(jù)的存儲(chǔ),可以節(jié)省電路面積。

      另外,蝶形運(yùn)算單元的數(shù)目為4。通過4個(gè)蝶形運(yùn)算單元循環(huán)工作的模式,最大程度的復(fù)用蝶形運(yùn)算單元,可以盡可能的減小電路面積,并且4個(gè)蝶形運(yùn)算單元從數(shù)據(jù)存儲(chǔ)單元依次連續(xù)讀取數(shù)據(jù),可以避免運(yùn)算單元的空閑,并且輸出結(jié)果一直處于有效狀態(tài),從而有效地提高蝶形運(yùn)算單元利用率。

      另外,各蝶形運(yùn)算單元包括1個(gè)乘法器和2個(gè)加法器;各蝶形運(yùn)算單元用于實(shí)現(xiàn)基2蝶形運(yùn)算。本實(shí)施方式中的各蝶形運(yùn)算單元的結(jié)構(gòu)較為簡(jiǎn)單,從而大大減小了電路面積。

      另外,k的取值為k≤10。根據(jù)k配置的值不同,從而實(shí)現(xiàn)了支持不同點(diǎn)數(shù)的FFT處理器運(yùn)算。

      另外,各輸入數(shù)據(jù)的存放地址依次遞增;各數(shù)據(jù)存儲(chǔ)單元包括1024個(gè)地址,當(dāng)k=10,N=210=1024時(shí),各輸入數(shù)據(jù)依次存放;當(dāng)k≤9時(shí),各相鄰輸入數(shù)據(jù)的地址間隔相等。輸入、輸出數(shù)據(jù)均勻占據(jù)整個(gè)存儲(chǔ)地址空間,方便計(jì)算,無需為不同點(diǎn)數(shù)的FFT處理器配置不同行計(jì)算方案。

      另外,對(duì)于第i級(jí)運(yùn)算,其中i=0,1……,k,在數(shù)據(jù)讀寫單元逐個(gè)讀取N個(gè)輸入數(shù)據(jù)中,各輸入數(shù)據(jù)的讀取地址的產(chǎn)生方式包括:獲取各輸入數(shù)據(jù)對(duì)應(yīng)的計(jì)數(shù)器二進(jìn)制數(shù)列;將計(jì)數(shù)器二進(jìn)制數(shù)列中的最后i+1位取倒數(shù);將上述最后i+1位取倒數(shù)后的整個(gè)數(shù)據(jù)取倒數(shù),以作為各輸入數(shù)據(jù)的讀取地址。對(duì)數(shù)據(jù)存儲(chǔ)地址進(jìn)行合理的分配,才能夠完成正確的FFT運(yùn)算。

      附圖說明

      圖1是根據(jù)本發(fā)明第一實(shí)施方式的FFT處理器的結(jié)構(gòu)示意圖;

      圖2是根據(jù)本發(fā)明第一實(shí)施方式的一種FFT處理器的蝶形運(yùn)算單元內(nèi)部運(yùn)算過程的示意圖;

      圖3是根據(jù)本發(fā)明第三實(shí)施方式的一種FFT運(yùn)算方法的流程圖;

      圖4是根據(jù)本發(fā)明第四實(shí)施方式的一種FFT運(yùn)算方法中輸入數(shù)據(jù)的讀取地址產(chǎn)生方式的流程圖;

      圖5是根據(jù)本發(fā)明第五實(shí)施方式的一種FFT運(yùn)算方法中旋轉(zhuǎn)因子的讀取地址序列的產(chǎn)生方式的流程圖。

      具體實(shí)施方式

      為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明的各實(shí)施方式進(jìn)行詳細(xì)的闡述。然而,本領(lǐng)域的普通技術(shù)人員可以理解,在本發(fā)明各實(shí)施方式中,為了使讀者更好地理解本申請(qǐng)而提出了許多技術(shù)細(xì)節(jié)。但是,即使沒有這些技術(shù)細(xì)節(jié)和基于以下各實(shí)施方式的種種變化和修改,也可以實(shí)現(xiàn)本申請(qǐng)所要求保護(hù)的技術(shù)方案。

      本發(fā)明的第一實(shí)施方式涉及一種FFT處理器。具體結(jié)構(gòu)示意圖如圖1所示,包括:兩個(gè)數(shù)據(jù)存儲(chǔ)單元11和12、旋轉(zhuǎn)因子存儲(chǔ)單元13、多個(gè)蝶形運(yùn)算單元161至164、數(shù)據(jù)讀寫單元14以及旋轉(zhuǎn)因子讀寫單元15;數(shù)據(jù)讀寫單元14連接于兩個(gè)數(shù)據(jù)存儲(chǔ)單元11和12與各蝶形運(yùn)算單元161至164;旋轉(zhuǎn)因子讀寫單元15連接于旋轉(zhuǎn)因子存儲(chǔ)單元13與各蝶形運(yùn)算單元161至164。

      其中,兩個(gè)數(shù)據(jù)存儲(chǔ)單元11和12,本實(shí)施方式中的兩個(gè)數(shù)據(jù)存儲(chǔ)單元可以為隨機(jī)存取存儲(chǔ)器(Random Access Memory,簡(jiǎn)稱“RAM”),兩個(gè)RAM分別用于均勻存放多個(gè)蝶形運(yùn)算單元161至164的N個(gè)輸入數(shù)據(jù)與N個(gè)輸出數(shù)據(jù);其中,N=2k,k≥3且k為整數(shù)。數(shù)據(jù)讀寫單元14用于按照產(chǎn)生的地址序列逐個(gè)讀取N個(gè)輸入數(shù)據(jù),并將按照產(chǎn)生的地址序列逐個(gè)讀取的N個(gè)輸入數(shù)據(jù)依次輸入多個(gè)蝶形運(yùn)算單元161至164。此外,數(shù)據(jù)讀寫單元14還用于逐個(gè)存儲(chǔ)N個(gè)輸出數(shù)據(jù)。

      具體地說,在開始計(jì)算前,需要將蝶形運(yùn)算單元161至164所需要用于計(jì)算的數(shù)據(jù),導(dǎo)入到一個(gè)數(shù)據(jù)存儲(chǔ)單元11中,例如導(dǎo)入數(shù)據(jù)存儲(chǔ)單元11中,當(dāng)FFT處理器的使能信號(hào)設(shè)置為高后,數(shù)據(jù)存儲(chǔ)單元11根據(jù)所處的級(jí)數(shù)產(chǎn)生合適的地址序列,這個(gè)地址序列在數(shù)據(jù)存儲(chǔ)單元11中對(duì)應(yīng)的數(shù)據(jù)會(huì)作為輸入數(shù)據(jù),被數(shù)據(jù)讀寫單元14讀取,并進(jìn)行進(jìn)一步的FFT運(yùn)算,計(jì)算完畢后,數(shù)據(jù)讀寫單元14根據(jù)存儲(chǔ)地址,將該輸出數(shù)據(jù)存入數(shù)據(jù)存儲(chǔ)單元12中,并且滿足存儲(chǔ)地址與在數(shù)據(jù)存儲(chǔ)單元11中的讀取地址一致,即參與計(jì)算的數(shù)據(jù)的讀取地址與計(jì)算完畢數(shù)據(jù)的存儲(chǔ)地址保持相同。

      需要說明的是,數(shù)據(jù)讀寫單元14可以從數(shù)據(jù)存儲(chǔ)單元11中讀取輸入的數(shù)據(jù),也可以向數(shù)據(jù)存儲(chǔ)單元11寫入輸出數(shù)據(jù),同理對(duì)于數(shù)據(jù)存儲(chǔ)單元12也可以做如此操作,數(shù)據(jù)存儲(chǔ)單元采用乒乓RAM的形式來縮小所消耗的資源,即數(shù)據(jù)存儲(chǔ)單元11或12,既可以作為輸入數(shù)據(jù)的存儲(chǔ)單元,也可以作為輸出數(shù)據(jù)的存儲(chǔ)單元,并且數(shù)據(jù)是均勻存儲(chǔ)在數(shù)據(jù)存儲(chǔ)單元11、12中的,可以理解為,輸入或輸出數(shù)據(jù)在數(shù)據(jù)存儲(chǔ)單元11或12中存放的地址對(duì)應(yīng)相等。

      本實(shí)施方式中的FFT處理器采用基2的算法,N為FFT處理器支持的運(yùn)算點(diǎn)數(shù),其中,N=2k,k≥3且k為整數(shù);則N的最小值為8,說明最小支持8點(diǎn)的FFT運(yùn)算,并且基2算法總共有k級(jí)運(yùn)算。k設(shè)置的值不同,即FFT運(yùn)算點(diǎn)數(shù)N不同,即運(yùn)算級(jí)數(shù)也不同。其中,對(duì)于每一級(jí)運(yùn)算,都需要數(shù)據(jù)讀寫單元14從其中一個(gè)數(shù)據(jù)存儲(chǔ)單元中讀取數(shù)據(jù),并將計(jì)算后蝶形單元的輸出數(shù)據(jù)存儲(chǔ)到另一個(gè)數(shù)據(jù)存儲(chǔ)單元中,而進(jìn)行下一級(jí)運(yùn)算時(shí),數(shù)據(jù)讀寫單元14從上一級(jí)存入數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)單元中讀取數(shù)據(jù),將計(jì)算后蝶形單元的輸出數(shù)據(jù)存儲(chǔ)到上一級(jí)讀取數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)單元中。例如,數(shù)據(jù)讀寫單元14從數(shù)據(jù)存儲(chǔ)單元11中讀取數(shù)據(jù),并將計(jì)算后蝶形單元的輸出數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)存儲(chǔ)單元12中,而進(jìn)行下一級(jí)運(yùn)算時(shí),數(shù)據(jù)讀寫單元14從數(shù)據(jù)存儲(chǔ)單元12中讀取數(shù)據(jù),將計(jì)算后蝶形單元的輸出數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)存儲(chǔ)單元11中。

      此外,F(xiàn)FT處理器運(yùn)算過程中的參數(shù),可以由用戶進(jìn)行配置。

      本實(shí)施方式中,旋轉(zhuǎn)因子存儲(chǔ)單元13用于存放N/2個(gè)旋轉(zhuǎn)因子。

      在開始計(jì)算前,需要將蝶形運(yùn)算單元161至164所需要用于計(jì)算的旋轉(zhuǎn)因子表導(dǎo)入到對(duì)應(yīng)的旋轉(zhuǎn)因子存儲(chǔ)單元13中,更加具體地說,根據(jù)可以知道對(duì)于最多支持1024點(diǎn)FFT處理器而言,其所需要用的旋轉(zhuǎn)因子均可轉(zhuǎn)化為其中N的取值范圍為0-511,將實(shí)部與虛部做有符號(hào)數(shù)的16位寬(bit)量化,將量化的結(jié)果分別存儲(chǔ)在旋轉(zhuǎn)因子存儲(chǔ)單元13中。對(duì)于每?jī)蓚€(gè)輸入信號(hào)而言,僅需要一個(gè)旋轉(zhuǎn)因子運(yùn)算得出輸出數(shù)據(jù),因此,對(duì)于支持N點(diǎn)的FFT處理器,需要N/2個(gè)旋轉(zhuǎn)因子。

      一般而言,旋轉(zhuǎn)因子存儲(chǔ)單元13可以分成兩塊,用其中一塊存儲(chǔ)單元存儲(chǔ)旋轉(zhuǎn)因子的實(shí)部,用另一塊存儲(chǔ)單元來存儲(chǔ)旋轉(zhuǎn)因子的虛部,每個(gè)相同地址的數(shù)據(jù)一一對(duì)應(yīng)。然不限于此,在實(shí)際應(yīng)用中,也可以使用該旋轉(zhuǎn)因子存儲(chǔ)單元13的高低位分別存儲(chǔ)旋轉(zhuǎn)因子的實(shí)部和虛部。此外,旋轉(zhuǎn)因子可以以表格的形式,事先存入旋轉(zhuǎn)因子存儲(chǔ)單元13中,在運(yùn)算過程中需要用到旋轉(zhuǎn)因子時(shí),從預(yù)先導(dǎo)入旋轉(zhuǎn)因子存儲(chǔ)單元13中的旋轉(zhuǎn)因子表格中讀取對(duì)應(yīng)的旋轉(zhuǎn)因子,進(jìn)行進(jìn)一步的計(jì)算。

      進(jìn)一步的,旋轉(zhuǎn)因子讀寫單元15用于按照產(chǎn)生的地址序列逐個(gè)讀取N/2個(gè)旋轉(zhuǎn)因子,并將按照產(chǎn)生的地址序列逐個(gè)讀取的N/2個(gè)旋轉(zhuǎn)因子依次輸入多個(gè)蝶形運(yùn)算單元161至164。

      具體地說,在運(yùn)算過程中需要用到旋轉(zhuǎn)因子時(shí),通過給出的旋轉(zhuǎn)因子地址信號(hào)和讀使能,旋轉(zhuǎn)因子讀寫單元15來讀取旋轉(zhuǎn)因子的值,旋轉(zhuǎn)因子地址每?jī)蓚€(gè)周期變化一次,通過控制邏輯來實(shí)現(xiàn)。旋轉(zhuǎn)因子讀寫單元15將按照產(chǎn)生的旋轉(zhuǎn)因子的地址序列逐個(gè)讀取的N/2個(gè)旋轉(zhuǎn)因子,并依次輸入多個(gè)蝶形運(yùn)算單元161至164,進(jìn)行進(jìn)一步的計(jì)算。

      此外,蝶形運(yùn)算單元161至164的N個(gè)輸入數(shù)據(jù)由數(shù)據(jù)讀寫單元14從數(shù)據(jù)存儲(chǔ)單元11或12中讀取得來,每一個(gè)蝶形運(yùn)算單元,如蝶形運(yùn)算單元161需要2個(gè)周期獲取輸入數(shù)據(jù),且N/2個(gè)旋轉(zhuǎn)因子由旋轉(zhuǎn)因子讀寫單元15讀取并寫入蝶形運(yùn)算單元161,而N/2個(gè)旋轉(zhuǎn)因子的實(shí)部和虛部分別按高低位存儲(chǔ)在旋轉(zhuǎn)因子存儲(chǔ)單元13中,可與N個(gè)輸入數(shù)據(jù)同時(shí)獲得。其中,本實(shí)施方式中所需的周期具體指代時(shí)間周期。

      對(duì)于一個(gè)蝶形運(yùn)算單元161,在其內(nèi)部需要做相應(yīng)運(yùn)算,并得到輸出數(shù)據(jù),如公式(1)和(2):

      其中,x1(k)和x2(k)分別為輸入數(shù)據(jù),為旋轉(zhuǎn)因子,x(k)和x(k+N/2)為經(jīng)過蝶形運(yùn)算單元161的輸出數(shù)據(jù)。

      則整個(gè)蝶形運(yùn)算單元的計(jì)算過程如圖2所示,其輸出數(shù)據(jù)分別為:x(k)和x(k+N/2)。將每個(gè)輸出數(shù)據(jù)寫作實(shí)部和虛部的形式,如公式(3)和(4):

      out1=(xa+xbxc-ybyc)+(ya+xbyc+xcyb)j (3)

      out2=(xa-xbxc+ybyc)+(ya-xbyc-xcyb)j (4)

      其中xa,xb,xc分別為x1(k),x 2(k),的實(shí)部,ya,yb,yc為x1(k),x2(k),的虛部。

      值得一提的是,對(duì)于每個(gè)蝶形運(yùn)算單元,如蝶形運(yùn)算單元161,包括1個(gè)乘法器和2個(gè)加法器,2個(gè)輸出out1和out2的實(shí)部和虛部全部計(jì)算完畢需要7個(gè)周期。計(jì)算過程為:

      第一個(gè)周期,乘法器計(jì)算xb*xc,結(jié)果記為mul_out;

      第二個(gè)周期,1號(hào)加法器計(jì)算xa+xb*xc,2號(hào)加法器計(jì)算xa-xb*xc,而乘法器計(jì)算yb*yc,結(jié)果同樣存入mul_out;

      第三個(gè)周期,1號(hào)加法器計(jì)算xa+xb*xc-yb*yc,這就是第一個(gè)輸出out1的實(shí)部。同時(shí),2號(hào)加法器計(jì)算xa-xb*xc+yb*yc,這就是第二個(gè)輸出out2的實(shí)部,乘法器計(jì)算xb*yc;

      第四個(gè)周期,1號(hào)加法器計(jì)算ya+xb*yc,2號(hào)加法器計(jì)算ya-xb*yc,乘法器計(jì)算xc*yb;

      第五個(gè)周期,1號(hào)加法器計(jì)算ya+xb*yc+xc*yb,此時(shí)out1輸出的虛部計(jì)算完成,2號(hào)加法器計(jì)算ya-xb*yc-xc*yb,此時(shí)out2輸出的虛部計(jì)算完成。

      從上述分析我們可以看出2個(gè)輸出out1和out2的實(shí)部是同時(shí)計(jì)算完成的,在計(jì)算完成后,需要把蝶形運(yùn)算單元的輸出數(shù)據(jù)通過數(shù)據(jù)讀寫單元14存儲(chǔ)在數(shù)據(jù)存儲(chǔ)單元11或12中,而數(shù)據(jù)存儲(chǔ)單元11或12的一個(gè)周期僅能寫入一個(gè)數(shù)據(jù),因此可以將第三個(gè)周期和第五個(gè)周期中2號(hào)加法器的輸出作一拍延遲,這樣可以在第3個(gè)周期的時(shí)候,得到輸出out1的實(shí)部,第4個(gè)周期的時(shí)候得到輸出out2的實(shí)部,第5個(gè)周期的時(shí)候得到輸出out1的虛部,第6個(gè)周期的時(shí)候,得到輸出out2的虛部,從而滿足數(shù)據(jù)存儲(chǔ)單元11或12的存儲(chǔ)要求。

      由于計(jì)算結(jié)果為17位數(shù)據(jù),而數(shù)據(jù)存儲(chǔ)單元11或12僅能存儲(chǔ)16位,因此需要對(duì)計(jì)算結(jié)果作截位處理,舍去最低的1位,即相當(dāng)于將輸出結(jié)果除以2,對(duì)于每一級(jí)結(jié)果均進(jìn)行如此操作,總共k級(jí),因此最終的結(jié)果被縮小了N倍,但是由于它們之間相對(duì)大小不受影響,因此依然可以通過最后的頻譜分布來確定頻率。

      此外,由于輸出數(shù)據(jù)的寫地址與輸入數(shù)據(jù)的讀地址需要保持一致,所以對(duì)于每個(gè)蝶形運(yùn)算單元161,我們都要緩存2個(gè)輸入數(shù)據(jù)的地址直至計(jì)算完畢,唯一例外的地方在于最后一級(jí),最后一級(jí)需要把輸出數(shù)據(jù)序列再進(jìn)行一次排列來獲得正確的存儲(chǔ)順序,例如對(duì)于1024點(diǎn)的FFT處理器而言,最后1級(jí)第一個(gè)蝶形運(yùn)算單元的輸入地址為0、1,而輸出地址應(yīng)該為0、512(k和k+N/2總是成對(duì)出現(xiàn)),因此需要加入一級(jí)額外的判斷來達(dá)到輸出序列正確順序的目的。

      值得一提的是,蝶形運(yùn)算單元的數(shù)目為4。

      具體地說,本實(shí)施方式中FFT處理器的整個(gè)蝶形運(yùn)算部分為4個(gè)蝶形運(yùn)算單元的疊加,每個(gè)蝶形運(yùn)算單元從數(shù)據(jù)存儲(chǔ)單元11或12中取出兩個(gè)數(shù)進(jìn)行計(jì)算,如果將蝶形運(yùn)算單元161至164陣列參與運(yùn)算,則會(huì)發(fā)現(xiàn)當(dāng)?shù)?個(gè)蝶形運(yùn)算單元開始工作時(shí),第一個(gè)蝶形運(yùn)算單元工作完畢,可以開始準(zhǔn)備下一次取數(shù),4個(gè)蝶形運(yùn)算單元即可滿足從數(shù)據(jù)存儲(chǔ)單元11或12中依次連續(xù)取數(shù)的要求,所以可以通過用4個(gè)蝶形運(yùn)算單元循環(huán)工作的模式,來完成每一級(jí)所需要的蝶形運(yùn)算。此種方式的電路面積最小。其中,每一級(jí)的運(yùn)算都由N/2個(gè)蝶形運(yùn)算單元組成。

      此外,本實(shí)施方式中FFT處理器的整個(gè)蝶形運(yùn)算部分為4個(gè)蝶形運(yùn)算單元的疊加,則每8個(gè)周期為一次循環(huán)(每個(gè)蝶形運(yùn)算單元需要2個(gè)周期完成輸入數(shù)據(jù)的讀取,則4個(gè)依次工作的蝶形運(yùn)算單元需要8個(gè)周期),進(jìn)行N/8次循環(huán)后,一級(jí)中的N/2個(gè)蝶形運(yùn)算計(jì)算完畢,由于在最后一個(gè)運(yùn)算單元讀取數(shù)據(jù)后還需要7個(gè)周期進(jìn)行運(yùn)算來得到最后的輸出數(shù)據(jù),因此每一級(jí)的時(shí)間可以設(shè)置為N(讀取數(shù)據(jù)的時(shí)間)+7(最后讀取完畢需運(yùn)算的時(shí)間)+1(讀地址與讀數(shù)據(jù)之間延遲的一拍)=N+8個(gè)周期。

      根據(jù)前面分析,對(duì)于支持1024點(diǎn)的FFT處理器而言,一級(jí)運(yùn)算需要1032個(gè)周期,計(jì)數(shù)器從0-1031來表示這1032個(gè)周期,其中0-1023周期在從數(shù)據(jù)存儲(chǔ)單元11或12中讀取信號(hào),此時(shí)讀使能為高,而對(duì)于4個(gè)蝶形運(yùn)算單元循環(huán)計(jì)算模式,每8個(gè)周期為一個(gè)循環(huán),因此這樣每8個(gè)周期便可出現(xiàn)一次,而其他的輸入使能均依次延遲一個(gè)周期,這樣便依次得到了4個(gè)蝶形運(yùn)算單元全部的8個(gè)輸入使能。

      而對(duì)于輸出數(shù)據(jù)而言,根據(jù)前面的分析,一個(gè)蝶形運(yùn)算單元輸出分為實(shí)部和虛部,實(shí)部輸出使能和虛部輸出使能均持續(xù)2個(gè)周期,而蝶形運(yùn)算單元輸入恰恰需要2個(gè)周期來讀取數(shù)據(jù),因此下一個(gè)蝶形運(yùn)算的結(jié)果正好比上一個(gè)蝶形運(yùn)算單元的結(jié)果晚出來2個(gè)周期,因此對(duì)于整體而言,輸出結(jié)果一直處于有效狀態(tài),對(duì)于實(shí)部輸出和虛部而言,每8個(gè)周期為一個(gè)循環(huán),依次輸入第一個(gè),第二個(gè),第三個(gè),第四個(gè)蝶形運(yùn)算單元的運(yùn)算結(jié)構(gòu),直至此輪計(jì)算完畢。

      需要說明的是,本實(shí)施方式中,采用4個(gè)蝶形運(yùn)算單元循環(huán)工作的模式,則4個(gè)蝶形運(yùn)算單元可以做為最小的基本運(yùn)算單元,又由于每?jī)牲c(diǎn)的輸入數(shù)據(jù),需要一個(gè)蝶形運(yùn)算單元,因此,最小可以支持N為8點(diǎn)的FFT處理器運(yùn)算,結(jié)合N=2k,可以理解,k為≥3的整數(shù)。

      本實(shí)施方式相對(duì)與現(xiàn)有技術(shù)而言,其主要的區(qū)別和效果在于:數(shù)據(jù)均勻存放在兩個(gè)數(shù)據(jù)存儲(chǔ)單元中,對(duì)于不同點(diǎn)數(shù)的輸入數(shù)據(jù)而言,可以被以同一規(guī)律進(jìn)行讀取,因此可以實(shí)現(xiàn)支持多點(diǎn)的運(yùn)算。數(shù)據(jù)讀寫單元按照產(chǎn)生的地址序列逐個(gè)讀取輸入數(shù)據(jù),并將按照產(chǎn)生的地址序列逐個(gè)讀取的輸入數(shù)據(jù)依次輸入多個(gè)蝶形運(yùn)算單元,并且數(shù)據(jù)讀寫單元會(huì)逐個(gè)存儲(chǔ)輸入、輸出的數(shù)據(jù),同一時(shí)間內(nèi),有一個(gè)輸入和一個(gè)輸出數(shù)據(jù),因此,只需要兩個(gè)數(shù)據(jù)存儲(chǔ)單元進(jìn)行數(shù)據(jù)的存儲(chǔ),可以節(jié)省電路面積。

      值得一提的是,本實(shí)施方式中所涉及到的各模塊均為邏輯模塊,在實(shí)際應(yīng)用中,一個(gè)邏輯單元可以是一個(gè)物理單元,也可以是一個(gè)物理單元的一部分,還可以以多個(gè)物理單元的組合實(shí)現(xiàn)。此外,為了突出本發(fā)明的創(chuàng)新部分,本實(shí)施方式中并沒有將與解決本發(fā)明所提出的技術(shù)問題關(guān)系不太密切的單元引入,但這并不表明本實(shí)施方式中不存在其它的單元。

      本發(fā)明的第二實(shí)施方式涉及一種FFT處理器。第二實(shí)施方式是第一實(shí)施方式的進(jìn)一步優(yōu)化,主要優(yōu)化之處在于:在本發(fā)明第二實(shí)施方式中,k的取值為k≤10,且各輸入數(shù)據(jù)的存放地址依次遞增。各數(shù)據(jù)存儲(chǔ)單元包括1024個(gè)地址,當(dāng)k=10,N=210=1024時(shí),各輸入數(shù)據(jù)依次存放;當(dāng)k≤9時(shí),各相鄰輸入數(shù)據(jù)的地址間隔相等??梢缘弥?,此外,根據(jù)k的取值不同,可以實(shí)現(xiàn)支持8-1024點(diǎn)的FFT處理器,即在不改變現(xiàn)有設(shè)備硬件環(huán)境下,例如,不改變數(shù)據(jù)存儲(chǔ)器的空間容量或地址信號(hào)位寬的情況下,可以實(shí)現(xiàn)支持最大點(diǎn)數(shù)范圍的FFT運(yùn)算。

      具體地說,在計(jì)算低點(diǎn)數(shù)的FFT過程中,將需要計(jì)算的數(shù)據(jù)寫入數(shù)據(jù)存儲(chǔ)單元中的地址并不是連續(xù)的,例如,對(duì)于512點(diǎn)FFT處理器,數(shù)據(jù)寫入數(shù)據(jù)存儲(chǔ)單元中地址是0、2、4、6…1022這樣跳變,而對(duì)于256點(diǎn)FFT,數(shù)據(jù)寫入數(shù)據(jù)存儲(chǔ)單元中的地址則是0、4、8、16...1020這樣變化,它們滿足的核心思想便是需要將數(shù)據(jù)均勻的占據(jù)整個(gè)地址空間,而不是連續(xù)的寫在地址空間中的某一塊中,對(duì)于均勻存放數(shù)據(jù)方式的具體限定,使得數(shù)據(jù)以同一規(guī)律被讀取,從而實(shí)現(xiàn)支持多點(diǎn)FFT運(yùn)算。

      需要說明的是,本實(shí)施方式不僅僅支持最大1024點(diǎn)的FFT處理器計(jì)算,還可以支持超過1024點(diǎn)的FFT處理器的運(yùn)算。如果需要支持更高點(diǎn)數(shù)的FFT處理器運(yùn)算,需要改動(dòng)的僅僅是定義更高k級(jí)數(shù),以及更大的數(shù)據(jù)存儲(chǔ)單元和更大bit的地址信號(hào)而已。

      本實(shí)施方式相對(duì)與現(xiàn)有技術(shù)而言,其主要的區(qū)別和效果在于:在不改變現(xiàn)有設(shè)備硬件環(huán)境下,例如,不改變數(shù)據(jù)存儲(chǔ)器的空間容量或地址信號(hào)位寬的情況下,可以實(shí)現(xiàn)支持最大點(diǎn)數(shù)范圍的FFT運(yùn)算。

      本發(fā)明第三實(shí)施方式涉及一種FFT運(yùn)算方法,如圖3所示,包括:

      步驟301:數(shù)據(jù)讀寫單元將從外部接收的輸入數(shù)據(jù)均勻存放在數(shù)據(jù)存儲(chǔ)單元。

      具體地說,數(shù)據(jù)讀寫單元將從外部接收的N個(gè)輸入數(shù)據(jù)均勻地存放在其中一個(gè)數(shù)據(jù)存儲(chǔ)單元中。N的數(shù)值為本實(shí)施方式中FFT處理器可以支持的點(diǎn)數(shù),N可以在不改變現(xiàn)有設(shè)備情況下,在允許點(diǎn)數(shù)的最大范圍內(nèi)進(jìn)行取值。并且,數(shù)據(jù)存儲(chǔ)單元中,預(yù)先導(dǎo)入要進(jìn)行FFT運(yùn)算的N個(gè)輸入數(shù)據(jù),N個(gè)輸入數(shù)據(jù)均勻存放在一個(gè)數(shù)據(jù)存儲(chǔ)單元中,其中,均勻分布可以理解為,需存儲(chǔ)數(shù)據(jù)在數(shù)據(jù)存儲(chǔ)單元中的地址間隔是一樣的,從而保證數(shù)據(jù)以相同規(guī)律被讀取,實(shí)現(xiàn)支持多點(diǎn)的運(yùn)算。

      步驟302:旋轉(zhuǎn)因子讀寫單元將從外部接收的旋轉(zhuǎn)因子存放在旋轉(zhuǎn)因子存儲(chǔ)單元。

      具體的說,旋轉(zhuǎn)因子讀寫單元將從外部接收的N/2個(gè)旋轉(zhuǎn)因子存放在所述旋轉(zhuǎn)因子存儲(chǔ)單元。由于在FFT運(yùn)算過程中,每?jī)蓚€(gè)輸入數(shù)據(jù)共同使用一個(gè)旋轉(zhuǎn)因子,如果輸入數(shù)據(jù)為N個(gè),則需要N/2個(gè)旋轉(zhuǎn)因子,才可以進(jìn)行FFT運(yùn)算。并且,N/2個(gè)旋轉(zhuǎn)因子是以旋轉(zhuǎn)因子表的形式通過旋轉(zhuǎn)因子讀寫單元預(yù)先存入旋轉(zhuǎn)因子存儲(chǔ)單元中。

      需要說明的是,步驟301和步驟302之間并沒有嚴(yán)格的邏輯順序,可以進(jìn)行順序的互換,數(shù)據(jù)讀寫單元將輸入數(shù)據(jù)存放在數(shù)據(jù)存儲(chǔ)單元與旋轉(zhuǎn)因子讀寫單元將數(shù)據(jù)存放在旋轉(zhuǎn)因子存儲(chǔ)單元的執(zhí)行順序前后,并不會(huì)對(duì)FFT運(yùn)算的結(jié)果造成任何的影響。

      步驟303:數(shù)據(jù)讀寫單元逐個(gè)讀取輸入數(shù)據(jù),并將其依次輸入蝶形運(yùn)算單元。

      具體地說,數(shù)據(jù)讀寫單元按照產(chǎn)生的地址序列逐個(gè)讀取N個(gè)輸入數(shù)據(jù),并將按照產(chǎn)生的地址序列逐個(gè)讀取的N個(gè)輸入數(shù)據(jù)依次輸入多個(gè)蝶形運(yùn)算單元。數(shù)據(jù)讀寫單元從其中一個(gè)數(shù)據(jù)存儲(chǔ)單元中獲取N個(gè)輸入數(shù)據(jù),并將獲取的N個(gè)輸入數(shù)據(jù)存入多個(gè)蝶形運(yùn)算單元。其中,基本的蝶形運(yùn)算單元為4個(gè)蝶形運(yùn)算單元。由于數(shù)據(jù)讀寫單元逐個(gè)讀寫數(shù)據(jù),因此,同一時(shí)間,只有一個(gè)輸入和一個(gè)輸出數(shù)據(jù),則只需要兩個(gè)數(shù)據(jù)存儲(chǔ)單元進(jìn)行數(shù)據(jù)存儲(chǔ),節(jié)省電路占用面積。

      步驟304:旋轉(zhuǎn)因子讀寫單元逐個(gè)讀取旋轉(zhuǎn)因子,并將其依次輸入蝶形運(yùn)算單元。

      具體地說,旋轉(zhuǎn)因子讀寫單元按照產(chǎn)生的地址序列逐個(gè)讀取N/2個(gè)旋轉(zhuǎn)因子,并將按照產(chǎn)生的地址序列逐個(gè)讀取的N/2個(gè)旋轉(zhuǎn)因子依次輸入多個(gè)蝶形運(yùn)算單元。通過旋轉(zhuǎn)因子讀寫單元,在旋轉(zhuǎn)因子存儲(chǔ)單元中,讀取出N/2個(gè)旋轉(zhuǎn)因子,并將讀取出的N/2個(gè)旋轉(zhuǎn)因子輸入多個(gè)蝶形運(yùn)算單元。

      需要說明的是,步驟303和步驟304之間并沒有嚴(yán)格的邏輯順序,可以進(jìn)行順序的互換,數(shù)據(jù)讀寫單元讀取輸入數(shù)據(jù)并存入蝶形運(yùn)算單元與旋轉(zhuǎn)因子讀寫單元讀取旋轉(zhuǎn)因子并存入蝶形運(yùn)算單元的執(zhí)行順序先后,并不會(huì)對(duì)FFT運(yùn)算的結(jié)果造成任何的影響。

      步驟305:蝶形運(yùn)算單元運(yùn)算得到輸出數(shù)據(jù)。

      具體地說,各蝶形運(yùn)算單元根據(jù)接收的各輸入數(shù)據(jù)與各旋轉(zhuǎn)因子運(yùn)算得到各輸出數(shù)據(jù)。利用4個(gè)蝶形運(yùn)算單元作為一個(gè)基本的單元循環(huán),通過數(shù)據(jù)讀寫單元和旋轉(zhuǎn)因子讀寫單元不停從數(shù)據(jù)存儲(chǔ)單元與旋轉(zhuǎn)因子存儲(chǔ)單元中讀取和寫入數(shù)據(jù)的基本結(jié)構(gòu),輸入數(shù)據(jù)與旋轉(zhuǎn)因子不斷的被選取,隨后被計(jì)算,隨后輸出數(shù)據(jù),僅僅只需要對(duì)每一級(jí)讀取的寫入的地址進(jìn)行相應(yīng)的轉(zhuǎn)換,便可以通過不停復(fù)用基本運(yùn)算單元來完成整個(gè)FFT運(yùn)算操作,并且減少空閑的等待時(shí)間。

      步驟306:數(shù)據(jù)讀寫單元將輸出數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)存儲(chǔ)單元。

      具體的說,數(shù)據(jù)讀寫單元將各輸出數(shù)據(jù)逐個(gè)存儲(chǔ)至另一個(gè)數(shù)據(jù)存儲(chǔ)單元。其中,步驟301中在數(shù)據(jù)存儲(chǔ)單元中讀取的數(shù)據(jù)地址與本步驟中存入另一個(gè)數(shù)據(jù)存儲(chǔ)單元的數(shù)據(jù)地址,需要保持一致,才能方便對(duì)讀寫數(shù)據(jù)進(jìn)行操作。

      步驟307:計(jì)數(shù)器記錄當(dāng)前循環(huán)級(jí)數(shù)。

      具體地說,數(shù)據(jù)讀寫單元在每完成一次輸出數(shù)據(jù)存儲(chǔ)時(shí),計(jì)數(shù)器自動(dòng)記錄當(dāng)前循環(huán)級(jí)數(shù)。其中,計(jì)數(shù)器的初始值為0,則代表初始運(yùn)算時(shí)循環(huán)級(jí)數(shù)為0,在每完成一次輸出數(shù)據(jù)存儲(chǔ)時(shí),計(jì)數(shù)器自動(dòng)加一,并將加一后的結(jié)果重新保存在計(jì)數(shù)器中。

      步驟308:判斷當(dāng)前循環(huán)級(jí)數(shù)與k值是否相等。

      具體地說,判斷計(jì)數(shù)器中保存的當(dāng)前值是否等于k值,如果等于,則進(jìn)入步驟309中,如果不等,則進(jìn)入步驟303。如果計(jì)數(shù)器中的值與k值相同,則說明已經(jīng)完成全部的FFT運(yùn)算,并進(jìn)入步驟309中。否則,說明當(dāng)前循環(huán)級(jí)數(shù)小于k值,即還未完成k級(jí)循環(huán)運(yùn)算,則進(jìn)入步驟303中,重新獲取下一級(jí)的輸入數(shù)據(jù)和旋轉(zhuǎn)因子,并將它們輸入蝶形運(yùn)算單元,直至完成所有k級(jí)的運(yùn)算為止。

      其中,各輸出數(shù)據(jù)作為下一級(jí)運(yùn)算的各輸入數(shù)據(jù),并且在步驟301和步驟302中,由于從外部接收的輸入數(shù)據(jù)和旋轉(zhuǎn)因子分別預(yù)先存入數(shù)據(jù)存儲(chǔ)單元和旋轉(zhuǎn)因子存儲(chǔ)單元,因此,并不進(jìn)入k級(jí)循環(huán)計(jì)算中。

      步驟309:清空計(jì)數(shù)器。

      具體的說,當(dāng)循環(huán)級(jí)數(shù)等于k值時(shí),即已經(jīng)完成了k級(jí)運(yùn)算,則清空計(jì)數(shù)器的值,在下次FFT運(yùn)算中,重新計(jì)數(shù),即重新計(jì)算運(yùn)算級(jí)數(shù)。

      本實(shí)施方式中含有2個(gè)相同的數(shù)據(jù)存儲(chǔ)單元,兩個(gè)數(shù)據(jù)存儲(chǔ)單元既可存儲(chǔ)輸入數(shù)據(jù),也可以存儲(chǔ)輸出數(shù)據(jù),2個(gè)數(shù)據(jù)存儲(chǔ)單元以乒乓RAM的形式進(jìn)行數(shù)據(jù)的存儲(chǔ)。可以理解為,對(duì)于每一級(jí)的FFT運(yùn)算,需要從第一個(gè)數(shù)據(jù)存儲(chǔ)單元中獲取輸入數(shù)據(jù),并將計(jì)算后的結(jié)果輸出到第二個(gè)數(shù)據(jù)存儲(chǔ)單元,下一級(jí)的FFT運(yùn)算就將從第二個(gè)數(shù)據(jù)存儲(chǔ)單元中獲取輸入數(shù)據(jù),并將計(jì)算后的輸出數(shù)據(jù)第一個(gè)存入數(shù)據(jù)存儲(chǔ)單元中。

      其中,k的值的選取可以確定FFT運(yùn)算可以支持的點(diǎn)數(shù),并且FFT運(yùn)算共運(yùn)行k級(jí)循環(huán)。

      本實(shí)施方式相對(duì)與現(xiàn)有技術(shù)而言,其主要的區(qū)別和效果在于:數(shù)據(jù)均勻存放在兩個(gè)數(shù)據(jù)存儲(chǔ)單元中,對(duì)于不同點(diǎn)數(shù)的輸入數(shù)據(jù)而言,可以采用同一讀取規(guī)律進(jìn)行讀取,因此可以實(shí)現(xiàn)支持多點(diǎn)的運(yùn)算。數(shù)據(jù)讀寫單元按照產(chǎn)生的地址序列逐個(gè)讀取輸入數(shù)據(jù),并將按照產(chǎn)生的地址序列逐個(gè)讀取的輸入數(shù)據(jù)依次輸入多個(gè)蝶形運(yùn)算單元,并將各蝶形運(yùn)算單元的輸出數(shù)據(jù)逐個(gè)存儲(chǔ),即同一時(shí)間內(nèi),有一個(gè)輸入和一個(gè)輸出數(shù)據(jù),因此,只需要兩個(gè)數(shù)據(jù)存儲(chǔ)單元進(jìn)行數(shù)據(jù)的存儲(chǔ),可以節(jié)省電路面積。

      不難發(fā)現(xiàn),本實(shí)施方式為與第一實(shí)施方式相對(duì)應(yīng)的方法實(shí)施例,本實(shí)施方式可與第一實(shí)施方式互相配合實(shí)施。第一實(shí)施方式中提到的相關(guān)技術(shù)細(xì)節(jié)在本實(shí)施方式中依然有效,為了減少重復(fù),這里不再贅述。相應(yīng)地,本實(shí)施方式中提到的相關(guān)技術(shù)細(xì)節(jié)也可應(yīng)用在第一實(shí)施方式中。

      本發(fā)明第四實(shí)施方式涉及一種FFT運(yùn)算方法。第四實(shí)施方式是第三實(shí)施方式進(jìn)一步優(yōu)化,主要優(yōu)化之處在于:在本發(fā)明第四實(shí)施方式中,提供了一種輸入數(shù)據(jù)的讀取地址的產(chǎn)生方式;即,對(duì)于第i級(jí)運(yùn)算,其中i=0,1……,k,在數(shù)據(jù)讀寫單元按照產(chǎn)生的地址序列逐個(gè)讀取N個(gè)輸入數(shù)據(jù)中,本實(shí)施方式提供的各輸入數(shù)據(jù)的讀取地址的產(chǎn)生方式可以保證讀取數(shù)據(jù)的正確性。其中,對(duì)第三實(shí)施方式中步驟303數(shù)據(jù)讀寫單元逐個(gè)讀取N個(gè)輸入數(shù)據(jù)中,各輸入數(shù)據(jù)地址產(chǎn)生方式的流程圖,如圖4所示,包括:

      步驟401:獲取個(gè)輸入數(shù)據(jù)對(duì)應(yīng)的計(jì)數(shù)器二進(jìn)制數(shù)列。

      具體地說,獲取各輸入數(shù)據(jù)對(duì)應(yīng)的計(jì)數(shù)器二進(jìn)制數(shù)列。通過數(shù)據(jù)讀寫單元獲取的輸入數(shù)據(jù)為十進(jìn)制的數(shù)據(jù),在獲取到十進(jìn)制的輸入數(shù)據(jù)后,將十進(jìn)制的輸入數(shù)據(jù)轉(zhuǎn)化為二進(jìn)制的輸入數(shù)據(jù)。例如,獲取的十進(jìn)制的輸入數(shù)據(jù)地址為“1”。由于在本實(shí)施方式中,k的取值為小于等于10,如果k的取值為10,即N=1024。獲取的十進(jìn)制數(shù)據(jù)地址為“1”對(duì)應(yīng)轉(zhuǎn)換后的二進(jìn)制輸入數(shù)據(jù)地址為“0000000001”。

      步驟402:將計(jì)數(shù)器二進(jìn)制數(shù)列中的最后i+1位取倒數(shù)。

      具體地說,對(duì)于i為第0級(jí),則步驟401中獲取的二進(jìn)制輸入數(shù)據(jù)地址通過本步驟后,輸出為“0000000001”;

      對(duì)于i為第1級(jí),則步驟401中獲取的二進(jìn)制輸入數(shù)據(jù)地址通過本步驟后,輸出為“0000000010”

      步驟403:將最后i+1位取倒數(shù)后的整個(gè)數(shù)據(jù)取倒數(shù),以作為各輸入數(shù)據(jù)的讀取地址。

      具體地說,對(duì)于i為第0級(jí),則步驟402中獲取的二進(jìn)制輸入數(shù)據(jù)地址通過本步驟后,輸出的二進(jìn)制數(shù)據(jù)地址為“1000000000”,對(duì)應(yīng)的十進(jìn)制的數(shù)據(jù)地址為“512”;

      對(duì)于i為第1級(jí),則步驟402中獲取的二進(jìn)制輸入數(shù)據(jù)地址通過本步驟后,輸出的二進(jìn)制數(shù)據(jù)地址為“0100000000”,對(duì)應(yīng)的十進(jìn)制的數(shù)據(jù)地址為“256”。

      可以看出,讀地址的選取規(guī)律:對(duì)于第k級(jí),輸入數(shù)據(jù)地址序列為計(jì)數(shù)器二進(jìn)制數(shù)列取最后k+1位的倒數(shù)后再將整個(gè)數(shù)據(jù)變?yōu)榈箶?shù)。

      以1024點(diǎn)FFT運(yùn)算為例,我們首先通過做一個(gè)計(jì)數(shù)器從0計(jì)數(shù)到1023,對(duì)這個(gè)序列進(jìn)行對(duì)應(yīng)的讀地址轉(zhuǎn)換,轉(zhuǎn)換出來的序列為0、512、256、768…則意味著送入第一個(gè)蝶形運(yùn)算單元中的數(shù)據(jù)為地址0和地址512中的數(shù)據(jù),送入第二個(gè)蝶形運(yùn)算單元中的數(shù)據(jù)為地址256和地址768中的數(shù)據(jù),依次類推,數(shù)據(jù)按照此規(guī)律依次送入蝶形運(yùn)算單元中,并在計(jì)算完畢后依次被取出。

      本實(shí)施方式相對(duì)與現(xiàn)有技術(shù)而言,其主要的區(qū)別和效果在于:對(duì)數(shù)據(jù)存儲(chǔ)地址進(jìn)行合理的分配,保證完成正確的FFT運(yùn)算。

      本發(fā)明第五實(shí)施方式涉及一種FFT運(yùn)算方法。第五實(shí)施方式是第三實(shí)施方式進(jìn)一步優(yōu)化,主要優(yōu)化之處在于:在本發(fā)明第五實(shí)施方式中,對(duì)于第i級(jí)運(yùn)算,在旋轉(zhuǎn)因子讀寫單元按照產(chǎn)生的地址序列逐個(gè)讀取N/2個(gè)旋轉(zhuǎn)因子中,N/2個(gè)旋轉(zhuǎn)因子的讀取地址序列的產(chǎn)生方式。其中,對(duì)第三實(shí)施方式中步驟304旋轉(zhuǎn)因子讀寫單元按照產(chǎn)生的地址序列逐個(gè)讀取N/2個(gè)旋轉(zhuǎn)因子中,各旋轉(zhuǎn)因子地址產(chǎn)生方式的流程圖,如圖5所示,包括:

      步驟501:生成計(jì)數(shù)序列。

      具體地說,生成一個(gè)計(jì)數(shù)序列,計(jì)數(shù)序列表示為:0、1、2、3、……、2i-1??梢岳斫猓瑢?duì)于第0級(jí),即i=0時(shí),計(jì)數(shù)序列為0、0、0…

      對(duì)于第1級(jí),計(jì)數(shù)序列為0、1、0、1…;

      對(duì)于第2級(jí),計(jì)數(shù)序列為0、1、2、3、0、1、2、3…;

      對(duì)于第i級(jí),計(jì)數(shù)序列為0、1、2、3、…2i-1、0、1、2、3…

      步驟502:將計(jì)數(shù)序列取倒數(shù)作為旋轉(zhuǎn)因子讀取地址序列。

      具體地說,將計(jì)數(shù)序列0、1、2、3、……、2i-1取倒數(shù)后表示為:0、512、256、768……,以作為N/2個(gè)旋轉(zhuǎn)因子的讀取地址序列。例如,對(duì)于第2級(jí),計(jì)數(shù)序列為0、1、2、3、0、1、2、3…,取倒數(shù)后表示為:0、512、256、768、0、512、256、768…

      旋轉(zhuǎn)因子的地址選取方式的原理在于因此對(duì)于每一級(jí)所需要的選取的旋轉(zhuǎn)因子值,均能轉(zhuǎn)化為其中k的取值范圍為0-511,這樣只需要有一塊1KB的存儲(chǔ)單元,則可存入所有的旋轉(zhuǎn)因子,同時(shí)根據(jù)地址的變化,讀出合適的旋轉(zhuǎn)因子送入蝶形運(yùn)算單元進(jìn)行運(yùn)算。通過分析FFT算法中旋轉(zhuǎn)因子在每一級(jí)的取值,并將它們轉(zhuǎn)化成同時(shí)將k作為從存儲(chǔ)單元中讀取選旋轉(zhuǎn)因子所使用的地址,地址序列滿足一定的規(guī)律,對(duì)規(guī)律進(jìn)行總結(jié)可以得到如本實(shí)施方式介紹的地址產(chǎn)生方式。

      上面各種方法的步驟劃分,只是為了描述清楚,實(shí)現(xiàn)時(shí)可以合并為一個(gè)步驟或者對(duì)某些步驟進(jìn)行拆分,分解為多個(gè)步驟,只要包括相同的邏輯關(guān)系,都在本專利的保護(hù)范圍內(nèi);對(duì)算法中或者流程中添加無關(guān)緊要的修改或者引入無關(guān)緊要的設(shè)計(jì),但不改變其算法和流程的核心設(shè)計(jì)都在該專利的保護(hù)范圍內(nèi)。

      本領(lǐng)域技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,該程序存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一個(gè)設(shè)備(可以是單片機(jī),芯片等)或處理器(processor)執(zhí)行本申請(qǐng)各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。

      本領(lǐng)域的普通技術(shù)人員可以理解,上述各實(shí)施方式是實(shí)現(xiàn)本發(fā)明的具體實(shí)施例,而在實(shí)際應(yīng)用中,可以在形式上和細(xì)節(jié)上對(duì)其作各種改變,而不偏離本發(fā)明的精神和范圍。

      當(dāng)前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1