제임스딘딘의
Tech & Life

수행 프로젝트 이력/참여자주도형 정보공유 시스템 [2011.12~2012.02]

G.711 코덱 정보 및 소스 (Encoding & Decoding)

제임스-딘딘 2012. 2. 2. 09:56

G.711은 오디오 인코딩을 위한 코덱(codec)표준 중 하나이며 협대역(narrow-band) 오디오 코덱이다. 
원래 전화에서 사용하기 위해 디자인 되었으며, PCM (Pulse Code Modulation, 펄스 부호 변조)이 공식명칭이다.
ITU-T에서 1972년에 표준을 만들었다.

https://www.itu.int/ITU-T/recommendations/related_ps.aspx?id_prod=911


300-3400Hz 범위의 오디오 신호를 통과시키면서 그것들을 8000Hz로 샘플링한다.

μ-law와 A-law 라 불리는 두 종류의 로그 압축 알고리즘 중 하나를 사용한다. 압축된 각 샘플은 8비트로 양자화되어, 최종적으로는 64kbit/s라는 비트전송률(bit rate)이 된다.

또한 G.711 은 H.320 / H.323 과 같은 다른 기술에서 필요한 필수 표준이기도 하다.
추가로, IP기반 네트워크의 팩스통신에서도 사용된다.

 

특징

아래와 같은 특징들이 있다.

  • 8kHz 샘플링 주파수
  • 64kbit/s 비트 전송률(8kHz 샘플링 주파수 × 샘플당 8비트)
  • 일반적인 알고리즘 지연은 0.125ms이며  look-ahead 지연이 없다.
  • G.711은 파형 음성 코더.
  • G.711 부록 I은 패킷화된 네트워크에서 전송 손실을 숨기는 데 도움이 되는 패킷 손실 은폐(PLC) 알고리즘을 정의
  • G.711 부록 II는 VAD(음성 활동 감지) 및 CNG(Comfort Noise Generation)를 사용하여 침묵 기간 동안 대역폭 사용량을 줄이는 DTX(불연속 전송) 알고리즘을 정의.
  • 이상적인 조건에서의 PSQM 테스트는 G.711 μ-law의 경우 4.45점, G.711 A-law의 경우 4.45점의 평균 의견 점수를 산출.
  • 네트워크 스트레스 하에서의 PSQM 테스트는 G.711 μ-law의 경우 4.13점, G.711 A-law의 경우 4.11점의 평균 의견 점수를 산출.

 

라이센스

1972년 발표된 후, 특허는 만료된 상태.
따라서 자유롭게 사용이 가능하다.

 

G.711 aLaw 방식

16비트 PCM값을 8bit G.711데이터 값으로 압축한다. Sign bit와 마지막 3bit를 값 무시. 나머지 12bit값을 8bit로 변환한다.

 

G.711 uLaw 방식

16비트 PCM값을 8bit G.711데이터 값으로 압축한다. Sign bit와 마지막 2bit를 값 무시. 나머지 13bit값을 8bit로 변환한다.

 

G.711 Optimization

* 공개 Source 기반을 바탕 연산횟수 최소화 
   Binary Search

* Mapping Table 작성 
  장점 - 빠른 처리속도
  단점 - 좀 더 많은 메모리 사용

* 구현 방식 비교(단위 tic) 

(음수)-32768 ~ 32767의 16비트 음성 Data 값을 G.711코덱에 통과시켜 압축된 Data를 table[0]~table[65536]에 할당하여 table을 미리 만들고 이 table을 이용하여 아래와 같이 인덱싱을 하였다(이중 인덱싱) Ddata[i] = table[SrcData[i]+32768]; 실제구현은 다음과 같이 0~32767의 값(table[32767]~table[65536]) 을 table[0]~table[32766]에 할당하고 (음수)-32768~(음수)-1의 값( table[0] ~table[32768])을 table[32767]~table[65536]에 할당하여 table을 만들고 이table을 이용하여 아래와 같이 인덱싱을 한다. Ddata[i] = table[SrcData[i]]; (기존의 SrcData[i] 는 short로 받았으나unsigned short(-32768=32769)로 받는다.) 

 

G.711은 초당 64Kbps 즉,8000 Byte 이므로 20ms는 160Byte이다

64kbps = 64000bps = 8000bytes/sec
1초(1000ms)에 8000bytes를 샘플링 하므로,
1000ms : 8000byte = 20 : x
x = 160byte