이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

finddelay

신호 간의 지연 추정

구문

D = finddelay(X,Y)
D = finddelay(...,maxlag)

설명

D = finddelay(X,Y)XY 간의 지연 추정값 D를 반환합니다. 여기서 XY는 행 벡터이거나 열 벡터이며 X는 기준 벡터로 사용됩니다. YX에 비해 지연되면 D는 양수입니다. YX에 비해 선행하면 D는 음수입니다. XY에 대한 지연은 앞에 0을 추가하여 발생시킬 수 있습니다.

XY는 서로 완벽하게 동일한 지연 복사본일 필요가 없습니다. finddelay(X,Y)가 상호상관을 통해 지연 추정값을 반환하기 때문입니다. 그러나 이 지연 추정값은 지연된 XY 간에 충분한 상관관계가 있을 때만 유용합니다. 또한 주기적 신호에서처럼 지연이 여러 번 발생할 가능성이 있는 경우에는 절댓값이 가장 작은 지연이 반환됩니다. 절댓값이 같은 양수 지연과 음수 지연이 모두 다 있는 경우에는 양수 지연이 반환됩니다.

D = finddelay(X,Y)X의 각 열과 이에 대응하는 Y의 열 간의 지연 추정값으로 구성되는, 행 벡터 D를 반환합니다. 여기서 X는 MXxNX 크기의 행렬(MX > 1 및 NX > 1)이고 Y는 MYxNY 크기의 행렬(MY > 1 및 NY > 1)입니다. 이 구문을 사용하려면 X의 열 개수가 Y의 열 개수와 동일해야 합니다(즉, NX = NY).

D = finddelay(...,maxlag)maxlagXY 간의 지연 추정값을 찾는 데 사용되는 최대 상관관계 윈도우 크기로 사용합니다. maxlag 사용에 대한 설명은 아래 표에 나와 있습니다.

기본적으로 maxlag는 두 개의 벡터 입력값을 갖는 경우 max(LX,LY) – 1(LX와 LY는 각각 XY의 길이임)과 같고, 두 개의 행렬 입력값을 갖는 경우 max(MX,MY) – 1과 같으며, 하나의 벡터 입력값과 하나의 행렬 입력값을 갖는 경우 max(LX, MY) – 1 또는 max(MX, LY) – 1과 같습니다. maxlag의 값이 []로 입력된 경우, 디폴트 값으로 대체됩니다. maxlag의 요소가 음수인 경우 절댓값으로 대체됩니다. maxlag의 요소가 정수 값이 아니거나 복소수, Inf 또는 NaN이면 finddelay는 오류를 반환합니다.

지연 추정값으로 구성된 벡터 D를 계산하는 방법은 다음 표에 나와 있는 것처럼 X, Y, maxlag에 따라 달라집니다.

maxlagXYD 계산 방법
정수 값 스칼라행 벡터나 열 벡터 또는 행렬행 벡터나 열 벡터 또는 행렬지연값 범위에서 X의 열과 Y의 열에 대해 상호상관 수행 – maxlag:maxlag.
정수 값 행 벡터 또는 열 벡터LX ≥ 1 길이의 행 벡터 또는 열 벡터MYxNY 크기의 행렬(MY > 1, NY > 1)지연값 범위에서 XY의 j 열에 대해 상호상관 수행 – maxlag(j):maxlag(j)(j = 1:NY인 경우)
정수 값 행 벡터 또는 열 벡터MXxNX 크기의 행렬(MX > 1, NX > 1)LY ≥ 1 길이의 행 벡터 또는 열 벡터지연값 범위에서 X의 j 열과 Y에 대해 상호상관 수행 – maxlag(j):maxlag(j)(j = 1:NX인 경우)
정수 값 행 벡터 또는 열 벡터MXxNX 크기의 행렬(MX > 1, NX > 1)MY-xNY 크기의 행렬(MY > 1, NY = NX > 1)지연값 범위에서 X의 j 열과 Y의 j 열에 대해 상호상관 수행 – maxlag(j):maxlag(j)(j = 1:NY인 경우)

X를 다중 채널로 처리

길이가 LX인 행 벡터 X를 서로 다른 LX개의 채널로 구성된 하나의 샘플로 처리하려면, 행렬로 표시되도록 X에 0으로 구성된 행을 하나 이상 추가해야 합니다. 그러면 X의 각 열이 채널로 간주됩니다.

