版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 可修改 歡迎下載 精品 Word 可修改 歡迎下載 精品 Word 可修改 歡迎下載 精品 Word第3章 DSP芯片的定點運算3.1 數(shù) 的 定 標(biāo)在定點DSP芯片中,采用定點數(shù)進(jìn)行數(shù)值運算,其操作數(shù)一般采用整型數(shù)來表示。一個整型數(shù)的最大表示范圍取決于DSP芯片所給定的字長,一般為16位或24位。顯然,字長越長,所能表示的數(shù)的范圍越大,精度也越高。如無特別說明,本書均以16位字長為例。DSP芯片的數(shù)以2的補碼形式表示。每個16位數(shù)用一個符號位來表示數(shù)的正負(fù),0表示數(shù)值為正,1那么表示數(shù)值為負(fù)。其余15位表示數(shù)值的大小。因此二進(jìn)制數(shù)8195二進(jìn)制數(shù)11111-4對DSP芯片而言,參與數(shù)值運算
2、的數(shù)就是16位的整型數(shù)。但在許多情況下,數(shù)學(xué)運算過程中的數(shù)不一定都是整數(shù)。那么,DSP芯片是如何處理小數(shù)的呢?應(yīng)該說,DSP芯片本身無能為力。那么是不是說DSP芯片就不能處理各種小數(shù)呢?當(dāng)然不是。這其中的關(guān)鍵就是由程序員來確定一個數(shù)的小數(shù)點處于16位中的哪一位。這就是數(shù)的定標(biāo)。通過設(shè)定小數(shù)點在16位數(shù)中的不同位置,就可以表示不同大小和不同精度的小數(shù)了。數(shù)的定標(biāo)有Q表示法和S表示法兩種。表3.1列出了一個16位數(shù)的16種Q表示、S表示及它們所能表示的十進(jìn)制數(shù)值范圍。從表3.1可以看出,同樣一個16位數(shù),假設(shè)小數(shù)點設(shè)定的位置不同,它所表示的數(shù)也就不同。例如:16進(jìn)制數(shù)2000H8192,用Q0表示
3、16進(jìn)制數(shù)2000H0.25,用Q15表示但對于DSP芯片來說,處理方法是完全相同的。從表3.1還可以看出,不同的Q所表示的數(shù)不僅范圍不同,而且精度也不相同。Q越大,數(shù)值范圍越小,但精度越高;相反,Q越小,數(shù)值范圍越大,但精度就越低。例如,Q0的數(shù)值范圍是-32768到+32767,其精度為1,而Q15的數(shù)值范圍為-1到0.9999695,精度為 1/32768 = 0.00003051。因此,對定點數(shù)而言,數(shù)值范圍與精度是一對矛盾,一個變量要想能夠表示比較大的數(shù)值范圍,必須以犧牲精度為代價;而想提高精度,那么數(shù)的表示范圍就相應(yīng)地減小。在實際的定點算法中,為了到達(dá)最正確的性能,必須充分考慮到這
4、一點。浮點數(shù)與定點數(shù)的轉(zhuǎn)換關(guān)系可表示為:浮點數(shù)(x)轉(zhuǎn)換為定點數(shù)():定點數(shù)()轉(zhuǎn)換為浮點數(shù)(x):例如,浮點數(shù) x=0.5,定標(biāo) Q15,那么定點數(shù),式中表示下取整。反之,一個用 Q15 表示的定點數(shù)16384,其浮點數(shù)為163842-1516384/32768=0.5。表3.1 Q表示、S表示及數(shù)值范圍Q表示S表示十進(jìn)制數(shù)表示范圍Q15S0.15-1X0.9999695Q14S1.14-2X1.9999390Q13S2.13-4X3.9998779Q12S3.12-8X7.9997559Q11S4.11-16X15.9995117Q10S5.10-32X31.9990234Q9S6.9-6
5、4X63.9980469Q8S7.8-128X127.9960938Q7S8.7-256X255.9921875Q6S9.6-512X511.9804375Q5S10.5-1024X1023.96875Q4S11.4-2048X2047.9375Q3S12.3-4096X4095.875Q2S13.2-8192X8191.75Q1S14.1-16384X16383.5Q0S15.0-32768X327673.2 高級語言:從浮點到定點在編寫DSP模擬算法時,為了方便,一般都是采用高級語言(如C語言)來編寫模擬程序。程序中所用的變量一般既有整型數(shù),又有浮點數(shù)。如例3.1程序中的變量i是整型數(shù),而
6、pi是浮點數(shù),hamwindow那么是浮點數(shù)組。例3.1 256點漢明窗計算inti;floatpi=3.14159;floathamwindow256;for(i=0;iQy,加法/減法結(jié)果z的定標(biāo)值為Qz,那么zx+y = 所以定點加法可以描述為:int x,y,z;long temp;/*臨時變量*/tempy(QxQz), 假設(shè)QxQzz(int)(temp(QzQx), 假設(shè)QxQz例3.2 定點加法設(shè)x0.5,y3.1,那么浮點運算結(jié)果為zx+y0.5+3.13.6;Qx15,Qy13,Qz13,那么定點加法為:x16384;y25395;temp253952)29491;因為z的
7、Q值為13,所以定點值z29491即為浮點值z29491/81923.6。例3.3 定點減法設(shè)x3.0,y3.1,那么浮點運算結(jié)果為zx-y3.0-3.1-0.1;Qx13,Qy13,Qz15,那么定點減法為:x24576;y25295;temp25395;tempx-temp24576-25395-819;因為QxQz,故 z(int)(-819Qy,加法結(jié)果z的定標(biāo)值為Qz,那么定點加法為:int x,y;long temp,z;tempy(Qx-Qz),假設(shè)QxQzztemp32767,因此Qx1,Qy0,Qz0,那么定點加法為:x30000;y20000;temp20000135000
8、;因為z的Q值為0,所以定點值z=35000就是浮點值,這里z是一個長整型數(shù)。當(dāng)加法或加法的結(jié)果超過16位表示范圍時,如果程序員事先能夠了解到這種情況,并且需要保證運算精度時,那么必須保持32位結(jié)果。如果程序中是按照16位數(shù)進(jìn)行運算的,那么超過16位實際上就是出現(xiàn)了溢出。如果不采取適當(dāng)?shù)拇胧?,那么?shù)據(jù)溢出會導(dǎo)致運算精度的嚴(yán)重惡化。一般的定點DSP芯片都設(shè)有溢出保護(hù)功能,當(dāng)溢出保護(hù)功能有效時,一旦出現(xiàn)溢出,那么累加器ACC的結(jié)果為最大的飽和值(上溢為7FFFH,下溢為8001H),從而到達(dá)防止溢出引起精度嚴(yán)重惡化的目的。 乘法運算的C語言定點模擬設(shè)浮點乘法運算的表達(dá)式為:float x,y,z;
9、z = xy;假設(shè)經(jīng)過統(tǒng)計后x的定標(biāo)值為Qx,y的定標(biāo)值為Qy,乘積z的定標(biāo)值為Qz,那么z = xy = =所以定點表示的乘法為:int x,y,z;long temp;temp = (long)x;z = (tempy) (Qx+Qy-Qz);例3.5 定點乘法設(shè)x = 18.4,y = 36.8,那么浮點運算值為z =18.436.8 = 677.12;根據(jù)上節(jié),得Qx = 10,Qy = 9,Qz = 5,所以x = 18841;y = 18841;temp = 18841L;z = (18841L*18841)(10+9-5) = 354983281L14 = 21666;因為z的定
10、標(biāo)值為5,故定點 z = 21666即為浮點的 z = 21666/32 = 677.08。除法運算的C語言定點模擬設(shè)浮點除法運算的表達(dá)式為:float x,y,z;z = x/y;假設(shè)經(jīng)過統(tǒng)計后被除數(shù)x的定標(biāo)值為Qx,除數(shù)y的定標(biāo)值為Qy,商z的定標(biāo)值為Qz,那么z = x/y = 所以定點表示的除法為:int x,y,z;long temp;temp = (long)x;z = (temp(Qz-Qx+Qy)/y;例3.6 定點除法設(shè)x = 18.4,y = 36.8,浮點運算值為z = x/y = 18.4/36.8 = 0.5;根據(jù)上節(jié),得Qx = 10,Qy = 9,Qz = 15;
11、所以有x = 18841, y = 18841;temp = (long)18841;z = (18841L(15-10+9)/18841 = 308690944L/18841 = 16384;因為商z的定標(biāo)值為15,所以定點z = 16384即為浮點 z = 16384/215= 0.5。 程序變量的Q值確定在前面幾節(jié)介紹的例子中,由于x、y、z的值都是的,因此從浮點變?yōu)槎c時Q值很好確定。在實際的DSP應(yīng)用中,程序中參與運算的都是變量,那么如何確定浮點程序中變量的Q值呢?從前面的分析可以知道,確定變量的Q值實際上就是確定變量的動態(tài)范圍,動態(tài)范圍確定了,那么Q值也就確定了。設(shè)變量的絕對值的最
12、大值為,注意必須小于或等于32767。取一個整數(shù)n,使它滿足那么有Q = 15-n例如,某變量的值在-1至1之間,即1,因此n = 0,Q15-n = 15。確定了變量的就可以確定其Q值,那么變量的又是如何確定的呢?一般來說,確定變量的有兩種方法:一種是理論分析法,另一種是統(tǒng)計分析法。1理論分析法有些變量的動態(tài)范圍通過理論分析是可以確定的。例如:(1) 三角函數(shù),y = sin(x)或y = cos(x),由三角函數(shù)知識可知,|y|1;(2) 漢明窗,y(n) = 0.54-0.46cos 2n/(N-1) ,0nN-1。因為-1cos 2n/(N-1)1,所以0.08y(n)1.0;(3)
13、FIR卷積。y(n)=,設(shè),且x(n)是模擬信號12位量化值,即有 211,那么211;(4) 理論已經(jīng)證明,在自相關(guān)線性預(yù)測編碼(LPC)的程序設(shè)計中,反射系數(shù)滿足以下不等式:,i= 1,2,p, p為LPC的階數(shù)。2統(tǒng)計分析法對于理論上無法確定范圍的變量,一般采用統(tǒng)計分析的方法來確定其動態(tài)范圍。所謂統(tǒng)計分析,就是用足夠多的輸入信號樣值來確定程序中變量的動態(tài)范圍,這里輸入信號一方面要有一定的數(shù)量,另一方面必須盡可能地涉及各種情況。例如,在語音信號分析中,統(tǒng)計分析時就必須采集足夠多的語音信號樣值,并且在所采集的語音樣值中,應(yīng)盡可能地包含各種情況,如音量的大小、聲音的種類(男聲、女聲) 等。只有
14、這樣,統(tǒng)計出來的結(jié)果才能具有典型性。當(dāng)然,統(tǒng)計分析畢竟不可能涉及所有可能發(fā)生的情況,因此,對統(tǒng)計得出的結(jié)果在程序設(shè)計時可采取一些保護(hù)措施,如適當(dāng)犧牲一些精度,Q值取比統(tǒng)計值稍大些,使用DSP芯片提供的溢出保護(hù)功能等。 浮點至定點變換的C程序舉例本節(jié)通過一個例子來說明C程序從浮點變換至定點的方法。這是一個對語音信號(0.3kHz3.4kHz)進(jìn)行低通濾波的C語言程序,低通濾波的截止頻率為800Hz,濾波器采用19點的有限沖擊響應(yīng)FIR濾波。語音信號的采樣頻率為8kHz,每個語音樣值按16位整型數(shù)存放在insp.dat文件中。例3.7 語音信號800Hz 19點FIR低通濾波C語言浮點程序#inc
15、lude const int length = 180/*語音幀長為180點22.5ms8kHz采樣*/void filter(int xin ,int xout ,int n,float h ); /*濾波子程序說明*/*19點濾波器系數(shù)*/static float h19=0.01218354,-0.009012882,-0.02881839,-0.04743239,-0.04584568,-0.008692503,0.06446265,0.1544655,0.2289794,0.257883,0.2289794,0.1544655,0.06446265,-0.008692503,-0.0
16、4584568,-0.04743239,-0.02881839,-0.009012882,0.01218354;static int x1length+20;/*低通濾波浮點子程序*/void filter(int xin ,int xout ,int n,float h )int i,j;float sum;for(i=0;ilength;i+) x1n+i-1=xini;for (i=0;ilength;i+)sum=0.0;for(j=0;jn;j+) sum+=hj*x1i-j+n-1;xouti=(int)sum;for(i=0;i(n-1);i+) x1n-i-2=xinlengt
17、h-1-i;/*主程序*/void main( )FILE *fp1,*fp2;int frame,indatalength,outdatalength;fp1=fopen(insp.dat,rb);/*輸入語音文件*/fp2=fopen(outsp.dat,wb);/*濾波后語音文件*/frame=0;while(feof(fp1)=0)frame+;printf(frame=%dn,frame);for(i=0;ilength;i+) indatai=getw(fp1); /*取一幀語音數(shù)據(jù)*/filter(indata,outdata,19,h);/*調(diào)用低通濾波子程序*/for(i=0
18、;ilength;i+) putw(outdatai,fp2); /*將濾波后的樣值寫入文件*/fcloseall( );/*關(guān)閉文件*/return(0);例3.8 語音信號800Hz 19點FIR低通濾波C語言定點程序 #include const int length=180;void filter(int xin ,int xout ,int n,int h );static int h19=399,-296,-945,-1555,-1503,-285,2112,5061,7503,8450, 7503,5061,2112,-285,-1503,-1555,-945,-296,399;
19、 /*Q15*/static int x1length+20;/*低通濾波定點子程序*/void filter(int xin ,int xout ,int n,int h )int i,j;long sum;for(i=0;ilength;i+) x1n+i-1=xini;for (i=0;ilength;i+)sum=0;for(j=0;j15;for(i=0;i(n-1);i+) x1n-i-2=xinlength-i-1;主程序與浮點的完全一樣。3.3 DSP定點算術(shù)運算定點DSP芯片的數(shù)值表示是基于2的補碼表示形式。每個16位數(shù)用1個符號位、i個整數(shù)位和15-i個小數(shù)位來表示。因此數(shù)
20、00000010.10100000表示的值為=2.625,這個數(shù)可用Q8格式(個小數(shù)位)來表示,它表示的數(shù)值范圍為-128+127.996,一個Q8定點數(shù)的小數(shù)精度為1/256=0.004。雖然特殊情況(如動態(tài)范圍和精度要求)必須使用混合表示法,但是,更通常的是全部以Q15格式表示的小數(shù)或以Q0格式表示的整數(shù)來工作。這一點對于主要是乘法和累加的信號處理算法特別現(xiàn)實,小數(shù)乘以小數(shù)得小數(shù),整數(shù)乘以整數(shù)得整數(shù)。當(dāng)然,乘積累加時可能會出現(xiàn)溢出現(xiàn)象,在這種情況下,程序員應(yīng)當(dāng)了解數(shù)學(xué)里面的物理過程以注意可能的溢出情況。下面討論乘法、加法和除法的DSP定點運算,匯編程序以TMS320C25為例。定點乘法2個
21、定點數(shù)相乘時可以分為以下3種情況:1小數(shù)乘小數(shù)Q15Q15Q30例3.9 ;Q15;Q1500.010000000000000000000000000000=0.25 ;Q302個Q15的小數(shù)相乘后得到1個Q30的小數(shù),即有2個符號位。一般情況下相乘后得到的滿精度數(shù)不必全部保存,而只需保存16位單精度數(shù)。由于相乘后得到的高16位不滿15位的小數(shù)精度,為了到達(dá)15位精度,可將乘積左移1位,下面是上述乘法的TMS320C25程序:LTOP1;OP1=4000H(0.5/Q15)MPYOP2 ;OP2=4000H(0.5/Q15)PACSACHANS,1;ANS=2000H(0.25/Q15)2整數(shù)
22、乘整數(shù)Q0Q0 = Q0例3.10 17(-5)=-850000000000010001=17-5-853混合表示法許多情況下,運算過程中為了既滿足數(shù)值的動態(tài)范圍又保證一定的精度,就必須采用Q0與Q15之間的表示法。比方,數(shù)值1.2345,顯然Q15無法表示,而假設(shè)用Q0表示,那么最接近的數(shù)是1,精度無法保證。因此,數(shù)1.2345最正確的表示法是Q14。例3.11 1.50.75 = 1.125;Q14;Q14Q14的最大值不大于2,因此,2個Q14數(shù)相乘得到的乘積不大于4。一般的,假設(shè)一個數(shù)的整數(shù)位為 i位,小數(shù)位為 j 位,另一個數(shù)的整數(shù)位為 m 位,小數(shù)位為 n 位,那么這兩個數(shù)的乘積為
23、 ( i + m )位整數(shù)位和(j + n)位小數(shù)位。這個乘積的最高16位可能的精度為( i + m )整數(shù)位和(15 - i - m)小數(shù)位。但是,假設(shè)事先了解數(shù)的動態(tài)范圍,就可以增加數(shù)的精度。例如,程序員了解到上述乘積不會大于1.8,就可以用Q14數(shù)表示乘積,而不是理論上的最正確情況Q13。例3.11的TMS320C25程序如下:LTOP1;OP1 = 6000H(1.5/Q14)MPYOP2;OP2 = 3000H(0.75/Q14)PACSACHANS,1;ANS2400H(1.125/Q13)上述方法為了保證精度均對乘的結(jié)果舍位,結(jié)果所產(chǎn)生的誤差相當(dāng)于減去1個LSB(最低位)。采用下
24、面簡單的舍入方法,可使誤差減少二分之一。LTOP1MPYOP2PACADDONE,14(上舍入)SACHANS,1上述程序說明,不管ANS為正或負(fù),所產(chǎn)生的誤差是1/2 LSB,其中存儲單元ONE的值為1。 定點加法乘的過程中,程序員可不考慮溢出而只需調(diào)整運算中的小數(shù)點。而加法那么是一個更加復(fù)雜的過程。首先,加法運算必須用相同的Q點表示;其次,程序員或者允許其結(jié)果有足夠的高位以適應(yīng)位的增長,或者必須準(zhǔn)備解決溢出問題。如果操作數(shù)僅為16位長,其結(jié)果可用雙精度數(shù)表示。下面舉例說明16位數(shù)相加的兩種途徑。1保存32位結(jié)果LACOP1;(Q15)ADDOP2;(Q15)SACHANSHI;(高16位結(jié)
25、果)SACLANSLO;(低16位結(jié)果)2調(diào)整小數(shù)點保存16位結(jié)果LACOP1,15;(Q14數(shù)用ACCH表示)ADDOP2,15;(Q14數(shù)用ACCH表示)SACHANS;(Q14)加法運算最可能出現(xiàn)的問題是運算結(jié)果溢出。TMS320提供了檢查溢出的專用指令BV,此外,使用溢出保護(hù)功能可使累加結(jié)果溢出時累加器飽和為最大的整數(shù)或負(fù)數(shù)。當(dāng)然,即使如此,運算精度還是大大降低。因此,最好的方法是完全理解根本的物理過程并注意選擇數(shù)的表達(dá)方式。 定點除法在通用DSP芯片中,一般不提供單周期的除法指令,為此必須采用除法子程序來實現(xiàn)。二進(jìn)制除法是乘法的逆運算。乘法包括一系列的移位和加法,而除法可分解為一系列
26、的減法和移位。下面來說明除法的實現(xiàn)過程。設(shè)累加器為8位,且除法運算為10除以3。除的過程就是除數(shù)逐步移位并與被除數(shù)比較的過程,在每一步進(jìn)行減法運算,如果能減那么將位插入商中。(1) 除數(shù)的最低有效位對齊被除數(shù)的最高有效位。000010100001100011110010(2) 由于減法結(jié)果為負(fù),放棄減法結(jié)果,將被除數(shù)左移一位再減。000101000001100011111000(3) 結(jié)果仍為負(fù),放棄減法結(jié)果,被除數(shù)左移一位再減。001010000001100000010000(4) 結(jié)果為正,將減法結(jié)果左移一位后加,作最后一次減。001000010001100000001001(5) 結(jié)果為
27、正,將結(jié)果左移一位加1得最后結(jié)果。高位代表余數(shù),低4位表示商。00010011即商為0011=3,余數(shù)為0001=1。TMS320沒有專門的除法指令,但使用條件減指令SUBC可以完成有效靈活的除法功能。使用這一指令的唯一限制是兩個操作數(shù)必須為正。程序員必須事先了解其可能的運算數(shù)的特性,如其商是否可以用小數(shù)表示及商的精度是否可被計算出來。這里每一種考慮可影響如何使用SUBC指令的問題。下面給出兩種不同情況下的TMS320C25除法程序。(1) 分子小于分母DIV_A:LTNUMERAMPYDENOMPACSACHTEMSGN;取商的符號LACDENOMABSSACLDENOM;使分母為正ZALH
28、NUMERA;使分子為正ABSRPTK14SUBCDENOM;除循環(huán)15次SACLQUOTLACTEMSGNBGEZA1;假設(shè)符號為正,那么完成ZACSUBQUOTSACLQUOT;假設(shè)為負(fù),那么商為負(fù)A1:RET這個程序中,分子在NUMERA中,分母在DENOM中,商存在QUOT中,TEMSGN為暫存單元。(2) 規(guī)定商的精度DIV_B:LTNUMERAMPYDENOMPACSACHTEMSGN;取商的符號LACDENOMABSSACLDENOM;使分母為正LACK15ADDFRACSACLFRAC;計算循環(huán)計數(shù)器LACNUMERAABS;使分子為正RPTFRACSUBCDENOM;除循環(huán)1
29、6+FRAC次SACLQUOTLACTEMSGNBGEZB1;假設(shè)符號為正,那么完成ZACSUBQUOTSACLQUOT;假設(shè)為負(fù),那么商為負(fù)B1:RET與DIV_A相同,這個程序中,分子在NUMERA中,分母在DENOM中,商存在QUOT中,TEMSGN為暫存單元。FRAC中規(guī)定商的精度,如商的精度為Q13,那么調(diào)用程序前FRAC單元中的值應(yīng)為13。3.4 非線性運算的定點快速實現(xiàn)在數(shù)值運算中,除根本的加減乘除運算外,還有其他許多非線性運算,如對數(shù)運算、開方運算、指數(shù)運算、三角函數(shù)運算等,實現(xiàn)這些非線性運算的方法一般有:(1)調(diào)用DSP編譯系統(tǒng)的庫函數(shù);(2)查表法;(3)混合法。下面分別介
30、紹這三種方法。1調(diào)用DSP編譯系統(tǒng)的庫函數(shù)TMS320C2X/C5X 的C編譯器提供了比較豐富的運行支持庫函數(shù)。在這些庫函數(shù)中,包含了諸如對數(shù)、開方、三角函數(shù)、指數(shù)等常用的非線性函數(shù)。在C程序中(也可在匯編程序中)只要采用與庫函數(shù)相同的變量定義,就可以直接調(diào)用。例如,在庫函數(shù)中,定義了以10為底的常用對數(shù)log10( ):include double log10(double x);在C程序中按如下方式調(diào)用:float x,y;x = 10.0;y = log10(x);從上例可以看出,庫函數(shù)中的常用對數(shù)log10( )要求的輸入值為浮點數(shù),返回值也為浮點數(shù),運算的精度完全可以保證。直接調(diào)用庫
31、函數(shù)非常方便,但由于運算量大,很難在實時DSP中得到應(yīng)用。2查表法在實時DSP應(yīng)用中實現(xiàn)非線性運算,一般都采取適當(dāng)降低運算精度來提高程序的運算速度。查表法是快速實現(xiàn)非線性運算最常用的方法。采用這種方法必須根據(jù)自變量的范圍和精度要求制作一張表格。顯然輸入的范圍越大,精度要求越高,那么所需的表格就越大,即存儲量也越大。查表法求值所需的計算就是根據(jù)輸入值確定表的地址,根據(jù)地址就可得到相應(yīng)的值,因而運算量較小。查表法比較適合于非線性函數(shù)是周期函數(shù)或非線性函數(shù)輸入值范圍這兩種情況,例3.12和例3.13分別說明這兩種情況。例3.12 正弦函數(shù)y=cos(x),制作一個512點表格,并說明查表方法。由于正
32、弦函數(shù)是周期函數(shù),函數(shù)值在1至1之間,用查表法比較適宜。由于Q15的表示范圍為1至32767/32768之間,原那么上講1至1的范圍必須用Q14表示。但一般從方便和總體精度考慮,類似情況仍用Q15表示,此時1用32767來表示。(1) 產(chǎn)生512點值的C語言程序如下所示:#define N 512#define pi 3.14159int sin_tab512;void main( )int i;for(i=0;i20。例3.13 用查表法求以2為底的對數(shù),自變量取值范圍為0.51,要求將自變量范圍均勻劃分為10等分。試制作這個表格并說明查表方法。(1) 做表:y = log2(x),由于x在
33、0.5到1之間,因此y在-1到0之間,x和y均可用Q15表示。由于對x均勻劃分為10段,因此,10段對應(yīng)于輸入x的范圍如表3.2所示。假設(shè)每一段的對數(shù)值都取第1點的對數(shù)值,那么表中第1段的對數(shù)值為y0(Q15) = (int)(log2(0.5)32768),第2段的對數(shù)值為y1(Q15) = (int)(log2(0.55)32768),依次類推。表3.2 logtab0 10點對數(shù)表(輸入0.51)地址輸入值對數(shù)值(Q15)00.500.55-3276810.550.60-2826220.600.65-2414930.650.70-2036540.700.75-1686250.750.80
34、-1360060.800.85-1054970.850.90-768380.900.95-498190.951.00-2425(2) 查表:查表時,先根據(jù)輸入值計算表的地址,計算方法為:index=(x-16384)20)15。式中,index就是查表用的地址。例如,輸入x= 26869,那么index=6,因此y=-10549。3混合法(1) 提高查表法的精度上述方法查表所得結(jié)果的精度隨表的大小而變化,表越大,那么精度越高,但存儲量也越大。當(dāng)系統(tǒng)的存儲量有限而精度要求也較高時,查表法就不太適合。那么能否在適當(dāng)增加運算量的情況下提高非線性運算的精度呢?下面介紹一種查表結(jié)合少量運算來計算非線性函
35、數(shù)的混合法,這種方法適用于在輸入變量的范圍內(nèi)函數(shù)呈單調(diào)變化的情形。混合法是在查表的根底上采用計算的方法以提高當(dāng)輸入值處于表格兩點之間時的精度。提高精度的一個簡便方法是采用折線近似法,如圖3.1所示。仍以求以2為底的對數(shù)為例(例3.13)。設(shè)輸入值為x,那么精確的對數(shù)值為y,在表格值的兩點之間作一直線,用y作為y的近似值,那么有:yy0y圖3.1 提高精度的折線近似法其中y0由查表求得?,F(xiàn)在只需在查表求得y0的根底上增加y即可。y的計算方法如下:圖3.1 提高精度的折線近似法y=(x/x0)y=x(y0/x0)式中y0/x0對每一段來說是一個恒定值,可作一個表格直接查得。此外計算x時需用到每段橫
36、坐標(biāo)的起始值,這個值也可作一個表格。這樣共有三個大小均為10的表格,分別為存儲每段起點對數(shù)值的表logtab0、存儲每段y0/x0 值的表logtab1和存儲每段輸入起始值x0的表logtab2,表logtab1和表logtab2可用以下兩個數(shù)組表示:int logtab110=22529,20567,18920,17517,16308, 15255,14330,13511,12780,12124; /*y0/x0 : Q13*/int logtab210=16384,18022,19660,21299,22938, 24576,26214,27853,29491,31130; /* x0:
37、Q15*/綜上所述,采用混合法計算對數(shù)值的方法可歸納為:根據(jù)輸入值,計算查表地址:index=(x-16384)20)15;查表得y0=logtab0index;計算x=x-logtab2index;計算y(xlogtab1index)13;計算得結(jié)果y=y0+y。例3.14 x=0.54,求log2(x)。0.54的精確對數(shù)值為y=log2(0.54)=-0.889?;旌戏ㄇ髮?shù)值的過程為:定標(biāo)Q15,定標(biāo)值x=0.54*32768=17694;表地址index=(x-16384)20)15=0;查表得y0=logtab00=-32768;計算x=x-logtab20=17694-16384
38、=1310;計算y(xlogtab10)13=(1310*22529L)13=3602;計算結(jié)果y=y0+y=-32768+3602=-29166。結(jié)果y為Q15定標(biāo),折算成浮點數(shù)為-29166/32768=-0.89,可見精度較高。(2) 擴大自變量范圍如上所述,查表法比較適用于周期函數(shù)或自變量的動態(tài)范圍不是太大的情形。對于像對數(shù)這樣的非線性函數(shù),輸入值和函數(shù)值的變化范圍都很大。如果輸入值的變化范圍很大,那么作表就比較困難。那么能否比較好地解決這個問題,既不使表格太大,又能得到比較高的精度呢?下面討論一種切實可行的方法。設(shè)x是一個大于0.5的數(shù),那么x可以表示為以下形式:x =式中,0.5m1.0,e為整數(shù)。那么求 x 的對數(shù)可以表示為:log2(x) = log2() = log2(m) + log2() = e + log2(m)也就是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年親子協(xié)議模板
- 2025年增資協(xié)議合同條款
- 2025年度個人承包工程勞務(wù)合同模板4篇
- 2025年合作環(huán)境科學(xué)書籍出版協(xié)議
- 攪拌站項目合作開發(fā)合同(二零二五年)3篇
- 2025年度環(huán)保認(rèn)證木地板采購與施工合同4篇
- 2025年度鄉(xiāng)村旅游資源承包經(jīng)營權(quán)轉(zhuǎn)讓合同4篇
- 2025年度股權(quán)質(zhì)押擔(dān)保與文化產(chǎn)業(yè)融合發(fā)展合同
- 二零二五年度足療養(yǎng)生館加盟投資協(xié)議
- 2025年度美容院美容師服務(wù)提成勞務(wù)合同模板
- 2024-2030年中國海泡石產(chǎn)業(yè)運行形勢及投資規(guī)模研究報告
- 動物醫(yī)學(xué)類專業(yè)生涯發(fā)展展示
- 2024年同等學(xué)力申碩英語考試真題
- 消除“艾梅乙”醫(yī)療歧視-從我做起
- 非遺文化走進(jìn)數(shù)字展廳+大數(shù)據(jù)與互聯(lián)網(wǎng)系創(chuàng)業(yè)計劃書
- 2024山西省文化旅游投資控股集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- 科普知識進(jìn)社區(qū)活動總結(jié)與反思
- 加油站廉潔培訓(xùn)課件
- 現(xiàn)金日記賬模板(帶公式)
- 消化內(nèi)科??票O(jiān)測指標(biāo)匯總分析
- 混凝土結(jié)構(gòu)工程施工質(zhì)量驗收規(guī)范
評論
0/150
提交評論