푸리에 변환: MP3, JPEG, Wi-Fi, MRI 압축의 기초
오디오 트랙부터 전파까지 모든 신호는 서로 다른 주파수, 진폭, 위상을 가진 사인파의 합으로 분해될 수 있습니다. 이는 1807년 장-바티스트 푸리에가 제안한 아이디어로, 라그랑주는 불가능하다고 일축했습니다. 이 과정은 가역적이며 무손실입니다.
어떤 신호 = sin(f₁) × a₁ + sin(f₂) × a₂ + sin(f₃) × a₃ + ...
여기서 f는 주파수, a는 진폭
이 분해는 오디오 처리, 이미지 처리, 무선 통신에 적용됩니다. FFT(고속 푸리에 변환)는 계산 속도를 O(n²)에서 O(n log n)으로 높여 실용적인 사용을 가능하게 합니다.
심리음향학과 FFT를 통한 MP3 압축
MP3는 비트레이트를 1.4 Mbps(CD)에서 128 Kbps로 줄입니다. 알고리즘은 주파수 영역으로 전환하기 위해 FFT를 사용합니다.
# MP3 압축을 위한 의사 코드
frequencies = fft(audio_signal)
for f in frequencies:
if f.frequency > 20000: # 귀는 20 kHz 이상을 들을 수 없음
f.amplitude = 0
if f.is_masked_by(louder_neighbor): # 심리음향 모델
f.amplitude = 0 # 큰 소리 근처의 작은 소리는 들리지 않음
if f.amplitude < threshold: # 너무 조용함
f.amplitude = 0
compressed = encode(remaining_frequencies)
20 kHz 이상의 주파수와 가려진 구성 요소는 버려집니다. 디코딩은 역 FFT를 포함합니다. 차이는 인간의 귀에 인지되지 않습니다.
이미지를 위한 JPEG와 DCT
JPEG는 8×8 픽셀 블록에 푸리에의 변형인 DCT(이산 코사인 변환)를 사용합니다. 낮은 주파수는 형태를 보존하고, 높은 주파수(세부 사항, 노이즈)는 양자화됩니다.
8×8 픽셀 블록
↓
DCT: "시각적 주파수"로 분해
↓
낮은 주파수 = 부드러운 그라데이션, 일반적인 형태
높은 주파수 = 날카로운 가장자리, 미세한 세부 사항, 노이즈
↓
높은 주파수 버리기 (일몰 사진에서는 눈에 띄지 않음)
↓
압축된 이미지, 원본보다 10–20배 작음
블록 현상과 같은 아티팩트는 과도한 고주파수 차단에서 비롯됩니다. 역변환은 이미지를 복원합니다.
Wi-Fi와 모바일 통신에서의 OFDM
OFDM(직교 주파수 분할 다중화)은 80 MHz 넓이의 채널 내 수백 개의 부반송파 주파수에 데이터를 변조합니다. 부반송파는 사인파 특성으로 인해 직교합니다.
80 MHz 넓이의 하나의 Wi-Fi 채널:
[부반.1][부반.2][부반.3]...[부반.234]
↓ ↓ ↓ ↓
데이터 데이터 데이터 ... 데이터
모든 주파수가 동시에 전송됩니다.
수신기는 FFT를 통해 다시 분리합니다.
Wi-Fi 6는 980개의 부반송파에 4096-QAM을 사용합니다. 수신기는 복조를 위해 IFFT를 적용합니다. 4G/5G, DSL, DVB-T에서도 유사합니다.
- OFDM 장점: 다중 경로 전파에 대한 강인성, 높은 스펙트럼 효율성.
- 계산: 칩에서 실시간 FFT/IFFT 수행.
- 규모: 수십억 개의 장치가 초당 수조 번의 FFT를 수행합니다.
Shazam과 MRI에서의 인식
Shazam: 오디오 FFT → 스펙트로그램 → 지문으로서의 주파수 피크 → 데이터베이스 검색.
1. 3초 오디오 녹음
2. FFT → 스펙트로그램
3. 피크 찾기 → 지문
4. 데이터베이스와 비교
피크는 노이즈에 강건합니다. MRI: 자석이 양성자를 공명시켜, k-공간(주파수 영역)을 기록합니다. 역 FFT는 이미지를 생성합니다.
양성자 공명 → 전파 → k-공간
↓
역 FFT
↓
이미지
Python에서 FFT 구현하기
쿨리-튜키 알고리즘을 이해하기 위한 재귀적 FFT.
import numpy as np
def fft(x):
n = len(x)
if n == 1:
return x
even = fft(x[0::2])
odd = fft(x[1::2])
T = [np.exp(-2j * np.pi * k / n) * odd[k] for k in range(n // 2)]
return [even[k] + T[k] for k in range(n // 2)] + \
[even[k] - T[k] for k in range(n // 2)]
속도 향상은 실시간 신호 처리를 가능하게 합니다.
핵심 요약
- 푸리에 분해는 파동 과정(소리, 빛, 전파)에 보편적으로 적용됩니다.
- FFT는 복잡도를 O(n²)에서 O(n log n)으로 줄여, 초당 수천조 번의 연산을 가능하게 합니다.
- 응용 분야: 압축(MP3/JPEG), 통신(OFDM), 의학(MRI), 인식(Shazam).
- 사인파의 직교성은 간섭 없이 신호 분리를 보장합니다.
- 세계의 물리학은 기본 진동의 합입니다; 푸리는 이 언어를 해독합니다.
— Editorial Team
아직 댓글이 없습니다.