Chapter 15

디지털 오디오와 DSP

마이크 앞 공기의 압력 변화는 연속 신호지만, 컴퓨터 안의 소리는 1초에 48,000개쯤의 정수 목록입니다. 시간을 자르는 샘플링과 진폭을 자르는 양자화, 이 두 번의 이산화에서 무엇을 잃고 무엇을 지킬 수 있는지 알면 디지털 오디오의 거의 모든 '규칙'이 설명됩니다. 그다음 그 숫자 열에 수학을 걸어 EQ, 딜레이, 리버브, 컴프레서를 만드는 신호 처리(DSP)를 하나씩 귀로 확인합니다.

샘플링 정리: 1초를 48,000조각으로

아날로그–디지털 변환기(ADC)는 연속 신호 \(x(t)\)를 일정한 간격 \(T = 1/f_s\)마다 재서 수열 \(x[n] = x(nT)\)을 만듭니다. 놀라운 사실은, 원래 신호에 \(f_s/2\) 이상의 성분이 없다면 이 수열만으로 원래 연속 신호를 완벽하게 되살릴 수 있다는 것입니다. 이것이 나이퀴스트–섀넌 샘플링 정리(Nyquist–Shannon Sampling Theorem)입니다(나이퀴스트 1928, 섀넌 1949).

$$x(t) = \sum_{n=-\infty}^{\infty} x[n]\;\mathrm{sinc}\!\left(\frac{t - nT}{T}\right), \qquad \mathrm{sinc}(u) = \frac{\sin \pi u}{\pi u}, \qquad \text{조건: } X(f) = 0 \ \ (|f| \ge f_s/2)$$
\(f_s/2\)를 나이퀴스트 주파수라 한다. 각 샘플 위치에 sinc 펄스를 세워 더하면(이상적 저역 통과 필터) 샘플 사이 값이 정확히 복원된다. "샘플 사이의 정보는 사라진다"는 직관은 대역 제한 신호에서는 틀렸다.
그림 15-1. 디지털 오디오의 신호 사슬. 안티에일리어싱 필터가 \(f_s/2\) 위를 미리 제거하고, 표본화(S/H)·양자화를 거쳐 정수 열이 된다. 재생 쪽 DAC는 계단(영차 유지) 신호를 내고 복원 필터가 계단의 모서리(이미지 성분)를 깎는다. 현대 변환기는 64–256배 오버샘플링 ΔΣ 방식이라 아날로그 필터는 완만하고, 날카로운 필터는 디지털 영역에서 처리한다.
샘플레이트나이퀴스트주 용도왜 이 값인가
8 kHz4 kHz전화(G.711)음성 대역 300–3400 Hz + 필터 여유
16 kHz8 kHz광대역 음성, 음성 인식자음(마찰음) 에너지를 담는다
44.1 kHz22.05 kHzCD, 음원 배포가청 20 kHz + 전이 대역 2 kHz, 비디오테이프 PCM 어댑터와 호환
48 kHz24 kHz영상·방송·게임, Web Audio 기본값 다수프레임당 정수 샘플(25 fps → 1920, 30 fps → 1600), AES5 권고
96 kHz48 kHz녹음·믹싱 작업완만한 필터, 비선형 처리의 에일리어싱 여유, 낮은 버퍼 지연
44,100이라는 이상한 숫자 1970년대 말 디지털 녹음은 하드디스크 대신 비디오테이프에 저장했다(소니 PCM-1600 등 'PCM 어댑터'). 비디오 한 줄에 스테레오 샘플 3개를 흑백 점으로 기록하면, NTSC 흑백 60필드 × 필드당 유효 245줄 × 3 = 44,100, PAL 50필드 × 294줄 × 3 = 44,100으로 두 방식 모두 같은 값이 나온다. 20 kHz 가청 대역을 지키면서 안티에일리어싱 필터에 약 10%의 전이 대역(20 → 22.05 kHz)을 주는 값이기도 해서 CD 규격(레드북, 1980)에 그대로 채택되었다.

에일리어싱: 나이퀴스트에서 접히는 주파수

조건을 어기면 어떻게 될까요? 샘플만 보면 주파수 \(f\)인 사인파와 \(f \pm k f_s\)인 사인파는 구별할 수 없습니다. \(\cos(2\pi (f + k f_s) nT) = \cos(2\pi f nT + 2\pi k n) = \cos(2\pi f nT)\)이기 때문입니다. 그래서 \(f_s/2\)를 넘는 성분은 기저대역 \([0, f_s/2]\) 안의 다른 주파수로 '변장'해 나타납니다. 이를 에일리어싱(Aliasing)이라 합니다.

$$f_a = \left| f - k f_s \right|, \qquad k = \mathrm{round}\!\left(\frac{f}{f_s}\right)$$
주파수 축을 \(f_s/2\)마다 종이처럼 접는다고 생각하면 된다(접힘, folding). 예: \(f_s = 8\) kHz에서 5 kHz 사인파는 3 kHz로, 7 kHz는 1 kHz로 들린다. 입력을 올리면 출력이 내려간다 — 이것이 에일리어싱을 귀로 알아채는 가장 확실한 단서다.
그림 15-2. 샘플링하면 스펙트럼이 \(f_s\) 간격으로 복제된다(시간 영역의 임펄스 열 곱 = 주파수 영역의 컨볼루션). 원래 성분(보라)이 \(f_s/2\)를 넘으면 왼쪽으로 이동한 복제(청록 점선)가 기저대역 안에 떨어져 에일리어스가 된다. 한번 섞이면 원래 성분과 구별할 방법이 없으므로, 에일리어싱은 샘플링 전에 막아야 한다.
SIMULATOR

