테마 선택

📚 지식 노트

AI·하드웨어·주변기기·게임·컴퓨터 시스템·이론 컴퓨터 과학·수학·개발과 운영·보안·응용 분야에 대해 알아 두면 좋은 내용을 정리한 노트다. 위에서 분야를 고르고 아래에서 노트를 고른다.

신호 처리

소리·사진·전파처럼 시간이나 공간에 따라 변하는 값을 숫자로 뽑아 다루는 방법을 정리한다. 샘플링과 앨리어싱, 양자화, 푸리에 변환과 FFT, 컨볼루션과 필터, 창 함수와 z 변환을 작은 예로 직접 계산해 본다.

목차 (10)
  1. 신호와 시스템
  2. 샘플링과 나이퀴스트
  3. 양자화
  4. DFT와 FFT: 주파수로 보기
  5. 컨볼루션
  6. 필터: FIR과 IIR
  7. 창 함수와 스펙트럼 누설
  8. z 변환의 직관: 극과 영점
  9. 응용
  10. 흔한 오해

신호와 시스템

신호는 시간(소리, 심전도, 주가)이나 공간(사진)에 따라 변하는 값이다. 연속인 신호를 일정 간격으로 뽑아 숫자 목록 x[n]으로 만든 것이 디지털 신호이고, 신호를 받아 다른 신호를 내는 것이 시스템이다. 이퀄라이저, 잡음 제거, 방의 울림, 스피커, 카메라 렌즈의 흐림이 모두 시스템이다.

신호 처리의 도구 대부분은 선형·시불변(LTI) 시스템에 대한 것이다. 선형이면 입력을 섞어 넣은 결과가 각각 넣은 결과를 섞은 것과 같고, 시불변이면 입력을 늦게 넣어도 출력이 늦게 나올 뿐 모양은 같다. 이 두 성질이 있으면, 크기 1인 순간 펄스(임펄스)를 넣었을 때의 출력 h[n], 즉 임펄스 응답 하나로 시스템이 완전히 정해진다. 어떤 입력이든 크기와 위치가 다른 임펄스들의 합으로 쪼갤 수 있고, 각 임펄스는 h 모양의 응답을 남기니, 출력은 그 응답들의 합이다. 이 계산이 뒤에 나올 컨볼루션이다.

임펄스 δ[n]을 LTI 시스템에 넣으면 임펄스 응답 h[n]이 나온다는 그림입력: 임펄스 δ[n]출력: 임펄스 응답 h[n]0112300.510.320.23LTI 시스템필터·스피커·방의 울림선형: a·x₁ + b·x₂ → a·y₁ + b·y₂ (섞어 넣으면 따로 낸 결과를 섞은 것)시불변: x[n − k] → y[n − k] (늦게 넣으면 늦게 나올 뿐 모양은 같다)둘 다 맞으면 어떤 입력이든 출력 = 입력 * h (컨볼루션)
임펄스 응답. LTI 시스템에 임펄스 하나를 넣어 나온 h[n]만 알면 어떤 입력의 출력도 계산할 수 있다. 콘서트홀에서 박수를 쳐 녹음한 울림으로 그 홀의 잔향을 흉내 내는 것이 이 원리다.

샘플링과 나이퀴스트

연속 신호를 초당 fs번 뽑으면(샘플링 주파수 fs), fs/2보다 낮은 주파수만 제대로 나타낼 수 있다. 이 한계 fs/2가 나이퀴스트 주파수이고, "신호의 가장 높은 주파수보다 두 배 넘게 빨리 뽑으면 원래 신호를 완벽히 되살릴 수 있다"는 것이 나이퀴스트–섀넌 샘플링 정리다. 사람 귀가 약 20kHz까지 들으므로 CD는 44,100Hz로 뽑아, 나이퀴스트 주파수 22,050Hz와 20kHz 사이에 필터가 기울어질 여유를 두었다. 소리가 디지털이 되는 과정 전체는 오디오 노트에 있다.