예를 들어 X = [1 1 1 1]은 4개의 샘플로 구성된 단일 채널로 간주됩니다. 이를 각 채널이 한 개 샘플로 구성되는 4개의 다른 채널로 처리하려면 새 행렬 Xm을 정의하십시오.

Xm = [1 1 1 1;
      0 0 0 0];

Xm의 각 열은 하나의 채널에 대응하고, 이 채널은 각각 샘플 10을 포함합니다.

예제

모두 축소

다음은 YX에 비해 2개의 샘플만큼 지연된 경우를 보여줍니다.

X = [1 2 3];
Y = [0 0 1 2 3];
D = finddelay(X,Y)
D = 2

다음은 YX에 비해 3개 샘플만큼 선행한 경우를 보여줍니다.

X = [0 0 0 1 2 3 0 0]';
Y = [1 2 3 0]';
D = finddelay(X,Y)
D = -3

다음은 YX와 나란하지만 잡음이 발생한 경우를 보여줍니다.

X = [0 0 1 2 3 0];
Y = [0.02 0.12 1.08 2.21 2.95 -0.09];
D = finddelay(X,Y)
D = 0

YX 신호 패턴이 반복되는 형태가 되는 경우 가능한 가장 작은 지연이 반환됩니다.

X = [0 1 2 3];
Y = [1 2 3 0 0 0 0 1 2 3 0 0];
D = finddelay(X,Y)
D = -1

maxlag가 스칼라(즉, 최대 윈도우 크기가 다 동일함)로 지정됩니다.

X = [0 1 2];
Y = [0 1 0 0;
     1 2 0 0;
     2 0 1 0;
     0 0 2 1];
maxlag = 3;
D = finddelay(X,Y,maxlag)
D = 1×4

     0    -1     1     1

XY를 같은 크기로 지정합니다. finddelay는 열 단위로 동작을 수행합니다.

X = [0 1 0 0;
     1 2 0 0;
     2 0 1 0;
     1 0 2 1;
     0 0 0 2];
Y = [0 0 1 0;
     1 1 2 0;
     2 2 0 1;
     1 0 0 2;
     0 0 0 0];
D = finddelay(X,Y)
D = 1×4

     0     1    -2    -1

계산을 반복하되, 이번에는 0으로 구성된 추가 행을 Y의 두 번째 행으로 추가합니다.

Y = [0 0 1 0;
     0 0 0 0;
     1 1 2 0;
     2 2 0 1;
     1 0 0 2;
     0 0 0 0];
D = finddelay(X,Y)
D = 1×4

     1     2    -1     0

두 개의 다중채널 신호 XY를 생성합니다. 이때 Y의 각 채널에 X의 각 채널에 대한 동일한 지연 복사본이 포함되도록 합니다.

X = [1 3 2 0 0 0 0 0;
     0 0 0 0 0 1 3 2]';

Y = [0 0 0 1 3 2;
     1 3 2 0 0 0]';

열 단위로 지연을 계산합니다. 각 채널에 대해 최대 상관관계 윈도우 크기를 8로 설정합니다.

maxlag = [8 8];
D = finddelay(X,Y,maxlag)
D = 1×2

     3    -5

상관관계 윈도우 크기를 첫 번째 채널에 대해 3으로, 두 번째 채널에 대해 5로 줄입니다.

maxlag = [3 5];
D = finddelay(X,Y,maxlag)
D = 1×2

     3    -5

상관관계 윈도우 크기를 첫 번째 채널에 대해 5로 늘리고, 두 번째 채널에 대해 3으로 줄입니다.

maxlag = [5 3];
D = finddelay(X,Y,maxlag)
D = 1×2

     3    -3

알고리즘

finddelay 함수는 xcorr 함수를 사용하여, 사용자가 지정한 가능한 모든 지연값에서 각 신호 쌍 간의 상호상관을 확인합니다. 그런 다음 각 신호 쌍 간의 정규화된 상호상관을 계산합니다. 추정된 지연값은 정규화된 상호상관의 절댓값이 가장 큰 지연값의 음수로 지정됩니다.

두 개 이상의 지연값에서 절댓값이 가장 큰 상호상관이 발생하는 경우(예: 주기적 신호의 경우) 이러한 지연값 중 절댓값이 가장 작은 지연값의 음수가 선택됩니다.

신호 쌍은 서로 정확하게 동일한 지연 복사본일 필요가 없습니다. 그러나 추정된 지연값은 적어도 하나의 지연된 신호 쌍 사이에 충분한 상관관계가 있을 때만 유용합니다.

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

참고 항목

| | | |