打印

TI DSP实用一天一技巧(1)

[复制链接]
2340|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
adam02|  楼主 | 2011-9-14 01:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 adam02 于 2011-9-14 01:19 编辑

    DSP软件开发是一个技巧性很强的软件开发工作,开发者不仅要具有基本的C语言开发能力,还有有一定的嵌入式系统支持。简单地讲,只有清楚地知道自己所写的代码在DSP上是如何执行的,才能写出简洁高效的软件代码。
    抛砖引玉,介绍一下自己在DSP软件开发中体会到的技巧,欢迎拍砖。
本节介绍DSP内求倒数的方法:
    在TI系列DSP中,有专门的指令_subc辅助完成除法运算,这个函数的伪码如下
     c = _subc(b, a)
     if ((b - a) > 0)
    {
        c = ((b - a) << 1) + 1;
     }
    else
   {
        c = b << 1;
    }

    如果要就算一个数sdDivData的倒数1/sdDivData,可以用下面代码实现:
    ucScaleDivData = _norm(sdDivData);
   sdTemp = sdDivData << ucScaleDivData;
   a = sdTemp & 0x7fff0000;
   b = 0x40000000;
   for (i = 15; i > 0; i--)
  {
       b = _subc(b, a);
   }
   swDivDataInverse = b & 0x7fff;
   swSftBits = 30 + (15 - 1) - ucScaleDivData;

   首先将分子分母都左移至有效位高位对齐,记下各自的移位的位数Nx和Ny,a = x << Nx ,b = y << Ny 。例子中分子向左移位了30位,变为b, 分母向左移位了ucScaleDivData位,保证分子分母的最高有效位对齐。
   设商的有效位为L,则需要对分子分母的低L比特先进行清零,保证这些比特位不会对商造成影响。例子中商的有效位为15比特。a和b高位对齐后,商不是1就是0:如果a>b,则说明商为1,余数为a-b,将商放在结果的最低位,余数进入下一轮计算;否则,商为0,余数为a,余数进入下一轮计算。
商的有效位为L,则需要循环L次,则商的实际左移的位数为L-1次。最后从循环减的结果中取出低L位。最后商最终向左移位的位数为
Nx+(L-1)-Ny

相关帖子

沙发
6019赵文| | 2011-9-14 09:01 | 只看该作者
直接除法周期几个了?

使用特权

评论回复
板凳
blacksword| | 2011-9-14 10:14 | 只看该作者
伪码好像有点问题吧

使用特权

评论回复
地板
adam02|  楼主 | 2011-9-14 14:20 | 只看该作者
严格地写,应该是这样
   c = _subc(b, a)

     if ((b - a) > = 0)
    {
        c = ((b - a) << 1) + 1;
     }
    else
    {
        c = b << 1;
     }

使用特权

评论回复
5
sqcumt123| | 2011-9-16 16:44 | 只看该作者
谢谢楼主分享,好好学习一下TI DSP知识

使用特权

评论回复
6
Lxn77| | 2011-9-19 12:57 | 只看该作者
一天一技巧,怎么只有一啊:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

27

帖子

0

粉丝