본문 바로가기
Audio Processing

신호처리와 숫자 표현(1)-사용되는 숫자의 형식

by gigasound 2021. 8. 17.

신호 처리와 숫자표현

우리 사용하는 숫자 표현과 다르게 오디오 신호처리에는 다양한 디지털 숫자 표현이 사용됩니다. 결과적으로 신호처리의 모든 숫자는 디지털 비트의 조합으로 표현되기 때문입니다.

그런데 사용의 편리성에 의해 숫자가 표현되는 방법도 다르고 기록되는 방법도 다릅니다. 이글을 포함하여 총 세개의 글에서 신호처리 과정에서 사용되는 숫자 표현법을 알아보겠습다. 


신호 처리과정과 사용되는 숫자 형식

다음 그림은 오디오 신호처리 과정과 신호 흐름에서 입출력되는 숫자의 형식이며 특징은 다음과 같습니다. 

데이터 형식 특징ㅌ,ㄱ
16bit
integer
코드에서 int16_t 사용
값은
실제 데이터는 2byte를 차지함
24bit
integer
코드에서 int32_t 사용, 3byte int를 표시형식은 없다.
FPGA와 같은 하드웨어서는 24bi 사용
값은
32bit
floating point
IEEE 표준 방식을 사용
코드에서 float로 사용
값은 -1.0f ~ 1.0f로 정규화 하며,
이 범위를 벋어 나면 재 정규화 필요합니다.
실제 데이터는 4byte를 차지함
4byte(32bit)
fixed point
IEEE 표준 방식 사용
코드에서 byte[]로 주로 사용
실제 데이터는 4byte를 차지함

여기서 실수형 숫자(float number)는 고정 소수점 형식과 부동 소수점 형식이 있습니다. 이 중에서 고정 소수점 형식은 하드웨어가 다루기 편리하고, 부동 소수점 형식은 프로그램에서 다루기 편리합니다.

ADC과정에서 아날로그 신호는 정수형식으로 출력됩니다. 16bit 정수형식으로 출력된다면 신호는 $\pm 2^{16-1}= \pm  32768$의 정수 값을 가집니다. 16-1 bit인 이유는 최상위 비트(MSB)는 부호화 비트로 사용하기 때문입니다. 그런데 DSP 신호처리는 실수형 숫자로서 이를 정규화해서 사용합니다. 즉 신호를 [-1,1]이 되도록 ADC의 정수 신호를 32768로 나눠 줍니다. 반대로 DAC로 출력할 때는 정규화 신호에 32768을 입력한 후에 round() 또는 int() 처리해서 줍니다. 

[-1,1]로 정규화하면 신호의 크기를 처리하기 좋습니다. 왜냐하면 신호처리 결과가 항상 1보다 작다는 것을 이미 알고 있기 때문입니다. 또 정규화되어있으면 사용하는 사람끼리 사용되는 장치끼리 별도의 약속이 없어도 그러려니 하고 별 신경쓸거 없이 사용해도 되기 때문이요. 

다른 글에서 좀더 세세한 내용을 알아보기 위해 숫자의 비트 표현 방법을 알아보겠습니다.


광고좀 꾹 눌러주시면 고맙겠습니다. 


위의 내용을 참조용으로만 사용해주세요, 무단 도용이나 무단 복제는 불허합니다.

기타 문의 사항은 gigasound@naver.com에 남겨 주시면 고맙겠습니다.