云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 数字信号处理算法的定点化及其C语言仿真

数字信号处理算法的定点化及其C语言仿真

  • 62 次阅读
  • 3 次下载
  • 2026/4/30 4:43:26

数字信号处理算法的定点化及其C语言仿真 周海军 赵阳

(南京邮电学院 通信工程系)

摘 要 在DSP开发应用中,使用C语言进行算法仿真既可以验证算法的正确性,也可以 为今后在实际DSP芯片上调试提供一个参考。针对定点DSP使用更为普遍的现状,本文介 绍了用C语言如何实现DSP定点算法的仿真,提供了将DSP浮点算法定点化的思想和方法。

关键词 数字信号处理 数字信号处理器 定点 浮点

Abstract Fixed-point digital signal processors are used commonly in many fi elds. It's quite important to use C language to simulate at PC platform DSP algorithms when developing DSP applications. Based on the author's rich expe rience in DSP software development, this paper concludes the methods of usin g C language to implement fix-point DSP algorithms, providing the skills of converting floating-point digital signal processing algorithms into fix-poin t versions.

Key words DSP fix-point floating-point

DSP广义上指数字信号处理理论(Digital Signal Processing),狭义上指数字 信号处理器(Digital Signal Processor)。数字信号处理理论广泛应用于语音、图象、 遥测数据、电机控制等各个方面。现代个人通信、互联网、多媒体应用的飞速发展又推 动着数字信号处理理论的进一步发展。现代信号处理(ASP)算法越来越复杂,处理的数 据量越来越庞大。由于体系结构的限制,通用微处理器并不适合作这种高运算量的信号 处理,由此诞生了一种专门用于信号处理的芯片和系统,这就是数字信号处理器,通常 简称DSP。作为数字信号处理理论和当代大规模集成电路VLSI技术融合的结晶,数字信号 处理器(DSP)正日益广泛地应用于通信、消费类电子产品、仪器仪表、航天航空等各个 领域。在数字化浪潮的推动下,基于DSP的软硬件开发需求越来越大。国际上各大DSP芯 片制造厂商也不断推出运算速度更快、功耗更低的产品。 1. 定点DSP和浮点DSP

国际上生产DSP芯片的厂商很多,典型的有TI、AD、Motorola、DSP Group以及 AT&T、NEC等等,这些公司都有自己的由低档到高档的DSP产品系列。其中TI--德州仪器 公司占有主导地位,其产品占了45%的市场份额。 AD--模拟器件公司紧随其后,其产品

约占11%的市场份额。TI公司的TMS320系列和AD公司的ADSP系列在中国使用的也最为广泛 。表1列出了常见的两家公司的主要产品。 表1

公司 DSP芯片 定点/浮点 时钟频率(MHz) TI TMS320C2xxx 定点 20-40 TMS320C3x 浮点 33-75 TMS320C54xx 定点 40-160 TMS320C55xx 定点 160-200 TMS320C62xx 定点 150-300

TMS320C67xx 浮点 100-167 AD ADSP-21xx 定点 10-80 ADSP-21xxx(SHARC) 浮点 33-100 TigerSHARC 浮点 250

从表1可以看出,两家公司都有各自的定点产品和浮点产品。数据以定点格式工

作的DSP芯片称为定点DSP,数据以浮点格式工作的DSP称为浮点DSP。浮点DSP表示数据的 精度高,编程也比较容易,从高级语言转化为适合浮点DSP的汇编语言要方便。但是,由 于DSP大量用于嵌入式系统,很多应用场合如手机、PDA、便携式音频播放器等等,都要求 价格低廉,功耗尽量低。而浮点DSP由于内部结构较复杂,价格、功耗都不易降下

来,因此其应用反而不如定点DSP普遍。DSP芯片厂商推出的定点DSP种类也比浮点DSP种 类多,这在表1中也有体现。

定点DSP的字宽一般为16位,也有24位和20位的DSP,如摩 托罗拉的DSP563XX系 列和Zoran公司的 ZR3800X系列。显然数据字长越大单字表示的范围越大,精度越高,但 TI和AD目前的产品都是16位字长。

2. C语言在DSP开发中的应用[1][3]

