主站
校园
交友
学习
论文
小说
美图
游戏
英语听力
考研
留学
电影
创业
壁纸
笑话
试卷
闪字
查询
圈子
注册
登录
会员
标签
社区银行
电信镜像
联通镜像
网通镜像
帮助
四川大学生联盟社区
»
IT 学院
» 定点DSP C55X实现浮点相关运算
‹‹ 上一主题
|
下一主题 ››
发新话题
发布投票
发布商品
发布悬赏
发布活动
发布辩论
发布视频
打印
定点DSP C55X实现浮点相关运算
zhongqian
步入江湖
帖子
17
精华
0
积分
149
金币
155 金币
学校
西华大学
年级
大三
注册时间
2007-12-10
最后登录
2008-6-30
个人空间
发短消息
加为好友
当前离线
川盟社区第
32403
位会员
1
#
大
中
小
发表于 2008-6-5 04:26 PM
只看该作者
定点DSP C55X实现浮点相关运算
定点DSP C55X实现浮点相关运算
[日期:2008-03-17]
来源:
单片机及嵌入式系统应用
作者:大连海事
大学
孙兴邦 刘亮 夏志忠
[字体:
大
中
小
]
引 言
dsp
结构可以分为定点和浮点型两种。其中,定点型
dsp
可以实现整数、小数和特定的指数运算,它具有运算速度快、占用资源少、成本低等特点;灵活地使用定点型
dsp
进行浮点运算能够提高运算的效率。目前对定点
dsp
结构支持下的浮点需求也在不断增长,主要原因是:实现算法的代码往往是采用C/C++编写,如果其中有标准型的浮点数据处理,又必须采用定点
dsp
器件,那么就需要将浮点算法转换成定点格式进行运算。同时,定点
dsp
结构下的浮点运算有很强的可行性,因为C语言和汇编语言分别具有可移植性强和运算效率高的特点,因此在定点
dsp
中结合C语言和汇编语言的混合编程技术将大大提高编程的灵活度,以及运算速度。
大多数
dsp
的开发工具只是在C语言的基础上支持标准的浮点运算,而定点
dsp
硬件一般都是面向定点的运算,不支持标准的浮点运算,缺乏硬件的支持极大地限制了浮点的应用,因而标准的浮点运算在实际定点
dsp
应用中并不多见。C5509是一款16位定点
dsp
。在本文中,对C5509输入FTSK信号,用C语言和汇编语言混合编程的方式对输入浮点型的FTSK信号进行相关运算,并输出浮点运算结果。这种方法的特点是:在C语言中方便地进行数据格式转化,在汇编语言中进行乘法和加法运算,既达到很高的运算精度,又极大地提高了运算效率。
1 定点
dsp
C语言开发环境中的浮点数据格式
在定点
dsp
中,整型数是用16位二进制格式来存储的,但是
dsp
的C语言和汇编语言中定义的单精度浮点型数据都是标准C语言浮点表示格式。这种格式在C55X中,符合IEEE754标准。它定义了单精度32位和双精度64位的格式。32位IEEE754单精度标准中,第一位是符号位,其后8位用来存放指数,最后23位用来存放小数尾数,如下:
在IEEE754单精度浮点标准中,明确包含了符号位,第32位用作符号位。尾数进行了归一化,以产生一个1.f格式的数,f是小数部分,占用分配的23位。因为规格化的数最左一位总是1,所以不需要存储该位,在该格式中它是隐式的。这样一个n位的尾数实际上存放了一个n+l位数。为使尾数规格化,指数被适当增减,来跟踪规格化所需的左右移位数以及小数点。
最常用的是用8位指数表示0~255,即O<e<255:
其中:s是符号位,0为正数,1为负数;e是指数位,无符号8位;f是尾数的小数部分,23位。
例如:IEEE754格式下浮点正数00110001001111l000000001000000000的十进制表示为:
2 相关运算的实现
2.1 数据提取方式
在本软件设计中,FTSK输入数据的频率包含800Hz,1200Hz、1600Hz、2020Hz,通过相关运算提取800Hz信号。具体参数是:FTSK输入数据的采样率为8000Hz。相关运算输入数据:每次运算对输入数据先提取l600个点,并分离出这些数据的最后40个点;然后对下一个输入数据提取1600个点,并把刚才取的40个点加在这1600个点后面组成l640长度的数组,作为相关运算的输入。这样做的原因是,最大限度地消除每次提取的l600个点相邻部分的影响,提高相关输出的精准度。相关运算的输入数据都为浮点型,而通过MATLAB仿真计算出来的系数也都为小于l的浮点数。通过在C语言中调用汇编语言,在定点C5509中实现此浮点运算,并输出用800Hz相关运算提取出的波形。
2.2 C5509中实现浮点运算方法
此相关运算的输人是浮点型数据,相关系数是小于1的单精度浮点型数。对于定点
dsp
,由于不能直接进行浮点数的乘法运算,因此必须对输入数据进行类型转换。首先,相关运算的输入数据是FTSK浮点数据。在C语言中,单精度浮点数据是以IEEE754标准存储的32位数据,而C5509中C语言调用汇编语言,是通过寄存器AR0从C语言传递给汇编语言的是数据指针,这个指针是指向16位数据的,所以相关的输入32位浮点数要先转化为16位整型数据。本文这样实现:C程序中先把浮点数据乘以10后(提高运算精度),强制类型转化为整型数据,然后把此16位数据的指针赋给调用汇编的入口参数,即通过寄存器AR0传递到汇编程序中。然后,在汇编程序中,相关的系数是小于l的小数;在
dsp
中,汇编语言直接定义的格式是将其转换为16位二进制2的补码表示形式(例如0.8用8×32 768/lO来表示)。从汇编程序入口进入的、经过强制类型转换的整型数据也是以16位二进制形式存储的,通过与16位的小数相乘得到的是32位数,存储在累加器A中。其中,前16位是运算结果的整数部分,后16位是小数部分。由于从汇编语言程序返回C程序的参数是16位的,故取运算结果的高16位(此前已经把输入数据乘以lO,最大限度地提高了运算精度,这里直接取高16位)。把这16位数据返回C程序,得到整型数据,再强制类型转化为单精度浮点型数据,再除以10,即得到了最后相关运算的结果。经实际运算检验,通过这种方法在C5509里进行浮点运算,最终结果实现了很高的精度,而且通过调用汇编语言,极大地提高了运算的效率。
2.3 仿真
实际在用户板上用TI公司提供的CCS Emulator调试程序,实现了硬件仿真;而对此
dsp
算法来说,也可用TI公司提供的软件仿真器(Simulator)实现软件仿真。
TI公司提供的软件CCS中有一项强大的探测点功能。它是一个开发算法的工具,将计算机数据文件传送到目标板或计算机的缓冲区中提供
dsp
软件应用,而且可以通过CCS提供的图形窗口观察输入/输出数据波形。
本次算法设计中利用CCS的断点和探测点进行数据的输入,利用图形窗口观察输入/输出的波形。
2.4 实际运算的结果分析
从输入波形可以看到,有4种不同的频率,可以算出最低频率是800 Hz,经过800 Hz相关运算得出的输入波形与输出波形对比如图1所示。
在图l中,可以看到输入波形中频率最低的波形。2个波峰时间差(即周期)是0.0054-0.00416=0.00124s,取倒数是806.45,所以此波形是800Hz部分;再看输出波形,4个尖峰正好分别对应输入4个800 Hz频率分量。如果在后面再加上低通滤波器。就可以滤出更平滑的曲线,如图2所示。
2.5 测试程序运行时间
CCS中提供了~种评价器(profiler)。它通过收集在指定代码区间程序执行的统计性能,确定程序中各段所花费的处理器时间,从而识别并消除性能发挥的瓶颈,缩短程序的执行时间,使程序更有效;利用评价器分析可以确定执行某个特殊的函数花费了多少个时钟周期,以及对它调用的频繁度等。
本设计中相关浮点运算通过C语言编程和C、汇编语言混合编程两种方式的对比,用CCS提供的评价器可以测出,调用汇编语言的方式比纯C语言编程方式,速度提高了51.2%。
结语
在定点
dsp
中进行浮点运算,要经过复杂的数据格式转化,因此用定点
dsp
取代浮点
dsp
,在降低设备成本的情况下,必定会提高研发的成本。
如果直接把IEEE754标准的32位单精度浮点数据转化为16位整型数,要经过相当复杂的过程,在满足一定精度的前提下,可以使用本文的转化方式。使用C语言和汇编语言混合编程的方法,达到了大大提高运算效率的目的,不失为很灵活的编程方法。
UID
32403
帖子
17
精华
0
积分
149
金币
155 金币
学校
西华大学
年级
大三
阅读权限
20
在线时间
7 小时
注册时间
2007-12-10
最后登录
2008-6-30
查看详细资料
TOP
‹‹ 上一主题
|
下一主题 ››
特别专区
2008奥运专栏
我的大学
2008级新生接待室
川盟水吧
每周话题
自由写作
大学日记
情感驿站
老乡聚会
娱乐八卦
音乐天地
影视交流
流行资讯
学习交流
IT 学院
大学资源
两性地带
图个痛快
会员靓照
帅男贴图
美女贴图
综合贴图
动漫卡通
四川大学城
成都东软信息学院
电子科技大学
成都农业科技职业学院
成都大学
四川大学
西华大学
成都电子机械高等专科学校
四川音乐学院
四川水利职业技术学院
四川师范大学
西华师范大学
成都信息工程学院
四川农业大学
成都理工大学
西南石油大学
西南交通大学
成都体育学院
西南民族大学
西南财经大学
申请专版
特色联盟
寝室大联盟
川盟电台——radio.scdxs.net
NJ讨论专版
读书频道
信息平台
兼职招聘
信息发布
川盟站务
意见建议
控制面板首页
编辑个人资料
积分记录
公众用户组
个人空间管理
升级个人空间
基本概况
版块排行
主题排行
发帖排行
积分排行
交易排行
在线时间
管理团队
回到川盟主站
|
设为首页
│
加入收藏
|
搜索
|
联系站长