DSP定点运算
第三章 DSP定点运算

数的定标 高级语言 DSP定点算术运算 非线性运算的定点快速实现 小 结
3.1.1 数的定标
在定点DSP芯片中,采用定点数进行数 值运算,其操作数一般采用整型数来表 示。 一个整型数的最大表示范围取决于DSP 芯片所给定的字长,一般为16位或24位。 显然,字长越长,所能表示的数的范围 越大,精度也越高。
虽然有时需要使用混合表示法,但是,更通常 的是全部以Q15格式表示的小数或以Q0格式表 示的整数来工作。 这一点对于主要是乘法和累加的信号处理算法 特别现实,小数乘以小数得小数,整数乘以整 数得整数。 乘积累加时可能会出现溢出现象,在这种情况 下,程序员应当了解数学里面的物理过程以注 意可能的溢出情况。 返回
3.4.2 查表法
在实时DSP应用中实现非线性运算,一般都采取适当 降低运算精度来提高程序的运算速度。查表法是快速 实现非线性运算最常用的方法。 查表法:根据自变量的范围和精度要求事先制作一张 表格,根据输入值确定表的地址,根据地址就可得到 相应的值。 显然输入的范围越大,精度要求越高,则所需的表格 就越大,即存储量也越大。 查表法求值所需的计算就是根据输入值确定表的地址, 因而运算量较小。 查表法比较适合于非线性函数是周期函数或已知非线 性函数输入值范围这两种情况 。
3.3 DSP定点算术运算
定点DSP芯片的数值表示是基于2的补码表示形 式。 每个16位数用1个符号位、i个整数位和15-i个小 数位来表示。 例如数00000010.10100000表示的值为 21 + 2 −1 + 2 −3 =2.625, 这个数可用Q8格式(8个小数位)来表示,它表 示的数值范围为-128~+127.996,一个Q8定点 数的小数精度为1/256=0.004。
DSP基本算数运算

基本算术运算一﹑实验目的加、减、乘、除是数字信号处理中最基本的算术运算。
DSP 中提供了大量的指令来实现这些功能。
本实验学习使用定点DSP 实现16位定点加、减、乘、除运算的基本方法和编程技巧。
二﹑实验原理1﹑定点DSP 中数据表示方法C54X 是16位的定点DSP 。
一个16位的二进制数既可以表示一个整数,也可以表示一个小数。
当它表示一个整数时,其最低位(D0)表示02,D1位表示12,次高位(D14)表示142。
如果表示一个有符号数时,最高位(D15)为符号位,0表示正数,1表示负数。
例如,07FFFH 表示最大的正数32767(十进制),而0FFFFH 表示最大的负数-1(负数用2的补码方式显示)。
当需要表示小数时,小数点的位置始终在最高位后,而最高位(D15)表示符号位。
这样次高位(D14)表示12-,然后是22-,最低位(D0)表示152-。
所以04000H 表示小数0.5,01000H 表示小数125.023=-,而0001H 表示16位定点DSP 能表示的最小的小数(有符号)152-=0.000030517578125。
在后面的实验中,除非有特别说明,我们指的都是有符号数。
在C54X 中,将一个小数用16位定点格式来表示的方法是用152乘以该小数,然后取整。
从上面的分析可以看出,在DSP 中一个16进制的数可以表示不同的十进制数,或者是整数,或者是小数(如果表示小数,必定小于1),但仅仅是在做整数乘除或小数乘除时,系统对它们的处理才是有所区别的,而在加减运算时,系统都当成整数来处理。
2﹑实现16定点加法C54X 中提供了多条用于加法的指令,如ADD ,ADDC ,ADDM 和ADDS 。
其中ADDS 用于无符号数的加法运算,ADDC 用于带进位的加法运算(如32位扩展精度加法),而ADDM 专用于立即数的加法。
ADD 指令的寻址方式很多,其详细使用说明请参考《TMS320C54X 实用教程》。
DSP芯片编程中数的定点运算(精)

