В этом документе обнаружено, что более точно интерполировать сердечные сокращения из зашумленного сигнала ЭКГ путем интерполяции по временной метке сокращения. , а не продолжительность такта. (Последнее дрейфует.)
Но я не знаю, сколько ударов сердца должно быть в шумных регионах, поэтому, если Y — это временная метка сердцебиения, я не знаю что передать как X.
Должен ли я создать массив с последней меткой времени сердцебиения для исходной выборки сигнала 256 Гц? X — индекс выборки, а Y — временная метка последнего сердечного ритма? Мое невежественное предположение состоит в том, что изменения в полках изменят кубический сплайн. Использовать взвешивание, чтобы при построении сплайна учитывать только известные временные метки? Я думаю, что это позволит построить график y=x. У меня нет другого выбора, кроме как использовать интервал?
Моя бессвязная работа...
Насколько я понимаю, это они интерполируют постоянно увеличивающуюся необработанную последовательность временных меток r-пика, а не колеблющийся интервал r-пика. Я предполагаю, что X - это индекс сердечного ритма 1, 2, 3, 4..., а Y - это индекс сигнала ЭКГ, который он появляется, скажем, 256, 500, 730... для сигнала ЭКГ ~ 60 ударов в минуту, 256 Гц. /p>
Я новичок в интерполяции и экспериментирую с функциями интерполяции SciPy CubicSpline или interpolate.splrep и splev.Или мой подход неправильный? Документы scipy рекомендуют np.ma для интерполяции отсутствующих значений, но я не могу понять, как бы это сделать.
Билет numpy предлагает UniVariateSpline с нулевыми узлами и нулевые веса, но если я передам ему массив с nan, spl вернет nan для всех значений. И в любом случае мне еще нужно знать, сколько ударов сердца пропущено.
Код: Выделить всё
y=[1, 4, np.nan, 16, 25, 36, 34, 12, 5, 87]
spl = UnivariateSpline(np.arange(10), y, s=0, w=np.zeros(10))
plt.plot(np.arange(10), spl(np.arange(10)))
>> array([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan])
Код: Выделить всё
spl = UnivariateSpline(
np.arange(10),
[1, 4, 0, 16, 25, 36, 34, 12, 5, 87],
w=[1, 1, 0, 1, 1, 1, 1, 1, 1, 1]
)
spl(np.arange(10))
>>> array([ 0.97665691, 4.18844333, 7.52957225, 14.64048455, 26.86293802,
36.34395811, 32.5930899 , 11.48427138, 6.42129891, 86.48885889])
Нужно ли использовать интервалы при подсчете пульса? неизвестный? Интервалы с частотой выборки, затем X — индекс выборки, а Y — интервал?
Могу ли я сделать то же самое с отметкой времени сердцебиения? Самая последняя временная метка для каждой выборки и нулевой вес для зашумленных регионов? Это статистически достоверно?
Огромное спасибо за любые подсказки.
Подробнее здесь: https://stackoverflow.com/questions/791 ... timestamps