해결책
여러 가지 방법이 있으나, 이 문서에서는 상호 상관 함수를 사용하여 샘플 지연을 찾는 방법에 대해 다룰 것입니다.
신호
처리에서, 상호 상관은, 한 신호에 대해 다른 신호가 얼마만큼의 유사성을 갖는지의 척도를 나타냅니다. 상호 상관을 계산하면, 두 신호 사이의 지연을 결정하는 데 매우 유용합니다.
아래의 예제는, 완전히 동일한 신호이지만 하나의 신호에는 일련의 지연이 포함되어 있는 신호와의 상호 상관을 계산하여 샘플 지연을 결정하는 방법에 대해 보여주고 있습니다. 코드가 수행하는 동작에 대해서는 하기 내용을 참고하시기 바랍니다.
- 100개의 샘플로 된 신호를 생성
- 또 다른 신호를 만들고, 이 신호에는 사용자로부터 입력 받은 만큼의 지연을 추가
- 지연이 추가된 신호에서, 지연시킨 만큼 신호 뒤편의 샘플을 삭제하여 두 신호의 크기를 동일하게 조정
- 이 두 신호에 대해 상호 상관을 계산
- 상호 상관의 피크를 확인
- 상호 상관의 피크가 나타나는 x 값을 확인
- 피크에서 신호의 크기에서 1을 뺀 값을 빼서 샘플 지연을 결정. (상호 상관 수학 이론에 따른 수식)
두 신호 사이의 상호 상관을 계산 한 경우, 상호 상관 함수의 최대값 (또는 신호가 음의 상관 관계인 경우 최소값)은 신호가 가장 잘 정렬된 시점을 나타냅니다. 즉 두 신호 간의 시간 지연은, 상호 상관의 최대 값 또는 arg max의 인수에 의해 결정됩니다. 이것은 연속 신호일 경우에 해당합니다.
이산 시스템에서는 시간이 샘플로 대체되므로, 상호 상관 함수의 최대 값을 계산 한 후, (6) 상호 상관이 최대인 지점 (일반적으로 대역의 중간) 에 신호를 연관시켜야 합니다. 따라서 샘플 지연을 계산하려면 신호의 총 샘플 수에서 1을 뺀 값을 최대 위치로 빼야합니다. (7)