обрезать результат автокорреляции в MATLAB

Я использую xcorr2(A,A) для вычисления автокорреляции. Но вывод больше, чем A. Как мне обрезать вывод, чтобы найти правильную матрицу автокорреляции? Например, моя матрица A имеет размер 51x51, а на выходе будет 101x101. Понятно, что центральная точка имеет максимальную корреляцию сама с собой, которая в данном случае находится в (26,26), но в новой карте автокорреляции она находится в (51,51). Мне нужен общий способ обрезки конечного вывода.


person Nicole    schedule 10.09.2012    source источник


Ответы (1)


В общем, вам нужно взять M точек от M/2 до 3M/2 в 1st измерении и N точек от N/2 до 3N/2 во 2nd > измерение, предполагая, что A является матрицей размера M на N:

[M, N] = size(A);
cor = xcorr2(A);  %# Shorter form of xcorr(A, A)
C = cor(ceil(M / 2):floor(3 * M / 2), ceil(N / 2):floor(3 * N / 2))

Здесь C будет усеченным выводом.

EDIT:
Для любых двух матриц A и B результатом xcorr2(A, B) будет (MA+MB-1 )×(NA+NB-1) матрица. Здесь, однако, вам придется решить для себя, какую часть вы хотите извлечь, если матрицы не одинакового размера. Если вы хотите извлечь значимую центральную часть, вы можете сделать это так:

[MA, NA] = size(A);
[MB, NB] = size(B);
v = [MA + MB, NA + NB] / 4; %# Just a temporary vector
cor = xcorr2(A, B);
C = cor(ceil(v(1)):floor(3 * v(1)), ceil(v(2)):floor(3 * v(2))
person Eitan T    schedule 11.09.2012
comment
@ Eitan: как насчет взаимной корреляции A и B? Я имею в виду, в случае, если A и B имеют разные размеры? - person Nicole; 11.09.2012