通信与广播电视拜年第期〔〔一一一一一」二一一主程序印 , , , 印二, ” ’ , ’ , 勺一输入语音文件滤波后语音文件 , 斤户 , 取一帧语音数据 , , , 调用低通滤波子程序【〕 , 解将滤波后的样值写人文件关闭文件三定点、定点算术运算的补码表示形式侧刃。
芯片的数值表示是基于一每个位数用个符号位一、个整一数位和巧 , , 个小数位来表示格式。
因此数表示的值为, ’ , 二这个数可用一个个小数位来表示。
它表示的数值范围为 , 一一定点数的小数精度为如动态范围和精度要求 , 虽然特殊情况必须使用混合表示法。
, 但是。
, 更通常的是全 , 部以巧格式表示的小数或以格式表示的整数来工作 , 这一点对于主要是乘法和累加的信号处理算法特别现实能会出现溢出现象 , 小数乘以小数得小数整数乘以整数得整数当然乘积累加时可在这种情况下程序员应当了解数学里面的物理过程以注意可能的溢出情况。
定点乘法个定点数相乘时可以分为下列种情况洲抖年第期通信与广播电视小数乘小数例刃刃刃刃冷以刃犯拟叉刃侧又幻】刃犯 , 个巧的小数相乘后得到 , , 个 , 的小数即有。
个符号位。
一般情况下相乘后得到的满精度数不必全部保留而只需保留位单精度数由于相乘后得到的高位不满巧位的小数精度二为了达到巧位精度可将乘积左移位整数乘整数例叉一一心〕一二一混合表示法许多情况下与例 , 运算过程中为了既满足数值的动态范围又保证一定的精度。
, 就必须采用表示 , 巧之间的表示法 , 比如。
, 数值 , , 显然巧无法表示 , 而若用。
则最接近的数是精度无法保证又因此数最佳的表示法是创《刃刃刃洲二拟洲洲洲犯叹心阅口心刃侧刃 , 心的最大值不大于一般的 , 因此 , 个 , 数相乘得到的乘积不大于小数位为位 , 。
若一个数的整数位为位十另一个数的整数位为位 , 小数位为位 , 则这两个数的乘积为整数位和 , 位整数位和巧一一位小数位。
这个乘积的最高位可能的精度为小数位但是不会大于 , 若事先了解数的动态范围 , 就可以增加数的精度 , 。
DSP的定点运算

DSP的定点运算DSP的定点运算技术2007-06-29 09:45:14阅读82评论0字号:大中小许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了。
DSP芯片的定点运算

浮点数 x=0.5,定标 Q=15, 则定点数=0.5*32768=16384
SuQian College
Q表示、S表示及数值范围
QHale Waihona Puke 示 Q15 Q14. . . . . .
Q1 Q0
S表示 S0.15 S1.14
. . . . . .
S14.1 S15.0
十进制数表示范围 -1≤X≤0.9999695 -2≤X≤1.9999390
. . . . . .
-16384≤X≤16383.5 -32768≤X≤32767
1 定点的基本概念
SuQian College
1、数的定标
在定点DSP芯片中,采用定点数进行数值运算, 其操作数一般采用整型数来表示
DSP芯片的数以2的补码形式表示 数的定标:Q表示法和S表示法 对定点数而言,数值范围与精度是一对矛盾, 一个变量要想能够表示比较大的数值范围,必须 以牺牲精度为代价。
SuQian College
Q表示法16进制数2000H
Q0表示为8192
SuQian College
0010000000000000
符
号 位 Q15表示为0.25
小数点的位置
0010000000000000
小数点的位置
浮点数与定点数的转换关系
浮点数转换为定点数
xq int x 2Q
定点数转换为浮点数
DSP定点算数运算

设浮点加法运算的表达式为:
float x,y,z;
z=x+y;
将浮点加法/减法转化为定点加法/减法时最重要的一点就是必须保证两个操作数的定标
temp=x+temp;
z=temp>>(Qx-Qz),若Qx>=Qz
z=temp<<(Qz-Qx),若Qx<=Qz
16进制数2000H=0.25,用Q15表示
但对于DSP芯片来说,处理方法是完全相同的。
从表1.1还可以看出,不同的Q所表示的数不仅范围不同,而且精度也不相同。Q越大,数值范围越小,但精度越高;相反,Q越小,数值范围越大,但精度就越低。例如,Q0 的数值范围是一32768到+32767,其精度为1,而Q15的数值范围为-1到0.9999695,精度为1/32768=0.00003051。因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想精度提高,则数的表示范围就相应地减小。在实际的定点算法中,为了达到最佳的性能,必须充分考虑到这一点。
例1.7语音信号800Hz 19点FIR低通滤波C语言浮点程序。
#include <stdio.h>
const int length=180/*语音帧长为180点=22.5ms@8kHz采样*/
void filter(int xin[],int xout[],int n,float h[]);/*滤波子程序说明*/
(3)FIR卷积。y(n)=∑h(k)x(n-k),设∑ h(k) =1.0,且x(n)是模拟信号12位量化值,即有 x(n) <=211,则 y(n) <=211。
定点数的基本算术运算

