-
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 로 나눈다.일단 여기까지 코드와 관련 내용은 어느정도 살펴봤으므로, 계속 같은 거리로 계산되는 원인이 뭔지 확인하고 해결해보도록 하겠다.
'사이드 프로젝트' 카테고리의 다른 글
SONAR (Sound Of Navigation And Ranging, 음파탐지기) 구현 - 002 (0) 2026.04.12 SONAR (Sound Of Navigation And Ranging, 음파탐지기) 구현 - 001 (0) 2026.04.11