![]() |
|
||||||||||||||
| . 网站首页 . 新闻 . 新品 . 方案 . 专访 . 活动 . DSP . EDA . 评测 . 技术文库 . 会员区 . 商城 . 服务导航 . 邮购 . 资源 . | ||
|
||
|
|||||
| 32位定点小数运算 | |||||
作者:Free 文章来源:本站原创 点击数: 更新时间:2008-2-29 ![]() |
|||||
|
前面介绍了如何用16位整数运算来实现定点小数运算。在产生正弦波的文章中我们也看到,16位的定点小数运算的精度有限,无法精确地产生取样频率为 44100Hz的100Hz的正弦波。 因此,在精度要求比较高的时候,我们就必须采用32位定点小数运算了。C语言中的long整型数是32位的,所以所谓32位定点小数运算,实际上就是长整 型数的运算。但是这里有一个问题,我们在做16位定点小数乘法的时候,用到了q3=((long q1) * (long q2)) >> n; 也就是说必须把16位的整数转换为32位的整数进行运算。同样如果要进行32位运算,就必须把32位的整数转换为64位的整数,而C语言并没有直接提供这 类运算的方法。所以我们必须自己来写。先来看看32位整数的乘法。 假设a, b为两个长整型数,ah, al, bh, bl 分别为a, b的高16位和低16位,也就是说: 下面来看32位的Qn定点小数乘法。从16位的乘法中不难看出,32位的Qn定点小数乘法就是32位整数乘法的结果右移n位。即 (a*b)>>n,代入上面的公式得到: 下面列出32位定点小数乘法的C语言程序。 long mult_32bitQn(long a, long b, short Q){
short ah, bh; unsigned short al, bl; long result; ah=a >> 16; al=a & 0x0000ffff; bh=b >> 16; bl=b & 0x0000ffff; result=(ah*bh)<<(32-Q); result+=(ah*bl)>>(Q-16); result+=(al*bh)>>(Q-16); return result; } 如果要在DSP芯片上实现高速32位定点小数乘法的话,当然就要使用汇编语言了。下面是TI C5000系列DSP的汇编程序。这里,寄存器AR2,AR3分别指向两个长整型乘数a,b,计算的结果放在累加寄存器A中。 mar *AR2+ ;先让AR2指向al |
|||||
| 欢迎点击进入:TI德州中文网 (国内唯一针对TI应用的中文技术网站) 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 没有相关文章 |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|
|