日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

定点数的定标

發(fā)布時(shí)間:2023/12/19 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 定点数的定标 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自:http://blog.csdn.net/longxuekun1992/article/details/52895302

1. 選取合適的定標(biāo)值(加載操作數(shù))
定標(biāo)的大小,影響著整數(shù)部分和小數(shù)部分的位數(shù),定標(biāo)的過(guò)程其實(shí)是在操作數(shù)動(dòng)態(tài)范圍和精度之間做權(quán)衡的過(guò)程。

設(shè)一個(gè)變量可能出現(xiàn)的最大絕對(duì)值為|max|,n為正整數(shù),滿足2^(n-1) < |max| < 2^n,則定標(biāo)Q按如下規(guī)則選取最合適:

Q = 有效數(shù)據(jù)位 – n


對(duì)于32位的有符號(hào)數(shù),數(shù)據(jù)有效位=31。如|max| = 2.75,選Q = 31 – 2 =29是最合適的。

2. 定點(diǎn)數(shù)之間的運(yùn)算
兩個(gè)定點(diǎn)數(shù)進(jìn)行運(yùn)算,它們的定標(biāo)可能相同也可能不同,那該遵循怎樣的規(guī)則來(lái)進(jìn)行加減乘除等基本運(yùn)算呢?

網(wǎng)上有些資料通過(guò)分別舉加、減、乘、除實(shí)際運(yùn)算的例子來(lái)說(shuō)明這一問(wèn)題,雖然很詳細(xì),但還是不夠直觀。

來(lái)看一看,平時(shí)我們用十進(jìn)制做兩個(gè)數(shù)的加減和乘除是怎么弄的。

加減法:先對(duì)位,后加減;
乘除法:先乘除,后取小數(shù)點(diǎn)。

而定點(diǎn)數(shù)之間的加減乘除,撇開符號(hào)位不談,其過(guò)程是一樣一樣的:

加減法:先對(duì)標(biāo),后加減;
乘除法:先乘除,后定標(biāo)。

3. 結(jié)果重新定標(biāo)(返回結(jié)果)
兩個(gè)定點(diǎn)數(shù)運(yùn)算完成之后,所得結(jié)果的定標(biāo)、動(dòng)態(tài)范圍、精度要求等都可能發(fā)生了變化,因此可能需要進(jìn)行重新定標(biāo)。

比如Q15*Q15 -> Q30,但我們依然希望得到一個(gè)Q15的數(shù)怎么辦?其實(shí)只需做一個(gè)簡(jiǎn)單的右移15位操作就好,其它情況同理。

大家可以仔細(xì)體會(huì)下這里的意思,然后再找具體的例子對(duì)照感受下,看是不是覺(jué)得簡(jiǎn)單多了呢。

http://blog.csdn.net/times_poem/article/details/51505014

Q12的正數(shù)的最大值是0 111 . 111111111111,第一個(gè)0是符號(hào)位,后面的數(shù)都是1,那么這個(gè)數(shù)是十進(jìn)制的多少呢,很好運(yùn)算,就是0x7fff / 2^12 = 7.999755859375。對(duì)于Qn格式的定點(diǎn)小數(shù)的表達(dá)的數(shù)值就它的整數(shù)值除以2^n。在計(jì)算機(jī)中還是以整數(shù)來(lái)運(yùn)算,我們把它想象成實(shí)際所表達(dá)的值的時(shí)候,進(jìn)行這個(gè)運(yùn)算。

反過(guò)來(lái)把一個(gè)實(shí)際所要表達(dá)的值x轉(zhuǎn)換Qn型的定點(diǎn)小數(shù)的時(shí)候,就是x*2^n了。例如0.2的Q12型定點(diǎn)小數(shù)為:0.2*2^12 = 819.2,由于這個(gè)數(shù)要用整數(shù)儲(chǔ)存,所以是819即0x0333。因?yàn)樯釛壛诵?shù)部分,所以0x0333不是精確的0.2,實(shí)際上它是819/2^12 =0.199951171875。

我們用數(shù)學(xué)表達(dá)式做一下總結(jié):
x表示實(shí)際的數(shù)(*一個(gè)浮點(diǎn)數(shù)),q表示它的Qn型定點(diǎn)小數(shù)(一個(gè)整數(shù))。
q = (int) (x * 2^n)
x = (float)q/2^n

用Q12來(lái)計(jì)算2.1 * 2.2,先把2.1 2.2轉(zhuǎn)換為Q12定點(diǎn)小數(shù):
2.1 * 2^12 = 8601.6 = 8602
2.2 * 2^12 = 9011.2 = 9011
(8602 * 9011) >> 12 = 18923
18923的實(shí)際值是18923/2^12 = 4.619873046875和實(shí)際的結(jié)果4.62相差0.000126953125,對(duì)于一般的計(jì)算已經(jīng)足夠精確了。

http://www.eeworld.com.cn/DSP/2014/1025/article_4006.html

q = quantizer('fixed', 'ceil', 'saturate', [32 30]);

  FixedNum=bin2dec(num2bin(q,1.999999999));

http://blog.163.com/xiada_action/blog/static/7423460220100255911247/

1.q = quantizer('fixed', 'ceil', 'saturate', [8 6]);imgbits=num2bin(q,k);這是將一個(gè)小數(shù)k,比如0.256 變成二進(jìn)制。小數(shù)點(diǎn)后面3位用6位二進(jìn)制表示。

現(xiàn)再將編出來(lái)的二進(jìn)制 恢復(fù)成10進(jìn)制 小數(shù):
二進(jìn)制小數(shù)轉(zhuǎn)換沒(méi)有現(xiàn)成的函數(shù),要自己編的。 或者你利用二進(jìn)制整數(shù)的轉(zhuǎn)換函數(shù)bin2dec() 比如二進(jìn)制的0.1101 那你就先把小數(shù)部分轉(zhuǎn)換成十進(jìn)制整數(shù) >> d=bin2dec('1101') d = 13 然后再根據(jù)位數(shù),小數(shù)點(diǎn)后面4位,就除以2^4 >> d/2^4 ans = 0.8125
2.寫文件:
fid=fopen('sin.coe','wt')
fprintf(fid, '%d',a)
fclose(fid)
讀取文件:
(1)fid1=fopen('fx.txt','r'); %得到文件號(hào)
[f,count]=fscanf(fid,'%f %f',[12,90])
%把文件號(hào)1的數(shù)據(jù)讀到f中。其中f是[12 90]的矩陣
%這里'%f %f'表示讀取數(shù)據(jù)的形勢(shì),他是按原始數(shù)據(jù)型讀出
fclose(fid);%關(guān)閉文件
(2) load data.txt
data
(3) a=importdata('data.txt')

總結(jié)

以上是生活随笔為你收集整理的定点数的定标的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。