Вопрос о кросс-корреляции Matlab и коэффициенте корреляции

Я пишу программу на С++, но использую данные из Matlab с использованием кросс-корреляции. Я понимаю, что когда я сопоставляю два набора данных, это дает мне один номер коэффициента корреляции, указывающий, связаны ли они. Но я хочу использовать взаимную корреляцию для ряда данных. Когда я запускаю взаимную корреляцию в Matlab, она дает мне много данных, и при построении график выглядит как треугольник ... Я понимаю, что корреляция должна быть где-то между +/- 1, но данные к вершине треугольника не t поднимаются одновременно и т. д. Есть ли у меня путаница с тем, что дает мне взаимная корреляция, или данные, которые взаимная корреляция дает мне, на самом деле являются коэффициентами корреляции, например, для каждой точки s (t), p (t)? Любая помощь с разъяснением приветствуется.

Редактировать 1 (после ответа Фонона)

Мой главный вопрос: являются ли данные, которые я получаю, когда я перекрестно коррелирую 2 ряда данных, коэффициентом корреляции для каждой точки. Например, (0,10) и (0,8); Являются ли данные, которые я получаю, коэффициентом корреляции этих двух графиков при x = 0?


person Community    schedule 08.06.2011    source источник
comment
Как вы вычисляете корреляцию?   -  person Oliver Charlesworth    schedule 08.06.2011
comment
xcorr, но мой главный вопрос: это данные, которые я получаю, когда я перекрестно коррелирую 2 ряда данных с коэффициентом корреляции для каждой точки. Например, (0,10) и (0,8); Являются ли данные, которые я получаю, коэффициентом корреляции этих двух графиков при x = 0?   -  person    schedule 08.06.2011


Ответы (3)


В Matlab xcorr(x,x) дает автокорреляцию сигнала x. Он не масштабирован, это просто вектор внутренних произведений сигнала со сдвинутыми версиями самого себя. Чтобы масштабировать его, используйте xcorr(x,x,'coeff'). Эта команда будет масштабировать вашу автокорреляцию по энергии сигнала (другими словами, она будет делить каждый коэффициент на значение коэффициента при нулевой задержке). Обратите внимание, что при выполнении взаимной корреляции, xcorr(x,y'coeff'), вы не получите значение 1 и нулевое запаздывание, поскольку масштабирование выполняется по-другому. Это будет только 1, если вы коррелируете сигнал с самим собой (я хочу, чтобы математические формулы, поддерживаемые SO, чтобы я мог записать их для вас).

person Phonon    schedule 08.06.2011
comment
Это имеет смысл, но мне нужна взаимная корреляция по 2 наборам данных, а не автокорреляция, которая является взаимной корреляцией по одному набору данных и самому себе или чему-то еще. - person ; 08.06.2011
comment
Используйте 'coeff', он масштабирует данные. Все, что я пытался сказать, это то, что вы получите ровно 1 при нулевой задержке, только если вы сопоставите сигнал с самим собой. - person Phonon; 08.06.2011
comment
Фонон. Вы понимаете мой пересмотренный вопрос, приведенный выше, и ваш ответ по-прежнему актуален? - person ; 08.06.2011
comment
Я не думаю, что понимаю это хорошо. Это практически неразборчиво. - person Phonon; 08.06.2011
comment
Коэффициенты корреляции не рассчитываются для каждой точки. Они рассчитываются для каждой единичной смены. - person Phonon; 08.06.2011

Вероятно, вам нужен corrcoef, а не xcorr.

person Oliver Charlesworth    schedule 08.06.2011
comment
@ Tyler31: Непонятно, что ты имеешь в виду. Как правило, коэффициент корреляции — это одно значение для двух наборов данных, описывающее, существует ли между ними базовая линейная связь. Неясно, что будет означать выполнение corrcoeff для каждой точки. - person Oliver Charlesworth; 08.06.2011

Чтобы было понятно несколько понятий.

  1. Взаимная корреляция и взаимная ковариация. Основное отличие состоит в том, что кросс-ковариация нормализует данные путем вычитания среднего значения.

  2. взаимная ковариация против нормализованной взаимной ковариации. Последний делится на стандартное отклонение входных данных.

  3. нормализованная взаимная ковариация и коэффициент корреляции. Последний является частным случаем первого при задержке = 0.

person Albert Chen    schedule 14.02.2020