에일리어싱 실험실: 낮은 샘플레이트에서 스윕 듣기

신호
복원(DAC)
나이퀴스트 fs/2—
입력 → 들리는 주파수—
기대 배음 대역 밖 전력 비율—
볼륨을 낮추고 시작하세요. 위 그래프: 가로축은 입력 주파수(0–24 kHz), 세로축은 샘플링 후 실제로 나타나는 주파수(0–fs/2). 톱날 모양 선이 접힘 함수이고 점은 각 배음이 떨어지는 자리입니다(빨강 = 나이퀴스트를 넘어 접힌 성분). 아래 왼쪽은 원래 파형(회색)·샘플(점)·복원 파형(청록), 오른쪽은 출력의 FFT 스펙트럼(초록 점선 = 있어야 할 배음 위치). 표시된 전력 비율은 기대 배음 ±6빈 밖만 센다. 기존 배음과 겹쳐 접힌 성분은 빠지고 창 누설은 포함될 수 있어 총 에일리어싱 전력은 아니다. 해볼 것: ① fs = 8 kHz에서 사인 스윕 — 4 kHz를 넘는 순간 음높이가 거꾸로 내려옵니다. ② '톱니(순진)'으로 스윕하면 배음들이 사방으로 접혀 '새소리' 같은 잡음이 납니다. PolyBLEP로 바꾸면 크게 줄어듭니다. ③ 복원을 '계단'으로 바꾸면 fs의 배수 근처에 이미지 성분이 남아 쇳소리가 섞입니다. 모델: 가상 샘플레이트에서 직접 표본을 계산한 뒤, 출력 장치 레이트로 Lanczos 창 sinc(±8 탭) 보간 또는 영차 유지로 변환합니다.
에일리어싱은 ADC에서만 생기지 않는다 디지털 영역의 비선형 처리(디스토션, 클리퍼, 웨이브셰이퍼, 강한 컴프레서, 순진한 오실레이터)는 새 배음을 만들고, 그것이 \(f_s/2\)를 넘으면 그대로 접힌다. 그래서 고급 플러그인은 내부에서 2–8배 오버샘플링한 뒤 처리하고 다시 내린다. 같은 이유로 신시사이저는 대역 제한 파형표, BLIT, PolyBLEP 같은 기법을 쓴다(2장).

복원과 필터: 계단을 매끄럽게

실제 DAC는 sinc 펄스를 만들 수 없으므로 각 샘플 값을 다음 샘플까지 유지하는 영차 유지(Zero-Order Hold, ZOH) 계단을 냅니다. 계단은 길이 \(T\)의 사각 펄스와 임펄스 열의 컨볼루션이므로 주파수 응답은 sinc 모양입니다.

$$|H_{\mathrm{ZOH}}(f)| = \left|\mathrm{sinc}\!\left(\frac{f}{f_s}\right)\right| \;\Rightarrow\; |H(f_s/2)| = \frac{2}{\pi} \approx -3.92\ \mathrm{dB}$$
두 가지 결과: ① 통과 대역의 고역이 조금 깎인다(sinc droop, 보상 필터로 보정). ② \(k f_s \pm f\)에 이미지가 남는다(sinc의 영점이 \(k f_s\)에 있으므로 이미지는 약해지지만 0은 아니다). 복원 필터가 이 이미지를 제거한다.

CD를 처음 만들 때 이 필터가 난제였습니다. 20 kHz까지 평탄하고 22.05 kHz에서 약 96 dB 감쇠하려면 아날로그 필터로는 11차 이상의 타원 필터가 필요했고, 위상 왜곡이 컸습니다. 해법은 오버샘플링: 디지털 보간 필터로 4–8배 레이트를 올린 뒤 DAC에 넣으면 이미지가 \(4f_s\) 근처로 밀려나 아날로그 필터는 완만해도 됩니다. 오늘날의 ΔΣ 변환기는 이 생각을 극단까지 밀어 1–5비트를 수 MHz로 돌리고, 날카로운 FIR 데시메이션 필터를 칩 안에 넣습니다.

엔지니어의 눈으로 선형 위상 '벽돌담' FIR 필터는 임펄스 응답이 대칭이라 과도음 앞에 프리링잉(pre-ringing)이 생긴다. 22 kHz 근처의 링잉이라 대부분 들리지 않지만, 최소 위상·아포다이징 필터를 쓰는 DAC가 있는 이유다. 96 kHz로 녹음하는 실용적 이점은 '초고역 재생'보다 이런 필터 설계 여유와 처리 중 에일리어싱 여유에 있다.

양자화: 진폭을 정수로

각 샘플의 진폭은 \(N\)비트 정수로 반올림됩니다. 풀스케일 \([-1, 1)\)을 \(2^N\)칸으로 나누면 한 칸(LSB) 크기는 \(\Delta = 2/2^N\)입니다. 신호가 충분히 크고 복잡하면 반올림 오차 \(e[n]\)는 \([-\Delta/2, \Delta/2]\)에 균등 분포하는 백색 잡음처럼 행동합니다.