5.混合表示法 ● 有些情况下,运算过程中为了既满足数值的动态范围又保证一定的精度,必须采用Q0与Q15之间
的表示方法。 ● 在做加、减运算时,如果两个操作数的定标不一样,在运算前要进行小数点的调整,为保证运算
精度,需要使Q值பைடு நூலகம்的数调整为与另一个数的Q值一样大。
返回本节
2 定点除法运算
● 在一般的DSP中,没有专门的除法指令。同样,在C54x中也没有提供专门 的除法指令。一般有两种方法来完成除法。一种是用乘法来代替,除以某 个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于除 以常数特别适用。另一种方法是使用条件减法SUBC指令,加上重复指令 RPT #15,重复16次减法完成无符号数除法运算。两种不同情况下的除法 程序。
定点数的基本算术运算
1 加法、减法和乘法运算
1.定点DSP中数据表示方法 ● 定点DSP芯片的数值表示是基于2的补码表示形式。数的定标有Q表示法和S表示法,表7-10列出
了16位数的16种Q表示和S表示,以及它们所能表示的十进制数范围。16位中有一个符号位、Q 个小数位和15-Q个整数位来表示一个数。
1.|被除数|<|除数|,商为小数 2.|被除数|≥|除数|,商为整数
返回本节
4.Q15定点小数乘法运算
● 两个16位整数相乘,乘积总是“向左增长”,这就意味着多次相乘后乘积将会很快超出定点器件 的数据范围。而且要将32位乘积保存到数据存储器,就要耗费两个机器周期以及两个字的程序和 RAM单元。然而,两个Q15的小数相乘,乘积总是“向右增长”,这就意味着超出定点器件数据 范围的将是不太感兴趣的部分。
3.16位定点整数乘法
● C54x中提供了大量的乘法运算指令,其结果都是32位,放在累加器A或 B中。乘数在C54x的乘法指令中很灵活,可以是T寄存器、立即数、存 储单元和累加器A或B的高16位。在C54x中,一般对数据的处理都当做 有符号数,如果是无符号数相乘,使用MPYU指令,这是一条专门用于 无符号数乘法运算的指令,其他指令都是有符号数的乘法。
Q格式_dsp定点和浮点数学运算规则

