REMI Lab강의 노트

Wireless Embedded Systems E03

3장 디지털 신호와 표본화

ADC의 용어와 전달 특성

ADC는 연속한 전압을 정수로 바꾼다. 정수 하나는 몇 볼트를 뜻하고, 몇 가지 정수를 낼 수 있을까?

ADC(analog-to-digital converter)는 두 가지 일을 한다. 클록이 1/fs1/f_s마다 언제 잴지 정하고(시간 표본화), 비트 수가 잰 전압을 어떤 값으로 적을지 정한다(진폭 양자화). 6비트 ADC는 1/fs1/f_s마다 6비트 정수 하나를 내놓는다(강의 자료 WE3 19쪽). 두 일은 서로 다른 오차를 만든다. aliasing은 시간 표본화에서 생기고, 양자화 오차와 양자화 잡음은 진폭 양자화에서 생긴다.

용어 뜻
분해능 nn 양자화에 쓰는 비트 수
코드 수 2n2^n 낼 수 있는 출력 정수의 가짓수
FSR(full-scale range) ADC가 받아들이는 입력 전압의 범위
LSB=FSR/2n\mathrm{LSB}=\mathrm{FSR}/2^n 코드 하나가 차지하는 전압 폭
최대 코드 2n−12^n-1 읽을 수 있는 가장 큰 코드(0부터 셀 때)
full-scale 입력 전압 (2n−1)⋅LSB(2^n-1)\cdot\mathrm{LSB} 최대 코드가 시작되는 입력 전압
전달 특성 입력 전압과 출력 코드의 관계

예를 들어 n=8n=8, FSR = 5 V인 ADC(강의 자료 WE3 21쪽)는 코드가 256개이고 LSB=5/256=19.53\mathrm{LSB}=5/256=19.53 mV이다. 최대 코드는 255(11111111)이고, 입력이 255×19.53 mV=4.980255\times19.53\text{ mV}=4.980 V에 이르면 이 코드가 나온다.

ADC 앞에 증폭기를 두면 입력 쪽에서 본 FSR이 바뀐다(강의 자료 WE3 22쪽). 기준 전압 VREF=5V_{\mathrm{REF}}=5 V인 12비트 ADC 앞에 이득 2인 PGA(programmable gain amplifier)를 두면, ADC 입력의 0…5 V는 PGA 입력의 0…2.5 V에 해당한다.

FSR=VREFPGA gain=5 V2=2.5 V1 LSB=2.5 V212=610.35 μV\begin{gathered} \mathrm{FSR}=\frac{V_{\mathrm{REF}}}{\text{PGA gain}}=\frac{5\text{ V}}{2}=2.5\text{ V}\\ 1\,\mathrm{LSB}=\frac{2.5\text{ V}}{2^{12}}=610.35\ \mu\text{V} \end{gathered}

이득을 올리면 작은 신호를 더 잘게 나누지만, 잘리는(clipping) 전압도 그만큼 낮아진다. Pluto의 수신 이득을 바꾸는 것도 같은 일이다.

전달 특성은 계단이다. 그래서 ADC는 선형 시스템이 아니다. LSB가 1 V인 ADC에서 0.3 V와 0.3 V를 따로 양자화해 더한 값과, 둘을 더한 0.6 V를 양자화한 값은 다르다. 이 비선형이 만드는 오차가 아래의 양자화 오차이다.

양자화 오차

계단이 만드는 오차는 얼마나 크고, 평균적으로 얼마일까?

이 장의 ADC는 입력 범위 −VFS…+VFS-V_{\mathrm{FS}}\ldots+V_{\mathrm{FS}}를 폭 LSB인 칸 2n2^n개로 나누고, 입력이 든 칸의 가운데 값을 출력 qq로 낸다. 오차를 e=q−xe=q-x라 하면 입력이 범위 안에 있는 한

∣e∣≤LSB2|e|\le\frac{\mathrm{LSB}}{2}

이다(강의 자료 WE3 23쪽). 코드 하나가 0 V를 가운데에 두는 ADC도 있다(강의 자료 WE3 23쪽). 계단이 ½ LSB 옮겨질 뿐 오차의 범위는 같다. 코드 kk를 전압 k⋅LSBk\cdot\mathrm{LSB}로 읽으면(내림) 오차는 0…−10\ldots-1 LSB, 평균 −12-\tfrac12 LSB가 된다(강의 자료 WE3 21쪽). 출력을 칸의 가운데로 읽어야 오차가 ±12\pm\tfrac12 LSB이다.

입력이 여러 코드를 지나며 계단과 무관하게 움직이면, ee는 −LSB/2…LSB/2-\mathrm{LSB}/2\ldots\mathrm{LSB}/2에 고르게 퍼진다. 고르게 퍼진 오차의 평균은 0이고 평균 제곱은

e2‾=1LSB∫−LSB/2LSB/2e2 de=LSB212\overline{e^2}=\frac{1}{\mathrm{LSB}}\int_{-\mathrm{LSB}/2}^{\mathrm{LSB}/2}e^2\,de=\frac{\mathrm{LSB}^2}{12}

이므로 RMS 오차는 LSB/12≈0.289 LSB\mathrm{LSB}/\sqrt{12}\approx0.289\,\mathrm{LSB}이다. 이 값은 오차가 고르게 퍼졌다는 가정에서 나왔다. 비트 수가 작거나 입력이 몇 코드만 지나면 오차가 입력을 따라 움직여 이 가정이 깨진다.

▶로 한 단계씩 넘기며 먼저 입력에서 가장 가까운 출력 레벨로 가는 화살표를 보고, 그다음 코드와 오차가 쌓이는 것을 본다. 비트 수를 바꾸고 끝까지 재생해 오차의 분포와 지금까지의 RMS를 비교한다.

합성 정현파 한 주기를 256표본으로 나누어 양자화했다. 입력 범위는 −1…+1 V, LSB = 2 V/2ⁿ이다. 오차 분포는 지금까지 모은 표본으로 계산하며 점선은 균일 분포이다. LSB/√12는 오차가 고르게 퍼질 때의 값이고, 적은 비트 수나 잘린 입력에는 맞지 않는다.

해 보기

  1. 첫 표본을 양자화한다.
    관찰

    입력에서 출력 레벨로 간 거리와 e[n]의 크기를 견준다.

  2. 8비트로 끝까지 모은다.
    관찰

    오차 분포는 균일 분포의 점선과, RMS는 LSB/√12와 견준다.

  3. 진폭을 1.1 V로 키운다.
    관찰

    입력이 범위를 넘으면 끝 코드에 머물고 오차가 ½ LSB를 넘는다.