小编cyc*_*125的帖子

数学转换线性输入曲线为C中有限资源的"对数"输出曲线

我需要在具有有限资源(内存,时钟速度)的MCU上将输入值(线性曲线)与输出值("对数或指数式"曲线)进行数学转换.

但这个问题是更普遍的C编程问题.

比方说,我们有两个变量:uint8_t input和uint8_t output.输入值是0-255.输出值也应该是0-255,但改变与输入不是线性的.

例如(input ==> output):

    0   ==> 0
    1   ==> 1
    10  ==> 1
    100 ==> 10
    200 ==> 75
    250 ==> 225
    255 ==> 255
Run Code Online (Sandbox Code Playgroud)

让我们说,我可以进行数学转换,类似于(通常)"2 ^(输入/ 32)-1",我可以实现接近我需要的东西.我试过了:

output = (pow(2, (input/32)))-1

但是,根据uint8_t类型变量的限制,我将获得2:1,2,4 ......最大128(减1)的输出,它们之间没有平滑过渡:

    0   ==> 0
    1   ==> 0
    10  ==> 0
    100 ==> 7
    200 ==> 63
    250 ==> 127
    255 ==> 127
Run Code Online (Sandbox Code Playgroud)

pow()由于MCU资源有限,我也不愿意使用.我可以通过在内存中使用表来实现所需的结果,但是(再次)它将花费256字节的ROM,这是不可接受的.我也可以用较小的桌子做近似,但......

可能还有其他一些方法可以用数学方法实现这个结果,uint8-uint32在低资源MCU上保留算术内部?

编辑:"正确"的公式和数字不存在.输出数字可能有所不同 在"input = 0"==>"output = 0"处,"input …

embedded math

1
推荐指数
1
解决办法
493
查看次数

标签 统计

embedded ×1

math ×1