$$\sigma_e^2 = \frac{\Delta^2}{12}, \qquad \mathrm{SNR}_{\text{full-scale sine}} = 10\log_{10}\frac{1/2}{\Delta^2/12} = 6.02\,N + 1.76\ \mathrm{dB}$$
비트 하나당 6.02 dB(진폭 2배). 풀스케일 사인 전력은 \(1/2\). 16비트 98.1 dB, 24비트 146.3 dB가 이론값이다. 실제 24비트 ADC는 아날로그 열잡음 때문에 115–125 dB 정도에서 멈춘다 — 하위 3–5비트는 잡음이다.
비트준위 수LSB (dBFS)이론 SNR쓰임
8256−42.149.9 dB초기 샘플러, 게임기, μ-law 전화(비선형 8비트)
1665,536−90.398.1 dBCD, 배포용 음원
2416,777,216−138.5146.3 dB녹음·제작(헤드룸을 넉넉히)
32 float——가수 24비트 ≈ 146 dB, 범위 약 1500 dBDAW 내부 처리(0 dBFS 넘어도 안 잘림)

디더: 잡음을 더해 왜곡을 없애기

신호가 작아져 몇 LSB만 오가면 '오차 = 백색 잡음' 가정이 깨집니다. 오차가 신호와 상관된 고조파 왜곡이 되고, 아주 작은 신호는 아예 0으로 사라집니다. 해결책은 역설적이게도 양자화 직전에 작은 잡음을 일부러 더하는 디더(Dither)입니다.

SIMULATOR

양자화기: 비트 수 · 디더 · 노이즈 셰이핑

디더
이론 SNR (풀스케일)—
측정 SNR (이 신호)—
신호 / LSB—
위: 원래 사인(회색)과 양자화 출력(보라), 그 아래 오차 \(e = y - x\)(청록). 아래: 출력 스펙트럼(블랙먼 창, 16384점)과 이론적 잡음 바닥(점선, 빈당). 테스트 주파수 997 Hz는 AES17 측정 규격이 쓰는 값으로, 표본 주파수와 작은 정수비가 아니라 짧은 반복을 피합니다. 48 kHz에서는 48,000샘플(1초) 뒤에 이상적 사인 표본과 결정론적 양자화 오차가 반복합니다. 해볼 것: ① 6비트, −20 dBFS, 디더 없음 → 스펙트럼에 고조파 막대가 줄지어 서고, '오차만 듣기'를 켜면 음과 함께 변하는 거친 소리. TPDF로 바꾸면 막대가 사라지고 평탄한 잡음만 남습니다. ② 페이드아웃 버튼: 디더 없이는 신호가 작아질수록 지글거리다 뚝 끊기고, TPDF에서는 쉬익 소리 아래로 사인이 끝까지 들립니다. ③ 노이즈 셰이핑을 켜면 잡음 바닥이 +12 dB/oct로 기울어 저역이 조용해집니다. 모델: 미드트레드 반올림 양자화기(1비트는 부호 양자화), 풀스케일 ±1.

클리핑과 샘플 간 피크

정수 표현에는 천장이 있습니다. 0 dBFS를 넘는 값은 최댓값으로 잘리고(하드 클리핑), 잘린 파형은 사각파처럼 홀수 고조파를 대량으로 만들며, 그중 나이퀴스트를 넘는 것은 접혀서 비조화적인 잡음이 됩니다. 함정은 샘플 값이 모두 0 dBFS 이하여도 복원된 아날로그 파형은 그 위로 솟을 수 있다는 점입니다. sinc 보간은 샘플 사이를 지나며 샘플보다 큰 값을 만들 수 있기 때문입니다.

그림 15-3. \(f_s/4\) 사인파를 위상 45°에서 샘플링하면 모든 샘플이 ±0.707이다. 이 샘플들을 0 dBFS로 정규화(×1.414)하면 샘플 피크는 0 dBFS지만, 복원된 사인의 실제 피크는 +3.01 dBTP로 DAC나 이후 코덱(MP3·AAC 디코더)에서 클리핑된다.

그래서 방송·스트리밍 규격은 트루 피크(True Peak, dBTP)를 씁니다. ITU-R BS.1770-5(2023)의 부속서 예는 48 kHz 입력을 4배, 96 kHz 입력을 2배 보간하여 피크를 추정합니다. 유사하거나 더 우수한 측정 방법도 허용하며 유한 보간비가 오차 없는 피크를 보장하지는 않습니다. EBU R128은 최대 −1 dBTP를 요구합니다. 손실 압축 코덱은 재구성 과정에서 피크를 더 키우므로 스트리밍 서비스는 −1 dBTP(때로 −2)를 권장합니다.

DFT와 FFT: 스펙트럼을 재는 자

유한한 \(N\)개 샘플의 주파수 성분은 이산 푸리에 변환(DFT)으로 계산합니다. 직접 계산하면 \(O(N^2)\)이지만 쿨리–튜키(1965)의 FFT는 \(O(N\log N)\)으로 같은 결과를 냅니다. \(N = 4096\)이면 약 340배 빠릅니다.

$$X[k] = \sum_{n=0}^{N-1} w[n]\,x[n]\,e^{-j 2\pi k n / N}, \qquad f_k = k\,\frac{f_s}{N}, \qquad \Delta f_{\text{bin}} = \frac{f_s}{N} = \frac{1}{T_{\text{frame}}}$$
\(w[n]\): 창 함수. 빈 폭 \(\Delta f\)와 프레임 길이 \(T = N/f_s\)의 곱은 1 — 시간–주파수 불확정성. 48 kHz에서 \(N=4096\)이면 빈 폭 11.7 Hz, 프레임 85 ms. 저음 두 음(예: E1 41.2 Hz와 F1 43.7 Hz, 2.5 Hz 차이)을 가르려면 0.4초 이상을 봐야 한다.

