[3D AUDIO 이야기 (3)]의 제발 기억해주시면 감사할 것만 같은 어디도 나오지 않는 "꿀팁" 그림입니다.

 

3D AUDIO 두 번째 이야기는 이미 예고편에서 말씀 드린데로, 향후 AUDIO 시장이 어떻게 될 것인지에 대한 이야기 입니다. 두 번째 이야기는 각 회사 선배들의 조언 및 글에 대한 검토를 받아 올려야 할 것 같아, 세번째 이야기가 먼저 포스팅 될 것 같습니다. 좀 더 솔직하게 언급하자면, 대부분의 Reference들을 공개된 자료에서 가져와서 글을 쓰던 중, 소문으로만 듣던 향후 오디오 표준 예상 Revenue 자료를 봐버려서, 좀 더 신중하고 조심스럽게 글을 올릴려고 합니다.

그럼 3편은 지난 번 3D AUDIO에 제발 기억해 달라고 했던 수식을 시작으로, 완전 "꿀팁"을 계속 남겨보도록 하겠습니다.

(1)

지겹겠지만, 위의 수식을 또 다른 방법으로 해석을 해보도록 하겠습니다. 호수에 돌을 던지면, 물이 원의 모양을 그리며 퍼집니다. 그런데 "물이 사각형 모양을 그리며 퍼질 수 없을까요?" 라고 질문한다면, 이런 바보 같은 생각을 하다니 라고 하실 수도 있습니다. 3D audio를 구현하는 방식이 (MPEG-H표준에 따르면) C/O와 HOA가 있습니다. HOA는 호수에 물을 던지면 물이 원의 모양을 그리며 퍼진다는 것으로 접근한 것이고, C/O는 호수에 (가운데가 뚫린) 사각형을 넣고 각 모서리나 변에 전달되는 파동을 전송하는 방식으로 각각 비유할 수 있습니다.

"오~~~ 정말 명쾌한 해석이다. 라고 하시는 분도 있을테고… 저런 바보 같은 말을 하다니, 여태 오디오 한 사람을 무시 하는 건가?" 라고 생각하실 분도 있을 것입니다. 소비자가 구의 모양을 이루고 있는 방에 있지 않고 대부분 육면체를 이루는 방에서 오디오를 듣기 때문에, 위에서 비유한 (가운데가 뚫린) 사각형을 방으로 확장해서 생각해보시면 C/O와 HOA를 물리적으로 잘 비교할 수 있을 것 같습니다. 결과적으로 HOA는 호수에 던져진 돌의 위치에서 파동을 녹음하기 때문에 그림 1과 같은 Eigenmike를 사용하게 됩니다. 반면 C/O방식의 microphone은 구글링해도 검색이 안되는 희안한 것을 들고 지난 4월 NAB show에 나타났었습니다. 기존 C/O의 Recording 방식을 유추해 보면, 스튜디오에서 걸그룹이 노래를 부르는 상황에서 멤버 한 명 한 명 목소리는 Object로 간주하여 몸에 부착한 mic를 통해 녹음하고, 스튜디오 룸의 각 공간에서 녹음된 소리를 Channel신호로 간주하여 녹음을 합니다. (제가 박사 과정 시절에도 한 번도 Multimedia room에 가서 녹음해 본 적이 없는지라 수정할 부분 지적해주시면 감사드립니다.)

 

