CAF7 인터컴 프로파일(profile=0) 저대역 음성 코덱 구현
개요
크라우니RTC 고성능화 마스터플랜 P1b 작업. 선행 판정(CAF7브라우저판정.md)에서 밝혀진 갭 —
CAF7 v3.1(/Users/ef/crowny-audio)이 profile=1(음악)만 하드코딩되어 있고, 스펙이 정의한
profile=0(인터컴/무전기, 8~16kbps 목표) 및 헤더리스 스트리밍 프레이밍이 전혀 구현되어
있지 않다는 문제 — 를 메우기 위해 신규 독립 코덱을 구현했다.
무엇을 했는지
16kHz mono PCM16, 20ms(320샘플) 프레임을 입력받아:
- 저역강조 anti-alias 박스필터 + 2:1 데시메이션 → 160샘플(8kHz 상당, 전화음성 대역)
- 2탭 감쇠 선형예측(
y_pred = xh1 + (3/5)(xh1-xh2)) 잔차 - 균형3진 적응 델타변조(CVSD 계열) — 트릿(-1/0/+1)로 잔차 표현, 데드존으로 "유지" 활용
- 5트릿/바이트 패킹(3^5=243) — 160트릿 → 정확히 32바이트, 패딩 불요
- 프레임 = 헤더 2B(프로파일니블+시퀀스, 앵커) + 페이로드 32B = 34B = 13.6kbps
파라미터(STEP_INIT/MAX=2500, GROW=×2, HOLD=×0.98, REV=×0.99, DZ=3/5, ALPHA=3/5)는
speech_like_16k_1s.wav 기준 SNR 최대화 그리드서치(~28,800 조합)로 확정.
게이트 실측 (3항 전부 PASS)
| 게이트 | 기준 | 실측 |
|---|---|---|
| 비트레이트 | 8~16kbps | 13.6 kbps |
| SNR | ≥15dB | 19.18dB(speech_like) / 15.44dB(tone) |
| 프레임 독립 디코딩 | 손실 비전파 | 바이트단위 일치 확인 |
관련 파일
/Users/ef/crowny-rtc/코덱/인터컴/caf7_intercom.c(419줄) — 인코더/디코더/WAV I/O/SNR/CLI/Users/ef/crowny-rtc/코덱/인터컴/build.sh— 빌드 스크립트/Users/ef/crowny-rtc/코덱/인터컴/caf7_intercom.한선(109줄) — 핵심로직 한선씨 동반(컴파일+실행 검증 완료)/Users/ef/crowny-rtc/코덱/인터컴/인터컴판정.md— 상세 판정 문서(설계 근거, 스펙 편차, 재현 명령)- 선행:
/Users/ef/crowny-rtc/코덱/CAF7브라우저판정.md
잔여 이슈 (인터컴판정.md에 상술)
- 순수 톤 신호에서 SNR 마진이 얇음(15.44dB) — 고주파 지배 신호는 슬로프 오버로드 취약
- 8차 LPC/서브밴드 DCT 미검증(계수 오버헤드 우려로 2탭 예측 채택, A/B 비교 미실시)
- PLC(패킷손실은닉)가 최소 수준(단순 홀드) — 페이드/파형반복으로 개선 여지
- 테스트 신호가 실음성이 아닌 합성 톤(sox 미설치) — 실음성 검증은 후속 과제
CAF7인터컴프로파일0 패턴 등록)