나이퀴스트보다 높은 주파수를 그대로 뽑으면 사라지는 것이 아니라 낮은 주파수로 접혀 나타난다. 이것이 앨리어싱이다. 표본만 보고는 진짜 신호와 가짜 신호를 구별할 수 없다. 예를 들어 44,100Hz로 뽑을 때 30,000Hz 초음파는 14,100Hz의 들리는 소리로 둔갑한다. 그래서 ADC 앞에는 나이퀴스트 위를 미리 깎는 안티앨리어싱 필터를 반드시 둔다. 영상에서 바퀴가 거꾸로 도는 것처럼 보이는 마차 바퀴 효과, 사진의 무아레 무늬, 3D 그래픽의 계단 경계도 같은 현상이다(컴퓨터 그래픽스 노트의 안티에일리어싱).

7Hz 사인과 초당 8개의 표본, 표본을 지나는 1Hz 가짜 신호0초1초실제 신호 7Hz표본(초당 8개)보이는 신호 1Hz
앨리어싱. 7Hz 사인을 초당 8번만 뽑으면 표본이 1Hz 사인(빨간 점선) 위에 정확히 놓인다. 겉보기 주파수는 |7 − 8| = 1Hz다.

양자화

뽑은 값도 정해진 비트 수로 반올림해 저장해야 한다. 이것이 양자화이고, 반올림으로 생긴 차이는 신호에 섞인 작은 잡음(양자화 잡음)이 된다. 비트가 하나 늘면 단계가 두 배로 촘촘해져 잡음 진폭이 반이 되니, 신호 대 잡음비(SNR)가 20·log₁₀2 ≈ 6.02dB씩 오른다. 꽉 찬 사인파에서는 SNR ≈ 6.02N + 1.76dB다(1.76dB는 사인파의 평균 전력과 고르게 퍼진 잡음 전력의 비에서 나온다).

  • CD의 16비트는 약 98dB, 녹음 장비의 24비트는 이론상 약 146dB다. 실제 24비트 ADC는 아날로그 회로의 잡음 때문에 120dB 안팎에서 막힌다.
  • 아주 작은 소리를 양자화하면 오차가 신호를 따라 규칙적으로 생겨 귀에 거슬리는 왜곡이 된다. 일부러 아주 작은 무작위 잡음(디더)을 더하면 오차가 고르게 흩어져 부드러운 쉬 소리로 바뀐다. 24비트 녹음을 16비트로 내릴 때 디더를 쓰는 이유다.
사인파를 3비트로 양자화한 계단과 오차, 비트 수별 신호 대 잡음비 표3비트 = 8단계, 간격 0.25오차 = 계단 − 원래 값 (4배 확대, ±간격/2 안)비트 수와 SNR(꽉 찬 사인)비트6.02N + 1.76실제 측정319.8dB18.0dB849.9dB50.0dB1698.1dB97.8dB24146.2dB146.4dB1비트마다 약 6dB(잡음 진폭 ½)3비트는 최대값이 덜 차서 공식보다 낮다
3비트 양자화. 원래 곡선(회색)이 8단계 계단(파랑)으로 바뀌고, 그 차이(빨강)가 양자화 잡음이다. 오른쪽 표의 '실제 측정'은 사인파를 직접 양자화해 잰 값이다.

DFT와 FFT: 주파수로 보기

푸리에의 생각은 어떤 신호든 여러 주파수의 사인파의 합으로 쓸 수 있다는 것이다. 이산 푸리에 변환(DFT)은 N개 표본 x[n]을 N개의 주파수 성분 X[k]로 바꾼다. X[k] = Σ x[n]·e^(−j2πkn/N)은, 신호에 "N개 표본 동안 k주기 도는 사인·코사인"을 곱해 더해 보는 것이다. 신호에 그 주파수가 들어 있으면 곱이 같은 부호로 쌓여 크고, 없으면 양수와 음수가 상쇄돼 0이 된다. 결과는 복소수라 크기는 그 주파수의 세기, 각도는 위상이다.

