Main Content

alignsignals

더 빠른 신호를 지연시켜 두 신호 정렬

설명

예제

[xa,ya] = alignsignals(x,y)는 두 입력 신호 xy 간의 지연 D를 추정하고, 정렬된 신호 xaya를 반환합니다. 이 함수는 상호상관을 사용하여 지연을 추정합니다.

  • yx보다 지연된 경우 D는 양수가 되고 xD개 샘플만큼 지연됩니다.

  • yx보다 선행한 경우 D는 음수가 되고 y는 –D개 샘플만큼 지연됩니다.

입력 신호는 어느 한 쪽이 다른 쪽의 지연된 복제 신호일 필요는 없습니다. 그러나 두 신호 간에 충분한 상관관계가 있는 경우에만 신호를 정확히 정렬할 수 있습니다. 공분산과 상관의 추정에 대한 자세한 내용은 [1] 항목을 참조하십시오.

예제

[xa,ya] = alignsignals(x,y,Name=Value)는 하나 이상의 이름-값 인수를 사용하여 옵션을 지정해서 추정 방법과 입력 신호를 자르는 옵션을 포함시킬 수 있습니다. 예를 들어, 각 신호에서 최대 피크 위치를 기준으로 지연을 추정하려면 Method"maxpeak"로 설정하십시오.

예제

[xa,ya,D] = alignsignals(___)는 추정된 지연값 D를 반환합니다. 위에 열거된 모든 입력 구문에서 사용할 수 있습니다.

예제

모두 축소

두 신호 XY를 생성합니다. X가 앞에 3개의 0이 있고 뒤에 0이 하나 더 있다는 점을 제외하면 XY는 완전히 동일합니다. 두 신호를 정렬합니다.

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

[Xa,Ya] = alignsignals(X,Y)
Xa = 1×8

     0     0     0     1     2     3     0     0

Ya = 1×7

     0     0     0     1     2     3     0

두 신호 XY를 생성합니다. Y가 2개 샘플만큼 지연된다는 점을 제외하면 YX는 완전히 동일합니다. 두 신호를 정렬합니다.

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

[Xa,Ya,D] = alignsignals(X,Y)
Xa = 1×5

     0     0     1     2     3

Ya = 1×5

     0     0     1     2     3

D = 2

최대 윈도우 크기 1을 사용하여 신호를 정렬합니다.

maxlag = 1;

[Xa,Ya,D] = alignsignals(X,Y,Method="xcorr",MaxLag=maxlag)
Xa = 1×4

     0     1     2     3

Ya = 1×5

     0     0     1     2     3

D = 1

이진 파형을 나타내는 두 개의 신호를 생성합니다. 이 신호는 20초 동안 50Hz로 샘플링됩니다. 첫 번째 신호의 경우, 측정을 시작하고 13초 후에 천이가 발생합니다. 두 번째 신호의 경우, 측정을 시작하고 5초 후에 천이가 발생합니다. 이 두 신호는 진폭이 서로 다르며, 분산이 다른 백색 가우스 잡음에 묻혀 있습니다. 신호를 플로팅합니다.

t = linspace(0,20,1001)';
e1 = 1.4*tanh(t-13)+randn(size(t))/3;
e2 = tanh(3*(t-5))+randn(size(t))/5;

plot(t,e1,t,e2)
xlabel("Seconds")
ylabel("Amplitude")

Figure contains an axes object. The axes object with xlabel Seconds, ylabel Amplitude contains 2 objects of type line.

천이 시간이 일치하도록 신호를 정렬합니다. 상관 기반의 방법은 이 유형의 신호를 적절하게 정렬할 수 없습니다.

[y1,y2] = alignsignals(e1,e2);

plot(y1)
xlabel("Samples")
ylabel("Amplitude")
hold on
plot(y2)
hold off

Figure contains an axes object. The axes object with xlabel Samples, ylabel Amplitude contains 2 objects of type line.

risetime 방법을 사용하여 신호를 정렬합니다.

