c++ - 从测量值创建反向查找表

标签 c++ arrays math lookup

我在校准期间从编码器(已知速度)记录 2 个电压。创建这个(角度上的电压),然后我需要测量电压并获得相应的角度。
Two voltages over angle
我也想在记录点之间找到值以获得更高的精度,某种 arccos 查找表,我被卡住了,无法找到一种有效的方法来做到这一点。
我是否必须通过比较大量数组来研究我在数组中的值?那会很慢吧?
我曾尝试使用 Arcos 函数,但我猜这不会补偿机械不规则性。
我也已经计算了波的平均值和幅度。
编辑:正如所问,目标是测量 FOC 电机的位置。
设置如下。
enter image description here
这是我使用 atan2 函数得到的结果:x = 2*(hallA.read() - moyenneA)/(maxA-minA); y = 2*(hallB.read() - moyenneB)/(maxB-minB); enter image description here

最佳答案

最终,您无法向数据中添加更多信息。除了更频繁地采样。也就是说,您可以使用线性插值来估计任意两个测量点之间的电压。查找线性插值以了解详细信息,但总结一下,如果 A 点和 B 点之间的时间点 C 是 A 和 B 之间距离的 25%。然后计算加权相同的电压。所以电压 C = 电压 A + 25%(电压 A - 电压 B)。
至于计算角度,那不是我的专业领域。但我想我会计算我感兴趣的点后面 1/2 采样时间的线性插值和我感兴趣的点之前 1/2 采样时间的插值并计算斜率的角度。但是,我不是信号处理专家。有很多关于这个主题的书。还有其他插值函数可用,在 Internet 上阅读有关信号处理插值的信息可能会为您提供更多信息。
如果您担心数据中的机械或电气噪声,那么我建议您使用平滑算法。我知道快速傅立叶变换非常流行。但我相信还有很多其他选择。互联网上肯定有过滤库和算法。但正如我所说,这不是我的专业领域。也许我的回答会触发其他人以更专业的方式回答。消除高频噪声的一种方法就是减少采样频率。

关于c++ - 从测量值创建反向查找表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65363598/

相关文章:

c++ - 为什么不为匿名对象调用析构函数?

c++ - 当输入到结构点中的双指针数组时程序崩溃

c++ - 无法通过 C 中的 UDP 套接字接收完整整数数组

java - Math.pow 和 Math.sqrt 公式返回值 0

c++ - 如何最小化 USB 2 的延迟

c++ - 是否有用于 Debian/Ubuntu 的 Boost 1.5.3 软件包?

Android - 随机列出按钮

mysql - 计算集合的密度

java - 如何在不使用 "%"运算符的情况下计算两个数字的余数/模?

c++ - 如何方便地打印出 std::stack 或 std::queue 中的所有元素