두 사인을 더한 16개 표본의 시간 영역 그림과 DFT 진폭 스펙트럼시간 영역: x[n], n = 0~151·sin(2π·2n/16) + 0.5·sin(2π·5n/16)주파수 영역: 진폭 2|X[k]|/N0112340.55678k = 주기 수(0 직류 ~ 8 나이퀴스트)
DFT. 시간 영역에서는 뒤섞여 보이는 신호가, 주파수 영역에서는 2주기와 5주기 두 칸으로 깨끗이 갈린다. 진폭 1과 0.5도 그대로 나온다.
  • 주파수 해상도: 칸 하나의 폭은 fs/N이다. 44,100Hz 소리를 1024개씩 자르면 칸 폭이 약 43.1Hz라, 이보다 가까운 두 음은 한 칸에 섞인다. 해상도를 높이려면 더 긴 구간을 봐야 하고, 그러면 시간 해상도가 떨어진다. 시간과 주파수를 동시에 정확히 알 수는 없다.
  • FFT: DFT를 정의대로 계산하면 곱셈이 N²번 든다. 1965년 쿨리–튜키(Cooley–Tukey)의 고속 푸리에 변환은 짝수 번째와 홀수 번째 표본의 DFT로 쪼개기를 되풀이해(N이 2의 거듭제곱일 때) (N/2)·log₂N번으로 줄인다. 1024점이면 1,048,576번이 5,120번, 약 205배 빠르다. 같은 생각은 가우스가 1805년에 이미 썼다.
  • 스펙트로그램: 짧은 구간을 조금씩 밀며 FFT를 거듭해 시간–주파수 그림을 만든다(STFT). 이 사이트의 스펙트럼 분석기가 마이크 소리로 이것을 실시간으로 그린다.

"푸리에 변환"은 사실 네 가족의 이름이다. 시간 쪽이 연속인가 이산인가, 주기인가 아닌가로 갈리고, 한쪽이 이산이면 다른 쪽이 주기적이 된다. 컴퓨터가 실제로 계산하는 것은 넷 중 DFT뿐이고, FFT는 별도의 변환이 아니라 DFT를 빨리 계산하는 알고리즘이다(DTFT 문서).

이름시간 쪽주파수 쪽쓰임
푸리에 변환연속, 비주기연속, 비주기아날로그 신호와 필터의 이론
푸리에 급수연속, 주기이산(배음만)악기의 배음, 주기파의 분해
DTFT이산(표본), 비주기연속, fs마다 되풀이디지털 필터의 주파수 응답(아래 z 변환의 단위원)
DFT이산, N개(주기로 봄)이산, N칸실제 계산. DTFT를 N개 점에서 뽑은 값이다

컨볼루션

LTI 시스템의 출력은 입력과 임펄스 응답의 컨볼루션 y[n] = Σ h[k]·x[n − k]다. 입력의 각 표본이 자기 크기만큼 h를 복사해 자기 자리에 남기고, 출력은 그 복사본들을 겹쳐 더한 것이다. 계산으로 보면 h를 뒤집어 입력 위로 한 칸씩 밀며, 겹친 칸끼리 곱해 더한다.

컨볼루션 단계 그림: 뒤집은 h가 입력 위를 밀려가며 출력 칸을 하나씩 채운다n−2−10123456x001230100h 뒤집음×0.5×0.3×0.2×0.5×0.3×0.2×0.5×0.3×0.2×0.5×0.3×0.2×0.5×0.3×0.2×0.5×0.3×0.2×0.5×0.3×0.2×0.5×0.3×0.2y0.51.32.31.31.10.30.2점선 칸 = 입력 바깥(0으로 채움)
1 / 8

입력 x = [1, 2, 3, 0, 1], 임펄스 응답 h = [0.5, 0.3, 0.2]. h를 뒤집어 놓고 한 칸씩 오른쪽으로 민다. 바깥은 0으로 친다.

컨볼루션 y[n] = Σ h[k]·x[n − k]. 출력 길이는 5 + 3 − 1 = 7이다. 입력 각 표본이 h 모양의 메아리를 남기고, 출력은 그 메아리들의 합이다.

