Main Content

finddelay

신호 간의 지연 추정

설명

예제

d = finddelay(x,y)는 입력 신호 xy 간의 지연 d의 추정값을 반환합니다. xy에 대한 지연은 앞에 0을 추가하여 발생시킬 수 있습니다.

예제

d = finddelay(x,y,maxlag)maxlag를 사용하여 xy 간의 추정된 지연값을 구합니다.

예제

모두 축소

다음은 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

입력 인수

모두 축소

기준 입력값으로, 벡터 또는 행렬로 지정됩니다.

입력 신호로, 벡터 또는 행렬로 지정됩니다.

최대 상관 윈도우 크기로, 정수 스칼라 또는 정수 벡터로 지정됩니다. maxlag의 요소가 음수인 경우 절댓값으로 대체됩니다. maxlag의 요소가 정수 값이 아니거나 복소수, Inf 또는 NaN이면 finddelay는 오류를 반환합니다.

출력 인수

모두 축소

입력 신호 간 지연으로, 정수 스칼라 또는 벡터로 반환됩니다. yx에 비해 지연되면 d는 양수입니다. yx에 비해 선행하면 d는 음수입니다. 주기적 신호에서처럼 지연이 여러 번 발생할 가능성이 있는 경우에는 절댓값이 가장 작은 지연이 반환됩니다. 절댓값이 같은 양수 지연과 음수 지연이 모두 다 있는 경우에는 양수 지연이 반환됩니다.

x가 크기가 MX×NX인 행렬이고(MX > 1, NX > 1) y가 크기가 MY×NY인 행렬일 경우(MY > 1, NY > 1), finddelay 함수는 x의 각 열과 y의 해당 열 간의 추정된 지연값으로 구성된 행 벡터 d를 반환합니다. 이 사용법에서는 xy의 열 개수가 동일해야 합니다(NX = NY).

  • xy는 어느 한 쪽이 다른 쪽의 지연된 복제 신호일 필요는 없습니다. finddelay(x,y)가 상호상관을 통해 지연 추정값을 반환하기 때문입니다. 그러나 이 추정된 지연값은 지연된 xy 간에 충분한 상관관계가 있을 때만 유용합니다.

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

    maxlagXYD
    정수 값 스칼라행 벡터나 열 벡터 또는 행렬행 벡터나 열 벡터 또는 행렬maxlag ~ maxlag 지연값 범위에서 X의 열과 Y의 열의 상호상관
    정수 값 행 벡터 또는 열 벡터LX ≥ 1 길이의 행 벡터 또는 열 벡터MY×NY 크기의 행렬(MY > 1, NY > 1)maxlag(j) ~ maxlag(j) 지연값 범위(j = 1, …, NY)에서 XY의 j 열의 상호상관
    정수 값 행 벡터 또는 열 벡터MX×NX 크기의 행렬(MX > 1, NX > 1)LY ≥ 1 길이의 행 벡터 또는 열 벡터maxlag(j) ~ maxlag(j) 지연값 범위(j = 1, …, NX)에서 X의 j 열과 Y의 상호상관
    정수 값 행 벡터 또는 열 벡터MX×NX 크기의 행렬(MX > 1, NX > 1)MY-xNY 크기의 행렬(MY > 1, NY = NX > 1)maxlag(j) ~ maxlag(j) 지연값 범위(j = 1, …, NY)에서 X의 j 열과 Y의 j 열의 상호상관

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

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

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

    xm = [1 1 1 1;
          0 0 0 0];
    

알고리즘

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

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

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

확장 기능

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

참고 항목

| | | |