DSP演算法系列教程定點算數運算

2021-06-19 03:37:41 字數 1986 閱讀 1061

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演算法系列

棧的概念 棧是一種特殊的線性表,堆疊的資料元素以及資料元素之間的關係和線性表是完全一樣的。差別是線性表是在任意位置進行插入和刪除操作,棧是只允許在固定的一端進行插入和刪除,棧的插入和刪除只允許在棧頂,棧的插入和刪除通常稱為進棧和出棧。資料集合 每個資料元素的資料型別可以是任意的型別 操作的集合 進棧...