최근 noise.muabow.com을 운영하면서 가장 많이 손댄 부분은 입력단이었다.
결국 정리하면 문제는 세 가지였다.
- USB 마이크 자체 바닥 노이즈
- 라즈베리파이와의 연결 환경
Auto Gain Control이 조용한 구간 노이즈까지 끌어올리는 현상
이 글은 그 과정을 짧게 정리한 기록이다.
처음 보였던 문제
처음에는 단순히 녹음이 작다고 생각해서 gain을 올리거나 저장 필터를 조정했다.
그런데 실제로 들어보면:
- 소리는 크지 않은데
삐이혹은뜨-----같은 얇은 톤 노이즈가 크게 들리고- 조용한 구간도 괜히 더 지저분하게 들리는 문제가 있었다.
즉 문제는 단순한 볼륨 부족이 아니라 입력단 안정성에 가까웠다.
하드웨어 쪽에서 먼저 바꾼 것
소프트웨어 필터를 더 세게 거는 대신, 먼저 장비 쪽을 정리했다.
- 파워드 USB 허브 연결
- 라즈베리파이 본체와 마이크 물리 거리 확보
- 마이크 gain을 한 칸씩 올리고 내리면서 sweet spot 탐색
이 세 가지를 하고 나서야 바닥 노이즈가 눈에 띄게 줄기 시작했다.
결과적으로 운영값은 무작정 최대 gain이 아니라, 노이즈와 입력 크기가 같이 균형 잡히는 지점으로 잡았다.
진짜 원인이었던 AGC
가장 크게 흔들렸던 건 Auto Gain Control이었다.
문제는 이 값이 한 번 꺼두면 끝나는 게 아니라, 마이크 전원을 껐다 켜거나 USB가 다시 붙을 때 다시 on으로 돌아올 수 있다는 점이었다.
이게 켜져 있으면:
- 작은 생활소음도 크게 끌어올리고
- 조용한 구간의 바닥 노이즈도 같이 커지고
- 결과적으로 이벤트 저장본이 훨씬 거칠게 들린다.
즉 최근에 녹음이 갑자기 더 시끄럽게 느껴졌던 원인은 dB 보정이 아니라, 실제로 AGC가 다시 켜진 상태였다.
지금 적용한 방식
지금은 AGC를 두 단계로 막고 있다.
- 서비스 시작 전에 강제로
off - 서비스 실행 중에도 주기적으로 상태를 감시해서, 다시
on이 되면 자동으로off
즉 마이크 전원을 껐다 켜는 습관이 있어도 서비스가 다시 눌러주는 구조다.
개념만 적으면 아래와 비슷하다.
systemd ExecStartPre
-> amixer 'Auto Gain Control' off
Go runtime guard
-> 10초마다 AGC 상태 확인
-> on이면 다시 off
지금 얻은 것
아직 완전히 무음에 가까운 입력은 아니다.
그래도 지금은 이전과 비교하면:
- 마이크 off 상태에서 표시 dB가 거의 0 근처로 정리되고
- 마이크 on 상태에서도 바닥 노이즈가 훨씬 덜 거슬리고
- 실제로 남겨야 할 큰 소리가 더 안정적으로 들어오는 쪽으로 바뀌었다.
즉 필터를 과하게 걸어서 억지로 누르기보다, 입력단 자체를 정리하는 편이 훨씬 효과가 컸다.
정리
이번 작업에서 얻은 결론은 단순하다.
노이즈 문제는 후처리보다 입력단이 먼저다.
USB 마이크를 라즈베리파이에 붙여 계속 돌리는 구조라면,
- 전원 환경
- 물리 배치
- gain
- AGC 상태
이 네 가지를 먼저 잡는 편이 맞다.
그 다음에야 dB 보정이나 저장 필터 조정이 의미가 생긴다.
이번 글은 여기까지다.
다음에는 생활소음 이벤트가 실제로 어떤 시간대에 몰리고, 어떤 패턴으로 반복되는지 쪽을 따로 정리해볼 수 있을 것 같다.