Ситуация :
Я пытался сравнить два вектора сигнала (y1 & y2 с векторами времени x1 и x2) с различной длиной (len (y1) = 1000> len (y2)) = 800).Для этого я следовал главному совету, который был дан почти везде: использовать interp1 или spline.Для того, чтобы «расширить» y2 к y1 в количестве выборок посредством интерполяции.Итак, я хочу:
length(y1)=length(y2_interp)
Однако в этих функциях вы должны указать точки 'x', куда нужно интерполировать (xq), поэтому я генерирую вектор с точками пересэмплирования, которые я хочу вычислить:
xq = x2(1):(length(x2))/length(x1):x2(length(x2));
y2_interp = interp1(x2,y2,xq,'spline'); % or spline method directly
RMS = rms(y1-y2_interp)
Проблема:
Когда я повторно делаю выборку вектора x в переменной 'xq', , поскольку фракция длин не является целым числом itдает мне не ту длину для 'y2_interp', как 'y1'.Я не могу округлить его по той же проблеме.
Я попытался интерполировать, используя функцию «resample»:
y2_interp=resample(y2,length(y1),length(y2),n);
Но у меня проблема с алиасами, и я хочу по возможности избегать фильтров.И если n = 0 (без фильтров), я получаю некоторые проблемы с выборкой и среднеквадратичное отклонение.
Два вектора довольно длинные, поэтому мое смещение составляет всего 2 или 3 пункта.
Что я ищу:
Я хотел бы найти способ интерполировать один вектор, но иметь в качестве ссылки длину другого, а не точки, где я хочуинтерполировать.
Надеюсь, я объяснил это хорошо ... Возможно, у меня есть какое-то неправильное представление.Это больше, чем мне любопытно по поводу любой возможной идеи.
Спасибо !!