电机控制DSP高效算法——1、正余弦

电机控制DSP高效算法——1、正余弦

  • 控制系统常用查表法加速。该段代码为正余弦的查表法实现,查找表角度范围为0-90°,共1024点。
  • 适用于32位浮点MCU,精度跟math.h库函数几乎一致。
  • 同一流程,修改其中常数,也适用于定点数。
extern const float *sin90d1024f32;
static float sinfpu(float x) /* x must have been normalized by 2pi */
{
    float s, y, y1;
    long  i;
    
    x -= (long)x;                /* (-1, 1) */
    x += x<0.0f ? 1.0f : 0.0f;   /* [0, 1)  */
    
    if(x >= 0.5f) {
        x -= 0.5f; s = -1.0f;    /* [0.5, 1)  */
    } else {
        x += 0.0f; s = +1.0f;    /* [0, 0.5)  */
    }
    if(x >= 0.25f) {
        x = 0.5f - x;            /* [0.25, 0.5) */
    } else {
        x = x;                   /* [0, 0.25) */
    }
    
    x *= 4092;  // 4096;  //
    i = (long)x;
    y = sin90d1024f32[i];        /* look up table */
    y1 = sin90d1024f32[i+1];
    y += (y1 - y) * (x-i);       /* Linear interpolation */
    y *= s;                      /* Signed */
    
    return y;
}
float sinfacc(float x)
{
    x =x * 0.159154943f; /* x / 2pi */
    return sinfpu(x);
}
float cosfacc(float x)
{
    x = x * 0.159154943f + 0.25f;
    return sinfpu(x);
}
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值