Computer Science

[CS] 아날로그 처리 방법

oagree0123 2022. 2. 9. 02:22

이 글은 '한 권으로 읽는 컴퓨터 구조와 프로그래밍' 을 정리하여 작성한 글입니다.


아날로그 처리 방법

실제 소리나 빛 같이 아날로그는 연속적이지만, 

컴퓨터에는 연속적인 대상을 저장할 방법이 없습니다.

 

그래서 데이터의 샘플을 취해야 합니다.

 

샘플링

샘플을 취한하는 말은 시간이나 공간상 일정한 간격으로 값을 읽어야 한다는 뜻입니다.

 

저장한 데이터를 다시 영상이나 빛으로 보여주기 위해서는

샘플링 데이터로부터 아날로그 신호를 다시 만들어야 합니다.

 

샘플링은 새로운 것이 아닙니다.

무성 영화 시절에도 영화 화면은 1초당 16프레임을 샘플링해 만들었습니다.

 

아래에서는 컴퓨터가 아날로그 신호를 만들거나, 아날로그 신호를 분석하는 방법을 알아보겠습니다.

 

디지털을 아날로그로 변환

디지털 숫자를 사용해 아날로그 전압을 만들어내기 위해서는 DA 변환기를 사용해야 합니다.

 

DA 변환기

아래의 그림은 8비트로 9 수준을 만들어냈습니다.

(0개의 LED를 킨 것 부터 8개를 모두 킨 경우 까지)

 

 

아래의 그림은 0 ~ 256 수준의 표현으로 위의 DA 변환기보다 많은 표현을 할 수 있습니다.

 

 

이러한 DA 변환기의 모습은 2진수 표현법을 본떴음을 알 수 있습니다.

비트 1은 비트 0보다 2배 더 밝고, 비트 2는 비트 0보다 4배더 밝은 빛은 냅니다.

 

위에서는 LED를 사용했지만, 실제 변환기(D/A 또는 DAC)는 빛이 아니라 전압을 만들어 냅니다.

 

해상도

해상도는 DAC가 만들어내는 단계 수를 느슨히 표현할 때 쓰입니다.

느슨히라고 하는 이유는 DAC가 10비트 해상도라면,
실제는 1/2의 10제곱가지씩 수준을 변경할 수 있다는 뜻이기 때문입니다.

 

정확히 말하면, 해상도는 DAC가 만들어낼 수 있는 최대 전압을 단계 수로 나눈 값이어야 합니다.

예를들어, 10비트 DAC가 최대 5V를 만들어 낼 수 있다면, 해상도는 대략 0.005V 입니다

 

 

DAC를 이용하면 아날로그 파형을 만들 수 있습니다.

오디오 플레이어나 신디사이저가 아래와 같은 방식으로 작동 합니다.

 

DAC 입력을 일정한 비율로 변경하면 파형을 만들 수 있는데, 

8비트 DAC를 포트 B에 연결하면 아래 그림과 같이 톱니 파형을 만들 수 있습니다.

 

 

더 복잡한 파형을 만들기 위한 장치에는 데이터를 저장하기 위한 메모리가 들어 있는 경우가 많습니다.

장치는 추가 회로를 통해 메모리에 있는 데이터를 읽습니다.

CPU가 수행하는 다른 작업과 무관하게 데이터를 일정한 비율로 읽어서 처리하기 위해

아래 그림처럼 FIFO(First In First Out) 선입선출 설정을 만들어 구현합니다. 이 모습은 큐(Queue)와 같습니다.

 

 

FIFO 메모리와 관련한 두가지 트리거 높은 워터터마크, 낮은 워터마크가 있습니다.

낮은 워터마크는 FIFO가 거의 빈 상태가 될 경우 인터럽트를 발생시키고

높은 워터마크는 거의 가득 찬 상태에 인터럽트를 발생시킵니다.

 

인터럽트 CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능

 

이러한 방법을 이용하여 고수준의 소프트웨어에서는 일정한 비율로 연속적으로 출력이 일어나도록 메모리를 채울 수 있습니다. 이는 물탱크의 동작과 비슷합니다. 수위가 낮은 워터마크보다 낮으면 펌프를 가동하여 물을 탱크에 넣고, 높은 워터마크에 이르면 펌프를 꺼버립니다. FIFO는 각기 다른 속도로 동작하는 여러 요소를 결합할 때 좋습니다.

 

 

