如何改变numpy.array的采样率?

时间:2015-06-17 14:50:28

标签: python arrays numpy

说,我有一个信号是一维numpy阵列持续一秒钟,采样率等于16 kHz。如何重新采样此阵列,例如1024 Hz,而不会丢失有关"峰值的信息。在此信号中出现如下所示?我只添加了#34;峰值之间的间隔"不低于40毫秒。

更新

我发现了一种基于scipy.signal.resample函数的有趣方法,但此函数的问题在于它返回给定向量的每个y值的绝对值。

enter image description here

2 个答案:

答案 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个值(可以存储在二进制中)我压缩了你的数据。