筆者最近用FPGA實作的64點IFFT,記錄一下作為筆記也可以為各位讀者提供一個思路,(輸入12bit實數+12bit虛數)
IFFT演算法的原理這里就不再贅述,主要講解演算法的實作程序,
如圖2:我們要用FPGA實作此演算法的話,利用流水線的思想,可分為如下幾步:1.輸入重新排序,2.對應資料與蝶形算子相乘,3.將復乘結果與對應資料相加/減得到輸出,4.輸出作為輸入參與下一級運算直到最后一級,
1.輸入排序:如下面圖1和圖2所示,輸入序列的順序就是自然序的二進制的倒序對應的十進制數,

圖1

圖2
2.復乘運算:復乘運算的物件是每一級的輸入資料與旋轉因子,旋轉因子實際的值是實部虛部都不大于1的復數,如果不對旋轉因子進行放大就去參與復乘運算需要浮點運算,而fpga實作浮點運算特別消耗資源,所以這里我將旋轉因子×2^10后變成12bit復數與對應的每一級輸入進行復乘運算,運算工具用vivado自帶的Complex Multiplier IP核,
注:因為 在運算前將旋轉因子×2^10,對于復乘后的結果要右移十位,此外,我們可以根據結果適當刪去不需要的位數,例如這里的復乘是實虛12bit資料×實虛12bit旋轉因子,本來復乘需要乘法和加法兩次運算,而每次運算導致結果都會增加1bit,但在這里擴大后的旋轉因子最大只有2^10,與資料相乘后的最大值并不達到要擴充位數的標準,所以這里的復乘運算的結果是實部虛部都是13bit的復數,于是我們可以對Complex Multiplier IP核輸出的結果進行截位以減少資源消耗,
3.加/減法運算:將復乘后的結果與對應輸入相加/減得出這一級的輸出,
4.下一級重復上述操作直到最后一級,
附:對于批量編輯代碼的問題,我們可以利用matlab提供的互動式操作方式去產生我們想要的結果復制后利用在文本編輯器的列模式下粘貼,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/523893.html
標籤:其他
上一篇:phpt檔案內容決議
