如何改变数据的采样率

How to change the sampling rate of the data

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

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

鉴于:

我尝试使用 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

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

正如我所说 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()

输出:

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

您必须记录时间(以秒为单位 - 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)