DFT는 \(N\)개 샘플이 무한히 반복된다고 가정합니다. 프레임 길이가 신호 주기의 정수배가 아니면 이음매에서 불연속이 생기고, 그 에너지가 모든 빈으로 번집니다. 이것이 스펙트럼 누설(Spectral Leakage)입니다. 창 함수는 프레임 양 끝을 0으로 부드럽게 줄여 누설을 막는 대신 주엽(main lobe)을 넓혀 해상도를 희생합니다.

창최대 사이드로브주엽 폭(영점–영점)ENBW사이드로브 감쇠율쓰임
직사각−13.3 dB2 빈1.00−6 dB/oct과도음, 정수 주기 신호
한(Hann)−31.5 dB4 빈1.50−18 dB/oct범용 기본값
해밍−42.7 dB4 빈1.36−6 dB/oct가까운 사이드로브 억제
블랙먼−58.1 dB6 빈1.73−18 dB/oct큰 동적 범위
블랙먼–해리스(4항)−92.0 dB8 빈2.00−6 dB/oct측정용(THD, 잡음 바닥)

수치 출처: F. J. Harris, "On the Use of Windows for Harmonic Analysis with the Discrete Fourier Transform", Proc. IEEE, 1978. ENBW(등가 잡음 대역폭)는 빈 단위.

SIMULATOR

FFT 창 함수 탐색기: 가까운 두 음을 가를 수 있을까

창 함수
영 채우기(zero padding)
빈 폭 fs/N—
프레임 길이—
두 음 분해—
f₁ 피크 높이—
fs = 8 kHz, f₁ = 1000 Hz(0 dB) + 오프셋, f₂ = f₁ + Δf(약한 음). 위: 창을 곱한 프레임과 창 모양(점선). 아래: 스펙트럼 — 실제 FFT 빈은 점, 영 채우기로 보간한 곡선은 선, 세로 점선은 참 주파수. 해볼 것: ① 오프셋 0(빈 중앙)과 0.5(빈 사이)에서 직사각 창을 비교 — 0.5에서 누설이 −13 dB 사이드로브로 퍼져 −40 dB 음을 덮습니다. ② 약한 음을 −80 dB로 낮추면 블랙먼–해리스만 찾아냅니다. ③ Δf를 줄이면 주엽이 넓은 창부터 두 봉우리가 하나로 합쳐집니다. 이때 영 채우기를 ×16으로 늘려도 분해되지 않습니다 — 영 채우기는 곡선을 촘촘히 그릴 뿐 해상도(1/T)를 바꾸지 않습니다. 듣기 버튼은 두 사인을 실제로 울립니다(Δf가 작으면 맥놀이로 들림). '분해' 판정: 약한 음 위치에 3 dB 이상 골이 있는 봉우리가 있는가.

STFT와 스펙트로그램

음악은 시간에 따라 변하므로 짧은 창을 밀어 가며 FFT를 반복합니다. 이것이 단시간 푸리에 변환(STFT)이고, 그 크기를 시간–주파수 평면에 색으로 그린 것이 스펙트로그램입니다.

$$X[m, k] = \sum_{n=0}^{N-1} w[n]\,x[n + mH]\,e^{-j2\pi kn/N}$$
\(H\): 홉(hop) 크기. 보통 \(H = N/4\)(75% 겹침). 창 길이 \(N\)이 시간·주파수 해상도를 동시에 정한다: 긴 창은 음높이를 정확히, 짧은 창은 타격의 시각을 정확히 보여 준다. 둘을 동시에 무한히 좋게 할 수는 없다(가보르 한계 \(\Delta t\,\Delta f \ge 1/4\pi\)). 상수-Q 변환과 웨이블릿은 저역엔 긴 창, 고역엔 짧은 창을 써서 이 타협을 음악에 맞게 바꾼다.
SIMULATOR

실시간 스펙트로그램: 창 길이를 바꿔 가며 보기

주파수 축
테스트 소리
창 길이—
빈 폭—
가장 센 성분—
오른쪽이 현재, 왼쪽으로 흘러갑니다(초당 약 120픽셀). 해볼 것: ① 드럼 루프를 켜고 FFT 크기를 256 ↔ 8192로 바꿔 보세요. 짧은 창에서는 타격이 날카로운 세로줄, 긴 창에서는 번진 덩어리가 됩니다. ② 피아노 화음은 반대로 긴 창에서 배음 줄이 선명합니다. ③ 선형 처프는 선형 축에서, 지수 처프는 로그 축에서 직선입니다. ④ FM 종의 배음은 정수배 간격이 아닙니다(비조화). ⑤ 모음은 배음 줄은 그대로인데 포먼트(밝은 띠)가 움직입니다. 모델: Web Audio AnalyserNode(블랙먼 창, 시간 평활 0) 출력을 화면 프레임마다 한 열씩 그립니다. 마이크 소리는 스피커로 내보내지 않습니다.

LTI 시스템과 필터: FIR, IIR, 바이쿼드

EQ, 리버브, 스피커, 방 — 이들은 근사적으로 선형 시불변(LTI) 시스템입니다. LTI 시스템은 임펄스 응답 \(h[n]\) 하나로 완전히 기술되고, 출력은 입력과 \(h\)의 컨볼루션입니다. 주파수 영역에서는 곱셈이 됩니다.

