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。因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想提高精度,则数的表示范围就相应地减小。在实际的定点算法中,为了达到最佳的性能,必须充分考虑到这一点。

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

表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

Q6 S9.6 -512≤X≤511.9804375

Q5 S10.5 -1024≤X≤1023.96875

Q4 S11.4 -2048≤X≤2047.9375

Q3 S12.3 -4096≤X≤4095.875

Q2 S13.2 -8192≤X≤8191.75

Q1 S14.1 -16384≤X≤16383.5

Q0 S15.0 -32768≤X≤32767

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

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

例3.1 256点汉明窗计算

int i;

float pi=3.14159;

float hamwindow[256];

for(i=0;i<256;i++) hamwindow=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 T

=

= T

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

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 T

= T

=

所以定点表示的乘法为:

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 T

= T

所以定点表示的除法为:

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值也就确定了。

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

则有

Q = 15-n

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

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

1.理论分析法

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

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

数字信号处理知识点总结

《数字信号处理》辅导 一、离散时间信号和系统的时域分析 (一) 离散时间信号 (1)基本概念 信号:信号传递信息的函数也是独立变量的函数,这个变量可以是时间、空间位置等。 连续信号:在某个时间区间,除有限间断点外所有瞬时均有确定值。 模拟信号:是连续信号的特例。时间和幅度均连续。 离散信号:时间上不连续,幅度连续。常见离散信号——序列。 数字信号:幅度量化,时间和幅度均不连续。 (2)基本序列(课本第7——10页) 1)单位脉冲序列 1,0()0,0n n n δ=?=?≠? 2)单位阶跃序列 1,0 ()0,0n u n n ≥?=?≤? 3)矩形序列 1,01 ()0,0,N n N R n n n N ≤≤-?=?<≥? 4)实指数序列 ()n a u n 5)正弦序列 0()sin()x n A n ωθ=+ 6)复指数序列 ()j n n x n e e ωσ= (3)周期序列 1)定义:对于序列()x n ,若存在正整数N 使()(),x n x n N n =+-∞<<∞ 则称()x n 为周期序列,记为()x n ,N 为其周期。 注意正弦周期序列周期性的判定(课本第10页) 2)周期序列的表示方法: a.主值区间表示法 b.模N 表示法 3)周期延拓 设()x n 为N 点非周期序列,以周期序列L 对作()x n 无限次移位相加,即可得到周期序列()x n ,即 ()()i x n x n iL ∞ =-∞ = -∑ 当L N ≥时,()()()N x n x n R n = 当L N <时,()()()N x n x n R n ≠ (4)序列的分解 序列共轭对称分解定理:对于任意给定的整数M ,任何序列()x n 都可以分解成关于/2c M =共轭对称的序列()e x n 和共轭反对称的序列()o x n 之和,即

数字信号处理第三章

数字信号处理第三章实验程序 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

数字信号处理复习总结-最终版

绪论:本章介绍数字信号处理课程的基本概念。 0.1信号、系统与信号处理 1.信号及其分类 信号是信息的载体,以某种函数的形式传递信息。这个函数可以是时间域、频率域或其它域,但最基础的域是时域。 分类: 周期信号/非周期信号 确定信号/随机信号 能量信号/功率信号 连续时间信号/离散时间信号/数字信号 按自变量与函数值的取值形式不同分类: 2.系统 系统定义为处理(或变换)信号的物理设备,或者说,凡是能将信号加以变换以达到人们要求的各种设备都称为系统。 3.信号处理 信号处理即是用系统对信号进行某种加工。包括:滤波、分析、变换、综合、压缩、估计、识别等等。所谓“数字信号处理”,就是用数值计算的方法,完成对信号的处理。 0.2 数字信号处理系统的基本组成 数字信号处理就是用数值计算的方法对信号进行变换和处理。不仅应用于数字化信号的处理,而且

