Построение данных является хорошим первым шагом при проверке.Здесь я сделал правильный сюжет с точками, соединенными линиями.Эти строки полезны, поскольку они дают представление о том, где, как вы ожидаете, лежат данные с пониженной выборкой, а также подчеркивают, что данные с пониженной выборкой отсутствуют.(Это также будет работать, чтобы показывать только линии для исходных данных, но линии, как на графике основы, слишком запутанные, имхо.)
import numpy as np
import matplotlib.pyplot as plt # For ploting
from scipy import signal
fs = 100 # sample rate
rsample=43 # downsample frequency
fTwo=13 # frequency of the signal
x = np.arange(fs, dtype=float)
y = np.sin(2*np.pi*fTwo * (x/fs))
print y
f_res = signal.resample(y, rsample)
xnew = np.linspace(0, 100, f_res.size, endpoint=False)
#
# ##############################
#
plt.figure()
plt.plot(x, y, 'o')
plt.plot(xnew, f_res, 'or')
plt.show()
Несколько замечаний:
Если вы пытаетесь создать общий алгоритм, используйте не округленные числа, в противном случае вы могли бы легко вводить ошибки, которые не отображаются, когда вещи даже кратны.Точно так же, если вам нужно увеличить масштаб для проверки, перейдите к нескольким случайным местам, а не, например, только к началу.
Обратите внимание, что я изменил fTwo
, чтобы он был значительно меньше, чем количество выборок.Так или иначе, вам нужно, по крайней мере, более одной точки данных на осцилляцию, если вы хотите разобраться в этом.
Я также удаляю цикл для вычисления y
: в общем, вы должны пытаться векторизовать вычисления при использованииNumPy.