$$y[n] = \sum_{k} h[k]\,x[n-k] \quad\Longleftrightarrow\quad Y(z) = H(z)\,X(z), \qquad H(z) = \frac{\sum_{i=0}^{M} b_i z^{-i}}{1 + \sum_{j=1}^{P} a_j z^{-j}}$$
분모가 1이면(\(a_j = 0\)) 임펄스 응답이 유한한 FIR, 재귀형은 일반적으로 무한 임펄스 응답의 IIR이지만 극점·영점 상쇄와 초기조건에 따라 유한 응답도 가능하다. FIR/IIR은 구현의 되먹임 유무만으로 정의하지 않는다. \(z = e^{j2\pi f/f_s}\)를 대입하면 주파수 응답.
FIRIIR
구조지연된 입력의 가중합입력 + 지연된 출력의 되먹임
위상계수가 대칭이면 정확한 선형 위상(파형 보존)비선형 위상(아날로그 필터와 같은 성질)
안정성항상 안정극점이 단위원 안에 있어야 함
비용(같은 날카로움)탭 수십–수천 개2차 섹션 몇 개
예선형 위상 EQ, 오버샘플링 필터, 컨볼루션 리버브파라메트릭 EQ, 신스 필터, 셸빙, DC 차단

음향에서 가장 많이 쓰는 IIR은 2차 섹션 바이쿼드(Biquad)입니다. 로버트 브리스토–존슨(RBJ)의 Audio EQ Cookbook은 아날로그 원형을 쌍선형 변환해 \(f_0, Q\), 이득(dB)만으로 계수를 주는 공식집으로, Web Audio의 BiquadFilterNode도 이를 따릅니다. 피킹 EQ는 다음과 같습니다.

$$A = 10^{G/40},\ \ \omega_0 = 2\pi\frac{f_0}{f_s},\ \ \alpha = \frac{\sin\omega_0}{2Q}:\qquad H(z) = \frac{(1+\alpha A) - 2\cos\omega_0\, z^{-1} + (1-\alpha A) z^{-2}}{(1+\alpha/A) - 2\cos\omega_0\, z^{-1} + (1-\alpha/A) z^{-2}}$$
\(f_0\)에서 이득 \(G\) dB, 대역폭은 \(Q\)가 정한다(옥타브 대역폭 BW와 \(Q \approx 1/(2\sinh(\tfrac{\ln 2}{2}\mathrm{BW}))\), BW=1옥타브 ≈ Q 1.41). 쌍선형 변환 때문에 나이퀴스트 근처에서는 응답이 압축된다(주파수 워핑).
SIMULATOR

4밴드 파라메트릭 EQ 설계기

밴드 선택
소스
선택 밴드 b₀ b₁ b₂—
a₁ a₂ (a₀=1)—
합성 응답 범위—
점(1–4)을 끌어 주파수·이득을 바꾸고, 마우스 휠(또는 Q 슬라이더)로 폭을 바꿉니다. 굵은 선은 네 바이쿼드를 직렬로 곱한 전체 응답(\(\sum\) dB), 옅은 선은 각 밴드, 배경은 재생 중인 출력의 실시간 스펙트럼입니다. 소리는 같은 설정의 실제 BiquadFilterNode 4개를 통과합니다. 해볼 것: ① 핑크 잡음에서 Q 8의 +12 dB 벨을 200 Hz→5 kHz로 끌어 '모음'처럼 변하는 소리를 들어 보세요. ② 하이패스 120 Hz로 킥과 베이스가 사라지는 것, ③ 바이패스로 A/B. 구현 메모: Web Audio에서 셸빙 필터는 Q를 무시하고 기울기 S=1(≈ Q 0.707)로 고정되며, 로우/하이패스의 Q는 dB 단위입니다(여기서는 선형 Q를 20·log₁₀Q로 바꿔 넣음). 계수 표시는 fs = 48 kHz 기준.

딜레이와 콤 필터: 플랜저·코러스·에코

가장 단순한 효과는 신호를 지연시켜 원래 신호와 더하는 것입니다. 지연 \(\tau\)가 수십 ms를 넘으면 귀는 따로 떨어진 메아리(에코)로 듣지만, 짧으면 두 신호가 간섭해 주파수 응답에 빗살 같은 골과 봉우리가 생깁니다. 이것이 콤 필터(Comb Filter)입니다.

$$\text{앞먹임: } y[n] = x[n] + g\,x[n-D] \;\Rightarrow\; |H(f)|^2 = 1 + g^2 + 2g\cos(2\pi f\tau)$$ $$\text{되먹임: } y[n] = x[n] + g\,y[n-D] \;\Rightarrow\; H(z) = \frac{1}{1 - g z^{-D}},\quad |H|_{\max} = \frac{1}{1-|g|}$$
\(\tau = D/f_s\). 앞먹임(\(g>0\))의 골은 \(f = (2k+1)/(2\tau)\), 되먹임의 봉우리는 \(f = k/\tau\) — 간격 \(1/\tau\)의 배음열이다. 그래서 \(\tau = 5\) ms에 강한 되먹임을 걸면 200 Hz 음높이가 '울린다'(카플러스–스트롱 현 모델(3장)이 바로 이것). 되먹임 메아리가 60 dB 줄어드는 시간은 \(T_{60} = -3\tau/\log_{10}|g|\).

플랜저는 1–10 ms 지연을 저주파 LFO로 천천히 흔들어 빗살이 위아래로 미끄러지게 하고(제트기 '쉬익'), 코러스는 15–30 ms 지연을 약간 흔든 여러 복사본을 섞어 음높이가 미세하게 다른 연주자 여럿이 함께 연주하는 듯한 두께를 만듭니다. 지연을 흔들면 도플러 효과로 음높이가 \(1 - \dot\tau(t)\)배 변합니다.

SIMULATOR

딜레이 라인 하나로 만드는 콤·플랜저·코러스·에코

