如何更改列表result
中的数据采样率。
当前采样率为256,但所需的采样率为250。
假设:
result
- 采样频率为256的数据列表。buf.size
- 频道中的信号量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
答案 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()
这是否解决了重采样问题?