【问题标题】:How much information is lost when I average integers?当我平均整数时丢失了多少信息?
【发布时间】:2020-03-30 15:58:10
【问题描述】:

使用 C++,因为这发生在微控制器上。我的输入是六个 int16_t。我将它们转换为 int32_t,这样我就可以将它们加在一起,然后除以 6,然后将结果存储在 int16_t 中以供传输。如下所示,假设 someRandomInt 就是这样,每行一个随机的 16 位整数:

int16_t one = someRandomInt;
int16_t two = someRandomInt;
int16_t three = someRandomInt;
int16_t four = someRandomInt;
int16_t five = someRandomInt;
int16_t six = someRandomInt;

int32_t sum = (int32_t)one + (int32_t)two + (int32_t)three + (int32_t)four + (int32_t)five + (int32_t)six;

int16_t result = (int16_t)(sum / 6);

我每秒执行 16384 次,然后对结果数组执行 I/Q 解调。

在 Python 中使用它,我计算出在总和(-196601 到 196601)的整个可能性范围内,当我除以 6 并取所有内容的小数部分时,平均小数部分为 0.417 ±0.285。我的直觉是,当我进行上述数学运算时,我失去了。那是对的吗?我担心传感器值何时接近零。

【问题讨论】:

  • 您是否正在寻找熵位的测量值?
  • 你用这个计算的损失做什么?这可能有助于我们了解最佳方法。
  • @JohnFilleau 输入来自六个相同的传感器,我对它们进行平均以提高 SNR。我试图了解这样做时我丢失了多少信息,因为我需要将其作为测量不确定性的一部分进行报告。
  • 好的,所以您的最终输出将是一系列可能的值。 “平均值实际上在 100 到 101 之间”或类似的东西
  • 抱歉之前的光顾回答 ;-) 我想知道 (int16_t)((sum + 3) / 6); 是否会给你一个更好的衡量标准?

标签: c++ math average


【解决方案1】:

我可能不明白这个问题。

计算“sum”时不会丢失任何信息,对吗?

因此,当您将整数除以 6 时,任何丢失的信息都会出现。

因此,总和中包含多少传感器或对它们采样多少次并不重要。

将一个数字除以 6 很重要。当你将一个整数除以一个整数时,你会得到截断,在这种情况下,这将发生 6 次中的 5 次。

5 除以 6 就是 0.8333。其中一半是 0.417。所以你的实验结果看起来是正确的。

【讨论】:

  • 总和确实没有信息丢失。这是在 32 位中完成的,但是对于 6 个数字,您只需要 3 个额外的位。所以 16+3=19
  • 这是一个反问句。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
相关资源
最近更新 更多