안티에일리어싱 필터 설계

한 줄 요약 — 차수·응답·샘플링률을 함께 정합니다. 오버샘플링(oversampling)이 거의 항상 정답입니다.


설계 절차

1) 신호 대역 fsigf_{sig} 확정 2) 필요 감쇠 AA 결정 — ADC 분해능(resolution)분해능 resolutionADC 가 구분할 수 있는 가장 작은 전압 차이로, 비트 수와 기준전압으로 정해집니다.1 LSB=Vref/2n1\,\mathrm{LSB} = V_{ref}/2^n자세히 보기 →에서 3) 샘플링률 fsf_s 후보 설정 4) 필요 차수 계산 5) 응답 종류 선택 (베셀 / 버터워스 / 체비셰프) 6) 실현 가능성 검토 → 안 되면 3번으로 돌아가 fsf_s 조정


1~2단계: 필요 감쇠

Areq=6.02n+1.76 [dB]A_{req} = 6.02n + 1.76\ [\text{dB}]
기호
A_req이득 (req)gain (req)
n비트 수 또는 개수number of bits or count
ADC감쇠
10비트62 dB
12비트74 dB
14비트86 dB
16비트98 dB
24비트146 dB (비현실적 → 오버샘플링 필수)

💡 실무적으로는 ADC의 실효 분해능(ENOB)실효 비트 ENOBADC 가 실제로 쓸 수 있는 비트 수로, 데이터시트의 비트 수보다 늘 1~3비트 낮습니다.ENOB=SNDR−1.766.02\mathrm{ENOB} = \frac{\mathrm{SNDR}-1.76}{6.02}자세히 보기 → 기준으로 잡습니다. 12비트 ADC의 ENOB가 11비트라면 68 dB면 충분합니다.


3~4단계: 차수 계산

n≥Areq20log⁡10(fs−fsigfsig)n \geq \frac{A_{req}}{20\log_{10}\left(\dfrac{f_s-f_{sig}}{f_{sig}}\right)}
기호
A_req이득 (req)gain (req)
f_sig신호 주파수signal frequencyHz
f_s샘플링 주파수sampling frequencyHz
n비트 수 또는 개수number of bits or count

표 (12비트, 74 dB)

fs/fsigf_s/f_{sig}dB/차수필요 차수
2.53.521 ❌
49.58
1019.14
2025.63
4031.83
10039.92
1000602 (여유)

fs/fsigf_s/f_{sig}를 10 이상으로 잡으면 4차 이하로 해결됩니다.


5단계: 응답 선택

응답통과대역차단(cutoff)군지연(group delay)용도
베셀완만한 롤오프 시작완만평탄 ✅파형 보존이 중요
버터워스최대 평탄중간변동범용
체비셰프 I리플(ripple)리플 ripple직류가 되다 만 나머지 교류분으로, 평활 커패시터가 얼마나 큰지로 정해집니다.Vr=If CV_r = \frac{I}{f\,C}자세히 보기 →급격심한 변동주파수 분리
타원양쪽 리플최급격최악좁은 전이대역

왜 군지연이 중요한가

군지연이 주파수에 따라 다르면 각 주파수 성분이 다른 시간에 도착해 파형이 변형됩니다.

신호군지연 중요?
신경 스파이크(spike)✅ 매우 (파형으로 뉴런 분류)
심전도(ECG) QRS✅
정현파 진폭 측정❌
주파수 분석 (FFT)❌ (위상(phase) 보정 가능)
과도 응답 측정✅

파형 모양이 정보인 측정에서는 베셀을 쓰세요.

베셀의 대가

같은 차수에서 차단이 훨씬 완만합니다.

4차, 10fc10f_c에서 감쇠
버터워스−80 dB
베셀−60 dB

20 dB 손해 → 차수를 올리거나 오버샘플링으로 보완해야 합니다.


★ 오버샘플링 전략 (권장)

아날로그: 간단한 2~3차 필터 (베셀)ADC: 높은 샘플링률 (신호의 20~100배)디지털: 선형 위상 FIR 필터 + 데시메이션

이점

이점설명
아날로그 필터 단순화부품↓, 잡음↓, 왜곡↓, 비용↓
분해능 향상OSR당 log⁡2(OSR)/2\log_2(\text{OSR})/2 비트
선형 위상디지털 FIR로 파형 완벽 보존
유연성필터 특성을 나중에 변경 가능
다채널에 유리채널당 아날로그 부품 최소

대가

대가설명
ADC 속도·전력비례
데이터량비례 — 다채널이면 심각
디지털 처리 부하

계산 예제

신호 5 kHz, 12비트, 32채널

전략 A: 저샘플링 + 고차 아날로그

  • fsf_s = 20 kSPS, 8차 필터
  • 채널당 OP앰프 4개 → 128개 ❌
  • 데이터: 32×20k×2B=1.2832\times20\text{k}\times2\text{B} = 1.28 MB/s

전략 B: 오버샘플링 + 저차 아날로그

  • fsf_s = 200 kSPS, 3차 필터 (패시브 RC 1차 + 액티브 2차)
  • 채널당 OP앰프 1개 → 32개 ✅
  • 데이터: 32×200k×2B=12.832\times200\text{k}\times2\text{B} = 12.8 MB/s
  • 디지털 데시메이션(decimation) 후 저장: 1.28 MB/s

