如何更改数据的采样率

时间:2016-07-22 08:19:23

标签: python python-2.7 numpy scipy resampling

如何更改列表result中的数据采样率。

当前采样率为256,但所需的采样率为250。

假设:

  • result - 采样频率为256的数据列表。
  • buf.size - 频道中的信号量

我尝试使用scipy.signal.resample

from scipy import signal
result250 = signal.resample(result, buf.size, t=None, axis=0, window=None)


Traceback (most recent call last):
  File "****.py", line 82, in <module>
    result250 = signal.resample(result, buf.size, t=None, axis=0, window=None)
  File "****\scipy\signal\signaltools.py", line 1651, in resample
    X = fft(x, axis=axis)
  File "****\scipy\fftpack\basic.py", line 249, in fft
    tmp = _asfarray(x)
  File "****\scipy\fftpack\basic.py", line 134, in _asfarray
    return numpy.asfarray(x)
  File "****\numpy\lib\type_check.py", line 105, in asfarray
    return asarray(a, dtype=dtype)
  File "****\numpy\core\numeric.py", line 482, in asarray
    return array(a, dtype, copy=False, order=order)
ValueError: invalid literal for float(): 3.3126, 6.6876, 9.3126, 10.0627, ****

还有另一种线性插值选项(最好),但我也无法弄清楚如何使用。 scipy.interpolate.interp1d

2 个答案:

答案 0 :(得分:1)

您必须记录时间(以秒为单位 - f.file_duration)。 我的回答:

x250 = np.arange(0, f.file_duration, 0.004)    #frequency 250
x256 = np.arange(0, f.file_duration, 0.00390625)    #frequency 256

result256 = np.interp(x256, x250, result)

答案 1 :(得分:0)

我会在这里试试,因为评论很小,我想我会回答你:

正如我所说的python列表就是那样,列表,一组东西(不一定是数值)他们不知道或不关心里面是什么,因此他们不知道采样频率甚至意味着什么。 一旦你接受列表中的数字只是一个东西的表示,你可以按照你想要的任何速率对它们进行采样,这只是你对它进行绘制的内容或你每单位时间考虑多少值的问题。

import numpy as np
import matplotlib.pyplot as plt

data = [3.3126, 6.6876, 9.3126, 10.0627, 9.0626, 6.6876, 4.0626, 2.0625, 0.9375, 0.5625, 0.4375, 0.3125, 0.1875, 0.1875, 0.9375, 2.4375, 4.5626, 6.6876, 7.9376, 7.3126, 4.9376, 1.0625, -3.3126, -6.9376, -8.9376, -8.6876, -6.5626, -3.1875, 0.3125, 2.6875, 3.5626, 2.6875, 0.5625, -2.0625, -4.3126, -5.6876, -5.9376, -5.3126, -4.4376, -3.6876, -3.4376, -3.5626, -3.6876, -3.4376, -2.6875, -1.4375, -0.5625, -0.4375, -1.4375, -3.3126, -5.3126, -6.5626, -6.4376, -5.1876, -3.5626, -2.6875, -3.0625, -4.4376, -5.9376, -6.3126, -5.3126, -2.9375, -0.1875]

x256 = np.arange(0, 1, 1/256)[:len(data)]
x200 = np.arange(0, 1, 1/200)[:len(data)]

plt.plot(x256, data, label='x256')
plt.plot(x200, data, label='x200')
plt.legend()

输出: ![

这是否解决了重采样问题?