我有一个N个测量数组,我应该以图形的形式呈现,但图形只能是M个像素宽,并且只能滚动M个像素。
当M是常数时,N可以是从几十到几千的任何东西。 每次当我需要显示图形时,我知道N是什么,但是因为N / M不是整数,所以存在我想要以某种方式补偿的累积误差。
我在普通的C中工作,没有数学库可以使用。
编辑2: 数据相对均匀,偶尔出现峰值,我不希望在插值时错过这些峰值。
编辑3: 我正在寻找能够对任何N,大于M且小于M
的N足够好的解决方案。感谢。
答案 0 :(得分:4)
一个好的解决方案不是迭代输入样本,而是遍历输出位置。也就是说,您将始终精确绘制M
像素。要计算i
像素的最近样本值,请使用数组偏移量:
[(i*N+M/2)/M]
当然,只使用最近的样本会得到一个非常别名的结果(在N
很大的情况下丢弃大部分样本)。如果您确定N
总是大于M
,那么一个好但很简单的方法是使用加权平均值对足够的相邻样本求平均值,使得每个样本的总权重为1(端点具有它们的权重在相邻输出像素之间分配)。当然,您可以使用更精细的重采样算法,这可能更合适(特别是如果您的数据类似于在频域中更有意义的音频采样),但对于具有严格内存和时钟周期要求的嵌入式设备,平均值很可能是你想要的方法。