GrowthNudge 你的成長,我來助推! 公眾號(hào)《成長助推》致力于分享實(shí)用工具、必備技能、思維方法,以助推成長為目標(biāo),長期有效的提供價(jià)值內(nèi)容。 今日助推小目標(biāo): 1. Matlab對(duì)定點(diǎn)算法問題的仿真。模擬實(shí)際中會(huì)出現(xiàn)的問題。 2. 基于時(shí)間抽選(DIT)的FFT算法實(shí)現(xiàn)。給出仿真源碼,可發(fā)送關(guān)鍵詞“fi_FFT”直接下載,長期有效。 我們?cè)诜治鲆粋€(gè)信號(hào)的頻譜時(shí),通常會(huì)用到離散時(shí)間序列的DFT,而FFT則是DFT的快速算法。平時(shí)你在Matlab中采用FFT函數(shù)直接計(jì)算時(shí),似乎并沒有關(guān)系其精度問題。 而在實(shí)際的工程中,算法的處理是有限精度的,另外,DFT的系數(shù)也是有限字長的。這些因素都會(huì)影響離散時(shí)間信號(hào)DFT的最終結(jié)果。 定點(diǎn)FFT的算法不同,運(yùn)算的有限字長效應(yīng)也會(huì)不同。通常有兩種評(píng)估有限精度算法影響的方法。一種是,采用詳細(xì)的分析來預(yù)測對(duì)最終輸出的影響;另一種則是通過采用有限精度算法來仿真系統(tǒng)的實(shí)現(xiàn)。 通常一般會(huì)采用后者,因?yàn)楹唵畏奖愕统杀?,這就需要先對(duì)Matlab進(jìn)行定點(diǎn)運(yùn)算的設(shè)置。 Matlab程序?qū)崿F(xiàn)了基于時(shí)間抽取(DIT)的FFT算法,采用了有限精度的定點(diǎn)算法。算法還計(jì)算了輸入序列的全精度DFT,以及全精度和有限精度的差值。并繪圖直觀表現(xiàn)出來: 左邊圖是時(shí)域信號(hào),基本看不出全精度和8位定點(diǎn)精度的差別。右圖上面是對(duì)左邊時(shí)域信號(hào)做的FFT,紅色線表示全精度,藍(lán)色線表示有限精度,下面就是二種方法的差值,并計(jì)算了最大絕對(duì)誤差是0.018。 當(dāng)把定點(diǎn)精度從8位改成4位,差別就比較明顯了,最大絕對(duì)誤差也擴(kuò)大到了0.199。 |
|