gpt4 book ai didi

algorithm - 将数据从 8 位转换为 12 位

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:32:48 25 4
gpt4 key购买 nike

我正在获取存储为字符数据(8 位)缓冲区的信号。我也得到相同的信号加上 24 dB,我的老板告诉我应该可以从这两个缓冲区重建,一个(将用作输出)将存储为 12 位。我想知道可以做到这一点的数学运算以及为什么选择 +24dB。谢谢(我很笨><)。

最佳答案

根据问题陈述,我猜你有一个以两个幅度采样的模拟信号。两个信号的分辨率均为 8 位,但其中一个被移位和截断。

您可以通过组合第一个信号的高 4 位并将它们与第二个信号连接来获得 12 位信号。

sOut = ((sIn1 & 0xF0) << 4) | sIn2

如果您想获得更好的准确性,您可以尝试计算两个信号的公共(public)位的平均值。通常情况下,第一个信号的低 4 位应与第二个信号的高 4 位近似相等。由于舍入误差或噪声,这些值可能会略有不同。其中一个值甚至可能溢出,并移动到范围的另一端。

int Combine(byte sIn1, byte sIn2)
{
int a = sIn1 >> 4; // Upper 4 bits
int b1 = sIn1 & 0x0F; // Common middle 4 bits
int b2 = sIn2 >> 4; // Common middle 4 bits
int c = sIn2 & 0x0F; // Lower 4 bits

int b;

if (b1 >= 12 && b2 < 4)
{
// Assume b2 has overflowed, and wrapped around to a smaller value.
// We need to add 16 to it to compensate the average.
b = (b1 + b2 + 16)/2;
}
else if (b1 < 4 && b2 >= 12)
{
// Assume b2 has underflowed, and wrapped around to a larger value.
// We need to subtract 16 from it to compensate the average.
b = (b1 + b2 - 16)/2;
}
else
{
// Neither or both has overflowed. Just take the average.
b = (b1 + b2)/2;
}

// Construct the combined signal.
return a * 256 + b * 16 + c;
}

当我对此进行测试时,它比第一个公式更准确地再现信号。

关于algorithm - 将数据从 8 位转换为 12 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11492463/

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