프리셋
소스
현재 지연 τ—
빗살 간격 1/τ—
봉우리/골 · T₆₀—
그래프: 현재 지연에서의 이론적 크기 응답(선형 주파수 축 0–10 kHz)과 출력의 실시간 스펙트럼(옅은 면). LFO가 켜져 있으면 빗살이 움직입니다. 해볼 것: ① '콤' 프리셋에서 핑크 잡음의 τ를 0.1→10 ms로 — 빗살 간격이 1/τ로 좁아지며 '관 속' 같은 음색이 됩니다. ② '공진 콤'에서 g를 ±로 바꾸면 봉우리가 k/τ ↔ (k+½)/τ로 옮겨 음높이가 한 옥타브 내려갑니다(홀수 배음만). ③ 플랜저와 코러스를 기타·톱니 화음으로 비교. ④ 에코의 T₆₀ 공식을 귀로 확인. 구현: 분수 지연(선형 보간)을 지원하는 AudioWorklet 딜레이 라인(코러스는 위상이 120°씩 다른 LFO 3개). Web Audio의 DelayNode는 되먹임 고리 안에서 최소 128샘플(≈2.7 ms)로 제한되므로 짧은 공진 콤을 만들 수 없기 때문입니다.

리버브: 방을 계산하기

방에서 손뼉을 치면 직접음 뒤로 벽에서 돌아온 초기 반사음이 수십 ms 동안 띄엄띄엄 오고, 이어 반사가 반사를 낳아 밀도가 시간의 제곱으로 늘어나는 잔향 꼬리가 지수적으로 사라집니다. 소리가 60 dB 줄어드는 시간이 잔향 시간 RT60이고, 세이빈(1898)의 공식이 첫 근사를 줍니다.

$$RT_{60} \approx 0.161\,\frac{V}{\sum_i S_i\,\alpha_i}\ \ [\mathrm{s}]$$
\(V\): 부피(m³), \(S_i\): 면적(m²), \(\alpha_i\): 흡음률. 거실 0.4–0.6 s, 녹음 스튜디오 0.3 s 안팎, 콘서트홀 1.8–2.2 s, 대성당 5 s 이상.

슈뢰더(1962)는 이 꼬리를 적은 계산으로 흉내 내는 구조를 제안했습니다. 서로소에 가까운 지연을 가진 되먹임 콤 필터 4개를 병렬로 놓아 감쇠하는 메아리 밀도를 만들고, 올패스 필터 2개를 직렬로 통과시켜 크기 응답은 그대로 두고 메아리를 잘게 흩습니다. 각 콤의 되먹임 이득은 원하는 RT60에서 역산합니다.

$$g_i = 10^{-3\tau_i / RT_{60}}, \qquad H_{\text{AP}}(z) = \frac{-g + z^{-D}}{1 - g z^{-D}}\ \ (|H_{\text{AP}}| = 1)$$
\(\tau_i\)마다 메아리가 \(g_i\)배 줄어 \(RT_{60}/\tau_i\)번 돌면 −60 dB. 무어러(1979)는 콤 안에 저역 통과 필터를 넣어 고역이 먼저 사라지는 실제 공기·벽 흡음을 흉내 냈고, 이를 구현한 공개 코드 프리버브(Freeverb, 2000)는 콤 8개 + 올패스 4개로 지금도 널리 쓰인다.
그림 15-4. 슈뢰더 리버브. 병렬 되먹임 콤 4개(29.7, 37.1, 41.1, 43.7 ms)가 감쇠하는 메아리열을 만들고, 직렬 올패스 2개(5.0, 1.7 ms, g = 0.7)가 메아리 밀도를 높인다. 각 블록 안의 \(z^{-D}\)는 지연선이다.

현대의 다른 방법은 컨볼루션 리버브입니다. 실제 공간의 임펄스 응답(IR)을 측정해(파리나(2000)의 지수 사인 스윕법이 표준) 입력과 컨볼루션하면 그 공간의 LTI 특성이 그대로 재현됩니다. 수 초짜리 IR은 수십만 탭 FIR이므로 FFT 기반 분할 컨볼루션으로 계산합니다. 아래 시뮬레이터는 알고리즘 리버브의 IR을 직접 계산해 ConvolverNode에 넣으므로 두 방법을 같은 틀에서 비교할 수 있습니다.

SIMULATOR

리버브 해부: 슈뢰더 · 프리버브 · 지수 감쇠 잡음

알고리즘
측정 RT60 (T30 외삽)—
콤 되먹임 g (첫/끝)—
IR 길이—
위: 계산된 IR(왼쪽 채널) 파형. 아래: 슈뢰더 역적분으로 구한 에너지 감쇠 곡선 EDC(t) = 10·log₁₀(∫ₜ^∞ h² / ∫₀^∞ h²)와 목표 기울기(−60 dB/RT60, 점선). '측정 RT60'은 EDC가 −5 dB에서 −35 dB까지 떨어지는 시간 ×2(ISO 3382의 T30)입니다. 해볼 것: ① '처음 150 ms 확대'로 슈뢰더 IR을 보면 메아리가 띄엄띄엄 셀 수 있을 만큼 성깁니다 — 스네어에서 '떨리는(flutter)' 소리로 들립니다. 프리버브는 훨씬 촘촘하고, 지수 잡음 IR은 처음부터 완전히 조밀합니다. ② 댐핑을 올리면 꼬리가 어두워지고 EDC가 휘어집니다. ③ 프리딜레이 20–40 ms는 직접음과 잔향을 분리해 명료도를 지킵니다. 모델: IR을 JS로 계산해 ConvolverNode(스테레오, 좌우 지연 23샘플 차)로 재생. 슈뢰더 원형은 모노이며 댐핑은 무어러식 1차 저역 통과를 콤 안에 넣은 것입니다.

