说,我有一个信号是一维numpy阵列持续一秒钟,采样率等于16 kHz。如何重新采样此阵列,例如1024 Hz,而不会丢失有关"峰值的信息。在此信号中出现如下所示?我只添加了#34;峰值之间的间隔"不低于40毫秒。
更新
我发现了一种基于scipy.signal.resample
函数的有趣方法,但此函数的问题在于它返回给定向量的每个y
值的绝对值。
答案 0 :(得分:2)
如果您可以使用scipy
,我建议scipy.interpolate.interp1d
。
然而numpy
ceil(SR1/SR2)
中也有{1}插值,所以这可能只是你想要的。
对于你所要求的(没有失去高峰),这是一个有点不适合的问题,这是一个简单的天真插值无法解决的。
我的2美分解决方案:由于您正在进行下采样,并且您知道下采样率,因此您可以延长峰值,以便在下采样后不会丢失它们,即使得下采样中的峰值持续时间信号至少一个样本,即在下采样之前至少有SR1
个样本,其中SR2
是原始采样率,medecin
是下采样率..
答案 1 :(得分:0)
普通重新取样总会丢失一些信息。如果峰的高度很重要,但宽度不是很大,那么每16个样本就可以取1个(假设峰值在16kHz时至少有16个样本宽)。
如果你的峰值很少,你可以考虑一个更好的算法:只记录每次变化的时间瞬间和增量。在你的图表中(估计):
21050 +2000
21060 -2000
24030 -500
24040 +500
26030 +1000
26040 -1000
这肯定会比抽样少得多。只有6个值(可以存储在二进制中)我压缩了你的数据。