前言:如果說要在16bit定點(diǎn)環(huán)境上使用DSP算法,如IIR構(gòu)成的2P2Z,會受到定點(diǎn)編程和量化精度的問題。如果說在float32環(huán)境上可以很容易進(jìn)行編程,那切換到定點(diǎn)環(huán)境上就不得不得考慮這些問題。
通常情況下單精度浮點(diǎn)在小數(shù)點(diǎn)后的精度為1/(2^23),理論上使用32位定點(diǎn)IQ24就可以覆蓋單精度浮點(diǎn)的精度問題,但是在16bit上,使用i1.q15的方法來算,僅有1/(2^15)的精度,如果直接使用則會遇到量化精度引起的誤差問題。那么該如何把浮點(diǎn)切換到16bit的定點(diǎn)來呢,下面將一步一步的來進(jìn)行討論。
S1 傳遞函數(shù)離散
離散化:
帶入參數(shù),并出歸一化的z域傳遞函數(shù),這里把分母的z^2提出來,然后全部除以其它的數(shù)字,即可得到:
S2 使用IQ15的方法量化:
可見,a1項(xiàng)為最大,即可把全部數(shù)字除以a1項(xiàng),讓它用滿15bit的字長,可得:
然后乘以2^15,得到:
S3 提升B系數(shù):這里可以看到分子項(xiàng)上B0/B2的數(shù)字太小,所以為了提高量化精度,可以在B系數(shù)上繼續(xù)擴(kuò)大到2^12,這樣可以更多的利用字長,最后在輸出上除去引入增益即可。
可得B系數(shù)更新為。
然后考慮一下分母量化為32786時(shí)引入的增益:1.99998,在編程上考慮先左移1位然后再考慮小數(shù)點(diǎn)(32709/32678)即可引入增益。然后開始測試定點(diǎn)化后的PR控制器:
S4 測試:輸入測試信號為50hz正弦波:
run,這里使用floor函數(shù),進(jìn)行向下取整來進(jìn)行定點(diǎn)化:
S5 輸出:可見定點(diǎn)和浮點(diǎn)的輸出波形幾乎接近,存在很小的誤差,屬于可以接受的量化精度。
小結(jié):可見在充分利用上32768的精度后,PR控制器很好的運(yùn)行在16bit環(huán)境上,如果是32bit的定點(diǎn)環(huán)境,則無需這么麻煩,直接使用I6Q24即可達(dá)到單精度浮點(diǎn)的精度。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報(bào)投訴
相關(guān)推薦
PCM1794A支持I2S協(xié)議的16bit數(shù)據(jù)嗎?測試時(shí)不出聲音,切換到24bit數(shù)據(jù)就能夠正常出聲了,手冊里I2S協(xié)議給了參考波形是24bit數(shù)據(jù)的,PCM1794A是否支持向下兼
發(fā)表于 09-30 08:06
大家好, #28335以浮點(diǎn)支持而著稱,但同時(shí)可以支持定點(diǎn);不知道大家在實(shí)際使用過程中,更多地是使用定點(diǎn),還是浮點(diǎn)呢?各有哪些優(yōu)劣
發(fā)表于 03-23 11:12
最近在學(xué)習(xí)網(wǎng)卡驅(qū)動的編寫,調(diào)試的時(shí)候發(fā)現(xiàn)接收數(shù)據(jù)的時(shí)候隔了16bit(本身的讀寫寬度是16bit),查看反匯編文件發(fā)現(xiàn)編譯器在編譯的時(shí)候把讀取16bit數(shù)據(jù)的一次操作分成了2次8
發(fā)表于 04-18 09:50
McASP;2. FrameSync是高電平時(shí)長32個bit,低電平時(shí)長32個bit;3. 有效數(shù)據(jù)是左對齊,時(shí)長16個bit;問題是這樣的:1. McASP采集這樣的時(shí)序,是按照
發(fā)表于 05-28 10:22
dm8127 的Camera Interface (I/F)支持YCbCr 16bit的嗎?
9.12 Imaging Subsystem (ISS)
Parallel Camera (CAM
發(fā)表于 05-28 06:14
慢一倍,不知道什么原因?另外C64+系列的定點(diǎn)虛擬庫中,有定義16bit數(shù)據(jù)的類型,但沒有想過不同Q值得運(yùn)算函數(shù)。懷疑是不是數(shù)據(jù)長度依舊采用32bit所以速度沒有顯著提升。求大神解答!
1、C6618
發(fā)表于 06-21 11:23
編譯選項(xiàng)選擇6700+。定點(diǎn)浮點(diǎn)結(jié)合可以在-mv編譯選項(xiàng)選擇6748?,F(xiàn)在我想寫一段程序,這段程序先用浮點(diǎn)運(yùn)算計(jì)算一個公式,算完之后再用定點(diǎn)運(yùn)算計(jì)算這個公式,請問我
發(fā)表于 08-02 08:54
bit 為一組。結(jié)論:不管是16-bit 還是 32-bit 的MCU,地址對應(yīng)的最小單元都是1個byte,它們的區(qū)別在于一次訪問的最大內(nèi)存是 32bit 還是
發(fā)表于 11-01 07:12
1、用EFM8L芯片作為spi從設(shè)備,接收16bit的數(shù)據(jù),該數(shù)據(jù)速率達(dá)到8M。數(shù)據(jù)手冊上該芯片spi支持高達(dá)12M速率。現(xiàn)在通過兩次中斷把數(shù)據(jù)放在數(shù)組中,湊成
發(fā)表于 12-21 11:17
定點(diǎn)dsp浮點(diǎn)運(yùn)算的多媒體視頻教程:
發(fā)表于 01-24 09:14
?50次下載
16Bit Group Ripple Adder。
發(fā)表于 03-21 15:07
?0次下載
浮點(diǎn)程序已經(jīng)給出了,那么定點(diǎn)程序會是什么樣子呢?為什么要進(jìn)行定點(diǎn)仿真呢?這是產(chǎn)品的要求!很多產(chǎn)品中用于實(shí)現(xiàn)算法的器件都會是FPGA或者DSP
發(fā)表于 06-29 14:19
?3320次閱讀
bit 為一組。結(jié)論:不管是16-bit 還是 32-bit 的MCU,地址對應(yīng)的最小單元都是1個byte,它們的區(qū)別在于一次訪問的最大內(nèi)存是 32bit 還是
發(fā)表于 10-25 16:36
?11次下載
通常情況下單精度浮點(diǎn)在小數(shù)點(diǎn)后的精度為1/(2^23),理論上使用32位定點(diǎn)IQ24就可以覆蓋單精度浮點(diǎn)的精度問題,但是在16bit上,使用i1.q15的方法來算,僅有1/(2^15)
發(fā)表于 02-08 15:11
?1134次閱讀
電子發(fā)燒友網(wǎng)為你提供ADI(ADI)AD9088: 阿波羅MxFE Octal, 16Bit, 16PSS RF DAC和Octal, 12Bit, 8 PSS RF ADC初步數(shù)據(jù)表相關(guān)產(chǎn)品參數(shù)
發(fā)表于 10-09 18:45
評論