gpt4 book ai didi

c - 作为二元运算的数学函数

转载 作者:太空宇宙 更新时间:2023-11-04 06:33:53 25 4
gpt4 key购买 nike

我有一个连接到 ATmega 微 Controller 的 MP3 板,该微 Controller 还连接到一个电位器。 MP3 板直接通过其板载扬声器播放 MP3 数据,因此我还可以设置输出音量。

因此,正如您可能猜到的那样,我从 poti 读取了值并将其转发给微 Controller 。不幸的是,微 Controller 不会以线性方式增加音量。因此,从值 0 到 128,您几乎听不到任何声音,而从 128 到 255(最大值),音量迅速增加。

我发现,下面的函数可以解决这个问题:

vol = 1 - (1 - x)^4

但是x必须在0到1之间,结果也是0到1之间

因为我在微 Controller 上,所以我想

  1. 转换这个公式,以便我可以将它用于无符号整数
  2. 对其进行优化(可能使用一些廉价的二进制函数),因为我每秒多次读取 poti 值。所以这个函数必须每秒计算多次,我也想用微 Controller 做其他事情;-)

也许你们有些人有想法?会很棒!

 uint8_t linearize_volume(uint8_t value) {
// ideas?
// please don't use bigger data types than uint16_t
}

最佳答案

您可以为 CPU 周期“支付”内存。如果您有 256 字节的 ROM 可用,计算此类函数的最便宜的方法是构建一个查找表。

编写一个程序,打印包含非线性函数值的 256 个 8 位数字的列表。程序的速度有多快并不重要,因为您只会运行一次。将程序打印的数字作为数组初始值设定项复制到您的 C 程序中,并执行查找而不是计算函数。

关于c - 作为二元运算的数学函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17264258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com