作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含 N 个测量值的数组,我应该将其显示为图表,但该图表只能有 M 个像素宽,并且只能按 M 个像素滚动。
虽然 M 是常数,但 N 可以是几十到几千之间的任何值。每次我需要显示图表时,我都知道 N 是什么,但是由于 N/M 可能不是整数,所以我想以某种方式补偿累积误差。
我在纯 C 中工作,不能使用任何数学库。
编辑 2:数据相对均匀,偶尔出现峰值,我不想在插值时错过这些峰值。
编辑 3:我正在寻找对任何 N(大于 M 和小于 M)都足够好的解决方案。
谢谢。
最佳答案
一个好的解决方案不是迭代输入样本,而是迭代输出位置。也就是说,您将始终恰好绘制 M
个像素。要计算第 i
个像素的最近样本值,请使用数组偏移量:
[(i*N+M/2)/M]
当然,仅使用最近的样本会产生非常混叠的结果(在 N
较大的情况下丢弃大部分样本)。如果您确定 N
将始终大于 M
,一个好的但简单的方法是使用加权平均值对足够的相邻样本进行平均,这样每个样本都获得一个总权重为 1(端点的权重在相邻输出像素之间分配)。当然,您可以使用更精细的重采样算法,这些算法可能更合适(特别是如果您的数据类似于音频样本,在频域中更有意义),但对于具有严格内存和时钟周期要求的嵌入式设备,平均可能是您想要的方法。
关于c - 如何将 n 个元素的数组重新采样为 m 个元素的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10674594/
我是一名优秀的程序员,十分优秀!