小编ene*_*tic的帖子

C 中的无限正弦生成

我正在开发一个项目,其中包含计算正弦波作为控制环路的输入。

\n

正弦波的频率为 280 Hz,控制循环每 30\xc2\xa0\xc2\xb5s 运行一次,并且针对 Arm Cortex-M7 的所有内容都是用 C 编写的。

\n

目前我们只是在做:

\n
double time;\nvoid control_loop() {\n    time += 30e-6;\n    double sine = sin(2 * M_PI * 280 * time);\n    ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n

出现两个问题:

\n
    \n
  1. 跑久了time就会变大。突然之间,正弦函数的计算时间急剧增加(见图)。为什么是这样?这些功能通常是如何实现的呢?由于速度对我们来说是一个重要因素,有没有办法规避这个问题(没有明显的精度损失)?我们使用 math.h (Arm GCC) 中的 sin。\nsin 函数分析
  2. \n
  3. 我一般如何处理时间?当长时间运行时,变量time不可避免地会达到双精度的极限。即使使用计数器time = counter++ * 30e-6;也只能改善这一点,但并不能解决问题。由于我当然不是第一个想要长时间生成正弦波的人,因此必须有一些关于如何快速而精确地实现这一点的想法/论文/...。
  4. \n
\n

c precision performance time trigonometry

89
推荐指数
10
解决办法
1万
查看次数

标签 统计

c ×1

performance ×1

precision ×1

time ×1

trigonometry ×1