(그림 1, Eigenmike microphone, 출처http://www.mhacoustics.com/products)

 

이번엔 제가 지난 번 이야기에서 냈던 숙제를 해보기로 하겠습니다. 물론 숙제는 아무도 하지 않았을 꺼라 예상되지만, 그런 자세 사랑합니다. (긴 글 읽어 주시는 것만도 감사한데, 숙제는 낸 사람이 하는 게 당연하다 생각합니다.) 어느 자료에도 나와있지 않는 "꿀팁"으로 다음과 같이 언급한 부분이 있습니다.

 

3D 영역에서 0th, 1st, 2nd, 3rd order의 HOA polar patterns 입니다.

그림 2. HOA Polar Patterns

( 그림 원본 링크 : http://go.shr.lc/1HRpokg )

대부분의 책과 자료는 이 그림만 나와 있습니다. 그러나 가장 중요한 것은 각 order의 component의 제곱의 합은 1이며, 물리적 의미로 구가 된다는 것입니다. (참고, HOA에서 각 order의 components를 spherical harmonics라고 부릅니다.)

 

각 order의 component의 제곱의 합은 1이며 물리적 의미로 구가 되는데, 그렇다면 제곱을 안하고 더하면 어떻게 될까요?간단히 2D의 1st order를 수식으로 표현하면 다음과 같으며, polar pattern은 다음과 같습니다.

(2)

 

( 그림 3: http://whydsp.org/274의 Matlab code (제곱 부분만 지움))

 

그림3만 보고 "오~~~, 그럼 2nd , 3rd order는 이렇게 되겠구나!!!" 하고 예상하시는 분이 있을 겁니다. 그림 4는 2D로 그려 놓은게 없어서 3D그림을 위에서 내려다 본 2D그림입니다.

그림 4

 

전에 설명했던 것 처럼, order가 올라갈 수록 width가 좁은 형태의 beam이 생긴 것을 한 눈에 유추해 볼 수 있는 그림입니다. 1st order와 2nd order HOA 3D영상은 각각 그림 5와 그림 6과 같습니다.

 

그림 5

 

그림 6

 

각 element의 합들이 order가 올라가면 올라갈수록 좁은 빔 형태의 합이 되어 구의 모양에 가깝다는 느낌이 오시나요? 그러나 방금 질문에 대한 답은 절반만 맞습니다. 좁은 빔의 형태로 인하여, order를 높일 수록 3D 해상도가 높아지는 것은 맞습니다. 하지만 합의 형태가 구의 모양에 가깝다고 설명하기 보다 각 element의 제곱의 합이 완벽한 구가 된다고 표현해야 합니다. 왜 숙제는 제곱의 합이 구가 되는 것을 확인하라고 해놓고, 정작 저는 element의 합만 얻었을까요? "1"이란 숫자는 2D에서는 원이 되고 3D에서는 "구"가 된다고 설명 드렸습니다. HOA는 모두 이런 완벽한 구를 표현하는데, 왜 Higher order로 가야할까요? Higher order로 올라가면 갈 수록 3D해상도가 좋아지고, 아래 그림 한 장에서 모든 것이 연상되기 때문에 숙제를 "제 멋대로" 풀었습니다. 앞의 이야기에서 수식 한 줄 제발 기억해 달라고 부탁드렸다면, 이 번엔 아래 그림 한 장 제발 기억해주시면 감사드립니다. HOA에서 가장 중요하지만, 어디에도 없는 그림 한 장이라고 생각합니다.

 

( 그림 7:)

 

 

아, 참 그리고 제 글은 소스 (쿨하게) 올립니다. 아래는 Matlab code입니다.

%% 3D polar pattern

% 1st order

figure;clf;

N=1;M=1;L=1; [X Y Z] = hoa3d(N,M,L);subplot(221);mesh(X,Y,Z);title('X');shading flat; axis on;axis square;axis([-1 1 -1 1 -1 1]); colormap gray; caxis([0 10]);

N=1;M=1;L=-1; [X Y Z] = hoa3d(N,M,L);subplot(222);mesh(X,Y,Z);title('Y');shading flat; axis on;axis square;axis([-1 1 -1 1 -1 1]); colormap gray; caxis([0 10]);

N=1;M=0;L=1; [X Y Z] = hoa3d(N,M,L);subplot(223);mesh(X,Y,Z);title('Z');shading flat; axis on;axis square;axis([-1 1 -1 1 -1 1]); colormap gray; caxis([0 10]);

 

% 2nd order

figure;clf;

N=2;M=0;L=1; [X Y Z] = hoa3d(N,M,L);subplot(231);mesh(X,Y,Z);title('R');shading flat; axis on;axis square;axis([-1 1 -1 1 -1 1]); colormap gray; caxis([0 10]);

N=2;M=1;L=1; [X Y Z] = hoa3d(N,M,L);subplot(232);mesh(X,Y,Z);title('S');shading flat; axis on;axis square;axis([-1 1 -1 1 -1 1]); colormap gray; caxis([0 10]);

N=2;M=1;L=-1; [X Y Z] = hoa3d(N,M,L);subplot(233);mesh(X,Y,Z);title('T');shading flat; axis on;axis square;axis([-1 1 -1 1 -1 1]); colormap gray; caxis([0 10]);

N=2;M=2;L=1; [X Y Z] = hoa3d(N,M,L);subplot(234);mesh(X,Y,Z);title('U');shading flat; axis on;axis square;axis([-1 1 -1 1 -1 1]); colormap gray; caxis([0 10]);

N=2;M=2;L=-1; [X Y Z] = hoa3d(N,M,L);subplot(235);mesh(X,Y,Z);title('V');shading flat; axis on;axis square;axis([-1 1 -1 1 -1 1]); colormap gray; caxis([0 10]);

 

위 코드의 N/M/L은 지난 번 강좌의 링크( http://www.york.ac.uk/inst/mustech/3d_audio/higher_order_ambisonics.pdf ) 를 참조하시면 됩니다. N이 order이고, M은 degree, L은값 (방향값) 입니다. "hoa3d.m" 파일은 "모두의 연구소" 의 김승일 소장님께 정중하게 문의 바랍니다. 이상 3D audio 세번째 이야기를 마치도록 하겠습니다.

 

덧붙이며, 제 Matlab code를 보시면 아시겠지만, 한 줄로 간단합니다. 저 한 줄을 얻기 위해서 시간가는 줄 모르고, 이렇게도 (코드를) 짜보고 저렇게도 짜봤던 기억이 납니다. 또한 제가 던진 질문 "각 element의 합들이 order가 올라가면 올라갈수록 좁은 빔 형태의 합이 되어 구의 모양에 가깝다는 느낌이 오시나요?" 에서 정말 "order가 무한대로 가면 구의 모양에 가까워지겠구나" 라고 엉뚱하게 해석을 한 적도 있습니다. 오디오 전문가 중에 대부분이 Decoding하고 나면 같은 waveform이 나온다고 생각하는 분이 많습니다. 사실은 AAC포함 하여 그 이후 개발된 대부분의 audio stream의 경우, 동일한 bitstream을 가지고 decoding해도 device별로 다른 waveform이 나옵니다. 하나의 잘 되는 정답을 찾기 위해 수 십 번 또는 그 이상의 시도를 하게 됩니다. 결국 하나만 선택되더라도, 선택되지 않은 수 많은 시도들은 결국 나중에 빛을 본다고 생각합니다. 제가 개인적으로 모두의연구소 (전, whydsp)에 글을 올리고자 두드린 건 이런 이유였습니다. 모두의 연구소에서 모두의 숨은 반짝임을 찾기 바랍니다. 긴 글 읽어 주셔서 감사드립니다.

 

"3D audio 첫번째 이야기" 중에, High Order Ambisonics와 eigen mic는 각각Higher Order Ambisonics 와같은 Eigenmike microphone으로 수정하셨습니다. Comment주신, 현동일 박사님께 감사드립니다. MP3를 MPEG-1 part3라고 표현한 것은 현동일 박사님께서 지적해 주신 표현이 정확한 표현이지만, 한강에 있는 전자회사들에게 "복선"의 의미로 part3라고 표현한 것입니다. 자세한 내용은 "3D audio 두 번째 이야기"에 담겨 있습니다. 기대해 주세요 (꾸벅) (꾸벅).


필자 소개

James Song, 
Senior Engineer in Qualcomm Technologies, Inc.

하는 일
3D audio standard

오디오 말고 할 줄 아는 일
Speech Coding (Audio Coding보다 잘 함), Angle Tracker 가지고 놀기 (H/W 가지고 노는 걸 정말 재밌어 함), Gstreamer로 실시간 streaming service 구현(은 했으나 많이 알지 못함)

하고 싶은 일
Amazon Echo, Oculus 가지고 놀기


===========================================================================

https://www.facebook.com/lab4all 에 오셔서 '좋아요'버튼을 누르시면 페이스북에서도 블로그 내/외의 글들을 쉽게 보실 수 있습니다.

========================================================================

신고

+ Recent posts