当前位置:文档之家› 第3章 DSP芯片的定点运算

第3章 DSP芯片的定点运算

第3章  DSP芯片的定点运算
第3章  DSP芯片的定点运算

第3章 DSP 芯片的定点运算

3.1 数 的 定 标

在定点DSP 芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。一个整型数的最大表示范围取决于DSP 芯片所给定的字长,一般为16位或24位。显然,字长越长,所能表示的数的范围越大,精度也越高。如无特别说明,本书均以16位字长为例。

DSP 芯片的数以2的补码形式表示。每个16位数用一个符号位来表示数的正负,0表示数值为正,1则表示数值为负。其余15位表示数值的大小。因此

二进制数0010000000000011b =8195

二进制数1111111111111100b =-4

对DSP 芯片而言,参与数值运算的数就是16位的整型数。但在许多情况下,数学运算过程中的数不一定都是整数。那么,DSP 芯片是如何处理小数的呢?应该说,DSP 芯片本身无能为力。那么是不是说DSP 芯片就不能处理各种小数呢?当然不是。这其中的关键就是由程序员来确定一个数的小数点处于16位中的哪一位。这就是数的定标。

通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。数的定标有Q 表示法和S 表示法两种。表3.1列出了一个16位数的16种Q 表示、S 表示及它们所能表示的十进制数值范围。

从表3.1可以看出,同样一个16位数,若小数点设定的位置不同,它所表示的数也就不同。例如:

16进制数2000H =8192,用Q0表示 16进制数2000H =0.25,用Q15表示

但对于DSP 芯片来说,处理方法是完全相同的。

从表3.1还可以看出,不同的Q 所表示的数不仅范围不同,而且精度也不相同。Q 越大,数值范围越小,但精度越高;相反,Q 越小,数值范围越大,但精度就越低。例如,Q0的数值范围是-32768到+32767,其精度为1,而Q15的数值范围为-1到0.9999695,精度为 1/32768 = 0.00003051。因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想提高精度,则数的表示范围就相应地减小。在实际的定点算法中,为了达到最佳的性能,必须充分考虑到这一点。

浮点数与定点数的转换关系可表示为:

浮点数(x)转换为定点数(x q ):Q q x 2x (int)*= 定点数(q x )转换为浮点数(x):Q q x -*=2)float (x

例如,浮点数 x=0.5,定标 Q =15,则定点数q x =??16384327685.0=?,式中

??表示下取整。反之,一个用 Q =15 表示的定点数16384,其浮点数为16384×2-15

=16384/32768=0.5。

表3.1 Q表示、S表示及数值范围

3.2 高级语言:从浮点到定点

在编写DSP模拟算法时,为了方便,一般都是采用高级语言(如C语言)来编写模拟程序。程序中所用的变量一般既有整型数,又有浮点数。如例3.1程序中的变量i是整型数,而pi是浮点数,hamwindow则是浮点数组。

例3.1256点汉明窗计算

inti;

float pi=3.14159;

float hamwindow[256];

for(i=0;i<256;i++) hamwindow[i]=0.54-0.46*cos(2.0*pi*i/255);

如果要将上述程序用某种定点DSP芯片来实现,则需将上述程序改写为DSP芯片的汇编语言程序。为了DSP程序调试的方便及模拟定点DSP实现时的算法性能,在编写DSP汇编程序之前一般需将高级语言浮点算法改写为高级语言定点算法。下面讨论基本算术运算的定点实现方法。

3.2.1 加法/减法运算的C语言定点模拟

设浮点加法运算的表达式为:

float x,y,z;

z=x+y;

将浮点加法/减法转化为定点加法/减法时最重要的一点就是必须保证两个操作数的定标值一样。若两者不一样,则在做加法/减法运算前先进行小数点的调整。为保证运算精度,需使Q 值小的数调整为与另一个数的Q 值一样大。此外,在做加法/减法运算时,必须注意结果可能会超过16位表示。如果加法/减法的结果超出16位的表示范围,则必须保留32位结果,以保证运算的精度。

1.结果不超过16位表示范围

设x 的Q 值为Qx ,y 的Q 值为Qy ,且Qx>Qy ,加法/减法结果z 的定标值为Qz ,则

z =x+y ?

y

x

z

Q q Q q Q q y x z ---?+?=?2

2

2

=x

y x x Q Q Q q Q q y x ---??+?2

22)

(

=x

y x Q Q Q q q y x --??+2

]2

[)

( ?

)

()

(2

]2

[x z y x Q Q Q Q q q q y x z --??+=

所以定点加法可以描述为:

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)), 若QxQ ≤z 例3.2 定点加法

设x =0.5,y =3.1,则浮点运算结果为z =x+y =0.5+3.1=3.6; Qx =15,Qy =13,Qz =13,则定点加法为: x =16384;y =25395;

temp =25395<<2=101580;

temp =x+temp =16384+101580=117964; z =(int)(117964L>>2)=29491;

因为z 的Q 值为13,所以定点值z =29491即为浮点值z =29491/8192=3.6。

例3.3 定点减法

设x =3.0,y =3.1,则浮点运算结果为z =x -y =3.0-3.1=-0.1; Qx =13,Qy =13,Qz =15,则定点减法为: x =24576;y =25295; temp =25395;

temp =x -temp =24576-25395=-819;

因为Qx

2.结果超过16位表示范围

设x 的Q 值为Qx ,y 的Q 值为Qy ,且Qx>Qy ,加法结果z 的定标值为Qz,则定点加法为:

int x ,y ;

long temp ,z ;

temp =y<<(Qx -Qy);

temp =x +temp;

z =temp>>(Qx -Qz),若Qx ≥Qz z =temp<<(Qz -Qx),若Qx ≤Qz

例3.4 结果超过16位的定点加法

设x =15000,y =20000,则浮点运算值为z =x +y =35000,显然z>32767,因此

Qx =1,Qy =0,Qz =0,则定点加法为: x =30000;y =20000;

temp =20000<<1=40000;

temp =temp+x =40000+30000=70000; z =70000L>>1=35000;

因为z 的Q 值为0,所以定点值z=35000就是浮点值,这里z 是一个长整型数。

当加法或加法的结果超过16位表示范围时,如果程序员事先能够了解到这种情况,并且需要保证运算精度时,则必须保持32位结果。如果程序中是按照16位数进行运算的,则超过16位实际上就是出现了溢出。如果不采取适当的措施,则数据溢出会导致运算精度的严重恶化。一般的定点DSP 芯片都设有溢出保护功能,当溢出保护功能有效时,一旦出现溢出,则累加器ACC 的结果为最大的饱和值(上溢为7FFFH ,下溢为8001H),从而达到防止溢出引起精度严重恶化的目的。

3.2.2 乘法运算的C 语言定点模拟

设浮点乘法运算的表达式为:

float x,y,z;

z = xy;

假设经过统计后x 的定标值为Qx ,y 的定标值为Qy ,乘积z 的定标值为Qz ,则

z = xy ?

z

Q q z -?2

=)

(2

y x Q Q q q y x +-?? ?

q z =)

(2

)(y x z Q Q Q q q y x +-

所以定点表示的乘法为:

int x,y,z;

long temp;

temp = (long)x;

z = (temp ×y) >> (Qx+Qy -Qz); 例3.5 定点乘法

设x = 18.4,y = 36.8,则浮点运算值为z =18.4×36.8 = 677.12; 根据上节,得Qx = 10,Qy = 9,Qz = 5,所以

x = 18841;y = 18841; temp = 18841L;

z = (18841L*18841)>>(10+9-5) = 354983281L>>14 = 21666;

因为z 的定标值为5,故定点 z = 21666即为浮点的 z = 21666/32 = 677.08。

3.2.3 除法运算的C 语言定点模拟

设浮点除法运算的表达式为:

float x,y,z;

z = x/y;

假设经过统计后被除数x 的定标值为Qx ,除数y 的定标值为Qy ,商z 的定标值为Qz ,则

z = x/y ?

z

Q q z -?2

=

y

x Q q Q q y x --??2

2 ?

q

Q Q Q q q y x z y x z )

(2

+-?=

所以定点表示的除法为:

int x,y,z; long temp;

temp = (long)x;

z = (temp<<(Qz -Qx+Qy))/y; 例3.6 定点除法

设x = 18.4,y = 36.8,浮点运算值为z = x/y = 18.4/36.8 = 0.5; 根据上节,得Qx = 10,Qy = 9,Qz = 15;所以有 x = 18841, y = 18841;

temp = (long)18841;

z = (18841L<<(15-10+9))/18841 = 308690944L/18841 = 16384;

因为商z 的定标值为15,所以定点z = 16384即为浮点 z = 16384/215= 0.5。

3.2.4 程序变量的Q 值确定

在前面几节介绍的例子中,由于x 、y 、z 的值都是已知的,因此从浮点变为定点时Q 值很好确定。在实际的DSP 应用中,程序中参与运算的都是变量,那么如何确定浮点程序中变量的Q 值呢?

从前面的分析可以知道,确定变量的Q 值实际上就是确定变量的动态范围,动态范围确定了,则Q 值也就确定了。

设变量的绝对值的最大值为max ,注意max 必须小于或等于32767。取一个整数n ,使它满足

n

n 2

max 2

1

<<-

则有

)

