저는 3D audio 팀에서 근무하고 있습니다. 3D audio를 전공하진 않았지만, 잠시나마 열심히 공부한 적도 있었고, 무엇보다 하루 하루 잊혀져 가는 지식에 대해 남기고자 하는 욕구가 솟구쳐 글을 쓰게 되었습니다. 객관적인 3D audio 관련 이력으로는 MPEG의 "최근" 3D audio 표준 기술 문서의 공동 저자로 이름을 올렸으나, 한 번도 입 밖에 꺼내본 적 없는 '빛 좋은 개살구'라고 생각합니다.


본격적으로 MPEG 3D audio (MPEG-H part3) 표준에 대한 썰을 풀기 전에 MPEG이란 기관에 대해 대충 살펴보면, MPEG이란 Moving Picture Experts Group 의 약자입니다. 직역해보면 움직이는 그림(동영상) 전문가들 그룹이고, MPEG이란 기관을 설명할 때, 가장 쉽게 드는 예시가 MP3 (MPEG-1 part3)를 표준화 시키고 상용화해서 대박을 만들었다는 것입니다. 현재 가장 핫한 표준은 오디오가 아닌 비디오 (H.265/HEVC)이며, UHD-TV/방송등에 활용되는 핵심 기술입니다.


다시 오디오 이야기로 넘어가서, 3D audio 표준을 들여다 보시면, phase 1/2, CO/HOA 로 나뉘어서 4가지 영역이 합쳐져서 표준이 완성된 것을 볼 수 있습니다. (표준 문서를 찾아서 열어보시면, 엄청난 양의 페이지 때문에 보자 마자 멘붕이 오실 수도 있습니다.)



