3

我有一个包含 N 个测量值的数组,应该以图形的形式呈现,但图形只能是 M 像素宽,并且只能滚动 M 像素。

虽然 M 是常数,但 N 可以是从几万到几千的任何值。每次我需要显示图表时,我都知道 N 是什么,但是由于 N/M 不能是整数,所以我想以某种方式补偿累积的误差。

我正在使用普通的 C 语言,并且不能使用任何数学库。

编辑 2:数据相对均匀,偶尔会出现峰值,我不想在插值时错过这些峰值。

编辑 3:我正在寻找对任何大于 M 且小于 M 的 N 都足够好的解决方案。

谢谢。

4

1 回答 1

4

一种好的解决方案不是迭代输入样本,而是迭代输出位置。也就是说,您将始终准确地绘制M像素。要计算i第 th 个像素的最近采样值,请使用数组偏移量:

[(i*N+M/2)/M]

当然,仅使用最近的样本会产生非常混叠的结果(在较大的情况下丢弃大部分样本N)。如果您确定N总是大于M,一个好的但简单的方法是使用加权平均值对足够的相邻样本进行平均,这样每个样本的总权重为 1(端点的权重在相邻输出像素之间分配)。当然,您可以使用更精细的重采样算法,这些算法可能更合适(特别是如果您的数据类似于在频域中更有意义的音频样本),但对于内存和时钟周期要求严格的嵌入式设备,平均可能是您想要的方法。

于 2012-05-20T15:21:54.857 回答