Q格式有符号数的表示法,机器数(出现在电脑的二进位数值)有3个特点,无符号或符号转换成数值来表示,没有+10101这样的资料,而是以010101来表示,只表示单纯的整数或小数,小数点的位置预设在一定的位置而较少变动,它的长度受到电脑硬体的限制,而不能无限增长。
Q格式,就是将一个小数放大若干倍后,用整数来表示小数。
Q格式前提无符号数:当参与运算的数值没有负数且运算的结果也没有负数时,则所有字元都可以表示数值,这种没有符号的数,称为无符号数(如记忆体储存位址),有符号数:数值中有某位数值代表符号,通常最高位作为符号位,0代表正,1代表负。
真值:有符号数所代表的数值,例如:110所代表的值是-2 而非6,有符号数只要去除符号位就可以获得该数的大小,在运算时,它的符号位可参与运算。
但在加减运算时,必须将它分离出来,才能进行运算。
有时,还要确定哪个有符号数的真值比较大,才能确定结果的符号。
为了达到这些功能,电路的设计就相当复杂。
所以很多电脑系统不直接使用有符号数,而使用有符号数的1’s补数或2’s补数表示法作为编码系统正弦脉波宽度调变(SPWM)之控制方法经Q 格式乘法器转换成振幅与频率可变V/F 控制,当成其单相感应马达的输入信号,藉由控制责任周期的大小,以达到变电压相对改变频率的效果。
DSP1.实现数位系统的第一步在自然世界中,所有的物理量包括时间、电压、质量、位移等等,都是类比的、连续的。
可是在数位系统中,讯号是在不连续的时间点取样,物理量或讯号的大小也不再是连续,而是被量化(Quantized)。
在数位系统中,只能用有限字元长度的数字去表示数量的大小,而不能以无限精确的数值(实数)去表示。
为了实现数位系统;使用了定数数与浮点数的表示法。
a)定点数(Fixed Point Number):指一个数字的表示,其小数点是在固定的位置(位元)。
b)浮点数(Floating Point Number):使用假数以及指数两部分来表示数值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一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.9999695Q14 S1.14 -2≤x≤1.9999390Q13 S2.13 -4≤x≤3.9998779Q12 S3.12 -8≤x≤7.9997559Q11 S4.11 -16≤x≤15.9995117Q10 S5.10 -32≤x≤31.9990234Q9 S6.9 -64≤x≤63.9980469Q8 S7.8 -128≤x≤127.9960938Q7 S8.7 -256≤x≤255.9921875Q6 S9.6 -512≤x≤511.9804375Q5 S10.5 -1024≤x≤1023.96875Q4 S11.4 -2048≤x≤2047.9375Q3 S12.3 -4096≤x≤4095.875Q2 S13.2 -8192≤x≤8191.75Q1 S14.1 -16384≤x≤16383.5Q0 S15.0 -32768≤x≤327672 高级语言:从浮点到定点我们在编写DSP模拟算法时,为了方便,一般都是采用高级语言(如C语言)来编写模拟程序。
程序中所用的变量一般既有整型数,又有浮点数。
如例1.1程序中的变量i是整型数,而pi是浮点数,hamwindow则是浮点数组。
例1.1 256点汉明窗计算int i;+float pi=3.14l59;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汇编程序之前一般需将高级语言浮点算法改写为高级语言定点算法。
下面我们讨论基本算术运算的定点实现方法。
2.1 加法/减法运算的C语言定点摸拟设浮点加法运算的表达式为:float x,y,z;z=x+y;将浮点加法/减法转化为定点加法/减法时最重要的一点就是必须保证两个操作数的定标temp=x+temp;z=temp>>(Qx-Qz),若Qx>=Qzz=temp<<(Qz-Qx),若Qx<=Qz例1.4结果超过16位的定点加法设x=l5000,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),从而达到防止溢出引起精度严重恶化的目的。
2.2乘法运算的C语言定点模拟设浮点乘法运算的表达式为:float x,y,z;z=xy;假设经过统计后x的定标值为Qx,y的定标值为Qy,乘积z的定标值为Qz,则z=xyzq*2-Qx=xq*yq*2-(Qx+Qy)zq=(xqyq)2Qz-(Qx+Qy)所以定点表示的乘法为:int x,y,z;long temp;temp=(long)x;z=(temp*y)>>(Qx+Qy-Qz);例1.5定点乘法。
设x=18.4,y=36.8,则浮点运算值为=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。
2.3除法运算的C语言定点摸拟设浮点除法运算的表达式为:float x,y,z;z=x/y;假设经过统计后被除数x的定标值为Qx,除数y的定标值为Qy,商z的定标值为Qz,则z=x/yzq*2-Qz=(xq*2-Qx)/(yq*2-Qy)zq=(xq*2(Qz-Qx+Qy))/yq所以定点表示的除法为:int x,y,z;long temp;temp=(long)x;z=(temp<<(Qz-Qx+Qy))/y;例1.6定点除法。
设x=18.4,y=36.8,浮点运算值为z=x/y=18.4/36.8=0.5;根据上节,得Qx=10,Qy=9,Qz=15;所以有z=18841,y=18841;temp=(long)18841;z=(18841L<<(15-10+9)/18841=3O8690944L/18841=16384;因为商z的定标值为15,所以定点z=16384,即为浮点z=16384/215=0.5。
2.4程序变量的Q值确定在前面几节介绍的例子中,由于x,y,z的值都是已知的,因此从浮点变为定点时Q值很好确定。
在实际的DSP应用中,程序中参与运算的都是变量,那么如何确定浮点程序中变量的Q值呢?从前面的分析可以知道,确定变量的Q值实际上就是确定变量的动态范围,动态范围确定了,则Q值也就确定了。
设变量的绝对值的最大值为|max|,注意|max|必须小于或等于32767。
取一个整数n,使满足2n-1<|max|<2n则有2-Q=2-15*2n=2-(15-n)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[nπn/(N-1)],0<=n<=N-1。
因为-1<=cos[2πn/(N-1)]< =1,所以0.08<=y(n)<=1.0。
(3)FIR卷积。
y(n)=∑h(k)x(n-k),设∑|h(k)|=1.0,且x(n)是模拟信号12位量化值,即有|x(n)|<=211,则|y(n)|<=211。
(4)理论已经证明,在自相关线性预测编码(LPC)的程序设计中,反射系数ki满足下列不等式:|ki|<1.0,i=1,2,...,p,p为LPC的阶数。
2. 统计分析法对于理论上无法确定范围的变量,一般采用统计分析的方法来确定其动态范围。
所谓统计分析,就是用足够多的输入信号样值来确定程序中变量的动态范围,这里输入信号一方面要有一定的数量,另一方面必须尽可能地涉及各种情况。
例如,在语音信号分析中,统计分析时就必须来集足够多的语音信号样值,并且在所采集的语音样值中,应尽可能地包含各种情况。
如音量的大小,声音的种类(男声、女声等)。
只有这样,统计出来的结果才能具有典型性。
当然,统计分析毕竟不可能涉及所有可能发生的情况,因此,对统计得出的结果在程序设计时可采取一些保护措施,如适当牺牲一些精度,Q值取比统计值稍大些,使用DSP芯片提供的溢出保护功能等。
2.5浮点至定点变换的C程序举例本节我们通过一个例子来说明C程序从浮点变换至定点的方法。
这是一个对语音信号(0. 3~3.4kHz)进行低通滤波的C语言程序,低通滤波的截止频率为800Hz,滤波器采用19点的有限冲击响应FIR滤波。