Phase 1은 High bit-rates 이고 Phase 2는 Mid/low bit-rates라 쉽게 이해가 가는데, CO랑 HOA는 뭐가 다를까 하실 수도 있습니다. CO는 Channel과 Object를 말합니다. 오디오에 관심이 있으신 분들이라면, Channel과 Object는 쉽사리 구분할 수 있을 것입니다. 하지만 HOA (High Order Ambisonics)는 생소할 수도 있으며, Wikipedia ( https://en.wikipedia.org/wiki/Ambisonics )를 찾아봐도 잘 와닿지가 않을 것입니다.


HOA를 이해하기 위한 "완전" 꿀팁, 그리고 어느 책에도 강조해서 표현하지 않는 간단한 수식 한 줄을 소개 해 봅니다.


HOA를 2D (r, : 편의상 r=1이라고 함), 1st order로 구현하면,

,

가 됩니다. 그래서,

이 됩니다. 이미 아는 것이지만, cos과 sin을 공간적 의미로 생각해 봅시다. 길이가 1인 줄을 가지고 같은 속력으로 회전을 시킬 때, X축에서 바라보면 cos, 그리고 Y축에서 바라보면 sin이 됩니다. 아래 그림 1을 보면 이해가 더욱 쉽습니다.


그림 1. Illustrating the cosine wave's fundamental relationship to the circle.
(그림 원본 링크 : http://go.shr.lc/1HRoOCX )


이런 단순한 물리적 현상을 설명하는 이유는 이러한 물리적 해석이 HOA의 핵심이라고 생각하기 때문입니다. 2D 에서의 수식을 다음과 같이 거꾸로 써 봅시다.

HOA 0th order의 값 1은 2D에서 '원'이 되고 3D에서는 '구'가 됩니다. 1을 2D에서 X축과 Y축에서 각각 Decomposition (이 단어가 생소하면, 위의 예처럼 "X축에서 바라보면, Y축에서 바라보면" 이라고 생각하면 쉬울 것 같네요)을 하면 sin과 cos으로 표현 가능합니다.


3D에서 X/Y/Z축으로 나타내면, 다음과 같이 표현되고

역시

이 됩니다.

 

자 이제 아래 그림 2를 살펴봅시다. 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라고 부릅니다.)

2nd order를 살펴봅시다. 2nd order는 r/s/t/u/v로 표현하는데, 아래 수식과 같이 제곱의 합은 1로 나타낼 수 있음을 다시 한 번 강조합니다.

완벽한 구가 된다는 게 왜 중요할까요? 3D, 즉 입체 공간을 나타낼 때, 정육면체로 표현하면 X/Y/Z가 되는 것이고, 구로 표현하면 r//가 됩니다. 공간 상에 하나의 포인트 소스(음원)가 있고 균일한 밀도를 가진 매질에 의해 음이 전달되면, 완벽한 구의 형태로 음이 퍼지게 됩니다. 따라서 완벽한 구의 형태로 음원을 녹음하거나 재생하는 것이 실제 소리(immersive sound, 실감 음향)를 가장 잘 전달할 수 있습니다. 쉽게 예를 들어 잔잔한 호수에 돌 하나 던지면 물이 완벽한 원을 그리며 파동이 일어나고, 3D로 생각하면 구의 형태가 되는 것입니다.


그럼 여기서 실제 구현에 필요한 3가지 질문을 스스로 던져 보겠습니다.


질문 1. 지금까지 왜 1을 더 많은 component으로 나누려고 했을까요?

질문 2. (그림2를 보고 이미 파악하신 분도 있겠지만) Nth order에서 2N+1개의 component가 필요한데, 각 component는 어떻게 얻는 걸까요?

질문 3. Nth order HOA구현하려면 결국0 order 부터 Nth order 까지 (N+1)^2나 되는 모든 component가 필요할까요?


첫 번째 질문에 대한 답으로 우리 3D하는데 1st order인 X/Y/Z만 있으면 되는 거 아냐? 라고 되물을 수도 있습니다. 그림 2를 다시 살펴봅시다. order가 올라갈 수록 더 많은 방향으로 점점 좁아지는 형태의 "입체 타원들"이 생기는 것을 볼 수 있습니다. 다시 말해, 구 형태의 공간을 나눌 때, order를 올라갈 수록 좁은 성분을 얻을 수 있는 것입니다.

공간을 더 작은 크기로 나눌 수록 여러가지 장점이 있습니다. 축구 경기를 예로 들면, 공 잡은 선수의 방향으로 소리를 키우고 나머지 공간에서 생기는 소리를 줄일 수도 있겠네요. 실제 음원을 얻을 때, HOA order를 올릴수록 고지향성 마이크 (directional mic)가 사용되며, 현재 HOA mic (eigen mic)는 4th order까지 시장에 나와 있습니다. ( http://www.mhacoustics.com/home 참고)

 

두 번째, 각 component는 어떻게 얻을 수 있을까요? 사실 이 부분은 읽는 독자에게 넘기려고 합니다. 그렇지만 깨알같은 꿀팁은 남겨봅니다! 3차원 공간에 대한 Decomposition은 한 참을 거슬러 올라 1752년에 태어난 Legendre라는 프랑스 수학자에 의해 완성되었습니다.
(
https://en.wikipedia.org/wiki/Legendre_polynomials )

매력적이지 않은가요? 1782년에 만들어졌고, 230년 가량이 지나 우리는 겨우 이 할아버지가 만든 수식의 4th order까지 구현할 수 있었습니다. [참고] 지난 2015년 NAB show에서 4th order 이상의 eigen-mic가 개발 완료 되어 간다는 세미나를 들은 것 같습니다.

수식을 주욱 따라가다보면 order를 올릴 수록, 좁은 형태의 포물선이 나오게 되고, wiki page 하단에 x대신에 cos값을 넣은 "Legendre polynomials in trigonometry"부분을 보면, N order에서 cos(N*theta) term이 포함 되어 있는 것을 볼 수 있습니다.

([참고] cos(N*theta)의 polar pattern이 N 값을 올릴 수록 width가 좁은 형태의 beam모양이 생깁니다. 아래 Matlab 예제를 수정해 보시면 알 수 있습니다.)

Matlab의 legendre function을 이용해서 2D와 3D를 쉽게 구현할 수 있습니다. ( http://www.mathworks.com/help/matlab/ref/legendre.html#f89-998354 ) 그리고 반드시 각 원소의 제곱은 완전 구의 형태(1)이 됨을 확인하는 게 중요합니다. 간단한 Matlab example을 포함시켜 보도록 하겠습니다.

 

theta = 0:0.01:2*pi;

X = abs(cos(theta));

Y = abs(sin(theta));

figure;

subplot(131);polar(theta,X,'--r');title('X');

subplot(132);polar(theta,Y,'--r');title('Y');

subplot(133);polar(theta,X.^2+Y.^2,'--r');title('X^2+Y^2=1');

% Matlab에서 abs()를 쓰지 않을 경우, polar 함수가 음의 값을 -180도의 위치에 표현함

 

2nd order 이상의 HOA polar pattern을 그릴 때, 다음 자료를 참고하시면 좋을 것 같습니다.
(
http://www.york.ac.uk/inst/mustech/3d_audio/higher_order_ambisonics.pdf )

 

세 번째 질문에 대한 답은 이미 써 내려온 내용 안에 답이 나와 있는 것 같습니다. 그림 2를 잘 살펴보고, 끝까지 강조하는 이 한 줄 수식만 잘 생각해 보면 될 것 같습니다.


 
à (HOA하면, 이 한 줄을 기억해 주시면 감사드립니다.)


끝으로 서두에 언급한 것처럼, 3D audio를 전공하지 않아, 적절하지 못한 단어나 표현이 포함되어 있을 수 있습니다. 지적해 주시면, 수정하도록 하겠습니다.


다음 3D audio 관련 글은 다음 5개의 회사들이 보유하고 있는 기술을 세 가지 카테고리로 묶어서 얼마나 성공적(?)이고 안정적(?)인 기술인지에 대해 하나씩 쓰고자 합니다.

 

    . Dolby vs FhG
    . Apple & FhG
    . Qualcomm vs Technicolor

 

감사드립니다.



필자 소개

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 에 오셔서 '좋아요'버튼을 누르시면 페이스북에서도 블로그 내/외의 글들을 쉽게 보실 수 있습니다.

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

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  1. 현동일 2015.07.27 16:27 신고

    좋은 정보 얻어가면서 딴지도 남깁니다. ^^;;;



    MP3는 정확히는 MPEG-1 layer3가 맞습니다.
    MPEG-1, 2, 4, H에서 part 1, 2, 3는 각각
    system, video, audio를 다루었습니다.

    MP3는 물론 MPEG-1 part3에서 다루어졌지만
    당시 표준화된 audio codec은 세 개의 layer로 구분되었고
    그 중에서도 연산량은 가장 높지만 음질 또한 뛰어난
    layer3만을 지칭합니다.

    layer1은 DCC(digital compact cassette)에 사용되었으며
    layer2의 경우는 DAB(digital audio broadcasting)와 DVB(digital video broadcasting)에 사용되었다고 합니다.
    https://en.wikipedia.org/wiki/MPEG-1_Audio_Layer_I
    https://en.wikipedia.org/wiki/MPEG-1_Audio_Layer_II



    HOA는 정확히는 higher order Ambisonics의 줄임말입니다. ^^;;;



    cos^2+sin^2=1이 주는 의미를 transform으로 이해하니 명쾌하게 이해되네요.

    음파를 Fourier Transform해서 서로 직교하는 sine파 성분들로 나누어 표현했듯이
    공간을 transform해서 서로 직교하는 방향의 성분들의 합으로 표현한다는 아이디어가 정말 대단하게 느껴집니다.

    x,y,z로 나누는 건 쉽게 생각할 수 있었는데
    그걸 더 고차로 세밀하게 나누어 놓은 지향성 패턴을 이해 못해서
    늘 벽에 부딪혔는데 드디어 그 벽을 넘어설 수 있게 됐네요. ^^



    다음 이야기가 빨리 연재되기를 기다립니다. ^^

+ Recent posts