也可应用于模拟信号的处理。以下讨论模拟信号数字化处理系统框图。 (1)前置滤波器 将输入信号x a(t)中高于某一频率(称折叠频率,等于抽样频率的一半)的分量加以滤除。 (2)A/D变换器 在A/D变换器中每隔T秒(抽样周期)取出一次x a(t)的幅度,抽样后的信号称为离散信号。在A/D 变换器中的保持电路中进一步变换为若干位码。 (3)数字信号处理器(DSP) (4)D/A变换器 按照预定要求,在处理器中将信号序列x(n)进行加工处理得到输出信号y(n)。由一个二进制码流产生一个阶梯波形,是形成模拟信号的第一步。 (5)模拟滤波器 把阶梯波形平滑成预期的模拟信号;以滤除掉不需要的高频分量,生成所需的模拟信号y a(t)。 0.3 数字信号处理的特点 (1)灵活性。(2)高精度和高稳定性。(3)便于大规模集成。(4)对数字信号可以存储、运算、系统可以获得高性能指标。 0.4 数字信号处理基本学科分支 数字信号处理(DSP)一般有两层含义,一层是广义的理解,为数字信号处理技术——DigitalSignalProcessing,另一层是狭义的理解,为数字信号处理器——DigitalSignalProcessor。 0.5 课程内容 该课程在本科阶段主要介绍以傅里叶变换为基础的“经典”处理方法,包括:(1)离散傅里叶变换及其快速算法。(2)滤波理论(线性时不变离散时间系统,用于分离相加性组合的信号,要求信号频谱占据不同的频段)。 在研究生阶段相应课程为“现代信号处理”(AdvancedSignalProcessing)。信号对象主要是随机信号,主要内容是自适应滤波(用于分离相加性组合的信号,但频谱占据同一频段)和现代谱估计。 简答题: 1.按自变量与函数值的取值形式是否连续信号可以分成哪四种类型? 2.相对模拟信号处理,数字信号处理主要有哪些优点? 3.数字信号处理系统的基本组成有哪些?

定点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个浮点/定点乘法器。

DSP知识要点

DSP技术知识要点(通信工程 ) CHAP1 冯、诺依曼结构和哈佛结构的特点 冯、诺依曼结构:采用单存储空间,即程序指令和数据共用一个存储空间,使用单一的地址和数据总线,取指令和取操作数都是通过一条总线分时进行。当进行高速运算时,不但不能同时进行取指令和取操作数,而且还会造成数据传输通道的瓶颈现象,其工作速度较慢。 哈佛结构:采用双存储空间,程序存储器和数据存储器分开,有各自独立的程序总线和数据总线,可独立编址和独立访问,可对程序和数据进行独立传输,使取指令操作、指令执行操作、数据吞吐并行完成,大大地提高了数据处理能力和指令的执行速度,非常适合于实时的数字信号处理。 DSP芯片的特点(为何适合数据密集型应用:前5点)1.采用哈佛结构2.采用多总线结构3.采用流水线技术4. 配有专用的硬件乘法-累加器5. 具有特殊的DSP指令6.快速的指令周期7.硬件配置强8.支持多处理器结构9.省电管理和低功耗。 定点DSP芯片和浮点DSP芯片的区别及应用特点 定点DSP芯片(数据以定点格式工作):精度和范围是不能同时兼顾的。 定点DSP是主流产品,成本低,对存储器要求低、耗电少,开发相对容易,但设计中必须考虑溢出问题。用在精度要求不太高的场合。 浮点DSP芯片(数据以浮点格式工作):精度高、动态范围大,产品相对较少,复杂成本高。但不必考虑溢出的问题。用在精度要求较高的场合。 定点DSP的表示(Qm.n,精度和范围与m、n的关系)及其格式转换 ○1整数表示法:最高位是符号位,0代表正数,1代表负数,其余位以二进制的补码形式表示数值,小数点在D0位。用于控制操作、地址计算、及其它非信号处理应用。 ○2小数表示法:最高位是符号位,0代表正数,1代表负数,其余位以二进制的补码形式表示数值,小数点在Dn-1位。用于数字和各种信号处理算法的计算中。 ○3数的定标;n越大,数值范围越小,但精度越高; 相反,n越小,数值范围越大,但精度就越低。不同Qm.n形式的数进行加减

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实验手册实验一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 =

数字信号处理知识点归纳整理