컨볼루션은 주파수 영역에서 곱셈이 된다(컨볼루션 정리). 시간 영역에서 길이 M인 h와 컨볼루션하면 출력 하나에 곱셈 M번이 들지만, 둘을 FFT해 칸끼리 곱하고 역FFT하면 긴 필터도 빠르다. 수 초 길이의 실제 홀 울림을 입히는 컨볼루션 리버브가 이 방법을 쓴다. 이미지의 블러와 경계 검출, CNN의 합성곱도 같은 연산을 2차원으로 한 것이다(딥러닝의 "합성곱"은 h를 뒤집지 않는 상호 상관이지만, 필터를 학습하므로 차이가 없다).

필터: FIR과 IIR

필터는 원하는 주파수만 남기는 시스템이다. 낮은 주파수만 통과시키면 저역 통과(잡음·쉿 소리 제거), 높은 것만 남기면 고역 통과(웅웅거리는 저음 제거), 가운데만 남기면 대역 통과다. 디지털 필터는 구조에 따라 두 갈래다.

  • FIR(유한 임펄스 응답): 출력이 지금과 과거 입력의 가중합 y[n] = Σ b[k]·x[n − k]이다. 가장 단순한 예가 최근 M개를 평균하는 이동 평균이다. 되먹임이 없어 항상 안정하고, 계수를 좌우 대칭으로 잡으면 모든 주파수가 똑같이 늦어지는 선형 위상이라 파형이 일그러지지 않는다. 대신 날카로운 필터를 만들려면 계수가 수십~수백 개 필요하다.
  • IIR(무한 임펄스 응답): 과거 출력까지 되먹인다. 1차 저역 통과 y[n] = α·x[n] + (1 − α)·y[n − 1]은 계수 두 개뿐인데 임펄스 응답이 영원히(점점 작아지며) 이어진다. 적은 계산으로 가파른 필터를 만들 수 있지만, 계수를 잘못 잡으면 출력이 발산하고, 주파수마다 늦어지는 정도가 달라진다. 오디오 이퀄라이저는 2차 IIR 하나(바이쿼드)를 여러 개 이어 붙이는 것이 표준이다.
4탭 이동 평균 FIR과 1차 IIR 저역 통과 필터의 계단 응답과 주파수 응답계단 응답(입력이 0 → 1로 바뀜)주파수 응답 |H|01010n = 90fs/4fs/20.25FIR 이동 평균 4탭: y[n] = (x[n] + … + x[n−3]) ÷ 4IIR 1차: y[n] = 0.4·x[n] + 0.6·y[n−1]
두 저역 통과 필터. 이동 평균은 탭 수만큼 지나면 정확히 1에 닿고 특정 주파수(fs/4, fs/2)를 완전히 지운다. 1차 IIR은 1에 다가가기만 하고, 높은 주파수를 부드럽게 줄이되 0까지는 지우지 않는다.

주파수 축의 fs/2는 나이퀴스트 주파수다. 이동 평균의 주파수 응답이 0이 됐다가 다시 올라오는 것(옆 돌기)에서 보듯, "구간 평균"은 생각보다 나쁜 저역 통과 필터다. 실무에서는 원하는 통과 대역과 차단 대역을 정하고 설계 알고리즘(창 방법, Parks–McClellan, 버터워스·체비쇼프 IIR)으로 계수를 구한다.

창 함수와 스펙트럼 누설

DFT는 잘라 낸 N개 표본이 끝없이 되풀이된다고 가정한다. 신호가 구간 안에 딱 맞게 정수 주기로 들어 있지 않으면, 이어 붙인 경계에서 값이 툭 끊기고, 그 끊김이 모든 주파수에 조금씩 에너지를 뿌린다. 한 칸에 있어야 할 에너지가 이웃 칸으로 새는 이 현상이 스펙트럼 누설이다. 큰 소리 옆의 작은 소리가 누설에 묻혀 안 보이게 된다.