전략 C: 극한 오버샘플링 + 패시브만

  • fsf_s = 1 MSPS, 1차 RC만
    • 1000−55=199\frac{1000-5}{5} = 199 → 20log⁡199=4620\log 199 = 46 dB/차수 → 2차면 충분 (1차는 46 dB로 부족)
  • 채널당 저항 1개 + 커패시터(capacitor) 2개 → OP앰프 0개 ✅✅
  • 데이터: 64 MB/s (전송 부담)

B가 대개 최적점입니다. 부품과 데이터량의 균형이 좋습니다.


★ 다채널 시스템의 함정

멀티플렉스 ADC에서 채널당 실효 샘플링률 = 전체 / N입니다.

필터는 채널당 샘플링률 기준으로, 멀티플렉서(multiplexer) 앞에 채널마다 있어야 합니다 (10-04).

멀티플렉싱할 때 필터는 MUX 앞, 채널마다 하나씩 둡니다.

위치결과
각 채널마다 (MUX 앞) ✅채널마다 제대로 대역 제한됨. 부품은 N배
MUX 뒤에 하나만 ❌필터가 채널 전환 파형까지 뭉개 크로스토크가 됨

MUX 뒤에 필터를 두면, 채널이 바뀔 때마다 필터가 이전 채널 값에서 천천히 옮겨가므로 이전 채널의 값이 다음 채널에 섞입니다.

멀티플렉서 뒤의 필터는 안티에일리어싱 역할을 하지 못합니다.


시뮬레이션으로 확인

3차 안티에일리어싱 필터 (패시브 1차 + 액티브 2차) 회로도RP1.6kΩR110kΩR210kΩC13.3nFVIN1VCP10nFC22.2nFVP5VVN-5VU1OPA320VCCVCCVEEVEEINP1MIDINPOUTGND
3차 안티에일리어싱 필터 (패시브 1차 + 액티브 2차)워크벤치에서 열기 →
# examples/13-signal-chain/aa-filter-3rd.yaml
meta:
  name: 3차 안티에일리어싱 필터 (패시브 1차 + 액티브 2차)
  lesson: docs/13-signal-chain/06-antialiasing-design.md
components:
  - {ref: VP,  type: vdc, value: 5}
  - {ref: VN,  type: vdc, value: -5}
  - {ref: VIN, type: vac, value: 1}
  # 1차 패시브 RC (10 kHz)
  - {ref: RP,  type: r, value: 1.6k}
  - {ref: CP,  type: c, value: 10n}
  # 2차 살렌-키 (5 kHz, 베셀)
  - {ref: R1,  type: r, value: 10k}
  - {ref: R2,  type: r, value: 10k}
  - {ref: C1,  type: c, value: 3.3n}
  - {ref: C2,  type: c, value: 2.2n}
  - {ref: U1,  type: opamp, model: OPA320}
nets:
  VCC: [VP.p, U1.'v+']
  VEE: [VN.p, U1.'v-']
  IN:  [VIN.p, RP.1]
  P1:  [RP.2, CP.1, R1.1]
  MID: [R1.2, R2.1, C1.1]
  INP: [R2.2, C2.1, U1.'in+']
  OUT: [U1.out, U1.'in-', C1.2]
  GND: [VP.n, VN.n, VIN.n, CP.2, C2.2]
analyses:
  - {type: ac, sweep: dec, points: 50, fstart: 100, fstop: 10MEG}
expect:
  - {measure: gain_db, node: OUT, at: 5k,   analysis: ac, value: -3, tol: 2}
  - {measure: gain_db, node: OUT, at: 195k, analysis: ac, max: -74}

fsf_s = 200 kSPS일 때 195 kHz에서 −74 dB 이상 감쇠하는지 확인하세요.

💡 패시브 RC를 앞에 두는 이유: 살렌-키의 고주파 누설(7-05)을 막고, OP앰프에 들어가기 전에 큰 고주파를 미리 제거해 왜곡을 방지합니다.


⚖️ 트레이드오프 종합

선택✅⚠️
오버샘플링필터 단순, 분해능↑, 유연ADC 속도·전력·데이터량
고차 아날로그 필터낮은 샘플링률부품↑, 잡음↑, 위상 왜곡, 감도↑
베셀파형 보존차단 완만 → 차수↑
버터워스급격한 차단링잉(ringing), 파형 왜곡
패시브 앞단 RC 추가누설 방지, OP앰프 보호신호 감쇠(작음), 부품
필터 없음부품 0에일리어싱(aliasing)에일리어싱 aliasing샘플링 주파수의 절반보다 높은 성분이 낮은 주파수인 척 되접혀 들어오는 현상으로, 한 번 섞이면 되돌릴 수 없습니다.자세히 보기 → — 복구 불가 ❌

🔌 실제 쓰임새

