📁 File4. 오디오01 · Sampling & Quantization — 연속 신호를 이산값으로

01 · Sampling & Quantization — 연속 신호를 이산값으로

이 문서가 답하는 질문: 공기의 진동(아날로그)을 어떻게 0과 1의 나열로 자르는가? 선행 지식: 없음 / 후속 문서: 02-channels-and-spatial.md, 03-codecs-overview.md


한 줄 답

연속 신호를 시간축으로 자르는 것이 샘플링(Sampling), 세기를 정수로 반올림하는 것이 양자화(Quantization) 다. 두 동작 모두 정보 손실을 만들고, 그 손실의 한계를 정한 두 정리가 Nyquist-Shannon(샘플링)과 양자화 노이즈 모델(SNR ≈ 6.02n + 1.76 dB)이다.


Why — 왜 자르는가

소리는 공기 압력의 연속적 변화다. 컴퓨터는 연속을 다룰 수 없다. 그래서 자른다.

자르면 정보가 빠진다. 그런데도 잘라야 하는 이유는:

  1. 저장 가능 — 메모리는 이산이다.
  2. 재현 가능 — Nyquist 정리에 따라 충분히 자주 자르면 원본을 완전히 복원 가능하다 (대역제한 신호 한정).
  3. 비교 가능 — 이산 정수가 되어야 차이/평균/필터 같은 수학이 동작한다.

핵심은 “어디까지 자르면 사람이 차이를 못 듣는가”라는 지각 한계와의 줄다리기다.


How — 두 동작이 어떻게 동작하는가

1) Sampling — 시간축 자르기

Nyquist-Shannon 정리: 신호의 최대 주파수가 fmaxf_{max}일 때, 샘플레이트 fs>2fmaxf_s > 2 f_{max}이면 원본 복원 가능.

사람의 가청 주파수: 20 Hz ~ 20 kHz → fs>40f_s > 40 kHz 필요 → CD: 44.1 kHz, 영상: 48 kHz, 하이레졸루션: 96/192 kHz

에일리어싱(aliasing) 은 빠른 진동이 느린 진동처럼 둔갑하는 현상이다 (영화에서 바퀴가 거꾸로 도는 것과 같은 원리). 실무에서는 ADC 앞단에 anti-aliasing low-pass filter를 두어 fs/2f_s/2 위 주파수를 제거하고 샘플링한다.

2) Quantization — 진폭 자르기

연속 진폭값을 2n2^n개의 정수 레벨로 반올림한다.

  • 8 bit: 256 레벨, SNR ≈ 49 dB → 전화 품질
  • 16 bit: 65,536 레벨, SNR ≈ 96 dB → CD/배포 표준
  • 24 bit: 16,777,216 레벨, SNR ≈ 144 dB → 스튜디오 마스터
  • 32-bit float: 부동소수점, headroom 무한대 → 믹싱 워킹 포맷

Quantization SNR 공식:

SNR6.02n+1.76 dB\text{SNR} \approx 6.02n + 1.76 \text{ dB}

비트당 약 6 dB씩 다이내믹 레인지가 늘어난다.

n bitslevelsSNR (dB)의미
825649.9음성 통화·게임 SFX 한계
124,09673.9콘솔 시대 BGM
1665,53698.1CD, 일반 배포
201,048,576122.2마스터링 중간 단계
2416,777,216146.3스튜디오 표준

What — 구체 사양 / 수치 / 명령어

샘플레이트 표준 사용처

fs사용처이유
8 kHz전화(G.711)사람 음성 핵심 대역(300~3400 Hz)만
16 kHz음성인식(VoIP, Whisper)자음 명료도 확보
22.05 kHz게임 SFX (레거시)CD 절반
44.1 kHzCD, 음원 배포VHS PCM 기원
48 kHz영상, DAW 표준NTSC 30fps × 1600 = 48000
88.2 / 96 kHz하이레졸루션, 스튜디오 마스터44.1/48의 정수배 → 변환 손실 적음
176.4 / 192 kHzDXD, 매스터링헤드룸 + 후처리 여유

비트심도 사용처

bitsformat사용처
16PCM/FLAC/AAC배포 (CD, Spotify, YouTube)
24PCM/FLAC스튜디오 녹음, 하이레졸루션
32 floatWAV/AIFFDAW 믹싱 (clipping에 안전)

Dither — 양자화 노이즈를 “들리지 않게” 만드는 트릭

24bit → 16bit 다운샘플링 시 단순 truncation은 정현파의 작은 부분을 끊어 비주기적 distortion을 만든다. Dither(미세 노이즈 추가) 로 양자화 오차를 무작위화하면 distortion이 white/triangular noise로 바뀌어 귀에 부드럽게 들린다.

