在定點dsp晶元中,採用定點數進行數值運算,其運算元一般採用整型數來表示。
乙個整型數的最大表示範圍取決於dsp晶元所給定的字長,一般為16位或24位。
顯然,字長越長,所能表示的數的範圍越大,精度也越高。
數的定標 :由程式設計師來確定乙個數的小數點處於16位中的哪一位 ,通過設定小數點在16位數中的不同位置,就可以表示不同大小和不同精度的小數 。
方法:q
表示法和
s
表示法
同樣乙個16位數,若小數點設定的位置不同,它所表示的數也就不同 ,但對於dsp晶元來說,處理方法是完全相同的。
對定點數而言,數值範圍與精度是一對矛盾,乙個變數要想能夠表示比較大的數值範圍,必須以犧牲精度為代價;而想提高精度,則數的表示範圍就相應地減小。
n浮點數與定點數的轉換關係為:
n浮點數(x)轉換為定點數( xq ):
xq = (int)x * 2 ^q
n定點數( xq)轉換為浮點數(x):
x = (float) xq * 2 ^-q
n以加法為例:設浮點加法運算的表示式為:
float x,y,z;
z=x+y;
n將浮點加法轉化為定點加法時最重要的一點就是必須保證兩個運算元的定標值一樣。
n若兩者不一樣,則在做加法/減法運算前先進行小數點的調整。
n調整方法:為保證運算精度,需使q值小的數調整為與另乙個數的q值一樣大。
n在做加法運算時,必須注意結果可能會超過16位表示。如果加法的結果超出16位的表示範圍,則必須保留32位結果,以保證運算的精度。
設x的q值為qx,y的為qy。z的為qz,則z = x + y => zq * 2 ^ -qz = xq * 2 ^-qx + yq * 2 ^-qy
運算得到 zq = [xq + yq * 2 ^(qx- qy)] * 2 ^(qx - qy)
定點加法可以描述為:
int x,y,z;
long temp; /*臨時變數*/
temp=y<<(qx-qy);
temp=x+temp;
z=(int)(temp>>(qx-qz)), 若qx≥qz
z=(int)(temp<<(qz-qx)), 若qx≤qz
n當加法或加法的結果超過16位表示範圍時,如果程式設計師事先能夠了解到這種情況,並且需要保證運算精度時,則必須保持32位結果。
n如果程式中是按照16位數進行運算的,則超過16位實際上就出現了溢位。
n一般的定點dsp晶元都設有溢位保護功能,當溢位保護功能有效時,一旦出現溢位,則累加器acc的結果為最大的飽和值,從而達到防止溢位引起精度嚴重惡化的目的。
定點表示的乘法為:
int x,y,z;
long temp;
temp = (long)x;
z = (temp×y) >> (qx+qy-qz);
定點表示的除法為:
int x,y,z;
long temp;
temp = (long)x;
z = (temp<<(qz-qx+qy))/y;
q值確定
在實際的dsp應用中,程式中參與運算的都是變數,那麼如何確定浮點程式中變數的q值呢?
從前面的分析可以知道,確定變數的q值實際上就是確定變數的動態範圍,動態範圍確定了,則q值也就確定了。
設變數的絕對值的最大值為max,注意它必須小於或等於32767。取乙個整數n,使它滿足 2^n-1 < |max| < 2^n
則有
q = 15-n
兩種方法:一種是理論分析法,另一種是統計分析法。
1.理論分析法
有些變數的動態範圍通過理論分析是可以確定的。例如:
n(1) 三角函式,
y = sin(
x)或y = cos(
x),由三角函式知識可知,|
y|≤1;
n(2) 漢明窗,
y(n) = 0.54-0.46cos [2p
n/(n-1)] ,0≤
n≤n-1。因為-1≤cos [2p
n/(n-1)]≤1,所以0.08≤
y(n)≤1.0;
n2.統計分析法
對於理論上無法確定範圍的變數,一般採用統計分析的方法來確定其動態範圍。就是用足夠多的輸入訊號樣值來確定程式中變數的動態範圍,這裡輸入訊號一方面要有一定的數量,另一方面必須盡可能地涉及各種情況。
n當然,統計分析畢竟不可能涉及所有可能發生的情況,因此,對統計得出的結果在程式設計時可採取一些保護措施,如適當犧牲一些精度,q值取比統計值稍小些,使用dsp晶元提供的溢位保護功能等。
DSP 定點小數運算
許多dsp晶元只支援整數運算,如果現在這些晶元上進行小數運算的話,定點小數運算應該是最佳選擇了,此外即使晶元支援浮點數,定點小數運算也是最佳的速度選擇。在dsp 世界中,由於dsp晶元的限制,經常使用定點小數運算。所謂定點小數,實際上就是用整數來進行小數運算。下面先介紹定點小數的一些理論知識,然後以...
DSP中浮點轉定點運算
5 舉例及程式設計中的心得 5 1舉例 第3章 dsp晶元的定點運算.doc 這篇文章中給了乙個很簡單有能說明問題的例子,不想動大腦了,直接引用過來如下。這是乙個對語音頻號 0.3khz 3.4khz 進行低通濾波的c語言程式,低通濾波的截止頻率為800hz,濾波器採用19點的有限衝擊響應fir濾波...
IQMath是什麼 浮點轉定點運算,dsp
註明出處 blog.csdn.net lanmanck 網上搜了一下沒發現很合適的,特寫出來與大家分享。大家都知道嵌入式系統裡帶浮點運算指令的cpu都比較少,ti的dsp也是定點的便宜。那麼我們運算時想把浮點數速度提高怎麼辦?有人就想到了,把浮點轉成定點就可以了。好了iqmath就是幹這個事的。舉個...