15(15

2

22

2

n n Q

----=?=

Q = 15-n

例如,某变量的值在-1至+1之间,即max <1,因此n = 0,Q =15-n = 15。

确定了变量的max 就可以确定其Q 值,那么变量的max 又是如何确定的呢?一般来说,确定变量的max 有两种方法:一种是理论分析法,另一种是统计分析法。

1.理论分析法

有些变量的动态范围通过理论分析是可以确定的。例如:

(1) 三角函数,y = sin(x )或y = cos(x ),由三角函数知识可知,|y |≤1;

(2) 汉明窗,y (n ) = 0.54-0.46cos [2πn /(N -1)] ,0≤n ≤N -1。因为-1≤cos [2πn /(N -1)]≤1,所以0.08≤y (n )≤1.0;

(3) FIR 卷积。y (n )=∑-=-1

0)()(N k k n x k h ,设∑-==1

0.1)(N k k h ,且x (n )是模拟信号12位量化值,

即有 )(n x ≤211,则)(n y ≤211

(4) 理论已经证明,在自相关线性预测编码(LPC)的程序设计中,反射系数i k 满足下列不等式:

0.1

2.统计分析法

对于理论上无法确定范围的变量,一般采用统计分析的方法来确定其动态范围。所谓统计分析,就是用足够多的输入信号样值来确定程序中变量的动态范围,这里输入信号一方面要有一定的数量,另一方面必须尽可能地涉及各种情况。例如,在语音信号分析中,统计分析时就必须采集足够多的语音信号样值,并且在所采集的语音样值中,应尽可能地包含各种情况,如音量的大小、声音的种类(男声、女声) 等。只有这样,统计出来的结果才能具有典型性。

当然,统计分析毕竟不可能涉及所有可能发生的情况,因此,对统计得出的结果在程序设计时可采取一些保护措施,如适当牺牲一些精度,Q 值取比统计值稍大些,使用DSP 芯片提供的溢出保护功能等。

3.2.5 浮点至定点变换的C 程序举例

本节通过一个例子来说明C 程序从浮点变换至定点的方法。这是一个对语音信号(0.3kHz~3.4kHz)进行低通滤波的C 语言程序,低通滤波的截止频率为800Hz ,滤波器采用19点的有限冲击响应FIR 滤波。语音信号的采样频率为8kHz ,每个语音样值按16位整型数存放在insp.dat 文件中。

例3.7 语音信号800Hz 19点FIR 低通滤波C 语言浮点程序

#include

const int length = 180 /*语音帧长为180点=22.5ms@8kHz 采样*/

void filter(int xin[ ],int xout[ ],int n,float h[ ]); /*滤波子程序说明*/ /*19点滤波器系数*/ static float h[19]=

{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.04584568,

-0.04743239,-0.02881839,-0.009012882,0.01218354};

static int x1[length+20];

/*低通滤波浮点子程序*/

void filter(int xin[ ],int xout[ ],int n,float h[ ])

{

int i,j;

float sum;

for(i=0;i

for (i=0;i

{

sum=0.0;

for(j=0;j

xout[i]=(int)sum;

}

for(i=0;i<(n-1);i++) x1[n-i-2]=xin[length-1-i];

}

/*主程序*/

void main( )

{

FILE *fp1,*fp2;

int frame,indata[length],outdata[length];

fp1=fopen(insp.dat,"rb"); /*输入语音文件*/

fp2=fopen(outsp.dat,"wb"); /*滤波后语音文件*/

frame=0;

while(feof(fp1)==0)

{

frame++;

printf("frame=%d\n",frame);

for(i=0;i

filter(indata,outdata,19,h); /*调用低通滤波子程序*/

for(i=0;i

fcloseall( ); /*关闭文件*/

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 h[19]={399,-296,-945,-1555,-1503,-285,2112,5061,7503,8450, 7503,5061,2112,-285,-1503,-1555,-945,-296,399}; /*Q15*/

static int x1[length+20]; /*低通滤波定点子程序*/

void filter(int xin[ ],int xout[ ],int n,int h[ ])

{ int i,j;

long sum;

for(i=0;i

sum=0;

for(j=0;j>15; }

for(i=0;i<(n -1);i++) x1[n -i -2]=xin[length -i -1];

}

主程序与浮点的完全一样。

3.3 DSP 定点算术运算

定点DSP 芯片的数值表示是基于2的补码表示形式。每个16位数用1个符号位、i 个整数位和15-i 个小数位来表示。因此数00000010.10100000表示的值为311222--++=2.625,这个数可用Q8格式(8个小数位)来表示,它表示的数值范围为-128~+127.996,一个Q8定点数的小数精度为1/256=0.004。

虽然特殊情况(如动态范围和精度要求)必须使用混合表示法,但是,更通常的是全部以Q15格式表示的小数或以Q0格式表示的整数来工作。这一点对于主要是乘法和累加的信号处理算法特别现实,小数乘以小数得小数,整数乘以整数得整数。当然,乘积累加时可能会出现溢出现象,在这种情况下,程序员应当了解数学里面的物理过程以注意可能的溢出情况。下面讨论乘法、加法和除法的DSP 定点运算,汇编程序以TMS320C25为例。

3.3.1 定点乘法

2个定点数相乘时可以分为下列3种情况: 1.小数乘小数

Q15×Q15=Q30

例3.90.5*0.5 = 0.25

0.100000000000000 ;Q15

×0.100000000000000 ;Q15

00.010000000000000000000000000000=0.25 ;Q30

2个Q15的小数相乘后得到1个Q30的小数,即有2个符号位。一般情况下相乘后得到的满精度数不必全部保留,而只需保留16位单精度数。由于相乘后得到的高16位不满15位的小数精度,为了达到15位精度,可将乘积左移1位,下面是上述乘法的TMS320C25程序: LT OP1 ;OP1=4000H(0.5/Q15)

MPY OP2 ;OP2=4000H(0.5/Q15)

PAC

SACH ANS,1 ;ANS=2000H(0.25/Q15)

2.整数乘整数

Q0×Q0 = Q0

例3.1017×(-5)=-85

0000000000010001=17

×1111111111111011=-5

11111111111111111111111110101011=-85

3.混合表示法

许多情况下,运算过程中为了既满足数值的动态范围又保证一定的精度,就必须采用Q0与Q15之间的表示法。比如,数值1.2345,显然Q15无法表示,而若用Q0表示,则最接近的数是1,精度无法保证。因此,数1.2345最佳的表示法是Q14。

例3.11 1.5×0.75 = 1.125

01.10000000000000 = 1.5 ;Q14

×00.11000000000000 = 0.75 ;Q14

0001.0010000000000000000000000000 = 1.125;Q28

Q14的最大值不大于2,因此,2个Q14数相乘得到的乘积不大于4。

一般的,若一个数的整数位为i位,小数位为j 位,另一个数的整数位为m 位,小数位为n 位,则这两个数的乘积为( i + m )位整数位和(j + n)位小数位。这个乘积的最高16位可能的精度为( i + m )整数位和(15 - i - m)小数位。

但是,若事先了解数的动态范围,就可以增加数的精度。例如,程序员了解到上述乘积不会大于1.8,就可以用Q14数表示乘积,而不是理论上的最佳情况Q13。例3.11的TMS320C25程序如下:

LT OP1 ;OP1 = 6000H(1.5/Q14)

MPY OP2 ;OP2 = 3000H(0.75/Q14)

PAC

SACH ANS,1 ;ANS=2400H(1.125/Q13)

上述方法为了保证精度均对乘的结果舍位,结果所产生的误差相当于减去1个LSB(最低位)。采用下面简单的舍入方法,可使误差减少二分之一。

LT OP1

MPY OP2

PAC

ADD ONE,14 (上舍入)

SACH ANS,1

上述程序说明,不管ANS为正或负,所产生的误差是1/2 LSB,其中存储单元ONE的值为1。

3.3.2 定点加法

乘的过程中,程序员可不考虑溢出而只需调整运算中的小数点。而加法则是一个更加复杂的过程。首先,加法运算必须用相同的Q点表示;其次,程序员或者允许其结果有足够的高位以适应位的增长,或者必须准备解决溢出问题。如果操作数仅为16位长,其结果可用双精度数表示。下面举例说明16位数相加的两种途径。

1.保留32位结果

LAC OP1 ;(Q15)

ADD OP2 ;(Q15)

SACH ANSHI ;(高16位结果)

SACL ANSLO ;(低16位结果)

2.调整小数点保留16位结果

LAC OP1,15 ;(Q14数用ACCH表示)

ADD OP2,15 ;(Q14数用ACCH表示)

SACH ANS ;(Q14)

加法运算最可能出现的问题是运算结果溢出。TMS320提供了检查溢出的专用指令

BV,此外,使用溢出保护功能可使累加结果溢出时累加器饱和为最大的整数或负数。当然,即使如此,运算精度还是大大降低。因此,最好的方法是完全理解基本的物理过程并注意选择数的表达方式。

3.3.3 定点除法

在通用DSP芯片中,一般不提供单周期的除法指令,为此必须采用除法子程序来实现。二进制除法是乘法的逆运算。乘法包括一系列的移位和加法,而除法可分解为一系列的减法和移位。下面来说明除法的实现过程。

设累加器为8位,且除法运算为10除以3。除的过程就是除数逐步移位并与被除数比较的过程,在每一步进行减法运算,如果能减则将位插入商中。

(1) 除数的最低有效位对齐被除数的最高有效位。

00001010

-00011000

11110010

(2) 由于减法结果为负,放弃减法结果,将被除数左移一位再减。

00010100

-00011000

11111000

(3) 结果仍为负,放弃减法结果,被除数左移一位再减。

00101000

-00011000

00010000

(4) 结果为正,将减法结果左移一位后加1,作最后一次减。

00100001

-00011000

00001001

(5) 结果为正,将结果左移一位加1得最后结果。高4位代表余数,低4位表示商。

00010011

即商为0011=3,余数为0001=1。

TMS320没有专门的除法指令,但使用条件减指令SUBC可以完成有效灵活的除法功能。使用这一指令的唯一限制是两个操作数必须为正。程序员必须事先了解其可能的运算数的特性,如其商是否可以用小数表示及商的精度是否可被计算出来。这里每一种考虑可影响如何使用SUBC指令的问题。下面给出两种不同情况下的TMS320C25除法程序。

(1) 分子小于分母

DIV_A:

LT NUMERA

MPY DENOM

PAC

SACH TEMSGN ;取商的符号

LAC DENOM

ABS

SACL DENOM ;使分母为正

ZALH NUMERA ;使分子为正

ABS

RPTK 14

SUBC DENOM ;除循环15次

SACL QUOT

LAC TEMSGN

BGEZ A1 ;若符号为正,则完成

ZAC

SUB QUOT

SACL QUOT ;若为负,则商为负

A1: RET

这个程序中,分子在NUMERA中,分母在DENOM中,商存在QUOT中,TEMSGN为暂存单元。

(2) 规定商的精度

DIV_B:

LT NUMERA

MPY DENOM

PAC

SACH TEMSGN ;取商的符号

LAC DENOM

ABS

SACL DENOM ;使分母为正

LACK 15

ADD FRAC

SACL FRAC ;计算循环计数器

LAC NUMERA

ABS ;使分子为正

RPT FRAC

SUBC DENOM ;除循环16+FRAC次

SACL QUOT

LAC TEMSGN

BGEZ B1 ;若符号为正,则完成

ZAC

SUB QUOT

SACL QUOT ;若为负,则商为负

B1: RET

与DIV_A相同,这个程序中,分子在NUMERA中,分母在DENOM中,商存在QUOT 中,TEMSGN为暂存单元。FRAC中规定商的精度,如商的精度为Q13,则调用程序前FRAC单元中的值应为13。

3.4 非线性运算的定点快速实现

在数值运算中,除基本的加减乘除运算外,还有其他许多非线性运算,如对数运算、开方运算、指数运算、三角函数运算等,实现这些非线性运算的方法一般有:(1)调用DSP 编译系统的库函数;(2)查表法;(3)混合法。下面分别介绍这三种方法。

1.调用DSP编译系统的库函数

TMS320C2X/C5X 的C编译器提供了比较丰富的运行支持库函数。在这些库函数中,包含了诸如对数、开方、三角函数、指数等常用的非线性函数。在C程序中(也可在汇编程序中)只要采用与库函数相同的变量定义,就可以直接调用。例如,在库函数中,定义了以10为底的常用对数log10( ):

#include

double log10(double x);

在C程序中按如下方式调用:

float x,y;

x = 10.0;

y = log10(x);

从上例可以看出,库函数中的常用对数log10( )要求的输入值为浮点数,返回值也为浮点数,运算的精度完全可以保证。直接调用库函数非常方便,但由于运算量大,很难在实时DSP中得到应用。

2.查表法

在实时DSP应用中实现非线性运算,一般都采取适当降低运算精度来提高程序的运算速度。查表法是快速实现非线性运算最常用的方法。采用这种方法必须根据自变量的范围和精度要求制作一张表格。显然输入的范围越大,精度要求越高,则所需的表格就越大,即存储量也越大。查表法求值所需的计算就是根据输入值确定表的地址,根据地址就可得到相应的值,因而运算量较小。查表法比较适合于非线性函数是周期函数或已知非线性函数输入值范围这两种情况,例3.12和例3.13分别说明这两种情况。

例3.12已知正弦函数y=cos(x),制作一个512点表格,并说明查表方法。

由于正弦函数是周期函数,函数值在-1至+1之间,用查表法比较合适。

由于Q15的表示范围为-1至32767/32768之间,原则上讲-1至+1的范围必须用Q14表示。但一般从方便和总体精度考虑,类似情况仍用Q15表示,此时+1用32767来表示。

(1) 产生512点值的C语言程序如下所示:

#define N 512

#define pi 3.14159

int sin_tab[512];

void main( )

{

int i;

for(i=0;i

}

(2) 查表

查表实际上就是根据输入值确定表的地址。设输入x在0~2π之间,则x对应于512点表的地址为:index = (int)(512*x/2π),则y = sin(x) = sin_tab[index]。

如果x用Q12定点数表示,将512/2π用Q8表示为20861,则计算正弦表的地址的公式为:index = (x*20861L)>>20。

例3.13用查表法求以2为底的对数,已知自变量取值范围为0.5~1,要求将自变量范围均匀划分为10等分。试制作这个表格并说明查表方法。

(1) 做表:

y = log2(x),由于x在0.5到1之间,因此y在-1到0之间,x和y均可用Q15表示。由于对x 均匀划分为10段,因此,10段对应于输入x的范围如表3.2所示。若每一段的对数值都取第1

点的对数值,则表中第1段的对数值为y0(Q15) = (int)(log2(0.5)×32768),第2段的对数值为y1(Q15) = (int)(log2(0.55)×32768),依次类推。

表3.2 logtab0 10点对数表(输入0.5~1)

(2) 查表:

查表时,先根据输入值计算表的地址,计算方法为:index=((x -16384)×20)>>15。式中,index 就是查表用的地址。例如,已知输入x= 26869,则index=6,因此y=-10549。

3.混合法

(1) 提高查表法的精度

上述方法查表所得结果的精度随表的大小而变化,表越大,则精度越高,但存储量也越大。当系统的存储量有限而精度要求也较高时,查表法就不太适合。那么能否在适当增加运算量的情况下提高非线性运算的精度呢?下面介绍一种查表结合少量运算来计算非线性函数的混合法,这种方法适用于在输入变量的范围内函数呈单调变化的情形。

混合法是在查表的基础上采用计算的方法以提高当输入值处于表格两点之间时的精度。提高精度的一个简便方法是采用折线近似法,如图3.1所示。

仍以求以2为底的对数为例(例3.13)。设输入值为x ,则精确的对数值为y ,在表格值的两点之间作一直线,用y '作为y 的近似值,则有:

y '=y 0+?y

其中y 0由查表求得。现在只需在查表求得y 0的基础上增加?y 即可。?y 的计算方法如下:

?y=(?x/?x 0)?y=?x(?y 0/?x 0)

式中?y 0/?x 0对每一段来说是一个恒定值,可作一个表格直接查得。此外计算?x 时需用到每段横坐标的起始值,这个值也可作一个表格。这样共有

三个大小均为10的表格,分别为存储每段起点对数值的表logtab0、存储每段?y 0/?x 0 值的表logtab1和存储每段输入起始值x 0的表logtab2,表logtab1和表logtab2可用下列两个数组表示:

x 0

x

图3.1 提高精度的折线近似法

int logtab1[10]={22529,20567,18920,17517,16308,

15255,14330,13511,12780,12124}; /*?y0/?x0 : Q13*/ int logtab2[10]={16384,18022,19660,21299,22938,

24576,26214,27853,29491,31130}; /* x0: Q15*/

综上所述,采用混合法计算对数值的方法可归纳为:

①根据输入值,计算查表地址:index=((x-16384)×20)>>15;

②查表得y0=logtab0[index];

③计算?x=x-logtab2[index];

④计算?y=(?x×logtab1[index])>>13;

⑤计算得结果y=y0+?y。

例3.14已知x=0.54,求log2(x)。

0.54的精确对数值为y=log2(0.54)=-0.889。

混合法求对数值的过程为:

①定标Q15,定标值x=0.54*32768=17694;

②表地址index=((x-16384)×20)>>15=0;

③查表得y0=logtab0[0]=-32768;

④计算?x=x-logtab2[0]=17694-16384=1310;

⑤计算?y=(?xlogtab1[0])>>13=(1310*22529L)>>13=3602;

⑥计算结果y=y0+?y=-32768+3602=-29166。

结果y为Q15定标,折算成浮点数为-29166/32768=-0.89,可见精度较高。

(2) 扩大自变量范围

如上所述,查表法比较适用于周期函数或自变量的动态范围不是太大的情形。对于像对数这样的非线性函数,输入值和函数值的变化范围都很大。如果输入值的变化范围很大,则作表就比较困难。那么能否比较好地解决这个问题,既不使表格太大,又能得到比较高的精度呢?下面讨论一种切实可行的方法。

设x是一个大于0.5的数,则x可以表示为下列形式:

x =e2

m?

式中,0.5≤m≤1.0,e为整数。则求x 的对数可以表示为:

log2(x) = log2(e2

m?) = log2(m) + log2(e2) = e + log2(m)

也就是说,求x的对数实际上只要求m的对数就可以了,而由于m的数值在0.5~1.0之间,用上面介绍的方法是完全可以实现的。例如:

log2(10000) = log2(0.61035×142) = log2(0.61035) + 14 = 13.2877 可见,如果一个数可以用比较简便的方法表示为上面的形式,则求任意大小数的对数也是比较方便的。TMS320C2X/C5X指令集提供了一条用于对ACC中的数进行规格化的指令NORM ,该指令的作用就是使累加器中的数左移,直至数的最高位被移至累加器的第30位。例如,对数值10000进行规格化的TMS320C25程序为:

LAC #10000

SACL TEMP

ZALH TEMP

LAR AR1,#0FH RPT

14 NORM

*-

上述程序执行后,AR1=#0eH ,ACCH=2000(10进制)。对一个16位整数 x 进行上述程序处理实际上就是做这样一个等效变换:

x =

Q

15Q

2

32768

2

x -??

其中,寄存器AR1包含的值为15-Q ,累加器ACC 高16位包含的值为Q 2?x ,其数值在16384~32768之间。

例3.15 实现以2为底的对数的C 定点模拟程序

int logtab0[10]={-32768,-28262,-24149,-20365,-16862, -13600,-10549,-7683,-4981,-2425}; /*Q15*/ int logtab1[10]={22529,20567,18920,17517,16308, 15255,14330,13511,12780,12124}; /*Q13*/ int logtab2[10]={16384,18022,19660,21299,22938, 24576,26214,27853,29491,31130}; /*Q15*/ int log2_fast(int Am) {

int point,point1; int index,x0,dx,dy,y; point =0;

while(Am<16384) {point++;Am =Am<<1;} /*对Am 进行规格化*/ point1=(15-point -4)*512; /*输入为Q4,输出为Q9*/ index =((Am -16384)*20L)>>15; /*求查表地址*/

dx =Am -logtab2[index];

dy =((long)dx*logtab1[index])>>13; y =(dy+logtab0[index])>>6; /*Q9*/

y =point1+y; return (y);

}

上述程序中,输入值Am 采用Q4表示,输出采用Q9表示,如果输入输出的Q 值与上面程序中的不同,则应做相应的修改。

3.5 小 结

本章讨论了DSP 芯片进行定点运算所涉及的一些基本问题,这些问题包括:数的定标,DSP 程序的定点模拟,DSP 芯片的定点运算以及定点实现非线性函数的快速实现方法

等。充分理解这些问题对于用定点芯片实现DSP 算法具有非常重要的作用。

FPGA在高速数字信号处理中的使用

由于成本、系统功耗和面市时间等原因,许多通讯、视频和图像系统已无法简单地用现有DSP处理器来实现,现场可编程门阵列(FPGA)尤其适合于乘法和累加(MAC)等重复性的DSP任务。本文从FPGA与专用DSP器件的运算速度和器件资源的比较入手,介绍FPGA 在复数乘法、数字滤波器设计和FFT等数字信号处理中应用的优越性,值得(中国)从事信号处理的工程师关注。 Chris Dick Xilinx公司 由于在性能、成本、灵活性和功耗等方面的优势,基于FPGA的信号处理器已广泛应用于各种信号处理领域。近50%的FPGA产品已进入各种通信和网络设备中,例如无线基站、交换机、路由器和调制解调器等。FPGA提供了极强的灵活性,可让设计者开发出满足多种标准的产品。例如,万能移动电话能够自动识别GSM、CDMA、TDMA或AMPS等不同的信号标准,并可自动重配置以适应所识别的协议。FPGA所固有的灵活性和性能也可让设计者紧跟新标准的变化,并能提供可行的方法来满足不断变化的标准要求。 复数乘法 复数运算可用于多种数字信号处理系统。例如,在通讯系统中复数乘积项常用来将信道转化为基带。在线缆调制解调器和一些无线系统中,接收器采用一种时域自适应量化器来解决信号间由于通讯信道不够理想而引入的干扰问题。量化器采用一种复数运算单元对复数进行处理。用来说明数字信号处理器优越性能的指标之一就是其处理复数运算的能力,尤其是复数乘法。 一个类似DSP-24(工作频率为100MHz)的器件在100ns内可产生24×24位复数乘积(2个操作数的实部和虚部均为24位精度)。复数乘积的一种计算方法需要4次实数乘法、1次加法和1次减法。一个满精度的24×24实数管线乘法器需占用348个逻辑片。将4个实数乘法器产生的结果组合起来所需的2个48位加法/减法器各需要24个逻辑片(logic slice)。这些器件将工作在超过100MHz的时钟频率。复数乘法器采用一条完全并行的数据通道,由4×348+2×24=1440个逻辑片构成,这相当于Virtex XCV1000 FPGA所提供逻辑资源的12%。计算一个复数乘积所需的时间为10ns,比DSP结构的基准测试快一个数量级。为了获得更高的性能,几个完全并行的复数乘法器可在单个芯片上实现。采用5个复数乘法器,假设时钟频率为100MHz,则计算平均速率为每2ns一个复数乘积。这一设计将占用一个XCV1000器件约59%的资源。 这里应该强调的一个问题是I/O,有这样一条高速数据通道固然不错,但为了充分利用它,所有的乘法器都须始终保持100%的利用率。这意味着在每一个时钟来临时都要向这些单元输入新的操作数。 除了具有可实现算法功能的高可配置逻辑结构外,FPGA还提供了巨大的I/O带宽,包括片上和片外数据传输带宽,以及算术单元和存储器等片上部件之间的数据传输带宽。例如,XCV1000具有512个用户I/O引脚。这些I/O引脚本身是可配置的,并可支持多种信号标准。实现复数乘法器的另一种方法是构造一个单元,该单元采用单设定或并行的24x24实数乘法器。这种情况下,每一个复数乘法需要4个时钟标识,但是FPGA的逻辑资源占用率却降到了最低。同样,采用100MHz系统时钟,每隔40ns可获得一个新的满精度复数乘积,这仍是DSP结构基准测试数据的2.5倍。这一设定方法需要大约450个逻辑片,占一个XCV1000器件所有资源的3.7%(或XCV300的15%)。 构造一条能够精确匹配所需算法和性能要求的数据通道的能力是FPGA技术独特的特性之一。而且请注意,由于FPGA采用SRAM配置存储器,只需简单下载一个新的配置位流,同样的FPGA硬件就可适用于多种应用。FPGA就像是具有极短周转时间的微型硅片加工厂。

数字信号处理第三章

数字信号处理第三章实验程序 3.1计算离散时间傅里叶变换 % Program P3_1 % Evaluation of the DTFT clf; % Compute the frequency samples of the DTFT w = -4*pi:8*pi/511:4*pi; num = [2 1];den = [1 -0.6]; h = freqz(num, den, w); % Plot the DTFT subplot(2,1,1) plot(w/pi,real(h));grid title('Real part of H(e^{j\omega})') xlabel('\omega /\pi'); ylabel('Amplitude'); subplot(2,1,2) plot(w/pi,imag(h));grid title('Imaginary part of H(e^{j\omega})') xlabel('\omega /\pi'); ylabel('Amplitude'); pause subplot(2,1,1) plot(w/pi,abs(h));grid title('Magnitude Spectrum |H(e^{j\omega})|') xlabel('\omega /\pi'); ylabel('Amplitude'); subplot(2,1,2) plot(w/pi,angle(h));grid title('Phase Spectrum arg[H(e^{j\omega})]') xlabel('\omega /\pi'); ylabel('Phase in radians'); Q3.1离散时间傅里叶变换的原始序列是H(e^jw)=(2+z^-1)/(1-0.6z^-1)。Pause的作用是暂停等待用户输入任意键后接着执行以下命令。 Q3.2

高速实时数字信号处理硬件技术发展概述

高速实时数字信号处理硬件技术发展概述 摘要:在过去的几年里,高速实时数字信号处理(DSP)技术取得了飞速的収展,目前单片DSP芯片的速度已经可以达到每秒80亿次定点运算(8000MIPS);其 高速度、可编程、小型化的特点将使信息处理技术迚入一个新纪元。一个完整的高速 实时数字信号处理系统包括多种功能模块,如DSP,ADC,DAC,RAM,FPGA,总线接口等技术本文的内容主要是分析高速实时数字信号处理系统的特点,构成,収展过程和系统设计中的一些问题,幵对其中的主要功能模块分别迚行了分析。最后文中介绍了一种采用自行开収的COTS产品快速构建嵌入式幵行实时信号处理系统的设计方法。 1.概述 信号处理的本质是信息的变换和提取,是将信息仍各种噪声、干扰的环境中提取出来,幵变换为一种便于为人或机器所使用的形式。仍某种意义上说,信号处理类似于”沙里淘金”的过程:它幵不能增加信息量(即不能增加金子的含量),但是可以把信息(即金子)仍各种噪声、干扰的环境中(即散落在沙子中)提取出来,变换成可以利用的形式(如金条等)。如果不迚行这样的变换,信息虽然存在,但却是无法利用的,这正如散落在沙中的金子无法直接利用一样。 高速实时信号处理是信号处理中的一个特殊分支。它的主要特点是高速处理和实时处理,被广泛应用在工业和军事的关键领域,如对雷达信号的处理、对通

信基站信号的处理等。高速实时信号处理技术除了核心的高速DSP技术外,还包括很多外围技术,如ADC,DAC等外围器件技术、系统总线技术等。 本文比较全面地介绍了各种关键技术的当前状态和収展趋势,幵介绍了目前高性能嵌入式幵行实时信号处理的技术特点和収展趋势,最后介绍了一种基于COTS产品快速构建嵌入式幵行实时信号处理系统的设计方法。 2.DSP技术 2.1 DSP的概念 DSP(digital signal processor),即数字信号处理器,是一种专用于数字信号处理的可编程芯片。它的主要特点是: ①高度的实时性,运行时间可以预测; ②Harvard体系结构,指令和数据总线分开(有别于冯·诺依曼结构); ③RISC指令集,指令时间可以预测; ④特殊的体系结构,适合于运算密集的应用场合; ⑤内部硬件乘法器,乘法运算时间短、速度快; ⑥高度的集成性,带有多种存储器接口和IO互联接口; ⑦普遍带有DMA通道控制器,保证数据传辒和计算处理幵行工作; ⑧低功耗,适合嵌入式系统应用。 DSP有多种分类方式。其中按照数据类型分类,DSP被分为定点处理器(如ADI的ADSP218x/9xBF5xx,TI的TMS320C62/C64)和浮点处理器(如ADI的SHARC/Tiger SHARC系统·TI的TMS320C67)。 雷达信号处理系统对DSP的要求很高,通常是使用32bit的高端DSP;而且浮

定点DSP和浮点DSP的区别与比较

定点与浮点运算DSP 的比较 DSP数字信号处理器是一种特别适合于进行数字信号处理的微处理器,主要用于实时快速地实现各种数字信号处理算法。定点运算DSP 在应用中已取得了极大的成功,而且仍然是DSP 应用的主体。然而,随着对DSP 处理速度与精度、存储器容量、编程的灵活性和方便性要求的不断提高、自80 年代中后期以来,各DSP 生产厂家陆续推出了各自的32bit浮点运算DSP。 和定点运算DSP 相比,浮点运算DSP 具有许多优越性:浮点运算DSP 比定点运算DSP 的动态范围要大很多。 定点DSP 的字长每增加1bit,动态范围扩大6dB。16bit 字长的动态范围为96dB。程序员必须时刻关注溢出的发生。例如,在作图像处理时,图像作旋转、移动等,就很容易产生溢出。这时,要么不断地移位定标,要么作截尾。前者要耗费大量的程序空间和执行时间,后者则很快带来图像质量的劣化。总之,是使整个系统的性能下降。在处理低信噪比信号的场合,例如进行语音识别、雷达和声纳信号处理时,也会发生类似的问题。 32bit 浮点运算DSP 的动态范围可以作到1536dB,这不仅大大扩大了动态范围,提高了运算精度,还大大节省了运算时间和存储空间,因为大大减少了定标,移位和溢出检查。 由于浮点DSP 的浮点运算用硬件来实现,可以在单周期内完成,因而其处理速度大大高于定点DSP。这一优点在实现高精度复杂算法时尤为突出,为复杂算法的实时处理提供了保证。 32bit 浮点DSP 的总线宽度较定点DSP 宽得多,因而寻址空间也要大得多。这一方面为大型复杂算法提供了可能、因为省的DSP 目标子程序已使用到几十MB 存储器或更多;另一方面也为高级语言编译器、DSP 操作系统等高级工具软件的应用提供了条件。 DSP 的进一步发展,必然是多处理器的应用。新型的浮点DSP 已开始在通信口的设置和强化、资源共享等方面有所响应。 TMS320C6000家族为高性能DSP,包括: TMS320C62X定点DSP系列、TMS320C64X定点DSP系列、TMS320C67X定点DSP系列。 TMS320C62X系列 工作频率:150-300MHz,运行速度:1200-2400MIPS,内部2个乘法器、6个算术逻辑单元,超长指令字(VLIW)结构,大容量的片内存储器和大范围的寻址能力,4个DMA接口,2个多通道缓存串口,2个32位片内外设。 TMS320C64X系列 工作频率:400-600MHz,运行速度:3200-4800MIPS,具有特殊功能的指令集。 TMS320C67X系列,为高性能浮点DSP 工作频率:100-225MHz,运行速度:600-1350MIPS,具有4个浮点/定点算术逻辑单元,2个定点算术逻辑单元,2个浮点/定点乘法器。

基于TMS320C6455的高速数字信号处理系统设计

基于TMS320C6455的高速数字信号处理系统设计 摘要:针对高速实时数字信号处理系统设计要求,本文提出并设计了基于dsp+fpga结构的高速数字信号处理系统,采用ti公司目前单片处理能力最强的定点dsp芯片tms320c6455为系统主处理器,fpga作为协处理器。详细论述了dsp外围接口电路的应用和设计,系统设计电路简洁、实现方便,可靠性强。 关键词:tms320c6455 fpga 数字信号处理系统设计 design of high-speed digital signal processing system based on tms320c6455 cao jingzhi,he fei,li qiang,ren hui,qin wei (department of tool development,china petroleum logging co.,ltd shaan xi xi’an 710077) abstract:according to the design needs of high-speed real-time digital signal processing system.the paper puts forward a design of high-speed digital signal processing system based on dsp+fpga structure,adopting ti company fixed-point dsp chip tms320c6455,the currently strongest capacity monolithic processor,for system main processor,and fpga as coprocessor.this paper describs the application and design of dsp periphery circuit interface in detail.the system design has simple circuit and realize convenient, reliability.

DSP定点运算-Q格式

DSP芯片的定点运算---Q格式(转) 2008-09-03 15:47 DSP芯片的定点运算 1.数据的溢出: 1>溢出分类: 上溢(overflow): 下溢(underflow) 2>溢出的结果: Max Min 上溢在圆圈上按数据逆时针移动;下溢在圆圈上顺时钟移动。 例:signed int :32767+1=-32768;-32768-1=32767 unsigned char:255+1=0;0-1=255 3>为了避免溢出的发生,一般在DSP中可以设置溢出保护功能。当发生溢出时,自动将结果设置为最大值或最小值。 2.定点处理器对浮点数的处理: 1>定义变量为浮点型(float,double),用C语言抹平定点处理器和浮点处理器 的区别,但是程序的代码庞大,运算速度也慢。 2>放大若干倍表示小数。比如要表示精度为0.01的变量,放大100倍去运算, 运算完成后再转化。但是这个做法比较僵硬,如要将上面的变量重新定义成 0.001精度,又需要放大1000倍,且要重新编写整个程序,考虑溢出等问题。 3>定标法:Q格式:通过假定小数点位于哪一位的右侧,从而确定小数的精度。 Q0:小数点在第0位的后面,即我们一般采用的方法 Q15 小数点在第15位的后面,0~14位都是小数位。 转化公式:Q=(int)(F×pow(2,q)) F=(float)(Q×pow(2,-q)) 3.Q格式的运算 1>定点加减法:须转换成相同的Q格式才能加减 2>定点乘法:不同Q格式的数据相乘,相当于Q值相加 3>定点除法:不同Q格式的数据相除,相当于Q值相减 4>定点左移:左移相当于Q值增加 5>定点右移:右移相当于Q减少 4.Q格式的应用格式 实际应用中,浮点运算大都时候都是既有整数部分,也有小数部分的。所以要选择 一个适当的定标格式才能更好的处理运算。一般用如下两种方法: 1>使用时使用适中的定标,既可以表示一定的整数复位也可以表示小数复位,如 对于2812的32位系统,使用Q15格式,可表示-65536.0~65535.999969482 区间内的数据。

高速DSP的PCB抗干扰设计技术(精)

高速DSP的PCB抗干扰设计技术 高速系统中,噪声干扰的产生是第一影响因素,高频电路还会产生辐射和冲突,而较快的边缘速率则会产生振铃、反射和串扰。如果不考虑高速信号布局布线的特殊性,设计出的电路板将不能正常工作。因此PCB板的设计成功是DSPs电路设计过程中非常关键的一个环节。 1 传输线效应 1.1信号完整性 信号完整性主要有反射、振铃、地弹和串扰等现象。PCB板上的走线可等效为图1所示的串联和并联的电容、电阻和电感结构。串联电阻的典型值0.25D./R-4)。55DJft,并联电阻阻值通常很高。将寄生电阻、电容和电感加到实际的PCB连线中之后,连线上的最终阻抗称为特征阻抗zo。 如果传输线和接收端的阻抗不匹配,这就会引起信号的反射和振荡。 布线的几何形状,不正确的线端接,经过连接器的传输及电源平面的不连续等因素的变化均会导致反射。过冲和下冲是信号在电平上升沿和下降沿变化时产生的,会在瞬间产生高于或低于平稳电平的毛刺,容易损坏器件。信号的振铃和环绕振荡分别是由线上不恰当的电感和电容所应起的。振铃可以通过适当的端接予以减小。 当电路中有大的电流涌动时会引起地弹,若有一个较大的瞬态电流在芯片与板的电源平面流过,芯片封装与电源平面间的寄生电感和电阻就会引发电源噪声。串扰是两条信号线之间的耦合问题,信号线之间的互感和互容导致了线上的噪声。容性耦合引发耦合电流,而感性耦合引发耦合电压。PCB板层的参数、信号线间距、驱动端和接收端的电气特性及线端接方式对串扰都有一定的影响。 1.2 解决办法 要解决常见的问题需要采取的一些措施: 电源层对电流方向不限制,返回线可沿着最小阻抗即与信号线最接近的路径走。这就可能使电流回路最小,而这将是高速系统首选的方法。但是电源层不排除线路杂波,不注意电源分布路径,所有系统均会产生噪声造成错误。因此需要特殊的滤波器,由旁路电容实现。一般一个l虾到lOp.F的电容放在板上电源输入端,而0.01p.F至U0.1心的电容放在板上每个有源器件的电源、地的管脚之间。旁路电容的作用就像滤波器,大电容(10aF)放在电源输入端,滤除板外产生的低频(60Hz)噪声,板上有源器件产生的噪声在100MHz或更高的频率下会产生谐波,放在每个芯片之间的旁路电容通常比放在板上电源输入端的电容小得多。

DSP实验手册实验一CCS使用及DSP的运算(精)

实验一 CCS使用及DSP 基本数学运算 一、实验目的: 1、熟悉CCS 集成开发环境,掌握工程的生成方法; 2、熟悉SEED-DTK5416实验环境; 3、掌握CCS 集成开发环境的调试方法; 4、了解数在计算过程中的定标,掌握数的定点、浮点表示方法,定点、浮点基本运算以及定点、浮点间的相互转换。 二、实验内容: 1、 DSP源文件的建立; 2、 DSP程序工程文件的建立; 3、编译与链接的设置,生成可执行的DSP 文件; 4、进行DSP 程序的调试与改错; 5、学习使用CCS 集成开发工具的调试工具; 6、观察实验结果; 三、实验知识背景: 在DSP 编程过程中,数以二进制、十进制、与十六制表示均可。在定点DSP 的运算过程中,数一般采用二进制与二进制补码的形式进行运算的。其中二进制数只能代表正数不能代表负的数,而二进制补码记数系统弥补了这一缺点。它的构成如下; 在二进制的基础上,加一符号位。符号位位于二进制数的最高位

当为正数时,符号位为0,为负数时,符号位为1 当采用二进制补码进行数的运算时,具有如下的两个优点: 可以将加法与减法统一成加法运算 符号位可以进行扩展,而其数值不变,这可以使一个比较小的数存放到比较大的寄存器当中 例: 1×2 + 0×1 = -2 (11110)2 = 1×(-16)+ 1×8 + …… + 当将其符号位扩展三位,放入一8位的寄存器中 1×2 + 0×1 = -2 (11111110)2 = 1×(-128)+ 1×64 + …… + 这将为运算提供极大的方便,因而在定点的DSP 中,大多数情况采用二进制补码形式。 C5000系列的DSP 硬件只支持定点运算,浮点运算要通过软件来实现。其运算字长为16位,也就是说,DSP 所能表示的整数的范围也就决定了,其范围为-32768到32767。而在很多情况下,数学运算过程中不一定是整数,而且动态范围也不是固定不变的。如何解决这个问题?对于只支持定点运算的CPU 来说,在硬件上并没有提供小数点定位的机制。只有靠软件中人为地假设将小数点放在16位数据中的不同位置,就可以表示不同大小与不同精度的数据了,这就是数的定标。 数的定标有Q 与S 两种表示方法。在Q 表示法中,Q 代表(Quantity of Fractional Bits)数中尾数部分的位数,即小数点右边的位数。而S 表示法中,S 代表数中整数部分的位数,即小数点左边的位数。实用中一般用Q 表示法,例:Q 0表示小数点在第0位的右边,即为整数。Q 15表数小数点在第15位的右边,即为小于1的小数(以二进制补码表示,第15位为符号位)。下表给出了16位数的16种不同的Q 表示法。并列出了它们所能表示的十进

《数字信号处理》朱金秀第三章习题及参考答案

第三章习题答案 3.1 (1)非周期 (2)N=1 (3)N=10 (4)N=4 (5)N=20 3.2 02s f f ωπ =,1s s f T = (1)0153,2f ωπ== ;0.3s T =,05 f π = (2)010,25f ωπ==;0.3s T =,050 3 f = (3)0,0.55f πω==;0.3s T =,01 3 f = (4)03.5,8.75f ωπ==;0.3s T =,035 6 f = (5) ()() ()(){ } 0.20.2 1 0.20.2 0.20.2(0.2)(0.2) 1 c o s (0.2)() 2130.6c o s (0.2)() 1.8()0.6() 211.8 0.6()0. 6() 2110.910.610.6j n j n n n j n j n n n j n j n j j n e e F n u n F e e u n F e u n F e u n e e ππππππωπωπππ-+-----+=+?? ??-=-?+-??? ?? ? ????=-?-+-? ??? ?? =-+ ?++?? 3.3 function [X]=myDTFT(x, n, w) % 计算DTFT % [X]=myDTFT(x, n, w) %X=输出的DTFT 数组 %x=输入的有限长序列 %n=样本位置行向量 %w=频率点位置行向量 X=x*exp(-j*n ’*w) 3.4 (1) 7 ()10.3j j X e e ω ω -= - (2)20.51 ()(10.5)10.5j j j j e X e e e ωω ωω ---=--- (3)2()0.80.1610.4j j j e X e e ω ω ω --=??-

DSP中的浮点小数与定点小数

DSP中的浮点小数与定点小数 在DSP世界中,由于DSP芯片的限制,经常使用定点小数运算。所谓定点小数,实际上就是用整数来进行小数运算。下面先介绍定点小数的一些理论知识,然后以C语言为例,介绍一下定点小数运算的方法。在TI C5000 DSP系列中使用16比特为最小的储存单位,所以我们就用16比特的整数来进行定点小数运算。 先从整数开始,16比特的储存单位最多可以表示0x0000到0xffff,65536种状态,如果它表示C语言中的无符号整数的话,就是从0到65535。如果需要表示负数的话,那么最高位就是符号位,而剩下的15位可以表示32768种状态。这里可以看出,对于计算机或者DSP芯片来说,符号并没有什么特殊的储存方式,其实是和数字一起储存的。为了使得无论是无符号数还是符号数,都可以使用同样的加法减法规则,符号数中的负数用正数的补码表示。 我们都知道-1 + 1 =0,而0x0001表示1,那么-1用什么来表示才能使得-1 + 1 =0呢?答案很简单:0xffff。现在就可以打开Windows的计算器,用16进制计算一下0xffff+0x0001,结果是0x10000。那么0x10000和0x0000等价麽,我们刚才说过用16比特来表达整数,最高位的1是第17位,这一位是溢出位,在运算寄存器中没有储存这一位,所以结果是低16位,也就是0x0000。现在我们知道负数的表达方式了。举个例子:-100。首先我们需要知道100的16进制,用计算器转换一下,可以知道是0x0064,那么-100就是0x10000 - 0x0064,用计算器算一下得0xff9c。还有一种简单的转换符号的方法,就是取反加一:把数x写成二进制格式,每位0变1,1变0,最后把结果加1 就是-x了。 好,复习了整数的相关知识之后,我们进入定点小数运算环节。所谓定点小数,就是小数点的位置是固定的。我们是要用整数来表示定点小数,由于小数点的位置是固定的,所以就没有必要储存它(如果储存了小数点的位置,那就是浮点数了)。既然没有储存小数点的位置,那么计算机当然就不知道小数点的位置,所以这个小数点的位置是我们写程序的人自己需要牢记的。 先以10进制为例。如果我们能够计算12+34=46的话,当然也就能够计算1.2+3.4 或者0.12+0.34了。所以定点小数的加减法和整数的相同,并且和小数点的位置无关。乘法就不同了。12*34=408,而1.2*3.4=4.08。这里1.2的小数点在第1位之前,而4.08的小数点在第2位之前,小数点发生了移动。所以在做乘法的时候,需要对小数点的位置进行调整?!可是既然我们是做定点小数运算,那就说小数点的位置不能动!!怎么解决这个矛盾呢,那就是舍弃最低位。也就说 1.2*3.4=4.1,这样我们就得到正确的定点运算的结果了。所以在做定点小数运算的时候不仅需要牢记小数点的位置,还需要记住表达定点小数的有效位数。上面这个例子中,有效位数为2,小数点之后有一位。 现在进入二进制。我们的定点小数用16位二进制表达,最高位是符号位,那么有效位就是15位。小数点之后可以有0 - 15位。我们把小数点之后有n位叫做Qn,例如小数点之后有12位叫做Q12格式的定点小数,而Q0就是我们所说的整数。 Q12的正数的最大值是0 111.111111111111,第一个0是符号位,后面的数都是1,那么这个数是十进制的多少呢,很好运算,就是0x7fff / 2^12 =

(完整版)TMS320C6455高速SRIO接口设计

TMS320C6455高速SRIO接口设计 引言 数字信号处理技术已广泛应用于通信、雷达、声纳、遥感、图形图像处理和语音处理等领域。随着现代科技的发展,尤其是半导体工艺的进入深亚微米时代,新的功能强劲的高性能数字信号处理器(DSP)也相继推出,如ADI(美国模拟器件)公司的TigerSHARC系列和TI(德州仪器)公司的 C6000系列,但是,要实现对运算量和实时性要求越来越高的DSP 算法,如对基于分数阶傅立叶变换的Chirp信号检测与估计,合成孔径雷达(SAR)成像,高频地波雷达中的自适应滤波和自适应波束形成等算法,单片DSP 仍然显得力不从心。这些挑战主要涉及两个主题:一是计算能力,指设备、板卡和系统中分别可用的处理资源。采用多DSP、多FPGA系统,将是提高运算能力的一个有效途径。二是连接性,从本质上说就是实现不同设备、板卡和系统之间的“快速”数据转移。对于一些复杂的信息系统,对海量数据传输的实时性提出了苛刻的要求,多DSP之间、DSP与高速AD采集系统、DSP与FPGA间的高速数据传输,是影响信号处理流程的主要瓶颈之一。TI公司最新推出的高性能TMS320C6455(下文称C6455)处理器,具有高速运算能力的同时集成了高速串行接口SRIO,方便多DSP以及DSP与FPGA之间的数据传输,在一定程度上满足了高速实时处理和传输的要求。本文在多DSP+FPGA通用信号处理平台的基础上,深入研究了多DSP间,DSP与FPGA间的SRIO 的数据通信和加载技术的软硬件设计与实现。这些技术包括了目前SRIO接口的各种应用方式,可作为SRIO接口及C6455开发提供参考[1-3]。 1 C6455特性及SRIO标准介绍 C6455是目前单片处理能力最强的新型高性能定点DSP,它是TI 公司基于第三代先进VeloviTI VLIW(超长指令字)结构开发出来的新产品。最高主频为1.2GHz,16位定点处理能力为9600MMAC/s。C6455建立在增强型C64x+ DSP内核基础之上,代码尺寸平均缩短了20%至30%,周期效率提高了20%。C6455不仅是内核的增强和运算速度的提升,相比以前的芯片,集成了丰富的外围接口,如千兆以太网控制器,66 MHz PCI总线接口,最重要的是增加了新的外设接口SRIO,全双工工作时,四个端口峰值速率每秒高达25 Gbits,解决了DSP高速数据传输的瓶颈,降低了开发多处理器系统的难度[4-5]。 RapidIO是新一代高速互连技术,已于2004年被国际标准化组织(ISO)和国际电工协会(IEC) 批准为ISO/IEC DIS 18372标准。RapidIO互连定义包括两类技术:面向高性能微处理器及系统互连的Parallel RapidIO接口;面向串行背板、DSP和相关串行控制平面应用的Serial RapidIO接口。SRIO支持编程模型包括基本存储器映射IO事务、基于端口的消息传递和基于硬件一致性的全局共享分布式处理器。 SRIO互连架构是一个开放的标准,满足了嵌入式基础实施在应用方面的广泛需要。可行的应用包括多处理器、存储器、网络设备中的存储器映射I/O器件、存储子系统和通用计算平台。这一互连技术主要作为系统内部互连,支持芯片到芯片和板到板的通信,可以实现从1Gbps到60Gbps的性

高速实时数字信号处理系统技术探析

高速实时数字信号处理系统技术探析  (毛二可院士 龙腾副教授)    高速实时数字信号处理(DSP)技术取得了飞速的发展,目前单片DSP芯片的速度已经可以达到每秒16亿次定点运算(1600MIPs到4800MIPs);最近TI宣布1GHz DSP已经准备投产。其高速度、可编程、小型化的特点将使信息处理技术进入一个新纪元。一个完整的高速实时数字信号处理系统包括多种功能模块,如DSP、ADC、DAC等等。本文的内容主要是分析高速实时数字信号处理系统的产生、特点、构成、以及系统设计中的一些问题,并对其中的主要功能模块分别进行了分析。  一、高速实时数字信号处理概述  1.信号处理的概念  信号处理的本质是信息的变换和提取,是将信息从各种噪声、干扰的环境中提取出来,并变换为一种便于为人或机器所使用的形式。从某种意义上说,信号处理类似于"沙里淘金"的过程:它并不能增加信息量(即不能增加金子的含量),但是可以把信息(即金子)从各种噪声、干扰的环境中(即散落在沙子中)提取出来,变换成可以利用的形式(如金条等等)。如果不进行这样的变换,信息虽然存在,但却是无法利用的;这正如散落在沙中的金子无法直接利用一样。  2.高速实时数字信号处理的产生  早期的信号处理主要是采用模拟的处理方法,包括运算放大电路、声表面波器件(SAW)以及电荷耦合器件(CCD)等等。例如运算放大电路通过不同的电阻组配可以实现算术运算,通过电阻、电容的组配可以实现滤波处理等等。模拟处理最大的问题是不灵活、不稳定。其不灵活体现在参数修改困难,需要采用多种阻值、容值的电阻、电容,并通过电子开关选通才能修改处理参数。其不稳定主要体现为对周围环境变化的敏感性,例如温度、电路噪声等都会造成处理结果的改变。  解决以上问题最好的方法就是采用数字信号处理技术。数字信号处理可以通过软件修改处理参数,因此具有很大的灵活性。由于数字电路采用了二值逻辑,因此只要环境温度、电路噪声的变化不造成电路逻辑的翻转,数字电路的工作都可以不受影响地完成,具有很好的稳定性。因此,数字信号处理已经成为信号处理技术的主流。  数字信号处理的主要缺点是处理量随处理精度、信息量的增加而成倍增长,解决这一问题的方法是研究高速运行的数字信号处理系统;这就是本文所探讨的主题:高速实时数字信号处理的理论与技术。 3.高速实时数字信号处理特点   高速实时数字信号处理的特点:  首先是高速度,其处理速度可以达到数百兆量级。

DSP芯片的简介

[摘要] 让你说出知道的芯片的名称,你可能会一时想不起,也不能一一罗列DSP 芯片都有哪些。或许是对DSP芯片深刻的了解才了然于心,由于种种原因的忘却;或许是因为大家在说DSP芯片好,既然大家都说好,那才是真的好,至于怎样好,可能是似懂非懂。那好吧,不管是懂还是不懂,现在让我们从新的视角来读懂这个芯片的世界,让你发现不曾明白的细节 让你说出知道的芯片的名称,你可能会一时想不起,也不能一一罗列DSP芯片都有哪些。或许是对DSP芯片深刻的了解才了然于心,由于种种原因的忘却;或许是因为大家在说DSP芯片好,既然大家都说好,那才是真的好,至于怎样好,可能是似懂非懂。那好吧,不管是懂还是不懂,现在让我们从新的视角来读懂这个芯片的世界,让你发现不曾明白的细节。 DSP芯片,也称数字信号处理器,采用特殊的软硬件结构,是一种专注于进行数字信号处理运算的微处理器,其主要应用是实时快速地实现各种数字信号处理,是数字信号处理理论实用化过程的重要技术工具。在语音处理、图像处理等技术领域得到了广泛的应用。那根据对DSP芯片的理解来对比与其他芯片的最要的区别是什么?杭州海康威视数字技术股份有限公司的高级嵌入式开发经理黄田认为,DSP芯片与其它芯片的最大区别在于它拥有针对各种算法设计的大量专用指令,比如各种向量运算。另外DSP芯片在设计时更多地考虑到数据总线的带宽以及吞吐量,避免数据访问成为影响算法性能的瓶颈。 芯片的基本结构 为了快速地实现数字信号处理运算,DSP芯片一般都采用特殊的软硬件结构。下面简单介绍DSP芯片的基本结构。 (1)哈佛结构 主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编址,独立访问。与两个存储器相对应的是系统中设置了程序总线和数据总线,从而使数据的吞吐率提高了一倍。由于程序和数据在两个分开的空间,因此取指和执行能完全重叠。 (2)流水线操作 流水线与哈佛结构相关,DSP芯片广泛采用流水线以减少指令执行时间,从而增强了处理器的处理能力。处理器可以并行处理二到四条指令,每条指令处于流水线的不同阶段。下面所列是一个三级流水线操作的例子: CLLOUT1

DSP定点运算

一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

DSP芯片的定点运算

第3章 DSP 芯片的定点运算 3.1 数 的 定 标 在定点DSP 芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。一个整型数的最大表示范围取决于DSP 芯片所给定的字长,一般为16位或24位。显然,字长越长,所能表示的数的范围越大,精度也越高。如无特别说明,本书均以16位字长为例。 DSP 芯片的数以2的补码形式表示。每个16位数用一个符号位来表示数的正负,0表示数值为正,1则表示数值为负。其余15位表示数值的大小。因此 二进制数0010000000000011b =8195 二进制数1111111111111100b =-4 对DSP 芯片而言,参与数值运算的数就是16位的整型数。但在许多情况下,数学运算过程中的数不一定都是整数。那么,DSP 芯片是如何处理小数的呢?应该说,DSP 芯片本身无能为力。那么是不是说DSP 芯片就不能处理各种小数呢?当然不是。这其中的关键就是由程序员来确定一个数的小数点处于16位中的哪一位。这就是数的定标。 通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。数的定标有Q 表示法和S 表示法两种。表3.1列出了一个16位数的16种Q 表示、S 表示及它们所能表示的十进制数值范围。 从表3.1可以看出,同样一个16位数,若小数点设定的位置不同,它所表示的数也就不同。例如: 16进制数2000H =8192,用Q0表示 16进制数2000H =0.25,用Q15表示 但对于DSP 芯片来说,处理方法是完全相同的。 从表3.1还可以看出,不同的Q 所表示的数不仅范围不同,而且精度也不相同。Q 越大,数值范围越小,但精度越高;相反,Q 越小,数值范围越大,但精度就越低。例如,Q0的数值范围是-32768到+32767,其精度为1,而Q15的数值范围为-1到0.9999695,精度为 1/32768 = 0.00003051。因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想提高精度,则数的表示范围就相应地减小。在实际的定点算法中,为了达到最佳的性能,必须充分考虑到这一点。 浮点数与定点数的转换关系可表示为: 浮点数(x)转换为定点数():Q q x 2x (int)*= 定点数(q x )转换为浮点数(x):Q q x -*=2)float (x 例如,浮点数 x=0.5,定标 Q =15,则定点数q x =??16384327685.0=?,式中 ??表示下取整。反之,一个用 Q =15 表示的定点数16384,其浮点数为16384×2-15 =16384/32768=0.5。

定点dsp与浮点dsp的比较

定点dsp与浮点dsp的比较 DSP数字信号处理器是一种特别适合于进行数字信号处理的微处理器,主要用于实时快速地实现各种数字信号处理算法 定点运算DSP数字信号处理器在应用中已取得了极大的成功,而且仍然是D SP应用的主体。然而,随着对DSP处理速度与精度、存储器容量、编程的灵活性和方便性要求的不断提高、自80年代中后期以来,各DSP生产厂家陆续推出了各自的32bit浮点运算DSP。 定点DSP指令集 定点DSP指令集是按两个目标来设计的: ·使处理器能够在每个指令周期内完成多个操作,从而提高每个指令周期的计算效率。 ·将存贮DSP程序的存储器空间减到最小(由于存储器对整个系统的成本影响甚大,该问题在对成本敏感的DSP应用中尤为重要)。 和定点运算DSP相比,浮点运算DSP具有许多优越性: 浮点运算DSP比定点运算DSP的动态范围要大很多。定点DSP的字长每增加1bit,动态范围扩大6dB。16bit字长的动态范围为96dB。程序员必须时刻关注溢出的发生。例如,在作图像处理时,图像作旋转、移动等,就很容易产生溢出。这时,要么不断地移位定标,要么作截尾。前者要耗费大量的程序空间和执行时间,后者则很快带来图像质量的劣化。总之,是使整个系统的性能下降。在处理低信噪比信号的场合,例如进行语音识别、雷达和声纳信号处理时,也会发生类似的问题。而32bit浮点运算DSP的动态范围可以作到1536dB,这不仅大大扩大了动态范围,提高了运算精度,还大大节省了运算时间和存储空间,因为大大减少了定标,移位和溢出检查。 由于浮点DSP的浮点运算用硬件来实现,可以在单周期内完成,因而其处理速度大大高于定点DSP。这一优点在实现高精度复杂算法时尤为突出,为复杂算法的实时处理提供了保证。 32bit浮点DSP的总线宽度较定点DSP宽得多,因而寻址空间也要大得多。这一方面为大型复杂算法提供了可能、因为省的DSP目标子程序已使用到几十MB存储器或更多;另一方面也为高级语言编译器、DSP操作系统等高级工具软件的应用提供了条件。 DSP的进一步发展,必然是多处理器的应用。新型的浮点DSP已开始在通信口的设置和强化、资源共享等方面有所响应 ====================================================== TI科学家谈浮点DSP未来发展 自十多年前浮点数字信号处理器(DSP)诞生以来,便为实时信号处理提供了算术上更为先进的备选方案。不过,定点器件至今仍是业界的主流--当然低成本是主要原因。定点DSP每器件产品的价格很低,这对大规模大众市场应用而言是相当重要的优势。 相比较而言,浮点DSP能够实现更快速而简便的开发,因此对开发成本比单位制造成本重要的小规模应用而言,更是最佳的选择。

DSP定标问题解决

好,我先抛点玉吧 DSP芯片的定点运算 3.1 数的定标 在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。一个整型数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位。显然,字长越长,所能表示的数的范围越大,精度也越高。如无特别说明,本书均以16位字长为例。 DSP芯片的数以2的补码形式表示。每个16位数用一个符号位来表示数的正负,0表示数值为正,1则表示数值为负。其余15位表示数值的大小。因此 二进制数0010000000000011b=8195 二进制数1111111111111100b=-4 对DSP芯片而言,参与数值运算的数就是16位的整型数。但在许多情况下,数学_运算过程中的数不一定都是整数。那么,DSP芯片是如何处理小数的呢?应该说,DSP芯片本身无能为力。那么是不是说DSP芯片就不能处理各种小数呢?当然不是。这其中的关键就是由程序员来确定一个数的小数点处于16位中的哪一位。这就是数的定标。 通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。数的定标有Q表示法和S表示法两种。表3.1列出了一个16位数的16种Q表示、S表示及它们所能表示的十进制数值范围。从表3.1可以看出,同样一个16位数,若小数点设定的位置不同,它所表示的数也就不同。例如: 16进制数2000H=8192,用Q0表示 16进制数2000H=0.25,用Q15表示 但对于DSP芯片来说,处理方法是完全相同的。 从表3.1还可以看出,不同的Q所表示的数不仅范围不同,而且精度也不相同。Q越大,数值范围越小,但精度越高;相反,Q越小,数值范围越大,但精度就越低。例如,Q0的数值范围是-32768到+32767,其精度为1,而Q15的数值范围为-1到0.9999695,精度为1/32768 = 0.00003051。因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想提高精度,则数的表示范围就相应地减小。在实际的定点算法中,为了达到最佳的性能,必须充分考虑到这一点。 浮点数与定点数的转换关系可表示为: 浮点数(x)转换为定点数( ): 定点数( )转换为浮点数(x): 例如,浮点数x=0.5,定标Q=15,则定点数=,式中表示下取整。反之,一个用Q=15 表示的定点数16384,其浮点数为16384×2-15 =16384/32768=0.5。 表3.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

相关主题
文本预览
相关文档 最新文档