해결은 구간 양 끝을 0으로 부드럽게 줄이는 창 함수를 곱하는 것이다. 한(Hann) 창(코사인 한 주기를 뒤집어 올린 꼴)이 가장 흔하다. 끝이 이어지니 먼 칸으로의 누설이 크게 준다. 대가로 봉우리가 넓어져 가까운 두 주파수를 가르는 힘(해상도)은 떨어진다. 해밍, 블랙먼–해리스, 카이저 같은 창은 이 둘 사이의 다른 절충이다. 스펙트럼 분석기 프로그램에 창 선택 메뉴가 있는 이유다.

칸 사이 주파수 사인의 스펙트럼을 사각 창과 한 창으로 비교한 그림0dB−20dB−40dB−60dB−80dB실제 4.50481216DFT 칸 k(주기 수)사각 창한(Hann) 창칸 12에서사각 -25.3dB한 -62.9dB대신 한 창은 봉우리가두 칸으로 넓어진다
스펙트럼 누설. 32개 표본에 4.5주기가 든 사인은 어느 칸에도 딱 맞지 않는다. 사각 창(그냥 자르기)은 멀리까지 에너지가 새고, 한 창은 봉우리에서 멀어질수록 빠르게 줄어든다.

z 변환의 직관: 극과 영점

z 변환은 신호 x[n]을 z의 거듭제곱 급수 Σ x[n]·z^(−n)으로 쓰는 것이다. z^(−1)이 "한 칸 늦추기"라, 차분 방정식이 z에 대한 분수식 H(z) = (분자 다항식) ÷ (분모 다항식)이 된다. z를 단위원 위의 e^(jω)로 두면 그 값이 곧 주파수 ω에서의 응답이다. 그래서 필터의 성질을 복소 평면의 점 몇 개로 읽을 수 있다.

  • 영점(분자가 0): 단위원 위에 있으면 그 주파수를 완전히 지우고, 가까우면 크게 줄인다.
  • 극(분모가 0): 가까운 주파수를 키운다. 단위원 안에 있어야 안정하고, 원 밖에 있으면 출력이 끝없이 커진다. 극이 원에 가까울수록 응답이 날카롭게 솟고 오래 울린다(공진).
z 평면 단위원 위에 이동 평균 필터의 영점과 1차 IIR 필터의 극을 표시한 그림ω = 0 (직류)π/2π3π/2z = 0.6단위원 위의 각도 ω = 주파수0이 직류, π가 나이퀴스트(fs/2)영점: 4탭 이동 평균원 위에 있으면 그 주파수가 0이 된다극: 1차 IIR (α = 0.4)극 가까운 주파수가 커진다. 직류(z = 1)에가까워 저역 통과가 된다극이 원 밖에 있으면 출력이 끝없이 커진다(불안정)
z 평면. 4탭 이동 평균의 영점 세 개는 단위원 위 π/2, π, 3π/2에 있어 fs/4와 fs/2를 지운다(앞 그림의 0이 되는 자리). 1차 IIR의 극은 원 안의 직류 쪽에 있다.

연속 시간 회로(아날로그 필터)는 같은 일을 라플라스 변환의 s 평면에서 하고, 디지털 필터를 설계할 때 아날로그 설계를 쌍선형 변환으로 z 평면에 옮기는 일이 많다.

응용

  • 오디오: 이퀄라이저는 바이쿼드 IIR 여러 개로 대역마다 소리를 키우고 줄인다. 잡음 제거, 에코 제거(통화), 피치 검출, 음량 측정(LUFS)도 필터와 FFT의 조합이다. 이 사이트의 스펙트럼 분석기와 음량 측정이 실제 예다.
  • 이미지는 2차원 신호: 블러는 2D 저역 통과, 날카롭게 하기는 고역을 키우는 것, 경계 검출은 미분 필터다(그래픽 기초 노트의 블러, 컴퓨터 비전 노트의 소벨). 카메라 센서와 화면의 무아레도 2차원 앨리어싱이다.
  • 압축: JPEG은 8×8 픽셀 블록을, MP3·AAC는 소리 구간을 DCT 계열 변환으로 주파수 성분으로 바꾼다. 자연스러운 신호는 에너지가 낮은 주파수 몇 개에 몰리므로, 높은 주파수 계수를 거칠게 양자화하거나 버려도 사람이 잘 못 알아챈다. 무손실·손실 압축의 큰 그림은 데이터 노트에 있다.
  • 통신과 센서: 와이파이·LTE·5G는 데이터를 수많은 주파수 칸에 나눠 싣는 OFDM을 FFT로 만들고 푼다. 레이더는 반사파와 보낸 파의 상관으로 거리를, 주파수 변화(도플러)로 속도를 잰다. 심전도·뇌파 기기는 전원선의 50/60Hz 잡음을 노치 필터로 지운다.
