定点数QS定标运算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
反之,用Q15表示的定点数16384,其浮点数值为
16384*2(-15)=0.5
加减法运算的C语言定点模拟
• Qx > Qy ,Z的定标为Qz
ห้องสมุดไป่ตู้
例1
程序1
• 注意:中间量要考虑溢出的情况
例2
Z=temp>>1;
程序2
注意:预先判断,结果的范围,防止结果溢出
乘法的定点模拟
Float x,y,z; Z = X *Y
人为设定小数点在16位中的位置,就可以表示 不同范围的大小和精度。
Q表示法和S表示法
表1 Q表示、S表示及数值范围
无定标: 0 010 0000 0000 0000b = 8192 1 111 1111 1111 1100b = -4
0 010 0000 0000 0000b = 0.25 ,用Q15表示 0 010 0000 0000 0000b = 8192 ,用Q0表示 采用Q0时,精度为1.
DSP专题讲座
定点定标运算
DSP芯片的数以2的补码形式表示。
0 010 0000 0000 0011b = 8195 1 111 1111 1111 1100b = -4
对于处理小数,DSP本身是无能为力的。
DSP不能处理小数?
当然不是,但必须由程序员来确定一个 小数的的小数点处于16位中的哪一位,这 就是数的定标。
谢谢!
• float FIR() • { • float fSum;
• • • • • • • }
fSum=0; for ( i=0;i<FIRNUMBER;i++ ) { fSum+=(fXn[i]*fHn[i]); } return(fSum);
• long FIR() • { • long lSum,temp; • lSum=0; • for ( i=0;i<FIRNUMBER;i++ ) • { • lSum+=((long)fHnint[i])*fXnint[i]; • //lSum=lSum>>15; • temp=lSum>>15; • } • return(temp); • }
定点数模拟浮点运算
将浮点数转化为定点数,进行定点运算,再 将结果转化为浮点数。
确定Q值的原则:
首先选取符合大小条件的Q的范围;然后再根 据实际需要,确定合适的精度(小数的位数)。 Q值的确定: 理论分析法; 统计分析法。
FIR
• float fHn[FIRNUMBER]={ 0.0,0.0,0.001,-0.002, -0.002,0.01,-0.009, -0.018,0.049,-0.02,0.11,0.28,0.64,0.28,0.11,-0.02,0.049,-0.018,-0.009,0.01,-0.002, -0.002, 0.001,0.0,0.0 }; • int fHnint[FIRNUMBER]= { 0,0,33,-66,-66,328,327,-590,1606,-656, 3604,9175,20972,9175,3604,-656,1606, -590,327,328,-66,-66,33,0,0};
的如 数何 值确 的定 大 小值 范的 围选 和取 精: 度根 要据 求要 。表 达 Q
浮点数与定点数转换
• 浮点数(X)转换为定点数(Xq):
Xq = ( int )X * 2Q
定点数(Xq)转换为浮点数(X): X = (float)Xq * 2(-Q)。
浮点数X=0.5,定标Q=15,定点数Xq = 0.5 * 32768 =16384
int InputWave() { float temp; for ( i=FIRNUMBER-1;i>0;i-- ) fXnint[i]=fXnint[i-1]; fXn[0]=sin((double)fSignal1)+cos((double)fSignal2)/6.0; fSignal1+=fStepSignal1; if ( fSignal1>=f2PI ) fSignal1-=f2PI; fSignal2+=fStepSignal2; if ( fSignal2>=f2PI ) fSignal2-=f2PI; temp=fXn[0]*16384; fXnint[0]=(int)temp; return(fXnint[0]); }