다이내믹스: 컴프레서

컴프레서(Compressor)는 신호 레벨이 문턱 \(T\)를 넘으면 넘은 양을 비율 \(R\)로 줄이는 '자동 볼륨 손잡이'입니다. 레벨 검출기(피크 또는 RMS) → 정적 곡선(이득 계산) → 시간 평활(어택·릴리스) → 곱셈의 사슬로 구현합니다. 정적 곡선은 dB 영역의 꺾은선이고, 꺾이는 곳을 둥글게 하는 폭 \(W\)가 니(knee)입니다(Giannoulis·Massberg·Reiss, JAES 2012).

$$y_{\mathrm{dB}} = \begin{cases} x & 2(x - T) < -W \\[2pt] x + \dfrac{(1/R - 1)\,(x - T + W/2)^2}{2W} & |2(x-T)| \le W \\[6pt] T + \dfrac{x - T}{R} & 2(x - T) > W \end{cases}$$
이득 감소 \(g_r = y - x\) (dB)를 1차 평활: \(g[n] = \alpha\,g[n-1] + (1-\alpha)\,g_r[n]\), \(\alpha = e^{-1/(\tau f_s)}\). 감소가 커지는 방향에는 어택 \(\tau_A\)(0.1–30 ms), 풀리는 방향에는 릴리스 \(\tau_R\)(50–500 ms)를 쓴다. 어택을 늦추면 타격의 앞부분이 그대로 통과해 '펀치'가 살고, 릴리스가 너무 빠르면 저음 주기마다 이득이 흔들려 왜곡('펌핑')이 된다.
SIMULATOR

컴프레서: 정적 곡선과 이득 감소 계측

소스
이득 감소(지금)—
입력 / 출력 피크—
파고율 변화—
위: 정적 곡선(입력 dB → 출력 dB). 회색 대각선은 1:1, 점은 지금 입력 피크와 실제 노드가 보고한 이득 감소로 계산한 동작점입니다. 아래: 최근 6초의 입력 피크(회색), 출력 피크(보라), 이득 감소(빨강 막대, 위에서 아래로). 해볼 것: ① 문턱 −30 dB, 비율 8:1, 어택 0.5 ms → 스네어 머리가 눌려 '납작'해지고, 어택 30 ms로 늘리면 타격음이 살아납니다. ② 릴리스를 10 ms로 줄이고 드럼+베이스 → 저음에 일그러짐(펌핑). ③ 바이패스로 A/B — 출력 트림으로 크기를 맞춰 비교해야 공정합니다(큰 쪽이 좋게 들리는 착각). 구현: Web Audio DynamicsCompressorNode. 이 노드의 니는 문턱 위쪽에만 걸리고(곡선은 그 정의로 그림), 규격상 자동 메이크업 이득과 6 ms 룩어헤드가 들어 있습니다.

라우드니스 정규화와 지연

피크 미터는 '얼마나 크게 들리는가'를 말해 주지 못합니다. 같은 −1 dBTP라도 압축을 세게 한 곡이 훨씬 크게 들리고, 이것이 1990–2000년대 라우드니스 전쟁을 낳았습니다. 해결책은 지각에 가까운 척도로 재고 재생 단계에서 일정하게 맞추는 것입니다. ITU-R BS.1770은 다음 절차를 정합니다.

  1. K-가중: 머리의 음향 효과를 흉내 낸 하이 셸프(약 1.5 kHz 위 +4 dB) + 저역 차단(약 38 Hz 하이패스, RLB) — 두 바이쿼드.
  2. 채널별 평균 제곱을 400 ms 블록(75% 겹침)으로 구해 더하고 \(L = -0.691 + 10\log_{10}\sum_c G_c \overline{z_c^2}\) [LUFS].
  3. 게이팅: −70 LUFS 아래 블록(무음)을 버리고, 그 평균보다 10 LU 낮은 블록을 다시 버린 뒤 평균한 값이 통합 라우드니스.
규격·서비스목표 통합 라우드니스트루 피크 상한
EBU R128 (유럽 방송)−23.0 LUFS (2023판; 생방송 등 ±1.0 LU, 측정 품질관리 ±0.2 LU)−1 dBTP
ATSC A/85 (미국 방송), 국내 지상파−24 LKFS−2 dBTP
스포티파이·유튜브·타이달 등(기본값)약 −14 LUFS−1 dBTP 권장
애플 뮤직(사운드 체크)약 −16 LUFS−1 dBTP 권장

스트리밍 서비스가 −14 LUFS로 맞춰 재생하면, −8 LUFS로 '찌그러뜨린' 마스터는 6 dB 줄어 재생되고 다이내믹스만 잃은 셈이 됩니다. 정규화가 라우드니스 전쟁을 사실상 끝낸 이유입니다.

지연(latency): 버퍼의 대가

오디오 장치는 샘플을 하나씩이 아니라 블록(버퍼) 단위로 주고받습니다. 버퍼가 작을수록 지연은 작지만 CPU가 제때 블록을 채우지 못하면 '틱' 하는 끊김(언더런)이 납니다.

$$t_{\text{buffer}} = \frac{B}{f_s}, \qquad t_{\text{round trip}} \approx 2\,\frac{B}{f_s} + t_{\text{ADC}} + t_{\text{DAC}} + t_{\text{driver}}$$
48 kHz에서 128샘플 = 2.67 ms. 소리는 1 ms에 약 34 cm 가므로 2.67 ms는 악기에서 90 cm 떨어져 듣는 것과 같다. 연주자는 왕복 10 ms 안팎부터 어색함을 느낀다. Web Audio는 128샘플(렌더 퀀텀) 단위로 처리하고, 브라우저·OS 버퍼가 그 위에 더해진다.
버퍼 B44.1 kHz48 kHz96 kHz
641.45 ms1.33 ms0.67 ms
1282.90 ms2.67 ms1.33 ms
2565.80 ms5.33 ms2.67 ms
51211.61 ms10.67 ms5.33 ms
102423.22 ms21.33 ms10.67 ms

