dsp演算法系列教程定點算數運算
1 數的定標
在定點dsp晶元中,採用定點數進行數值運算,其運算元一般採用整型數來表示。乙個整型數的最大表示範圍取決於dsp晶元所給定的字長,一般為16位或24位。顯然,字長越長,所能表示的數的範圍越大,精度也越高。如無特別說明,本書均以16位字長為例。
dsp晶元的數以2的補碼形式表示。每個16位數用乙個符號位來表示數的正負,0表示數值為正,l則表示數值為負。其餘15位表示數值的大小。因此,
二進位制數0010000000000011b=8195
二進位制數1111111111111100b= -4
對dsp晶元而言,參與數值運算的數就是16位的整型數。但在許多情況下,數**算過程中的數不一定都是整數。那麼,dsp晶元是如何處理小數的呢?應該說,dsp晶元本身無能為力。那麼是不是說dsp晶元就不能處理各種小數呢?當然不是。這其中的關鍵就是由程式設計師來確定乙個數的小數點處於16位中的哪一位。這就是數的定標。
通過設定小數點在16位數中的不同位置,就可以表示不同大小和不同精度的小數了。數的定標有q表示法和s表示法兩種。表1.1列出了乙個16位數的16種q表示、s表示及它們所能表示的十進位制數值範圍。
從表1.1可以看出,同樣乙個16位數,若小數點設定的位置不同,它所表示的數也就不同。例如,
16進製制數2000h=8192,用q0表示
16進製制數2000h=0.25,用q15表示
但對於dsp晶元來說,處理方法是完全相同的。
從表1.1還可以看出,不同的q所表示的數不僅範圍不同,而且精度也不相同。q越大,數值範圍越小,但精度越高;相反,q越小,數值範圍越大,但精度就越低。例如,q0 的數值範圍是一32768到+32767,其精度為1,而q15的數值範圍為-1到0.9999695,精度為1/32768=0.00003051。因此,對定點數而言,數值範圍與精度是一對矛盾,乙個變數要想能夠表示比較大的數值範圍,必須以犧牲精度為代價;而想精度提高,則數的表示範圍就相應地減小。在實際的定點演算法中,為了達到最佳的效能,必須充分考慮到這一點.
浮點數與定點數的轉換關係可表示為:
浮點數(x)轉換為定點數(xq):xq=(int)x* 2q
定點數(xq)轉換為浮點數(x):x=(float)xq*2-q
例如,浮點數x=0.5,定標q=15,則定點數xq=l0.5*32768j=16384,式中lj表示下取整。反之,乙個用q=15表示的定點數16384,其浮點數為163幼*2-15=16384/32768=0.5。浮點數轉換為定點數時,為了降低截尾誤差,在取整前可以先加上0.5。
表1.1 q表示、s表示及數值範圍q表示 s表示 十進位制數表示範圍
q15 s0.15 -1≤x≤0.9999695
q14 s1.14 -2≤x≤1.9999390
q13 s2.13 -4≤x≤3.9998779
q12 s3.12 -8≤x≤7.9997559
q11 s4.11 -16≤x≤15.9995117
q10 s5.10 -32≤x≤31.9990234
q9 s6.9 -64≤x≤63.9980469
q8 s7.8 -128≤x≤127.9960938
q7 s8.7 -256≤x≤255.9921875
q6 s9.6 -512≤x≤511.9804375
q5 s10.5 -1024≤x≤1023.96875
q4 s11.4 -2048≤x≤2047.9375
q3 s12.3 -4096≤x≤4095.875
q2 s13.2 -8192≤x≤8191.75
q1 s14.1 -16384≤x≤16383.5
q0 s15.0 -32768≤x≤32767
ti的可以參照iqmath庫
演算法系列教程01 開篇
為什麼要學習演算法呢?我個人覺得最終目的還是為了提高自己的職場競爭力。演算法的本質就是解決問題,所以學習演算法本質上是在提高解決問題的能力,這是職場最重要的能力之一。另外,如果你想在面試中表現得更加出色,也要對演算法有一定程度的掌握。寫教程是很耗費精力的,而且學習演算法是很枯燥的,但如果大家都能參與...
MATLAB 定點演算法的設計和實現
jianping chen,mathworks 作為演算法研究和實現流程中一步,定點演算法設計起著承前啟後的關鍵作用。現代嵌入式系統,fpga和asic的實現,都需要把研究部門的成果在動手轉換之前,轉化為定點的演算法。定點的結果需要保證演算法的正確性和硬體實現的可行性,如何得到乙個可靠的定點演算法,...
java演算法系列
棧的概念 棧是一種特殊的線性表,堆疊的資料元素以及資料元素之間的關係和線性表是完全一樣的。差別是線性表是在任意位置進行插入和刪除操作,棧是只允許在固定的一端進行插入和刪除,棧的插入和刪除只允許在棧頂,棧的插入和刪除通常稱為進棧和出棧。資料集合 每個資料元素的資料型別可以是任意的型別 操作的集合 進棧...