Повторная выборка двух векторов с помощью interp1 или spline - PullRequest
0 голосов
/ 16 мая 2018

Ситуация :

Я пытался сравнить два вектора сигнала (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 пункта.

Что я ищу:

Я хотел бы найти способ интерполировать один вектор, но иметь в качестве ссылки длину другого, а не точки, где я хочуинтерполировать.

Надеюсь, я объяснил это хорошо ... Возможно, у меня есть какое-то неправильное представление.Это больше, чем мне любопытно по поводу любой возможной идеи.

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Недостаточно интерполировать y2, чтобы получить правильное количество образцов, образцы должны быть в местах, соответствующих выборкам y1.

Таким образом, вы хотите интерполировать y2 в x-координатах, где у вас есть выборки для y1, который задается как x1:

y2_interp = interp1(x2,y2,x1,'spline'); 
RMS = rms(y1-y2_interp)
0 голосов
/ 16 мая 2018

Функция, которую вы ищете здесь: linspace

Чтобы получить равномерно распределенный вектор xq с теми же конечными точками, что и x2, но с той же длиной, что и x1:

xq = (x2(1),x2(end),length(x1));

...