시스템구성
단채널 정밀4~5차 베셀 + 4× 오버샘플링
다채널 (32ch+)1~2차 패시브/액티브 + 20~50× 오버샘플링
ΔΣ ADC내장 오버샘플링 → 간단한 RC면 충분
오디오시그마-델타 (필터 거의 불필요)
고속 (MHz)고차 액티브 또는 LC

💡 ΔΣ(시그마-델타(sigma-delta)) ADC를 쓰면 안티에일리어싱이 매우 쉬워집니다. 내부에서 수십~수백 배 오버샘플링하므로, 외부에는 1차 RC만 있으면 됩니다. 생체 신호용 AFE 칩이 대부분 ΔΣ를 쓰는 이유입니다.


⚠️ 이상과 실제의 차이

이상실제
필터가 계산대로부품 오차로 fcf_c ±20%
완전 차단살렌-키 고주파 누설
신호만 접힘잡음도 접힘 — 광대역 잡음이 OSR\sqrt{OSR}배로
필터 위치 무관MUX 앞, 채널마다
커패시터 값 안정X7R은 온도·DC 바이어스로 변동 → C0G 필수

연습문제

문제 1. 신호 2 kHz, 14비트 ADC, fsf_s = 50 kSPS. 필요 차수는?

연습 13-06-1 — 14비트에 필요한 필터 차수 회로도RA131.8kΩ차단 2 kHzRA231.8kΩCA12.71nFRB131.8kΩRB231.8kΩCB16.53nFVS1VCA22.31nFCB2956pFVP5VVN-5VU1OPA320U2OPA320VCCVCCVCCVEEVEEVEEINA1A2S1B1B2OUTGND
연습 13-06-1 — 14비트에 필요한 필터 차수워크벤치에서 열기 →
풀이 Areq=6.02×14+1.76=86 dBA_{req} = 6.02\times14+1.76 = 86\ \text{dB}
기호
A_req이득 (req)gain (req)
50−22=24⇒20log⁡1024=27.6 dB/차수\frac{50-2}{2} = 24 \Rightarrow 20\log_{10}24 = 27.6\ \text{dB/차수} n≥8627.6=3.1→4차n \geq \frac{86}{27.6} = 3.1 \rightarrow \textbf{4차}
기호
n비트 수 또는 개수number of bits or count

문제 2. 위 문제에서 베셀을 쓰려면? (베셀은 버터워스보다 약 5 dB/차수 불리하다고 가정)

exercises/13-06-bessel-order.yaml
풀이 27.6−5=22.6 dB/차수27.6-5 = 22.6\ \text{dB/차수} n≥8622.6=3.8→4차n \geq \frac{86}{22.6} = 3.8 \rightarrow \textbf{4차}
기호
n비트 수 또는 개수number of bits or count

여전히 4차로 가능합니다. 다만 여유가 적으므로 실제 응답을 시뮬레이션으로 확인해야 합니다.

더 안전한 대안: fsf_s를 100 kSPS로 올리면 982=49\frac{98}{2} = 49, 20log⁡49=33.820\log 49 = 33.8 dB/차수(베셀 28.8) → 3차면 충분.

문제 3. 64채널, 채널당 신호 1 kHz, 12비트. 어떻게 설계하겠습니까?

exercises/13-06-64ch-design.yaml
풀이

핵심 제약: 채널당 부품 수 = 시스템 규모

전략 비교:

전략fsf_s(전체)채널당 fsf_s필터 차수채널당 부품데이터량
A256 kSPS4 kSPS9차 ❌OP앰프 50.5 MB/s
B640 kSPS10 kSPS4차OP앰프 21.3 MB/s
C3.2 MSPS50 kSPS2차OP앰프 16.4 MB/s
D12.8 MSPS200 kSPS1차(RC만)OP앰프 0 ✅26 MB/s

권장: C 또는 D

D의 매력: 채널당 저항 1개 + 커패시터 1개만 있으면 됩니다. 64채널이면 부품 128개 — 관리 가능합니다.

D의 문제: 데이터량 26 MB/s. USB 2.0(35 MB/s 실효)으로는 아슬아슬하고, 무선은 불가능합니다.

절충 — 디지털 데시메이션:

  • ADC는 12.8 MSPS로 읽되, FPGA/MCU에서 즉시 디지털 필터 + 데시메이션
  • 저장·전송은 채널당 4 kSPS로 → 0.5 MB/s ✅
  • 아날로그는 RC만, 디지털에서 선형 위상 필터

최종 설계:

채널[RC 1차, 20 kHz][64:1 MUX][ADC 12.8 MSPS][FPGA: FIR + 데시메이션]0.5 MB/s

⚠️ MUX 세틀링 확인 필수: 12.8 MSPS면 채널당 78 ns. 12비트 세틀링에 8.3τ8.3\tau가 필요하므로 τ<9.4\tau < 9.4 ns → 소스 임피던스와 배선 용량을 그에 맞춰야 합니다 (9-06).

이 설계 흐름이 16-01의 액티브 어레이와 정확히 같은 구조입니다. 채널 수가 많아지면 아날로그를 단순화하고 디지털로 밀어내는 것이 유일한 해법입니다.


이전 ← 05 DC 오프셋 제거 | 다음 → 07 락인 검출 개요