아날로그와 디지털신호의 변환에 대해 쉽게 설명한 채널
원 내용은 8분도 채 안되서 cs 스터디 가기 전에 보고 갔다.
어떤 수치의 변화량을 측정하는데 이것이 연속적으로 변화됨을 나타내는 개념이다.
대부분 자연계에서의 변화는 전부 Anolog 이다.
이를 그래프로 표시해 보면
처럼 시간에 따라 연속적으로 변환다.
예를들면 하루동안의 기온 변화를 생각해 보자
새벽에 가장 낮은 기온을 보이다가 해가 뜨면 점점 기온이 올라간다. 이는 점심에 달했을시에 최고점으로 올라가며
저녁이 되어 해가 지면 기온이 점점 낮아진다.
해가 뜨자마자 바로 한낮의 기온까지 올라가는것도 아니며 저녁에 해가 지자마자 바로 기온이 뚝 떨어지는것도 아니다.
위와같이 Anolog의 특징을 가지고 있는 신호, 즉 시간이 지남에 따라 연속적으로 변화하는 신호를 Anolog신호라고 한다.
가장 대표적인 Anolog신호는 사람의 말이라고 할수 있다.
사람간 대화에서 서로 전달하고자 하는 의미를 말로써 전달을 하는데 입모양, 혀의 위치등에 따라 연속적으로 신호가 만들어진다.
그리고 상대방은 이 소리를 귀를 통해 뇌에서 분석함으로써 신호의 의미를 이해한다.
Anolog와 반대로 시간이 지남에 따라 단계적으로 변함을 나타내는 개념이다.
보통은 사람이 필요에 따라 만든 인공물에서 찾아볼 수 있다.
이를 그래프로 표시하면
으로 볼 수 있는데 이처럼 한 시점에 급격한 변화를 띄게 된다.
위와같이 단계적인 변화를 가지는 신호를 Digital 신호라고 한다.
가장 대표적인 예가 컴퓨터 신호라고 할 수 있다.
컴퓨터는 실제로 전기가 흐르는지 않는지만 감지할 수있다. 때문에 전기가 흐르면 1, 흐르지 않으면 0 으로 분석한다.
컴퓨터에서 파일을 생성하거나 다운로드 받으면 010101101 등의 형태로 저장한다. 때문에 파일 저장 용량등을 보면 MByte, GByte
하는데 0 또는 1 하나를 표현한 것이 bit, 이 bit가 8개 모이면 1byte, 1byte가 1,000개 1,000,000개, 1,000,000,000개 모여있으면
1kbyte, 1Mbyte, 1Gbyte 등으로 표현이 된 것이다. 즉 적은 용량의 파일 하나라도 엄청난 양의 0과 1의 조합으로 되어 있는 것이다.
본격적인 컴퓨터가 등장하기 시작하면서 이는 꽤 중요한 문제가 되었다.
컴퓨터는 모든 정보를 디지털 신호로 처리를 하는데 그렇다고 우리가 컴퓨터에게 입력을 할때 0 과 1 의 조합을 입력하지 않을것 아닌가?
(실제로 초기에 0과 1을 입력하여 프로그래밍을 했다 with 천공카드, 카드에 구멍을 뚫거나 뚫지 않음으로써 0 과 1을 입력했다.)
그리고 컴퓨터에서 0과 1만 사용한다고 그 처리 결과를 우리가 볼때 0과 1의 조합으로 볼수도 없는 노릇이다.
때문에 이를 해결하기 위해 Digital 신호를 Anolog 신호으로 변환하거나 Anolog 신호를 Digital 신호로 변환하는 기법이 발전하게 되었다.
아래에서 그 몇가지 기법을 소개 하고자 한다.
더보기
사진과 영상 모두 시각적인 현상, 즉 빛의 의한 현상이다. 때문에 이를 저장하기위해 빛의 3원색이라고 하는 RGB(Red,Green,Blue)를 활용하였다.
더보기
사진, 영상등을 촬영하기위한 카메라에는 들어오고 RGB값을 측정할 수 있는 센서가 있는데 이것 하나를 화소(Pixel)라고 한다. 카메라에서 천만화소, 1억 화소등 하는것은 카메라 안에 이 화소의 개수를 의미하는 것이다. 이 화소 하나하나가 하나의 점의 색을 결정하고 이 화소가 모여 하나의 그림이 완성되는것이다. 만약 이 그림을 연속적으로 저장한다면 영상이 되는 것이다.
더보기
소리신호를 디지털 신호으로 하는데는 표본화->양자화->부호화의 단계를 거친다.
표본화는 Anolog 신호를 Digital 신호로 변환하기 위해 아날로그 값을 측정하는것이다.
예를들어 소리가 아래와 같은 음파를 디지털 신호로 변환한다고 해 보자(손그림 ㅈㅅ)
해당 음파를 디지털 신호로 변환하기 위해 2단위로 표본을 취하면
형태로 측정이된다.
이 표본을 더 많이 측정할수록 원래 파형(실제 음성)과 가까운 표본을 취할 수 있다.
대신 그만큼 더 용량이 증가하게 되는것이다.
1.에서 취한 값을 안타깝게 그대로 쓸 수 없다. 만약 우리가 2진법으로 표현할 수 있는 단위가 1 이라면 해당 단위에 맞게 근사값으로 측정을 해야한다.
처럼 표본값에서 단위값에 가장 가까운 값을 찾는다.(반올림)
이 기준을 0.5, 0.1, 0.001 등 작게 설정할 수록 표본값과의 오차가 줄어든다.
이 값을 그래프로 그려보면
처럼 표현이 가능하다.
더보기
위에서 취한 값을 0과 1로 변환하는 과정이다. 예를 들어 위에서는 -5 ~ 10 까지의 범위가 있다. 각 양자값에 5씩 더하면 0 ~ 15까지, 딱 4bit으로 표현할 수 있다.
1001 / 1011 / 1010 / 0111....
9(4+5) / 11(6+5) / 10(5+5) / 7(2+5) ....
복호화할땐 받은 0과 1의 조합을 4개 단위로 쪼개 숫자로 만든다음 5씩 빼면 원래 숫자를 얻을 수 있다.
물론 실제로 저런 규칙(5를 더한다거나 4bit으로 변환한다거나) 하진 않는다.
더보기
문자를 표시하기 위한 방법은 생각외로 단순하다. 각 문자를 특정 번호와 연결하는것. 대표적인 것이 ASCii 코드이다.
ASCII는 7bit으로 문자를 구분한다.
예를들어 ABCD을 입력하면
A - > 65 -> 1000001
B - > 66 -> 1000010
C - > 67 -> 1000011
D - > 68 -> 1000100
ABCD -> 1000001 1000010 1000011 1000100 으로 변환(인코딩)을 한다.
하지만 ASCii 에서 ASC는 America Standard Code의 약자이다. 즉 미국에서 만든 표준이다. 때문에 영어와 특수문자 이외의 문자는
포함하고 있지 않다.
하지만 다른 Utf-8,MS949(Microsoft에서 만든 표준) 등 문자를 변환하는 모든 표준들은 ASCii 코드를 확장하는 형태를 취하고 있다.
이후에 전 세계로 컴퓨터가 보급되기 시작하면서 각 나라에서는 자신의 문자를 컴퓨터에서 표시되기를 원했다. 때문에 만들어진것이 UNICODE이다. utf-8 이나 utf-16, utf-32등이 unicode를 사용해서 만든 표준이다.
각각 8bit, 16bit,32bit를 사용해서 문자를 표현한다는 의미이다. (ASCII Code에서 파생되어 만들어졌다 생각해도 무관하다.)
더보기
Tip. 여러 사람이랑 프로젝트를 진행할때 받은 파일 내에서 한글이 깨진 경우가 있다. ex )주석
이는 문서를 작성할때 인코딩한 방식과 파일을 열때 사용한 디코딩 방식이 달라서 이다.
만약 위와 같은 파일이 있다고 하자.
이 파일은 작성하고 저장할때 기본값인 utf-8으로 저장이 되었다.
이를 MS949으로 열도록 설정을 바꾼 결과
와 같이 한글이 깨지는 현상이 발생하였다. 이처럼 인코딩 방식과 디코딩 방식을 정확하게 선택하지 않으면 문자가 깨지는 현상이 발생할 수 있다.