硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3989|回复: 7
收起左侧

[DSP] 新版DSP库的三角函数sin和cos求解过程是通过查表再做简单的线性插值实现

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2019-10-19 13:21:04 | 显示全部楼层 |阅读模式


先做归一化,然查表代入公式(1.0f-fract)*a + fract*b获得结果。

float32_t arm_sin_f32(
  float32_t x)
{
  float32_t sinVal, fract, in;                   /* Temporary input, output variables */
  uint16_t index;                                /* Index variable */
  float32_t a, b;                                /* Two nearest output values */
  int32_t n;
  float32_t findex;

  /* input x is in radians */
  /* Scale input to [0 1] range from [0 2*PI] , divide input by 2*pi */
  in = x * 0.159154943092f;

  /* Calculation of floor value of input */
  n = (int32_t) in;

  /* Make negative values towards -infinity */
  if (in < 0.0f)
  {
    n--;
  }

  /* Map input value to [0 1] */
  in = in - (float32_t) n;

  /* Calculation of index of the table */
  findex = (float32_t)FAST_MATH_TABLE_SIZE * in;
  index = (uint16_t)findex;

  /* when "in" is exactly 1, we need to rotate the index down to 0 */
  if (index >= FAST_MATH_TABLE_SIZE) {
    index = 0;
    findex -= (float32_t)FAST_MATH_TABLE_SIZE;
  }

  /* fractional value calculation */
  fract = findex - (float32_t) index;

  /* Read two nearest values of input value from the sin table */
  a = sinTable_f32[index];
  b = sinTable_f32[index+1];

  /* Linear interpolation process */
  sinVal = (1.0f - fract) * a + fract * b;

  /* Return output value */
  return (sinVal);
}


回复

使用道具 举报

4

主题

35

回帖

47

积分

新手上路

积分
47
发表于 2019-10-19 15:08:33 | 显示全部楼层
版主,问一下,这个新版本是哪个版本,stm32Cube_fW_H7_V150还是stm32Cube_fW_H7_V140吗?
最近用H7做扫描镜驱动,需要内部集成畸变校正,结果发现库里没有三角函数,得用C99的math.h库自带的三角函数。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
 楼主| 发表于 2019-10-19 15:15:12 | 显示全部楼层
BUGvirus 发表于 2019-10-19 15:08
版主,问一下,这个新版本是哪个版本,stm32Cube_fW_H7_V150还是stm32Cube_fW_H7_V140吗?
最近用H7做扫描 ...

新版CMSIS软件包V5.6.0

事隔五年之后,开启第2版DSP数字信号处理和CMSIS-NN神经网络教程,同步开启三代示波器,前12章已发布(2019-10-06)
http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547
回复

使用道具 举报

4

主题

35

回帖

47

积分

新手上路

积分
47
发表于 2019-10-19 15:27:57 | 显示全部楼层
eric2013 发表于 2019-10-19 15:15
新版CMSIS软件包V5.6.0

事隔五年之后,开启第2版DSP数字信号处理和CMSIS-NN神经网络教程,同步开启三 ...

知道了,谢谢版主
回复

使用道具 举报

4

主题

35

回帖

47

积分

新手上路

积分
47
发表于 2019-10-19 16:01:14 | 显示全部楼层
我详细搜索过了一遍,CMSIS软件包V5.6.0中三角函数只提供了sin 和cos,反三角函数全部没有提供,估计得等后续版本更新DSP库函数,不然实用性依然不高。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
 楼主| 发表于 2019-10-19 16:08:33 | 显示全部楼层
BUGvirus 发表于 2019-10-19 16:01
我详细搜索过了一遍,CMSIS软件包V5.6.0中三角函数只提供了sin 和cos,反三角函数全部没有提供,估计得等后 ...

对,就是没有反三角函数。

针对三角函数,M内核没有加速机制。所以DSP库里面有没有这些函数意义不大,直接调用C库的就行。

回复

使用道具 举报

1

主题

94

回帖

97

积分

初级会员

积分
97
发表于 2019-10-20 21:39:06 | 显示全部楼层
按照类似的思路也可以自己做反三角函数吧,不知道有没有C库的快。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
 楼主| 发表于 2019-10-21 08:23:41 | 显示全部楼层
hexenzhou 发表于 2019-10-20 21:39
按照类似的思路也可以自己做反三角函数吧,不知道有没有C库的快。

回头实测下,DSP库,MDK和IAR的C库谁厉害些
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-18 00:16 , Processed in 0.184922 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表