ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SONAR (Sound Of Navigation And Ranging, 음파탐지기) 구현 - 003
    사이드 프로젝트 2026. 4. 12. 16:40

    이전 글에서 얘기했듯 발생한 신호와 녹음된 신호를 이용해 물체와의 거리를 계산하기 위해서는 두 신호 간 상관관계를 먼저 계산해야 한다.

    corr = np.correlate(recording, signal, mode='full')

    은 신호와 녹음된 값들 사이의 correlation(상과관계) 를 계산하는 것이다. 

    signal = [s0, s1, s2]

    recording = [r0, r1, r2, r3, r4]

    일때, np.correlate(recording, signal, mode='full') 는 아래와 같이 계산된다.

    corr 인덱스 사용되는 recording 사용되는 signal corr 값
    0 r0 s2 r0 * s2
    1 r0, r1 s1, s2 r0s1 + r1s2
    2 r0, r1, r2 s0, s1, s2 r0s0 + r1s1 + r2s2
    3 r1, r2, r3 s0, s1, s2 r1s0 + r2s1 + r3s2
    4 r2, r3, r4 s0, s1, s2 r2s0 + r3s1 + r4s2
    5 r3, r4 s0, s1 r3s0 + r4s1
    6 r4 s0 r4 * s0

    corr의 길이는 len(recording) + len(signal) - 1 이 된다.

    여기서 인덱스 2 의 값( r0s0 + r1s1 + r2s2) 의 경우 signal과 recording 의 신호가 정확히 맞춰지고, 이 지점이 zero-lag 지점이 된다. 시간 지연은 이 zero-lag 지점에서 시간 포인트가 얼마나 떨어져 있는지 확인해야 하고, 그 과정이 코드
    lag = np.argmax(corr) - (len(signal) - 1) 
    에서 len(signal) - 1 을 빼줌으로써 구현되고 있다.

    그러고 나서 time_delay = lag / fs 를 통해 실제 지연 시간을 구하고,

    거리, 속력, 시간 공식을 이용해 물체와의 거리를 계산하면 된다.
    distance = (time_delay * 343) / 2
    계산된 time_delay 는 왕복 시간이므로 2 로 나눈다.

    일단 여기까지 코드와 관련 내용은 어느정도 살펴봤으므로, 계속 같은 거리로 계산되는 원인이 뭔지 확인하고 해결해보도록 하겠다.

Designed by Tistory.