У меня есть две формы волны, которые связаны числовым коэффициентом. Мне нужно использовать оптимальное масштабирование (наименьшие квадраты) между двумя сигналами, чтобы вычислить этот коэффициент в Matlab. К сожалению, я понятия не имею, как это сделать. Две формы волны — это сейсмические сигналы, связанные скоростью сейсмических волн, которую я пытаюсь вычислить. Любые идеи? нужна дополнительная информация?
Оптимальное масштабирование методом наименьших квадратов
Ответы (2)
Назовите W1 и W2 двумя векторами. Чтобы это работало, они должны быть векторами-столбцами. Транспонируйте их, если они представляют собой строки, а не столбцы. Затем, если мы хотим найти такое значение k, что W1 = k*W2, просто используйте обратную косую черту.
k = W2\W1;
Обратная косая черта здесь дает вам оценку линейной регрессии (наименьших квадратов), как и требовалось. Конечно, это не касается случая неизвестного фазового сдвига.
betas = [ones(numel(W2),1),W2(:)] \ W1(:)
, после которого W1
приблизительно равно betas(1) + betas(2) * W2
;
- person shabbychef; 16.12.2009
один дрянной способ оценить линейный фактор, не имея дело со сдвигом фазы, состоит в том, чтобы вычислить отношение предполагаемых масштабов волн. самый простой способ - использовать стандартное отклонение:
k = std(W1) / std(W2);
если вы заботитесь о надежности, я бы заменил на MAD или IQR; MAD - это срединное абсолютное отклонение, которое вы можете (несколько неэффективно) «встроить» следующим образом:
MAD = @(x)(median(abs(bsxfun(@minus,x,median(x)))));
k = MAD(W1) / MAD(W2);
IQR - это межквартильный диапазон, который требует правильного вычисления квантиля. вы можете реализовать это неэффективно, используя sort
. Я оставляю это в качестве упражнения читателю.