← 뒤로가기

USB 마이크 노이즈와 AGC 문제를 정리한 기록

라즈베리파이 생활소음 기록 시스템에서 USB 마이크의 바닥 노이즈와 Auto Gain Control 문제를 어떻게 다뤘는지 정리했다.

최근 noise.muabow.com을 운영하면서 가장 많이 손댄 부분은 입력단이었다.

결국 정리하면 문제는 세 가지였다.

  • USB 마이크 자체 바닥 노이즈
  • 라즈베리파이와의 연결 환경
  • Auto Gain Control이 조용한 구간 노이즈까지 끌어올리는 현상

이 글은 그 과정을 짧게 정리한 기록이다.

처음 보였던 문제

처음에는 단순히 녹음이 작다고 생각해서 gain을 올리거나 저장 필터를 조정했다.

그런데 실제로 들어보면:

  • 소리는 크지 않은데
  • 삐이 혹은 뜨----- 같은 얇은 톤 노이즈가 크게 들리고
  • 조용한 구간도 괜히 더 지저분하게 들리는 문제가 있었다.

즉 문제는 단순한 볼륨 부족이 아니라 입력단 안정성에 가까웠다.

하드웨어 쪽에서 먼저 바꾼 것

소프트웨어 필터를 더 세게 거는 대신, 먼저 장비 쪽을 정리했다.

  1. 파워드 USB 허브 연결
  2. 라즈베리파이 본체와 마이크 물리 거리 확보
  3. 마이크 gain을 한 칸씩 올리고 내리면서 sweet spot 탐색

이 세 가지를 하고 나서야 바닥 노이즈가 눈에 띄게 줄기 시작했다.

결과적으로 운영값은 무작정 최대 gain이 아니라, 노이즈와 입력 크기가 같이 균형 잡히는 지점으로 잡았다.

진짜 원인이었던 AGC

가장 크게 흔들렸던 건 Auto Gain Control이었다.

문제는 이 값이 한 번 꺼두면 끝나는 게 아니라, 마이크 전원을 껐다 켜거나 USB가 다시 붙을 때 다시 on으로 돌아올 수 있다는 점이었다.

이게 켜져 있으면:

  • 작은 생활소음도 크게 끌어올리고
  • 조용한 구간의 바닥 노이즈도 같이 커지고
  • 결과적으로 이벤트 저장본이 훨씬 거칠게 들린다.

즉 최근에 녹음이 갑자기 더 시끄럽게 느껴졌던 원인은 dB 보정이 아니라, 실제로 AGC가 다시 켜진 상태였다.

지금 적용한 방식

지금은 AGC를 두 단계로 막고 있다.

  1. 서비스 시작 전에 강제로 off
  2. 서비스 실행 중에도 주기적으로 상태를 감시해서, 다시 on이 되면 자동으로 off

즉 마이크 전원을 껐다 켜는 습관이 있어도 서비스가 다시 눌러주는 구조다.

개념만 적으면 아래와 비슷하다.

systemd ExecStartPre
  -> amixer 'Auto Gain Control' off

Go runtime guard
  -> 10초마다 AGC 상태 확인
  -> on이면 다시 off

지금 얻은 것

아직 완전히 무음에 가까운 입력은 아니다.

그래도 지금은 이전과 비교하면:

  • 마이크 off 상태에서 표시 dB가 거의 0 근처로 정리되고
  • 마이크 on 상태에서도 바닥 노이즈가 훨씬 덜 거슬리고
  • 실제로 남겨야 할 큰 소리가 더 안정적으로 들어오는 쪽으로 바뀌었다.

즉 필터를 과하게 걸어서 억지로 누르기보다, 입력단 자체를 정리하는 편이 훨씬 효과가 컸다.

정리

이번 작업에서 얻은 결론은 단순하다.

노이즈 문제는 후처리보다 입력단이 먼저다.

USB 마이크를 라즈베리파이에 붙여 계속 돌리는 구조라면,

  • 전원 환경
  • 물리 배치
  • gain
  • AGC 상태

이 네 가지를 먼저 잡는 편이 맞다.

그 다음에야 dB 보정이나 저장 필터 조정이 의미가 생긴다.

이번 글은 여기까지다.
다음에는 생활소음 이벤트가 실제로 어떤 시간대에 몰리고, 어떤 패턴으로 반복되는지 쪽을 따로 정리해볼 수 있을 것 같다.

이어서 보기