[y1,y2] = alignsignals(e1,e2,Method="risetime");

plot(y1)
xlabel("Samples")
ylabel("Amplitude")
hold on
plot(y2)
hold off

Figure contains an axes object. The axes object with xlabel Samples, ylabel Amplitude contains 2 objects of type line.

두 신호 XY를 생성합니다. Y가 앞에 2개의 0이 있다는 점을 제외하면 XY는 완전히 동일합니다. 두 신호를 정렬하고 자르기 옵션을 true로 설정합니다. 이 옵션은 X의 길이를 유지합니다.

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

[Xa,Ya,D] = alignsignals(X,Y,Truncate=true)
Xa = 1×3

     0     0     1

Ya = 1×5

     0     0     1     2     3

D = 2

자르기 옵션이 X의 원래 데이터를 모두 자를 경우에는 함수가 경고를 발생시킵니다.

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

[Xa,Ya,D] = alignsignals(X,Y,Truncate=true)
Warning: All original data in the first input X has been truncated because the length of X is smaller than the estimated delay D. To avoid truncating this data do not use the "truncate" option.
Xa = 1×3

     0     0     0

Ya = 1×7

     0     0     0     0     1     2     3

D = 4

입력 인수

모두 축소

첫 번째 입력 신호로, 길이가 Lx인 숫자형 벡터로 지정됩니다.

예: [1 2 3]

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
복소수 지원 여부:

두 번째 입력 신호로, 길이가 Ly인 숫자형 벡터로 지정됩니다.

예: [0 0 1 2 3]

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
복소수 지원 여부:

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

예: alignsignals(X,Y,Method="npeak",PeakNum=4)는 각 신호에서 네 번째 피크 위치를 기준으로 XY를 정렬합니다.

신호 간의 지연을 추정하는 방법으로, "xcorr", "maxpeak", "npeak" 또는 "risetime"으로 지정됩니다. 지정된 Method에 따라 이름-값 인수를 추가로 지정할 수 있습니다.

  • "xcorr" — 상호상관을 사용하여 지연을 추정합니다. Method"xcorr"로 지정할 경우 MaxLag도 지정할 수 있습니다.

  • "maxpeak" — 각 신호에서 최고 피크 위치를 사용하여 지연을 추정합니다. Method"maxpeak"로 지정할 경우 선택적으로 MinPeakProminenceMinPeakHeight를 지정할 수 있습니다.

  • "npeak" — 각 신호에서 n번째 피크의 위치를 사용하여 지연을 추정합니다. Method"npeak"로 지정할 경우 선택적으로 PeakNum, MinPeakProminenceMinPeakHeight를 지정할 수 있습니다.

  • "risetime" — 각 신호에서 상승 에지의 위치를 사용하여 지연을 추정합니다. 함수는 StateLevels에 지정된 값을 사용하여 상승 에지를 찾습니다.

예: Method="npeak",PeakNum=3

신호 간의 지연을 추정하는 데 사용되는 최대 윈도우 크기로, 정수 스칼라로 지정됩니다. 기본적으로 MaxLagmax(Lx,Ly)–1입니다. 여기서 Lxx의 길이이고 Lyy의 길이입니다. MaxLag가 음수이면 함수는 절댓값을 사용합니다.

이 인수는 Method"xcorr"로 설정된 경우에만 적용됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

신호를 정렬하는 데 사용되는 피크 번호로, 양의 정수로 지정됩니다. 이 인수는 Method"npeak"로 지정하는 경우에만 적용됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

신호의 피크를 식별하는 데 사용되는 최소 피크 돌출부로, 음이 아닌 실수형 스칼라로 지정됩니다. MinPeakProminence를 지정하면 함수는 상대적 중요도가 최소한 지정된 값에 대응하는 피크를 찾습니다. 자세한 내용은 findpeaks돌출부 항목을 참조하십시오.

이 인수는 Method"npeak" 또는 "maxpeak"로 지정하는 경우에만 적용됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