为缩短软件开发周期,使用C语言开发DSP产品越来越普遍。使用汇编语言可以 充分利用DSP片内资源编出精简高效的代码。但是DSP汇编语言编程较繁杂,可读性差。 而且,一般来说,不同公司的芯片汇编语言是不同的,即使是同一家公司的芯片,由于 芯片类型不同(如定点和浮点),产品的升级换代,其汇编语言也不相同,这使得汇编 语言的可移植性也较差。所以用汇编语言开发基于DSP芯片的产品周期长,软件的修改和 升级都较困难。C语言既有高级语言的易学易懂、功能丰富、表达能力强、可移植性好的 优势,又具有低级语言的特点(比如能方便地进行位运算、地址操作)。正因为如此, 各DSP芯片厂商也都提供了相应的C优化编译器,并不断提高其编译效率,鼓励DSP开发者 选用C语言作为开发DSP应用程序的首选工具。事实上,对于有些多内核、并行化程度非 常高的DSP处理器,如TI的TMS320C62xx,完全由人手编写汇编代码反而很难有效地分配 运行资源、发挥处理器并行处理的优势。当然,现在的C编译器效率仍然不是很高,DSP 片内片外资源也有限,很多地方仍然要作人工优化。 通常DSP的开发流程如图1所示,详细过程如下:

(1) 用C语言编写程序,在PC机上仿真测设,确保算法正确。尽管现在DSP厂商推出的 调试工具越来越方便,用户界面越来越友善,但比起PC编程仍然要麻烦得多。确保算法 在PC机上仿真通过,以后调试DSP汇编程序时就有一个参考,这样会方便很多。一般采用 文件的形式来仿真DSP程序的输入输出。

(2) 按照DSP的C程序编写规则改写C程序,使之适合DSP硬件。将文件读写改为真正的 I/O操作。加入中断功能。必要时在C程序中嵌入汇编语句。

(3)使用C编译器编译改写的C程序,生成DSP汇编源代码。C编译器具有优化选项,根据 需要选择不同的优化等级和优化范围。

(4)手动进行程序优化,降低程序代码大小,使流程更合理,进一步加快程序的执行速 度。评估程序能否在实际的DSP处理器上实时运行。如果不行,人工编写指令周期密集的 那些模块的汇编代码,直到满足实时要求。 (5)使用汇编器将各模块汇编成目标文件。

(6)最后将各目标文件链接成可载入DSP中联机运行调试的可执行代码。

3. DSP定点算法的C语言仿真[2]

DSP开发过程的第一步是在PC机上编写C仿真程序,确保算法正确,这样可以大 大节省以后在DSP上调试的时间。对于浮点算法,使用C语言加以实现是十分方便的,编 程者只需具备C编程的知识,甚至可以完全不懂DSP。常见的数字信号处理算法也都是以 浮点形式出现。但是由于定点DSP受数值表示范围的限制,用C语言仿真定点算法或将浮 点算法定点化则要复杂的多,需要了解一些定点DSP芯片硬件操作的知识,掌握一些规则 和技巧。下面就从定点DSP数值表达、常用运算来讲述如何用C语言实现DSP定点算法的仿 真。这里假定处理器是16位的定点DSP,乘法器、累加器为32位。仿真C程序使用TURBO C编译器,那么在C程序中可用的变量只有单精度整型int (16位)和 双精度长整型 long(32位)两种形式。

3.1浮点数的定点化

3.1.1 Q格式--固定小数点的表达方式[1]

定点DSP芯片中的基本单元是16位(比特)字。当表示纯整数时其范围为-3276

8到+32767,分别对应的二进制表示为1000 0000 0000 0000和0111 1111 1111 1111。处 理器中都是采用补码形式,最左面的一位即第15位是最高有效位(MSB),最右面的一位即 第0位是最低有效位(LSB)。MSB作符号位,如果一个数是正数,MSB为0,若为负数,MSB 为1。

当要表示小数时,必须假定一个小数点位于相邻两比特之间。比如,要表示一

个-1.0到+1.0之间的小数,我们可以假定小数点位于第14位和第15位之间。这种表达方 式称为Q15格式,因为小数点右边有15位。如果小数点右边有n位就称为Qn格式。纯整数 是一种特殊的Q0格式的小数。

将浮点算法转化为定点算法,首先就要把所有的小数经定标转化为整数。比如 浮点算法中有一个浮点数组为[ 0.25 0.5 1.125 5.75 7.0 ],用二进制表示为[ 0.01 0.1 1.001 101.11 111.0 ]。将数组各分量左移三位,得[ 10 100 1001 101110 111000 ],十进制表示为[ 2 4 9 46 56 ]。小数点位置在第3位,此数组 中的各分量都是Q3格式,这就是定标的过程。 浮点数和定点数的转换公式如下:

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

不同的Q格式所表示的数的范围不同,精度也不同。Q越大,数值范围越小,但精

度越高。例如,Q0的数值范围是-32768到+32768,其精度是1,而Q15的数值范围为-1到 0.9999695,精度为1/32768=0.00003051。对于定点数而言,数据范围和精度是一对矛盾 。