이 브라우저의 Web Audio 지연은 아무 소리나 한 번 재생하면 여기에 표시됩니다.

핵심 정리

  1. 대역 제한 신호는 \(f_s > 2B\)로 샘플링하면 sinc 보간으로 완벽히 복원된다. \(f_s/2\)를 넘는 성분은 \(|f - kf_s|\)로 접혀 되돌릴 수 없으므로 샘플링 전에(그리고 비선형 처리 전에) 막아야 한다.
  2. 44.1 kHz는 비디오테이프 PCM 어댑터(3샘플 × 245줄 × 60필드)에서, 48 kHz는 영상 프레임과의 정수 관계에서 왔다. 높은 레이트의 실익은 필터 설계와 처리 여유다.
  3. 양자화 SNR ≈ 6.02N + 1.76 dB. 작은 신호에서는 오차가 왜곡이 되므로 TPDF 디더(±1 LSB)로 오차를 신호와 독립인 잡음으로 바꾸고, 노이즈 셰이핑으로 잡음을 덜 들리는 대역에 옮긴다.
  4. 샘플 피크 ≠ 실제 피크. 트루 피크(48 kHz 입력의 4배 보간 예; 입력률·필터에 따른 추정 오차 있음)로 재고 −1 dBTP 이하를 지킨다.
  5. FFT 빈 폭은 \(f_s/N = 1/T\). 창 함수는 누설(사이드로브)과 해상도(주엽 폭)를 맞바꾸고, 영 채우기는 해상도를 높이지 않는다. 스펙트로그램의 창 길이는 시간·주파수 해상도를 동시에 정한다.
  6. LTI 시스템은 임펄스 응답의 컨볼루션이다. 유한 계수의 FIR은 안정하지만 선형 위상에는 대칭·반대칭 계수 조건 등이 필요하다. 선형 위상도 크기 응답 변화가 있으면 모든 파형을 그대로 보존하지는 않는다. IIR(바이쿼드)은 적은 계산으로 날카롭다. RBJ 쿡북 공식이 업계 표준 EQ 계수다.
  7. 지연 + 합 = 콤 필터(빗살 간격 1/τ). 지연을 흔들면 플랜저·코러스, 되먹임 콤 병렬 + 올패스 직렬은 슈뢰더 리버브, 측정한 IR과 컨볼루션하면 컨볼루션 리버브.
  8. 컴프레서 = 정적 곡선(문턱·비율·니) + 시간 상수(어택·릴리스). 음량 비교는 반드시 같은 라우드니스에서: 방송 −23 LUFS(EBU R128), 스트리밍 약 −14 LUFS. 지연은 버퍼/샘플레이트.

확인 퀴즈

fs = 44.1 kHz로 샘플링할 때(안티에일리어싱 필터 없음) 30 kHz 초음파 성분은 어디에 나타나는가?

k = round(30/44.1) = 1, fa = |30 − 44.1| = 14.1 kHz. 나이퀴스트 22.05 kHz를 7.95 kHz 넘었으므로 그만큼 아래로 접혀 22.05 − 7.95 = 14.1 kHz의 가청 성분이 된다.

24비트 녹음을 16비트로 내릴 때 TPDF 디더를 더하는 가장 중요한 이유는?

TPDF 디더는 오히려 잡음을 4.77 dB 늘린다. 대신 오차의 평균과 분산이 신호와 독립이 되어, 페이드아웃이나 리버브 꼬리 같은 작은 신호가 지글거리는 왜곡이나 갑작스러운 끊김 없이 잡음 아래로 자연스럽게 사라진다.

fs = 48 kHz에서 1 Hz 간격으로 떨어진 두 사인파를 FFT로 분리하려면 대략 최소 몇 개의 샘플(직사각 창 기준)이 필요한가?

빈 폭 = fs/N = 1/T이므로 1 Hz를 가르려면 T ≥ 1 s, N ≥ 48,000(실제로는 창의 주엽 폭 때문에 2–4배가 더 필요). 영 채우기는 스펙트럼을 촘촘히 보간할 뿐 해상도를 높이지 못한다.

지연 2 ms의 앞먹임 콤 필터 y[n] = x[n] + x[n − D]에서 첫 번째 골(notch) 주파수는?

골은 지연된 신호가 정확히 반대 위상일 때, 즉 f = (2k+1)/(2τ). τ = 2 ms이면 250, 750, 1250 Hz… 골 간격(=봉우리 간격)은 1/τ = 500 Hz.

슈뢰더 리버브에서 지연 40 ms인 콤 필터로 RT60 = 2 s를 만들려면 되먹임 이득 g는?

g = 10^(−3τ/RT60) = 10^(−3·0.04/2) = 10^(−0.06) ≈ 0.871. 2초 동안 50번 돌며 매번 0.871배(−1.2 dB) 줄어 총 −60 dB.

문턱 −20 dB, 비율 4:1, 하드 니 컴프레서에 −8 dB 피크가 들어오면 (메이크업 없이) 출력과 이득 감소는?

문턱을 12 dB 넘었으므로 출력은 T + 12/4 = −20 + 3 = −17 dB. 이득 감소는 −8 − (−17) = 9 dB.