我正在开发一个模块,我需要在图表上绘制 ECG 流数据。该图具有可配置的速度,即在 50mm、25mm 等范围内绘制 1 个心跳数据样本。为此,我需要根据屏幕分辨率降低样本并绘制相同的图。
我正在使用 Qt QML 进行绘图。实现这一目标的确切算法是什么?我不知道我到底要谷歌什么
我正在开发一个模块,我需要在图表上绘制 ECG 流数据。该图具有可配置的速度,即在 50mm、25mm 等范围内绘制 1 个心跳数据样本。为此,我需要根据屏幕分辨率降低样本并绘制相同的图。
我正在使用 Qt QML 进行绘图。实现这一目标的确切算法是什么?我不知道我到底要谷歌什么
让我们定义我们的下采样因子:
在哪里是原始采样频率和减少的一个。
如果是的倍数(IE是一个整数),那么下采样很简单:您只需从中取出一个样本. 例如,如果您想将采样频率减半,只需丢弃每个示例,仅此而已(不是真的,请参阅下一段)。
但是,如果不是这种情况,您将不得不在样本之间进行插值。为了简单起见,插值意味着通过知道周围样本的值来尝试猜测样本的值。你的大脑一直在做插值:当你看到几个点形成一条线时,你会本能地在脑海中画出这条线。存在几种类型的插值,越简单,精度越低。这通常取决于您的应用程序。
您可能听说过香农-奈奎斯特采样定理,它指出要对信号进行采样,采样频率必须至少是信号最高谐波的两倍。如果你不这样做,它会导致一种叫做aliasing的东西。我不会在这里解释这个定理,因为到处都有大量可用的信息。
但是记住这个定理,您可能会理解,如果您不小心,对信号进行下采样可能会导致混叠。简单的解决方案是在下采样之前过滤信号,截止频率为. 滤波器的过渡带越陡,混叠越少。
据我了解,您有一个想要映射到屏幕的信号。为此,您需要将信号下采样到屏幕的水平分辨率。让我们称这个决议和你的信号的采样频率. 为了示例,让我们修复和.
您还有一个时间参数(我们称之为) 设置示波器的“缩放”,即信号的长度对应于屏幕的长度。让我们将其设置为(免责声明:我完全不知道心电图的频率,所以这完全是任意的)。
这给了你:
应用我之前所说的,你有:
所以首先,你用砖墙过滤你的信号,然后您将其下采样一个因子使用插值。
要考虑的另一件事是垂直分辨率。为此,它有点不同,因为您不是对信号进行下采样而是对其进行量化。然而,这个过程是相似的,我认为你可以在没有我们帮助的情况下进行推断。