3.1.2 定标浮点数--动态小数点的表达方式

固定小数点的方式只适用于表达动态范围较小的浮点数变量,对于那些动态变 化比较大的浮点数变量采取固定小数点的表达方式,往往可能造成溢出或者精度太低。 浮点数定点化的关键是要保证精度,而与精度有直接关系的是有效数字的位数

,与小数点的位置无关。可见,只要保证了浮点数表达的有效位数为16比特定点可以表达 的最大位数,就等于保证了浮点数定点化的最大精度。因此,可以将一个浮点数用两个 16比特字来表达。第一个字表示尾数(M), 采用补码形式,其幅度值在16384~32767之

间, MSB位是符号位。尾数是对浮点数进行归一化后的有效数字,对于16比特定点数来 说,这是最大的表示精度。第二个字是指数NLS,表示为归一化而对浮点数进行的左移位 数,NLS可正可负,同样采用补码形式。这种32位单精度的浮点数表示方法一般称为定标 浮点数( scaler floating point )。定标浮点数的大小等于M*2NLS,大大扩展了定点数 的精度和范围,特别适合于动态范围比较大或者动态范围不太好预测的变量。如何将一 个浮点数用定标浮点数来表示,主要是一个归一化的过程,后面3.2.5中有详细介绍。 3.1.3 块浮点数--块表达方式

动态小数点位置的表达方式的缺点是需要多一倍的存储空间来表示浮点数。特 别是对于数组来说,这是很大的开销。而块表达方式正好解决了这一问题,同时又具有 动态小数点表达方式的优点。

块表达方式使用n+1个字来表示一个n维数组。数组中幅度最大的一个元素采用 动态小数点表达方式,即由归一化值表示有效数字,另外用一个NLS变量表示小数点位置 。数组中其他分量则共享此NLS值。可见,块浮点数( block floating point )的表达方 式效率是很高的,特别是对于那些比较长的数组变量。

以上介绍的三种浮点数表达方式各有自己的优缺点,到底采用何种方式视浮点 数的动态范围和其对算法精度的影响程度而定。固定小数点的表达方式简单,使用的也 最多。当对算法的精度要求比较高,动态范围又比较大的时候,可以采用定标浮点数。 如果是数组,且各分量之间相关性较强、大小接近,则可以使用块浮点数。定标浮点数 和块浮点数的缺点是需要占用额外的存储空间,并且每经过一次变化后就要进行一次归 一化,势必造成运算量成倍的增加和耗费更多的存储空间。

在保证精度的同时,还要考虑这些表达方式可能在运算中带来的溢出问题。数 字信号处理算法中常用到乘加的累积,比如求卷积和FIR滤波,如果采用最大精度表示, 往往带来累加器溢出造成的麻烦。因此,与卷积和FIR滤波相关的变量,一般不用16bit 精度表示,而是根据乘加运算的次数使用15bit或者14bit精度表示。

3.2 基本定点算法 3.2.1 移位运算

在定点DSP芯片中经常用到移位操作。C语言提供了移位操作符,左移为<<,右 移为>>。左移运算符用来将一个数的各二进位左移若干位,操作如下

a<<=n;将a的二进制数左移n位,右补0。高位左移后溢出,舍弃不起作用。 在没有溢出的前提下,左移n位相当于该数乘以2n。同理,a>>n表示将a的各二 进位右移n位。移到右端的低位被舍弃。TURBO C编译器采用算术右移,最左边移入符号 位,当a为正数,左边移入的是0,若为负数,左边移入的是1。当a为正数,a>>n相当于 a/2n,若为负数则未必。例如: a=7>>2; 结果a=1 a=7/4; 结果a=1 但是,

a=-7>>2 ; 结果a=-2 a=-7/4; 结果a=-1

作移位操作时,如果移位次数n是个变量,必须保证n>=0,否则会产生预料不到 的错误。如果n正负难以预测,可先作正负判断再右移或左移。例如要将a右移n位,可作 如下处理: if ( n>=0) a>>=n;

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

数字信号处理算法的定点化及其C语言仿真 周海军 赵阳 (南京邮电学院 通信工程系) 摘 要 在DSP开发应用中,使用C语言进行算法仿真既可以验证算法的正确性,也可以 为今后在实际DSP芯片上调试提供一个参考。针对定点DSP使用更为普遍的现状,本文介 绍了用C语言如何实现DSP定点算法的仿真,提供了将DSP浮点算法定点化的思想和方法。 关键词 数字信号处理 数字信号处理器 定点 浮点 Abstract Fixed-point digital signal processors are used commonly in many fi elds. It's quite important to use C langua

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com