티스토리 뷰

G.711 코덱정보 및 소스(인코딩 & 디코딩)

G.711

음성에 있어서의 ITU 표준 / H.323환경에서 음성전달 전송방식의 기본 오디오 코덱 표준안이다. G.711은 64Kbps에서 3KHz의 전화급 오디오 품질을 제공하기 위하여 PCM 오디오 엔코딩과 미국, 유럽에서 주로 이용하는 U-law 또는 A-law 방식을 사용한다. 펄스코드변조 (Pulse Code Modulation, PCM) 방식은 샘플들을 미국 방식인U-law 또는 유럽 방식인 A-law 양자화 방식을 이용하여 한정된 재구성 세트 중의 하나로 양자화를 시켜주는 파형 코딩 방식이다. G.711 표준은 전화 대화 코딩을 위한 표준 방식으로 8Bit PCM을 정의하고 있다.

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)로 받는다.)

[출처] http://bebop.emstone.com/research/codecs/g711_codec/



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

64kbps

64000bps

8000byte

1000ms : 8000byte = 20 : x

x = 160byte



 코덱 종류  알 고리즘(압축방식)  속도 Bit Rate(B/W)  인코딩 타임  MOS  비 고
 G.711  PCM  64 Kbps  10ms  4.1  PSTN 통화 품질
 G.726  ADPCM  16K,24K,32K  10ms  3.85  BW크면 품질 좋음
 G.722  SB-ADPCM  64 Kbps    (오디오신호)  멀티미디어 음성회의. AM 방송 품질
 G.723  MLQ  6.3K, 5.3K  30 ms  3.9  MS 넷미팅의 기본 코덱
 G.723.1  MPC-MLQ
 ACELP
 6.3 Kbps
 5.3 Kbps
 37.5 ms  3.9
 3.62
 이동통신, H.324 등 영상회의 단말
VOIP 포럼 추천
 G.728  LD-CELP  16 Kbps  15ms  3.61  디지털 이동통신, ISDN, FR망 음성용
 G.729  CS-ACELP  8 Kbps  10ms  3.9  VoIP 에서 가장 보편적인 코덱
[출처] http://blog.naver.com/ppusarida/40060736075


G.711, G.721, G.723 인코딩, 디코딩 소스( C 로 짠 소스입니다)


[출처] http://blog.naver.com/appolon/80025280031