어제부로 대략 3개월정도 해온 Fixed-Point Coding에 한 단락을 지었다. 말이 3개월이지 그 이 전에 다른 코드로도 진행해왔던 것이며 이를 위한 약간의 공부와 여러 준비사항까지 포함하면 대략 6개월동안 해왔던 일이다. 공식적으로는 12월 1일 오늘부로 이제까지 하던 MPEG Surround 관련 업무에서 Audio and Speech Coding쪽으로 업무가 변경되지만 주말이 다가오는 금요일이기도 해서 자체적인 wrap-up의 시간으로 약간 loose하게 보내고 있다.

Fixed-Point Coding. 전공자이면서도 사실 생경하기만한 언어다. 포인트가 고정되어있다는 말인듯 한데 도통 무슨 의미인지 언뜻 와닿지는 않는다. 우리가 흔히 사용하는 1.23등과 같이 소숫점이 있는 숫자들을 float point 변수라 하는데, 이도 해석하면 포인트가 둥둥 떠있다는 이해하기 어려운 말로 해석이 된다. 왜 2.321과 같이 소수점이 있는 형태를 float point 변수라 하고, 3215와 같이 정수 형태의 변수를 fixed point 변수라 하는지 설명하는건 좀 깊이 들어가야 하니 그냥 이렇게 기억하면 된다. 유리수나 실수 형태 즉, 소숫점이 있는 숫자는 float point 변수이고, 정수 형태의 숫자는 fixed point 변수이다! 라고.

Fixed-Point Coding은 Float-Point로 이루어진 프로그램을 Fixed-Point 변수를 갖는 프로그램으로 변환시키는 작업이다. 예를 들면 3.123 * 2.718 을 계산하면 8.488314라는 값이 나온다. 쉽다면 쉬운 계산이지만 일반적인 mobile 기기에 들어가는 processor나 DSP등에서는 이런 계산이 정수 곱하기 정수를 계산할 때보다 더 많은 시간이 소요되거나, 혹은 아예 이런 소숫점 형태로 되어있는 식은 계산하지 못하는 것들이 많다. 따라서 위와 같은 식을 정수 형태로 바꿔줘야 하는데 이게 바로 Fixed-Point Coding으로 변환하는 작업이다.

위의 3.123 * 2.718을 예로 들어서 설명하면 이렇다. 우선 이 녀석들을 16bit의 크기를 갖는 short 변수로 변환을 하기 위해 각각에 2의 12승 즉 4096을 곱하고 반올림하여 정수부분만 취하게 되면 3.123은 12792로, 2.718은 11133으로 된다. 그럼 이제 3.123*2.718을 곱하기 위해서는 대신 12792*11133을 계산하면 된다. 여기서 다시 약간의 과정을 거치게 되는데 그냥 결과만 쉽게 생각하면 12792*11133의 결과로 142413336이라는 값을 얻게 되고, 바로 이 값을 2의 15승 즉 32768로 나누어 4346을 얻는다.

위의 단계에서도 다시 생각해봐야 할 것들이 있긴 한데 다 무시하고 결과만 다시 보면 얻어진 4346이 3.123*2.718이라는 소수점이 있는 숫자를 계산하지 않고 정수형태로 변환하여 얻게 된 값이 된다. 이런식으로 프로그램 내에 있는 모든 float point 변수들을 일일이 fixed point 변수로 바꾸어 진행하게 된다. 만약 float 형태의 결과값을 원한다면 위에서 얻어진 4346을 2의 9승으로 나누면 8.488로, 3.123 * 2.718 을 계산해서 얻은 8.488314과 거의 같은 값을 얻게 된다.

암튼 이런 식으로 하는건데, 이게 각 변수들마다 16bit 형태의 정수형 변수로 바꿀 것인지, 32bit 형태의 변수로 바꿀것인지와 각 변수들이 갖는 최대값 최소값 즉 변수들의 변화 범위에 따라 정수로 변환시키기 위하여 곱해주는 값이 매번 달라져야 하기 때문에, 약간 머리가 지끈 거릴 정도로 복잡하게 만드는 것도 있고 약간은 노가다성 작업이 진행되야 하는 부분도 있다.

어제까지 몇부분 완성하지 못한 부분이 있긴 했지만 그 선에서 끝내고, 후에 필요가 있을 경우 다시 진행하는 것으로 마무리를 했다.

지난 6개월간 배경지식도 없이 이 작업 하느라 맨땅에 헤딩하는 심정으로 나름 엄청 고생했는데, 배운것도 많고, 나름 재미있는 일이라는 것과, 추후에 정말 제대로 다시 해볼 기회가 있다면 더욱 흥미로울 것 같다는 기대감을 갖게 되었다. 꽤나 흥미로웠던 경험이었다. 추후에 좀 더 깊게 관련 일을 할 기회가 주어진다면 좋겠다. 그때는 물론 맨땅에 헤딩하지 않도록 유경험자에게 실전 지도를 받으며 일할 수 있다면 더 좋을 것임은 물론이다.

* 그간 재미없는 글도 많았지만 이 글이 단연 내 블로그에서 가장 재미없는 글이 될 것 같다.

'Impressions > Resurrection' 카테고리의 다른 글

2007.01.13~2007.01.21  (4) 2007/01/13
회사에서 카페라떼 마시기  (8) 2007/01/09
Fixed Point Coding 끝내다.  (4) 2006/12/01
본격적인 차마시기  (0) 2006/11/20
Friends Dictation  (2) 2006/11/14
운동 재개하다  (3) 2006/11/06

BLOG main image
Gustav Mahler(1860-1911)

공지사항

카테고리

분류 전체보기 (516)
Impressions (286)
About (215)
Photo (15)
Today : 38
Yesterday : 324
Total : 288,723
Statistics Graph