TPDF(Triangular PDF) dither가 가장 흔히 쓰인다. Sony의 SBM, Apogee의 UV22 같은 noise-shaped dither는 청감 가중 곡선에 맞춰 노이즈를 가청대역 밖으로 밀어낸다.

ffmpeg 명령어 — 리샘플 + 비트심도 변환

# 96kHz/24bit master → 48kHz/16bit + TPDF dither
ffmpeg -i master.flac \
  -ar 48000 -sample_fmt s16 \
  -af "aresample=resampler=soxr:precision=28:dither_method=triangular_hp" \
  output.flac
  • -ar 48000 — 샘플레이트 변경
  • -sample_fmt s16 — 16-bit signed PCM
  • aresample=resampler=soxr — SoX 고품질 리샘플러 사용
  • dither_method=triangular_hp — high-pass triangular dither
# 단순 검증 — 샘플레이트와 비트심도 확인
ffprobe -v error -select_streams a:0 \
  -show_entries stream=sample_rate,sample_fmt,bits_per_raw_sample \
  -of json input.wav

What-if — 잘못 자르면 어떻게 깨지는가

1. 에일리어싱 (under-sampling)

48kHz 신호를 22kHz로 추출하면서 anti-aliasing 필터를 안 걸면, 24kHz 부근의 고주파가 -2kHz 영역(즉 음수 → 양수로 접힘)으로 둔갑한다.

→ 영상의 모니터 회전 효과처럼 들린다. 휘파람 같은 가짜 톤이 깔린다.

2. 클리핑(clipping)

PCM 정수 범위를 초과한 진폭이 max 값에서 잘려나가는 현상. 16bit signed 기준 ±32,767을 넘으면 그 부분은 평탄한 직선이 되어 사각파에 가까운 고조파가 생긴다 → “지직” 거리는 디지털 디스토션.

방지: 마스터 단계에서 -1 dBFS 리미터 + true peak 검증 (04-loudness-ebur128.md 참조).

3. Truncation distortion (dither 미적용)

24→16 변환 시 dither 없이 truncate하면 작은 페이드아웃에서 계단형 노이즈가 들린다. 클래식·재즈·앰비언트처럼 조용한 구간이 많은 장르에서 즉시 들킨다.

4. 잘못된 샘플레이트 변환 비율

44.1 → 48 같은 비정수 비율 변환은 polyphase filter가 필요하다. 저품질 변환기는 phase distortion을 만든다 → 스테레오 이미지가 흐려짐.

해결: SoX/SoXr (aresample=resampler=soxr:precision=28) 또는 Izotope SRC.


Insight — 왜 44.1과 48이 공존하는가

44.1 kHz는 비디오테이프의 흔적, 48 kHz는 NTSC의 흔적

1980년대 초 디지털 오디오를 저장할 매체가 마땅치 않아 Sony가 VHS 비디오테이프를 빌려 PCM을 기록했다. NTSC: 30fps × 490 lines × 3 sample/line = 44,100 PAL: 25fps × 588 × 3 = 44,100 두 진영 공통값으로 44.1이 정해졌고, CD가 이를 채택했다.

한편 영상 전용 디지털 오디오 표준(SMPTE, AES)은 30fps NTSC에 맞춰 48,000 = 30 × 1600을 골랐다. 그래서 음원과 영상이 만나는 지점마다 44.1 ↔ 48 변환이 일어난다.

“왜 24bit인가, 왜 23도 25도 아닌가”

Word size는 8의 배수가 되어야 바이트 정렬이 깔끔하다 (16, 24, 32). 20bit 시절도 있었지만, 20bit를 저장하려면 24bit 컨테이너 + 4bit padding이 필요해서 결국 24bit로 통일됐다. 컴퓨터의 바이트 경계가 음악의 비트심도를 결정한 셈이다.

“32-bit float는 왜 마스터에 안 쓰는가”

32f는 상한이 사실상 없다 (지수부 8bit). 클리핑이 안 일어난다. 그래서 DAW 워킹 포맷으로는 최강이지만, 배포용으로는 모든 디바이스가 24bit 정수를 가정하므로 의미가 없다. 32f는 “녹음 → 믹싱 → 마스터링 → 24bit/16bit 정수 export”의 중간 단계에서만 산다.


한 단락 요약 + Mermaid

디지털 오디오의 1단계는 시간(샘플링) + 진폭(양자화) 두 축의 이산화다. Nyquist 한계(fs > 2·fmax)와 SNR 공식(6n+1.76 dB)이 이론적 천장을 정하고, 44.1/48 kHz × 16/24 bit가 실무 표준이 되었으며, dither로 다운샘플링 손실을 들리지 않게 만든다. 잘못 자르면 에일리어싱(시간 측)클리핑/truncation(진폭 측) 이 모두 들킨다.