신호의 피크를 식별하는 데 사용되는 최소 피크 높이로, 실수형 스칼라로 지정됩니다. MinPeakHeight를 지정하면 함수는 지정된 값보다 큰 높이를 갖는 피크를 찾습니다. 자세한 내용은 findpeaks 항목을 참조하십시오.

이 인수는 Method"npeak" 또는 "maxpeak"로 지정하는 경우에만 적용됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

상태 레벨로, 요소를 2개 가진 실수 값 행 벡터로 지정됩니다. 첫 번째 요소는 입력 신호의 하부 상태 레벨에 대응되고, 두 번째 요소는 입력 신호의 상부 상태 레벨에 대응됩니다. StateLevels를 지정하지 않을 경우 함수는 히스토그램 방법으로 입력 파형의 상태 레벨을 추정합니다. 자세한 내용은 risetime 항목을 참조하십시오.

이 인수는 Method"risetime"으로 지정하는 경우에만 적용됩니다.

예: Method="risetime",StateLevels=[0.5 2]

데이터형: double

입력 신호를 자르는 옵션으로, 숫자형 또는 논리값 1(true) 또는 0(false)으로 지정됩니다. Truncatetrue로 지정할 경우 xaya의 길이는 각각 xy의 길이와 같습니다.

  • 추정된 지연값 D가 양수이면 함수는 D개의 0을 x 앞에 추가하고 x의 마지막 D개 샘플을 자릅니다.

  • D가 음수이면 함수는 –D개의 0을 y 앞에 추가하고 y의 마지막 D개 샘플을 자릅니다.

  • D ≥ Lx이면 xa는 Lx개의 0으로 구성되고 x의 모든 샘플은 손실됩니다. –D ≥ Ly이면 ya는 Ly개의 0으로 구성되고 y의 모든 샘플은 손실됩니다.

출력 인수

모두 축소

정렬된 첫 번째 신호로, 두 번째 출력 인수 ya에 맞춰 정렬된 숫자형 벡터로 반환됩니다.

  • 입력 인수 x가 행 벡터이면 xa도 행 벡터가 됩니다.

  • 입력 인수 x가 열 벡터이면 xa도 열 벡터가 됩니다.

Truncatetrue로 지정할 경우 추정된 지연값 D가 양수이면, xa는 입력 신호 x에서 D개의 0이 앞에 추가되고 마지막 D개의 샘플이 잘린 것과 동일합니다.

정렬된 두 번째 신호로, 첫 번째 출력 인수 Xa에 맞춰 정렬된 숫자형 벡터로 반환됩니다.

  • 입력 인수 y가 행 벡터이면 ya도 행 벡터가 됩니다.

  • 입력 인수 y가 열 벡터이면 ya도 열 벡터가 됩니다.

Truncatetrue로 지정할 경우 추정된 지연값 D가 음수이면, ya는 입력 신호 y에서 –D개의 0이 앞에 추가되고 마지막 –D개의 샘플이 잘린 것과 동일합니다.

입력 신호 간의 추정된 지연값으로, 정수로 반환됩니다. 이 정수는 두 입력 신호 xy 간의 오프셋에 해당하는 샘플 개수를 나타냅니다.

  • yx보다 지연된 경우 D는 양수가 되고 xD개 샘플만큼 지연됩니다.

  • yx보다 선행한 경우 D는 음수가 되고 y는 –D개 샘플만큼 지연됩니다.

  • xy가 이미 정렬된 상태이면 D는 0이 되고 xy 모두 지연되지 않습니다.

입력 인수 MaxLag의 값을 지정할 경우, DMaxLag보다 작거나 같습니다.

참고 문헌

[1] Orfanidis, Sophocles J. Optimum Signal Processing. An Introduction. 2nd Ed. Englewood Cliffs, NJ: Prentice-Hall, 1996.

확장 기능

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

버전 내역

R2019a에 개발됨

모두 확장