8픽셀 밝기 값과 그 DCT 계수. 첫 계수가 대부분을 차지하고 나머지는 작다픽셀 밝기 8개5255616670616473DCT 계수 8개177.5−14.4−5.7−6.77.1−3.1−0.72.4앞 2개 계수에 에너지 99.6%첫 계수(직류) = 평균 밝기 × √8JPEG 예제로 흔히 쓰는 8×8 블록의 첫 줄
DCT 에너지 몰림. 천천히 변하는 8픽셀을 DCT하면 앞의 두 계수가 거의 모든 에너지를 가져간다. 뒤쪽 작은 계수를 0으로 만들어도 원래 줄과 거의 같게 되살아난다.

흔한 오해

  • "디지털 소리는 계단 모양이다": 표본을 막대로 그리면 계단처럼 보이지만, 표본은 점일 뿐이고 그 사이를 잇는 방법은 샘플링 정리가 정해 둔다. 이상적인 복원은 표본마다 sinc 함수를 놓고 더하는 것이고, 실제 DAC는 계단(영차 유지)을 낸 뒤 저역 통과 필터로 나이퀴스트 위의 성분을 걸러 매끄러운 곡선을 만든다(샘플링 정리 문서). 대역이 제한된 신호라면 되살린 곡선은 원래 곡선과 같다. Xiph.Org의 Digital Show & Tell이 실제 장비로 이것을 보여 준다.
  • "최고 주파수의 정확히 두 배로 뽑으면 된다": 조건은 두 배보다 엄격히 커야 한다. 정확히 fs/2에서는 위상과 진폭이 다른 여러 사인이 똑같은 표본(+, − 번갈아)을 내므로 어느 것이었는지 되살릴 수 없다. 0을 지나는 자리에서 뽑힌 사인은 아예 사라진다. 실제로는 필터가 기울어질 자리도 필요해 위의 CD처럼 여유를 둔다. 반대로 신호가 좁은 대역에만 있다면 그 대역의 최고 주파수의 두 배보다 느리게 뽑아도 되는 대역 통과 샘플링도 있다.
  • "샘플레이트가 높을수록 음질이 좋다": 들을 수 있는 대역을 다 담은 뒤에는 더 높여도 들리는 차이가 없다. Xiph.Org의 Monty Montgomery는 24/192 글에서 192kHz 음원은 이득이 없고, 담긴 초음파가 재생 장비에서 상호 변조 왜곡을 일으켜 오히려 조금 나빠질 수 있다고 설명한다. 같은 글은 녹음·제작 단계에서 24비트를 쓰는 데는 이유(헤드룸, 잡음 바닥, 레벨 실수의 여유)가 있다고 함께 적는다. 작업용 형식과 배포 형식은 다른 이야기다.
  • "제로 패딩하면 주파수 해상도가 높아진다": 신호 뒤에 0을 붙여 FFT 길이를 늘리면 칸이 촘촘해지지만, 이는 같은 스펙트럼을 사이사이 보간한 것이다(제로 패딩 정리). 새 정보가 들어온 것이 아니라서, 가까운 두 주파수를 가르는 힘은 여전히 실제로 잰 구간의 길이가 정한다. 봉우리 위치를 더 정확히 읽는 데는 쓸모가 있다.
  • "FFT를 하면 그 순간의 주파수를 안다": FFT는 잘라 낸 구간 전체의 평균적인 주파수 성분이다. 위 DFT 절처럼 구간이 짧으면 시간은 정확하지만 주파수가 뭉개지고, 길면 그 반대다. 시간에 따라 바뀌는 소리는 스펙트로그램으로 본다.