아날로그를 디지털로 변환

AD 변환기는(A/D나 ADC) DAC 보다 복잡합니다.

 

먼저, 값을 측정할 수 있도록 아날로그 신호의 현재 값을 흔들리지 않게 안정적으로 잡아내야 합니다.

아래 그림으로 입력 파형의 샘플을 취해야 합니다.

 

 

디지털화한 파형이 아날로그 파형과 닮기 위해서는 여러 번 샘플을 얻어야 하는데
샘플 앤드 홀드 라는 회로를 사용해 아날로그 파형의 값을 잡아낼 수 있습니다.

 

스위치를 닫아 샘플을 얻으면 아날로그 신호의 현재 값이 저장 탱크에 저장됩니다.

저장 탱크에는 안정된 값이 들어 있기 때문에 이를 측정해 디지털 값을 만들 수 있습니다.

 

이후에는 문턱값과 신호를 비교하는 장치가 필요한데, 두 전압 중 높은 전압을 알려주는 비교기라는 회로가 있습니다.

비교기는 문턱값을 선택할 수 있는 논리 게이트와 비슷합니다.

 

 

비교기의 +입력 신호가 -입력 신호보다 더 크거나 같으면 출력이 1, 그렇지 않으면 0입니다.

아래의 그림처럼 비교기를 여러 기준 전압과 연결해 쌓으면 플래시 변환기를 만들 수 있습니다.

 

 

플래시 변환기는 번개같이 빠르게 결과를 만들어낸다는 이유로 붙여진 이름이며,

각 기준에 따라 0.125V보다 낮으면 00000000, 0.250V ~ 0.375V 사이면 00000011 이 되는 식입니다.

 

이 방식도 위에서 본 저수준의 DAC와 똑같이 비트를 효율적으로 쓰지 못하는 문제가 있습니다.

 

플래시 변환기는 비교기마다 다르게 고정된 기준 전압을 사용합니다.
이때 기준 전압을 변화시킬 수 있다면, 비교기를 하나만 사용해도 될 것입니다.

이러한 역할을 DAC 가 해줄 수 있습니다.

 

 

위의 그림은 저장탱크에서 나온 샘플값을 DAC의 값과 비교기를 사용하여 비교하는 회로입니다.

Clear가 활성화 되면 샘플값이 DAC값과 같을 때까지 카운터 수를 셉니다.
샘플값과 DAC 값이 같아지면 비교기의 출력이 0이 되면서 카운터가 비활성화되므로 원하는 값을 얻습니다.

카운터에는 샘플을 디지털로 변환한 값이 들어 있습니다.

 

아래 그림은 위 회로의 동작을 볼 수 있습니다.
아날로그 신호는 왔다 갔다 하지만, 샘플을 취한 다음 저장 탱크의 출력은 안정적인 것을 볼 수 있습니다.

그 후 카운터를 0으로 성정하고 DAC 출력과 샘플링된 값이 같을 때까지 수를 셉니다. 

두 값이 가아지면 카운터가 멈추고 원하는 변환이 끝나게 됩니다.

 

DAC 출력이 경사로를 올라가는 것처럼 변하기 때문에 ADC를 램프 변환기라고 부릅니다.

램프 변환기는 신호에서 얻은 샘플의 크키게 선형으로 비례하는 시간이 걸리기 때문에 오래 걸린다는 단점이 있습니다.

샘플이 최댓값이고 ADC가 n비트라면 최대 2의n제곱 클록이 걸려야 변환이 끝나게 됩니다.

 

이를 우회하는 방법으로 연속 추정 변환기가 있습니다.

이 변환기는 하드웨어로 2진 검색을 진행합니다.

 

첫 클록 DAC를 전체 범위의 절반으로 설정합니다.
이 값이 샘플값보다 작으면 DAC 값을 전체 범위의 1/4 만큼 더 증가시킵니다.

이 변경한 값이 샘플값보다 너무 크면 DAC값을 전체 범위의 1/8만큼 더 감소 시킵니다.

이 값이 샘플값보다 더 낮으면 다시 1/6만큼 증가 시킵니다.

최악의 경우 logn 클록이 걸립니다.

 

DAC에 해상도와 비슷하게 ADC에도 비슷하게 사용합니다.