网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> FAQ >> 软件开发 >> 文章正文
  每日一讲:DSP与三角函数       ★★★ 【字体:
每日一讲:DSP与三角函数
作者:admin    文章来源:本站原创    点击数:    更新时间:2004-7-27    

DSP与正(余)弦波

在DSP的应用中,我们经常要用到三角函数,或者合成一个正(余)弦波。这是因为我们喜欢把信号通过傅立叶变换映射到三角函数空间来理解信号的频率特性。信号处理的一些计算技巧都需要在DSP软件中进行三角函数计算。然而三角函数计算是非线性的计算,DSP并没有专门的指令来求一个数的正弦或余弦。于是我们需要用线性方法来近似求解。
    一个直接的想法是用多项式拟合,这也正是大多数DSP C编译器提供正余弦库函数所采用的方法。其原理是把三角函数向函数空间{1,x,x^2,x^3....}上投影,从而获得一系列的系数,用这些系数就可以拟合出三角函数。比如,我们在[0,pi/2]区间上拟合sin,只需在matlab中输入以下命令:
     x=0:0.05:pi/2;
     p=polyfit(x,sin(x),5)
    就得到5阶的多项式系数:
    p =
       0.00581052047605   0.00580963216172  -0.17193865685360
       0.00209002716293   0.99969270087312   0.00000809543448
    于是在[0,pi/2]区间上:
      sin(x)=     0.00000809543448+0.99969270087312*x+                              0.00209002716293*x^2-0.17193865685360*x^3+
0.00580963216172*x^4+0.00581052047605*x^5
     于是在DSP程序中,我们可以通过用乘加(MAC)指令计算这个多项式来近似求得sin(x)
     当然如果用定点DSP还要把P这个多项式系数表用一定的Q值来改写成定点数。
    
     这样的三角函数计算一般都需要几十个cycle 的开销。这对于某些场合是不能容忍的
    
     另一种更快的方法是借助于查表,比如,我们将[0,pi/2]分成32个区间,每个区间长度就为pi/64,在每个区间上我们使用直线段拟合sin曲线,每个区间线段起点的正弦值和线段斜率事先算好,存在RAM里,这样就需要在在RAM里存储64个
常数:
      32个起点的精确的正弦值(事先算好): s[32]={0,sin(pi/64),sin(pi/32),sin(pi/16)....}
      32个线段的斜率:                    f[32]={0.049,.....}
      对于输入的每一个x,先根据其大小找到所在区间i,通常x用定点表示,一般取其高几位就是系数i了,然    后通过下式即可求出sin(x):
            sin(x)= s[i]*f[i]
      这样一般只需几个CYCLE就可以算出正弦值,如果需要更高的精度,可以将区间分得更细,当然,也就需     要更多的RAM去存储常数表。
     事实上,不仅三角函数,其他的各种非线性函数都是这样近似计算的

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    每日一讲:遗传算法(1)
    每日一讲:遗传算法(2)
    每日一讲:遗传算法(3)
    每日一讲:遗传算法(4)
    每日一讲:遗传算法(5)
    每日一讲:遗传算法(6)
    每日一讲:遗传算法参考文献
    每日一讲:未用的输入/输出…
    每日一讲:关于“语音评测”
    每日一讲:DSP系统构成的常用…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号