Я получил два сигнала S1 и S2 (два массива значений), и я хотел бы знать, является ли S1 тем же сигналом, что и S2, но смещен (Графическое представление будет таким же для S1 и S2, но S1 будет перемещен ввправо или влево)
Проблема в том, что мой алгоритм содержит интерполяцию scipy.interpolate.interp1d
, и эта функция вводит значения NaN в массивы.
Когда я пытаюсь сопоставить S1 и S2 сЕсли NaN внутри, массив корреляции всегда [NaN, NaN, NaN, ... , NaN, NaN, NaN]
Моя цель: 1) Определить, являются ли S1 и S2 одним и тем же сигналом (если корреляция выше определенного порога, я буду считать, что они являютсятот же сигнал) 2) Если есть, обнаружите сдвиг между ними, чтобы я смог убрать его
Чтобы проиллюстрировать мой алгоритм, я создал простой код
import numpy as np
from scipy.signal import correlate
norm = np.linalg.norm
x = np.array([np.nan,1,2,3,0,0,np.nan])
y = np.array([1,2,3,0,0,np.nan,np.nan,np.nan])
corr = correlate(x, y)
print(corr/(norm(x)*norm(y)))
Здеськорреляционная функция scipy.signal.correlate
, но я тоже пытался с np.correlate и получил те же результаты
Из сообщения stackoverflow я попробовал так:
x = np.array([np.nan,1,2,3,0,0,np.nan])
y = np.array([1,2,3,0,0,np.nan,np.nan,np.nan])
normx = norm(x[~np.isnan(x)])
normy = norm(y[~np.isnan(y)])
maskx = np.ma.array(x, mask=np.isnan(x))
masky = np.ma.array(y, mask=np.isnan(y))
corr = correlate(maskx, masky)
Но я все еще получил толькоЗначения NaN ..
Что-то я не так делаю?