ESP32/RF 통신을 위한
오디오 코덱

제한된 무선 통신 대역폭 내에서 실시간 오디오 전송을 구현하기 위한 페이로드 최적화

Opus Speex CC1101 ESP32-S3

코덱이란?

  • 디지털 오디오 데이터를 압축하고 압축 해제를 하는 알고리즘을 구현하는 컴퓨터 프로그램.
  • 고품질의 오디오 신호를 품질을 유지하면서 최소한의 수의 비트로 표현.
음성 압축 코덱 비교 출처: Wikimedia Commons

주요 용어 설명 (샘플링 레이트)

  • 샘플링 레이트: 소리를 쪼개는 횟수(해상도)
    • 마이크가 소리를 몇 번 읽어올지 결정
    • 예) 8kHz = 초당 8,000번
샘플링 레이트 예시 출처: Killander Music Records

주요 용어 설명 (오디오 대역폭)

  • 오디오 대역폭: 소리의 높낮이 범위(고음, 저음)

협대역 (Narrowband)

8kHz 샘플링
고음을 잘라내 무전기처럼 먹먹한 소리

광대역 (Wideband)

16kHz 샘플링
ㅅ, ㅍ과 같은 자음 구별이 명확한 맑은 소리

오디오 대역폭 예시 출처: ZipDX

주요 용어 설명 (비트레이트)

  • 비트레이트: 압축 후 1초 동안 전송할 데이터 크기
    • 16kbps = 초당 약 2KB 전송

수음 및 압축 과정

STEP 1 — 입력

마이크에서 16kHz (샘플링 레이트)로 원음 데이터를 수음.

원본 데이터는 초당 약 256kbps 발생.

STEP 2 — 판단

대역폭(광대역/협대역) 결정.

코덱이 데이터를 넘겨받아, 사람의 목소리를 전달하는 데 불필요한 고주파 대역을 잘라냄.

STEP 3 — 압축

대역폭이 제한된 신호를 코덱의 내부 압축 알고리즘을 통해 손실 압축을 처리.

지정한 타겟 비트레이트 상한선에 맞춰 최종 패킷이 생성됨.

주요 코덱 비교 — Opus vs Speex

코덱 및 모드 샘플링 레이트 표준 비트레이트 초당 페이로드 트래픽 인코딩 효율성 (품질 대비 대역폭) ESP32-S3 CPU 오버헤드
Opus (Narrowband) 8kHz6 ~ 8 kbps~1,000 Byte/s 최상 (낮은 대역폭에서 높은 명료도 유지)보통
Speex (Narrowband) 8kHz8 kbps (Q4 기준)~1,000 Byte/s 낮음 (고주파 왜곡, 기계음 유입)최하
Opus (Wideband) 16kHz16 kbps~2,000 Byte/s 우수 (하이브리드 모드로 압축률 극대화)높음
Speex (Wideband) 16kHz16.8 kbps (Q4 기준)~2,100 Byte/s 보통 (동일 비트레이트 대비 Opus보다 음질 저하)낮음

Opus 패킷 손실 복원 (PLC & FEC)

Packet Loss Concealment (PLC)

데이터 포인터에 NULL 전달 시 PLC 활성화.

직전 프레임 정보를 기반으로 손실 구간 파형을 예측하여 PCM 출력을 생성.

In-Band FEC

현재 패킷에 이전 프레임의 저비트레이트 복사본을 삽입하여 전송.

N번 패킷 손실 시 N+1번 수신 후 decode_fec=1로 선행 프레임 복원. SILK 모드에서만 동작.

* SILK는 Opus의 음성 전용 인코딩 모드.

Speex 패킷 손실 복원

Packet Loss Concealment (PLC)

speex_decode_int(state, NULL, pcm_out) 호출로 PLC 활성화.

직전 프레임 상태를 기반으로 손실 구간 파형을 생성하여 PCM 버퍼를 채움.

시나리오 분석 — RF 대역폭 & 음질 비교 청취

그룹코덱비트레이트 RF 점유율 (A)CPU 점유율상태
🎵 원본 (Original)
Group 1 · 8kHz (Narrowband)
Opus 6kbps
Speex Q2
Group 2 · 16kHz (Wideband)
Opus 12kbps
Speex Q4
Group 3 · 16kHz High
Opus 20kbps
Speex Q6
Group 4 · 고속 전용 (Fullband)
Opus 48kHz 40kbps
Speex 32kHz Q9
Group 5 · Voice 최적화 (8kbps)
Opus 8kbps Speech
Speex Q2 Voice
Group 6 · Voice 최적화 (12kbps)
Opus 12kbps Speech
Speex Q4 Voice

결론 및 향후 계획

Opus 코덱의 한계 (고음질 / 고부하)
  • 압축 품질은 우수하나 ESP32의 CPU 연산량을 크게 점유함.
  • 데이터 크기가 커서 RF 송수신 오버헤드가 발생하며, 패킷 누락 시 통신 품질 저하 위험이 높음.
Speex 코덱의 강점 (저음질 / 저부하)
  • 낮은 비트레이트 환경에서 연산 부하가 적어 시스템 자원 관리에 유리함.
  • 높은 압축률(6~12kbps) 적용 시 Opus와 체감 음질 차이가 크지 않음.
향후 계획
  • 현재 하드웨어 한계와 대역폭 제약을 고려할 때 Speex가 유리할 것으로 판단됨.
  • 정확한 결정을 위해 실제 CC1101 모듈을 사용한 테스트를 진행 후 최종 보고 예정.