数字信号处理知识点归纳整理 第一章时域离散随机信号的分析 1.1. 引言 实际信号的四种形式: 连续随机信号、时域离散随机信号、幅度离散随机信号和离散随 机序列。本书讨论的是离散随机序列 ()X n ,即幅度和时域都是离散的情况。随机信号相比随机变量多 了时 间因素,时间固定即为随机变量。随机序列就是随时间n 变化的随 机变量序列。 1.2. 时域离散随机信号的统计描述 1.2.1 概率描述 1. 概率分布函数(离散情况) 随机变量 n X ,概率分布函数: ()()n X n n n F x ,n P X x =≤ (1) 2. 概率密度函数(连续情况) 若 n X 连续,概率密度函数: ()()n n X X n n F x,n p x ,n x ?=

? (2) 注意,以上两个表达式都是在固定时刻n 讨论,因此对于随机序列而言,其概率分布函数和概率密度函数都是关于n 的函数。 当讨论随机序列时,应当用二维及多维统计特性。 ()()()()1 21 21 2,,,1 21122,, ,1 2 ,,,1 2 12,1,,2, ,,,,,,1,,2, ,,,1,,2, ,,N N N x X

X N N N N x X X N x X X N N F x x x N P X x X x X x F x x x N p x x x N x x x =≤≤≤?= ??? 1.2.2 数字特征 1. 数学期望 ()()()()n x x n n m n E x n x n p x ,n dx ∞ -∞ ==????? (3) 2. 均方值与方差 均方值: ()()22 n n x n n E X x n p x ,n dx ∞ -∞ ??=??? (4) 方差: ()()()222 2x n x n x n E X m n E X m n σ????=-=-???? (5)

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

数字信号处理第三章总结

3.4系列的Z 变换与连续信号的拉普拉斯变 换、傅里叶变换的关系 序列的Z 变换与连续信号的拉普拉斯变换、傅里叶变换的关系 拉普拉斯变换 拉普拉斯逆变换 傅里叶变换 傅里叶逆变换 序列x(n)的Z 变换 逆Z 变换 抽样信号的拉普拉斯变换 []?∞ ∞--==dt e t x t x LT s X st a )()()([]? ∞ +∞ --==j j st a dt e t x s X LT t x σσ)()()(1 Ω +=j s σ[]?∞ ∞ -Ω-==Ωdt e t x t x FT j X t j )()()([]?∞ ∞-Ω-Ω Ω=Ω=d e j X j X FT t x t j )()()( 1Ω =j s ()()n n X z x n z ∞ -=-∞ =∑ ,2,1,0,)(21)(1 ±±==?-n dz z z X j n x c n π()()()()()∑∑? ?∑?∞ -∞ =-∞ -∞=∞ ∞ --∞ ∞--∞ -∞=∞∞ --∧ ∧∧ = -=-==??????=n nsT a n st a st n a st a a a e nT x dt e nT t nT x dt e nT t nT x dt e t x t x LT s X δδ)()()(

抽样序列的z 变换为 3.4.1拉氏变换与Z 变换变换的关系就是复变量s 平面到复变量z 平面的映射: 令 s=σ+j Ω, z=re j ω 得到: re j ω =e (σ+j Ω)T =e σT e j ΩT , 因而 r=e σT , ω=ΩT 3.4.2 ω= ΩT Ω=0 、π/T 、3π/T 、 Ω0与ω的对应关系 Ω变化时与ω的对应关系 s 平面到z 平面的映射是多值映射。 (傅里叶变换是拉普拉斯变换在虚轴的特例,即s =j Ω,因而映射 到z 平面上为单位圆,代入 抽样序列的z 变换 sT e z =()[]()∑∞ -∞ =-= =n n z n x n x ZT z X ) (()e ?() (e )(2.89) sT sT a z X z X X s ===

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

DSP总结

最近在对前做的一个DSP项目进行改版,正好借此机会把学习的东西总结一番,此总结针对TI的TMS320F2812而言,编译器为CCS3.1。希望对自己或大家有所帮助。 第1章DSP芯片的定点运算 1.数据的溢出: 1>溢出分类: 上溢(overflow): 下溢(underflow) 2>溢出的结果: 例: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值增加

相关文档
最新文档