KR102017892B1 - 향상된 계층적 코딩 - Google Patents

향상된 계층적 코딩 Download PDF

Info

Publication number
KR102017892B1
KR102017892B1 KR1020147013053A KR20147013053A KR102017892B1 KR 102017892 B1 KR102017892 B1 KR 102017892B1 KR 1020147013053 A KR1020147013053 A KR 1020147013053A KR 20147013053 A KR20147013053 A KR 20147013053A KR 102017892 B1 KR102017892 B1 KR 102017892B1
Authority
KR
South Korea
Prior art keywords
samples
iexp
bits
exponent
bit
Prior art date
Application number
KR1020147013053A
Other languages
English (en)
Other versions
KR20140090632A (ko
Inventor
클라우드 람블린
Original Assignee
오렌지
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 오렌지 filed Critical 오렌지
Publication of KR20140090632A publication Critical patent/KR20140090632A/ko
Application granted granted Critical
Publication of KR102017892B1 publication Critical patent/KR102017892B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/002Dynamic bit allocation
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L19/00Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
    • G10L19/04Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis using predictive techniques
    • G10L19/16Vocoder architecture
    • G10L19/18Vocoders using multiple modes
    • G10L19/24Variable rate codecs, e.g. for generating different qualities using a scalable representation such as hierarchical encoding or layered encoding

Landscapes

  • Engineering & Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Signal Processing (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • Acoustics & Sound (AREA)
  • Multimedia (AREA)
  • Quality & Reliability (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

향상된 계층적 코딩. 본 발명은 디지털 신호 향상 계층의 코딩/디코딩을 포함하는 계층적 코딩/디코딩에서의 비트 할당에 관한 것이다. 신호는 연속적인 L 샘플들을 포함하고, 각 샘플은 가수 및 지수로 표현된다. 상기 방법은 향상 비트의 기 설정된 개수 N b 를 최대 지수 값의 L 샘플들의 적어도 일부에 할당을 포함한다. 특히, 상기 방법은 다음 단계를 포함한다: a) 각각의 소정의 값을 가지는 L 샘플들의 지수를 열거하고, b) 위로부터 기 설정된 개수 N b 에 도달할 때까지 지수 값들을 감소시켜 열거된 지수들의 적어도 하나의 누적 값을 계산하며, c) 더 이상 향상 비트가 가용하지 않은 샘플의 최대 지수에 대한 임계 값(이하, "iexp0"로 표기)을 결정하고, 선택된 규칙에 따라 지수가 임계 값 iexp0 보다 큰 샘플에 향상 비트들 N b 의 실제적인 할당을 수행한다.

Description

향상된 계층적 코딩 {Improved hierarchical coding}
본 발명은 디지털 신호들의 코딩/디코딩(coding/decoding)에 관한 것으로서, 특히 오디오(음성 및/또는 사운드) 또는 비디오 또는 보다 일반적으로 멀티미디어와 같은 디지털 신호들의 전송 또는 저장을 위한 어플리케이션에 관한 것이다.
특히, 예를 들어 ITU-T(International Telecommunications Union Telecommunication) G.711.1 코더(coder)에 의해 수행되는 대수(logarithmic) 타입의 디지털 코딩/디코딩에 관한 것이다.
지각(perception)의 양호한 품질을 유지하면서 비트율(bit rate)을 감소시키기 위하여 신호들의 압축은 아래와 같은 다양한 기술이 사용될 수 있다:
- 펄스 코드 변조(PCM: Pulse Code Modulation) 기술 및 그의 변형, 예를 들어, 적응 차분 펄스 코드 변조(ADPCM: Adaptive Differential PCM),
- 코드 여기 선형 예측 부호화(CELP: Code Excited Linear Prediction) 기술들 및
- "변환에 의한(by transformation)" 기술로서 알려진 기술들(예를 들어, 수정된 이산 코사인 변환(MDCT: Modified Discrete Cosine Transform).
PCM 기술은 소정의 비트수를 이용하여 샘플 별로 신호를 압축하나, 다른 기술 타입들은 샘플들의 블록(또는 프레임들) 별로 신호를 압축한다.
ITU-T G.711 권고(recommendation)에 따른 코딩/디코딩은 전통적인 전화 방식(교환망을 통한)과 인터넷을 통한(Voice over IP 또는 VoIP) 음성 신호에 가장 광범위하게 사용되는 기술 중의 하나이다. 이러한 코딩은 "대수 PCM(logarithmic PCM)"으로 알려진 기술을 사용한다.
ITU-T G.711 권고에 따른 코딩/디코딩 원리를 요약하면 다음과 같다.
G.711 코더는 8 kHz의 샘플링 주파수에서 8 비트 대수 압축에 기반하여 64 kbit/s의 비트율을 제공한다.
G.711 PCM 코딩의 원리는 300 - 3400 Hz 대역에서 신호들의 넓은 동적 범위에 대해 거의 일정한 신호 대 잡음비(signal-to-noise ratio)의 획득이 가능한 대수 곡선에 의하여 필터링된 신호의 압축을 수행한다. 이것은 코딩되는 샘플의 진폭에 의해 변화되는 양자화 단계(quantization step)으로 양자화된 코딩을 포함한다:
- 입력 신호의 레벨이 약하면, 양자화 단계는 작으며,
- 입력 신호의 레벨이 강하면, 양자화 단계는 크다.
두 가지의 대수 PCM 압축 규칙이 사용된다:
- 뮤(μ) 법칙(북아메리카와 일본에서 사용됨)과
- A 법칙(유럽과 이외의 국가에서 사용됨).
A 법칙에 따른 G.711 코딩과 μ 법칙에 따른 G.711 코딩은 입력되는 샘플들의 8 비트 인코딩을 사용한다.
실제로, G.711 코더의 수행을 용이하게 하기 위하여, 대수 PCM 압축은 세그먼트화된 곡선으로 근사화된다.
A 법칙에서, 8 비트는 다음과 같이 분배된다:
- 1개의 부호(sign) 비트,
- 세그먼트를 지시하기 위한 3 비트들,
- 세그먼트 상의 위치를 지시하기 위한 4 비트들.
도 1을 참조하면, PCM 코딩/디코딩 원리가 요약된다. PCM 코더(11)는 입력부에서 입력 신호 S(z)를 수신하는 양자화 모듈(QMIC)(10)을 포함한다. 양자화 모듈(10)의 출력부에서 양자화 인덱스(IMIC)는 전송 채널(12)을 통해 디코더(14)로 전송된다. PCM 디코더(14)는 입력부에서 전송 채널로부터 전송되는 인덱스들(I'MIC)을 수신하고(양자화 인덱스(IMIC) 내 비트 에러에 의하여 저하 가능한 버전), 인버스 양자화 모듈(Q-1 MIC)(13)을 통해 인버스 양자화를 수행하여 디코딩된 신호를 획득한다. 표준화된 ITU-T G.711 PCM 코딩(이후, G.711이라 함)은 균일한 스칼라 양자화 이전에 대수 곡선을 통해 신호들의 진폭 압축을 수행하고, 균일한 스칼라 양자화는 신호들의 넓은 동적 범위에 대해 거의 일정한 신호 대 잡음비가 얻어지게 한다. 그러므로 본래 신호의 영역(domain) 내 양자화 단계는 신호들의 진폭에 비례한다. 압축된 신호의 연속적인 샘플들은 8 비트들, 즉 256 레벨에 걸쳐 양자화된다.
그러므로 양자화 인덱스(IPCM)(도 1에서 15로 표시)는, 4개의 가수(mantissa) 비트들 "Pos", 3개의 지수(exponent) 비트들 "Seg" 및 부호 비트 "S"를 가지는 부동 소수점 수(floating point number)로 표시가 고려될 수 있다.
16 비트들로 코딩되는 샘플의 이진 표시법(부호 및 절대값)에서, 샘플의 최하위 비트(LSB: Least Significant Bit)를 b0로 표기하고, 지수(exponent)는 위치 14 내지 8 중에서 첫번째 "1"의 위치("pos")를 지시하고, 가수(mantissa) 비트들은 그 다음 4 비트들에 위치하고, 부호 비트는 b15에 위치한다.
그러므로, 위치 pos = 14 이면, exp = 7; pos = 13 이면, exp = 6, …, pos = 8 이면, exp = 1 과 같다.
첫 번째 "1"이 위치 8 이후에 있으면(이는 코딩되는 샘플의 절대값이 255 보다 작거나 같은 경우에 해당됨), 지수는 0이다.
아래 표 1의 예시에서 "1"로 셋팅된 첫 번째 비트가 비트 b10(pos=10)이고, 지수(exp)가 3이며, 가수(mantissa)의 4 비트들이 위치 9에서 6까지 위치한다: m3m2m1m0(=b9b8b7b6).
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
s 0 0 0 0 1 m3 m2 m1 m0
디지털 신호의 G.711 타입 인코딩은 양자화기(quantizer) 결정 임계값과의 비교를 통해 수행될 수 있으며, 이분법(dichotomy)에 의한 탐색은 계산 속도를 향상시킬 수 있다. 이러한 임계값들과 비교를 통한 탐색은 임계값들에 대응되는 결정 임계값들과 양자화 인덱스들의 저장을 요구한다. 또 다른 인코딩 솔루션은, 계산에 적은 비용이 들도록 우측으로 4 비트 시프트함으로써 4 개의 최하위 비트의 제거하고, 이후 시프트 값에 2048의 추가하도록 구성된다. 양자화 인덱스는 결국 4096 개의 엔트리들을 가지는 테이블에서 간단한 판독을 통해 얻어지나, 위에서 제시된 방법에서 보다 더 큰 ROM(Read Only Memory)를 필요로 한다.
이러한 테이블을 저장하는 것을 피하기 위하여, 양자화 지수는 낮은 복잡도를 가지는 간단한 조작으로 결정될 수 있다. G.711.1 인코더에서의 경우가 그러하다. 적어도 4 비트들의 우측 시프트는 여전히 적용된다. 16 비트들로 코딩되는 샘플들의 경우, 가장 작은 양자화 단계는 16을 유지한다. 4개의 최하위 비트가 여전히 손실된다.
더욱 일반적으로, "1"로 셋팅된 첫 번째 비트의 다음에 이어지는 4 비트들만이 전송되고, 이외의 비트들은 손실된다. 따라서:
- 첫 번째 세그먼트에서(|x| ≤ 255, exp = 0), 4개의 최하위 비트들이 손실되고(mant = x >> 4),
- 이외의 세그먼트들에서(2 exp +7 ≤ |x| < 2 exp +8, 0 < exp < 8), (3 + exp) 개의 최하위 비트들이 손실된다(mant = x >> (3+exp)).
손실된 비트들의 개수는 마지막 세그먼트(exp = 7)에 대한 10 비트까지 세그먼트의 수에 따라 증가한다.
디코더에서, 디코딩된 신호는 인버스 PCM 양자화의 출력에서 획득된다(도 1). 인버스 양자화가 테이블에 의해 수행되는 경우, 단순히 256 개의 디코딩 값의 테이블에서 인덱스에 의한 포인팅으로 구성된다. 따라서 디코딩은 동일한 타입의 간단한 동작에 의해 수행 될 수 있다.
μ 법칙에 따른 버전은 A 법칙과 상당히 유사하다. 주요한 차이는 첫 번째 세그먼트에서 비트 7이 항상 1과 같도록 보장하기 위하여 값들에 128이 부가되는 것이다. 그러한 방식은 다음을 가능하게 한다:
- 불필요한 비트 7을 전송하게 하나,
- 그럼에도 불구하고 첫 번째 세그먼트에서 코딩의 정확성을 향상시키며(A 법칙에 따른 코딩에서 16과 대조적으로 첫 번째 세그먼트에서 양자화 단계가 8과 같음),
- 동일한 방식으로 모든 세그먼트를 처리한다.
더욱이, 반올림을 위해 4를 추가하고(따라서, 128 + 4 = 총 132), 양자화된 값들 중에 레벨 "0"를 생성한다(A 법칙은 레벨 0을 가지지 않고, 가장 작은 값은 +8 또는 -8임).
첫 번째 세그먼트에서 이러한 보다 우수한 분해능(resolution)의 대가는 132만큼 모든 세그먼트들이 시프팅된다는 것이다. A 법칙에 관하여 살펴보면, 디코딩은 테이블을 읽거나 알고리즘적으로 단순한 동작들의 세트를 통해 수행된다.
PCM 코딩에 의해 획득한 신호 대 잡음비(SNR: signal-to-noise ratio)는 신호들의 넓은 동적 범위에 대하여 거의 일정하다(~38dB). 본래의 신호 영역(domain)에서 양자화 단계는 신호들의 진폭에 비례한다. 이 신호 대 잡음비는 가청할 수 없는 양자화 잡음을 형성하기에 충분하지 않다. 게다가, 낮은 신호 레벨들(첫 번째 세그먼트)에 대해, SNR은 매우 불충분하고, 심지어 음수가 될 수 있다.
G.711 코더의 품질은 협대역 음성 신호들(샘플링 주파수 8 kHz)에 양호하다고 간주된다. 그러나, 이 품질은 탁월하지는 않으며 코딩되는 본래 신호와 디코딩된 신호 간의 차이가 가청 코딩 잡음으로 인지된다. 일부 어플리케이션에서, 선택적인 계층(optional layer)을 추가함으로써, 예를 들어 16 kbit/s (따라서 샘플 당 2 비트), 0 - 4000 Hz 대역에서 PCM 코딩의 품질을 향상시키는 것이 필요하다. 디코더가 이러한 향상 계층을 수신할 때, 디코딩된 신호의 품질을 향상시킬 수 있다.
"계층적"으로 알려진 G.711 코딩/디코딩의 원리가 이하 설명된다.
G.711 코딩의 경우, 메모리의 측면에서 매우 복잡하지 않고 비용도 많이 소요 되지 않는 코더는 낮은 복잡도와 합리적인 메모리 요구와 함께 계층적 확장 기술을 고려할 가치가 있다. 그러한 기술은 (US 2010/191538 명세서에서 예를 기술한 바와 같이) PCM 코딩의 가수에서 전송되지 않는 비트들의 복구 및 향상 계층(enhancement layer)에서 그 비트들을 전송하는 것으로 구성된다. 이 계층을 수신하는 경우에, 디코더는 보다 정밀하게 가수를 디코딩할 수 있다. 샘플 당 추가되는 각 비트에 대하여 6 dB 의 SNR의 증가를 얻을 수 있도록 하는 이러한 방법은 초기 PCM 코딩 동안 손실된 비트 중 최상위 비트를 절약하고 개선된 비트 스트림에서 전송하도록 구성된다. 예를 들어, 16 kbit/s (샘플 당 2 비트)에서의 향상 계층의 경우, 이 계층에서 전송되는 비트들은 가수 4 비트들 다음에 이어지는 2 비트들을 절약하기 위하여 2 단계에서 우측 시프트를 수행함으로써 획득될 수 있다.
인코더는 대수 PCM 코딩의 제한된 정밀도로 인하여 손실될 비트들에서 첫 번째 (유효) 비트들에 대응하는 비트들을 확장 계층(extension layer)에서 전송한다. 이들 확장 비트들로 인하여 부가적인 위치들이 세그먼트들 "Seg"에 추가되는 것이 가능하므로, 최대 진폭들의 샘플들에 대한 정보를 향상시킨다. 디코더는 세그먼트 내 디코딩된 샘플의 위치에서 향상된 정밀도를 획득하기 위하여 기본 계층 비트들 이후에 수신되는 확장 비트들을 연결한다. 디코더에서, 반올림 값이 수신되는 확장 비트들의 개수에 따라 적응된다.
PCM 코딩의 가수에 전송되지 않은 비트들을 향상 계층에서 전송하기 위하여 복구하는 기술은 ITU -T G.711.1의 코더에서 저대역의 코딩을 향상시키기 위하여 사용된다.
2008 버전 ITU -T G.711.1 코더는 PCM G.711 코딩의 확장이다. 이것은 G.711 코더(A 법칙 또는 μ 법칙)와 완벽하게 상호 운용되는 계층적인 64 내지 96 kbit/s 코더를 포함한다. 이 표준은 VoIP 어플리케이션의 품질 향상에 대한 요구 사항을 충족시킨다. G.711.1 코딩/디코딩을 위한 기능 다이어그램은 도 2에서 예시된다. G.711.1 코더는 5 ms 블록들 또는 프레임들 (즉, 16 kHz에서 80 샘플들)에서 16 kHz로 샘플링된 오디오 신호에서 동작한다. 입력 신호 S(z)는 직교 미러 필터(QMF: Quadrature Mirror Filters) 타입의 필터들(20)에 의하여 서브밴드(SB: sub-band) 1: [0 - 4 kHz] 과 서브밴드(SB: sub-band) 2: [4 kHz - 8 kHz], 2 개의 서브 밴드로 분할된다. 64 kbit/s (G.711 (L0)와 호환되는 "계층 0")의 비트율은 양자화 잡음의 형태(shaping)을 가지고, 전술한 G.711 코딩과 동등한 PCM(모듈 21) 기술에 의하여 0 - 4 kHz의 서브 밴드의 양자화에 대응된다. 다음 두 계층("계층 1 - 2")은 16 kbit/s (프레임 당 80 비트)의 비트율을 가지고 각각 다음과 같이 코딩한다:
- PCM 코딩("계층 1"(L1)을 위한 향상 모듈(23))을 위해 향상된 기술(ENH, enhancement technique)을 사용하여 0 - 4 kHz 저대역,
- MDCT 변환 코딩("계층 2"(L2)을 위한 모듈(22))에 의한 4 - 8 kHz 고역 통과(high-pass) 대역
저대역의 향상 계층("계층 1")은 G.711 권고에 따라 코딩된 각 샘플에 부가적인 비트를 추가함으로써 코어 계층("계층 0")의 양자화 오차를 감소시킬 수 있다. 상술한 바와 같이, 각 샘플에 부가적인 가수 비트들을 추가한다.
가수를 위한 부가적인 비트들의 수는 샘플의 진폭을 따른다. 샘플들의 가수 코딩의 정밀도를 향상시키기 위해 동일한 수의 비트들을 할당하는 대신, 40 샘플들의 가수 코딩의 정확성을 향상시키기 위해 제1 계층(L1)에서 가용한 80 비트들이 동적으로 할당되고, 이처럼 더 많은 비트들이 유효 지수(significant exponent)를 가지는 샘플에 기여한다. 따라서, 향상 계층 내 비트들을 위한 예산(budget)은 평균적으로 샘플 당 2 비트(16 kbit/s)인 반면, 향상 신호(enhancement signal)는 샘플 당 3 비트의 분해능(resolution)을 가지고, 이러한 동적 할당을 가지고 샘플에 할당된 비트들의 수는 0부터 3 비트들까지 지수 값에 따라 달라진다.
이하, G.711.1 코더의 저대역의 향상 계층 "1"(L1)의 코딩/디코딩의 동작에 대한 방법을 설명한다.
적응적 비트 할당(adaptive bit allocation)을 가지는 인코딩은 다음 두 단계로 이루어진다:
- 비트 할당 테이블을 생성하는 첫 단계,
- 이어지는 향상 신호를 동적 다중화하는 다음 단계.
이러한 절차는 A와 μ법칙에 모두 공통된다.
비트 할당 테이블은 n = 0에서 n = 39까지 값을 가지는 40개의 샘플들의 지수들 exp (n)를 사용하여 생성된다. 비트 할당 테이블 자체를 생성하기 위한 절차는 다음 두 단계를 포함한다:
- 제1 단계에서, 지수 맵(map) 및 지수 인덱스 카운터 테이블이 지수들로부터 계산되고,
- 제2 단계에서, 비트 할당 테이블이 계산된다.
지수 맵 map (j,n) (j = 0, …, 9, n = 0, …, 39)과 지수 인덱스 카운터 테이블 cnt (j) (j = 0, …, 9)은 도 3을 참조하여 다음과 같은 동작에 따라 계산되며, 도 3의 S11 단계에서 지수 인덱스 카운터 테이블은 0으로 재설정된다: cnt(j)=0 (j = 0, …, 9) 그리고 40 샘플들에 대한 루프 인덱스 n.
다음으로, 40 샘플들 각각에 대하여(n = 0, …, 39 에 걸친 루프를 통해)
(i = 0, …, 2인 루프에서)
- S12 단계는 3 개의 지수 인덱스들의 계산에 해당된다: iexpn = exp (n) + i (i=0, 1, 2);
- S13 단계는 지수 맵의 업데이트에 해당한다: map ( iexpn , cnt ( iexpn )) = n
- S14 단계는 지수 인덱스 카운터 테이블의 증가에 해당한다: cnt ( iexpn ) = cnt(iexpn) + 1
이러한 절차의 마지막에서, 지수 인덱스 카운터 테이블 cnt (j)은 동일한 지수 인덱스에서 샘플들의 수를 지시하고, 지수 맵은 주어진 지수 인덱스를 사용하는 샘플들의 인덱스들을 포함한다.
따라서, cnt(6)은 지수 인덱스로서 6을 가질 수 있는 샘플들의 수이고, 즉, 지수들의 샘플들의 수는 6(i=0), 5(i=1), 또는 4(i=2), map (6,j) (j=0, cnt(6)-1)은 cnt(6) 샘플들의 인덱스들을 포함한다.
비트 할당 테이블 b(n) (n = 0, …, 39)은 이후 도 4를 참조하여 다음과 같이 계산되며, 도 4의 S21 단계는 다음과 같은 재설정 과정으로 구성된다:
- 비트 할당 테이블 b(n)는 제로로 재설정: b(n) = 0 (n = 0, …, 39),
- 할당될 비트들의 수 N b 를 80으로 재설정: N b = 80
- 지수 인덱스 iexp는 그것의 최대 값으로 재설정(여기서, 9 = 7 + 2): iexp = 9
이러한 첫 번째 재설정 단계 이후, 모든 비트가 할당될 때까지 다음의 S22 단계 내지 단계 S25까지 반복된다.
S22 단계: 할당될 비트들의 수 N b 와 지수 인덱스 카운터 cnt ( iexp ) 비교하여 더 작은 수를 결정: min(cnt( iexp ), N b )
S23 단계: 지수 맵 내 지수 인덱스 iexp에 해당하는 인덱스들을 가지는 min(cnt(iexp), N b )개의 첫 번째 샘플들의 비트 할당을 1만큼 증가:
모든 n = map ( iexp ,j) (j = 0, …, min(cnt ( iexp ), N b )-1)에 대하여 b(n) = b(n) + 1,
S24 단계: 할당될 비트들 수의 갱신:
N b = N b - min(cnt ( iexp ),N b )
S25 단계: 모든 비트들이 할당되었는지 확인하기 위한 테스트(N b = 0):
만약 N b > 0인 경우, 지수 인덱스를 1만큼 감소시키고(iexp = iexp - 1), S22 단계로 이동하여 다음 단계가 반복된다.
그렇지 않으면(N b = 0: 모든 비트들이 할당됨), 비트 할당 테이블의 계산이 완료된다.
이러한 절차는 특히, EP 2187387 및 EP 2202728의 명세서에 기술되어 있다.
비트 할당 테이블 b(n) (n = 0, …, 39)은 각각의 샘플에 대하여 확장 계층의 최상위 비트들의 수를 제공한다. 따라서, 향상 코드들이 추출되고, 이후 향상 계층의 비트 스트림에 순차적으로 다중화된다. 여기서, 고정 비트 할당(fixed bit allocation)을 가지는 G.711 계층적 코더에서는 단지 2 비트가 절약되는 것과는 달리, 가수의 4 비트들 다음에 3 비트들이 절약된다. 이어, 적응적 비트 할당 테이블을 계산한 후에, b 비트 확장 신호(b = 0, 1, 2 또는 3)가 b 개의 최상위 비트들만을 유지하면서 추출된다. 이를 위해, 할당된 비트들의 수 b에 따라 3-b 비트들의 우측 시프트가 수행된다.
고정 비트 할당과 향상 신호의 다중화와 비교하여, 적응적 비트 할당과의 다중화는 더 복잡하다. 샘플 당 2 향상 비트들을 가지는 고정 비트 할당의 경우 8 비트들의 바이트(byte)들 내에 이러한 향상 계층의 비트 스트림의 구성이 간단한 반면, 동적 할당의 경우 그렇지 않다.
샘플 당 2 비트의 고정 할당과 함께, 향상 계층의 10 바이트들 각각은 4개의 연속적인 샘플들의 2 향상 비트에 의해 구성된다. 따라서, 첫 번째 바이트의 8 비트들(b7b6b5b4b3b2b1b0)은 다음과 같다:
- 샘플 0 의 2 개의 향상 비트들 (b7b6),
- 이어, 샘플 1의 2 개의 향상 비트들 (b5b4),
- 이어, 샘플 2의 2 개의 향상 비트들 (b3b2),
- 그리고 마지막으로 샘플 3의 2 개의 향상 비트들 (b1b0).
보다 일반적으로, i 번째 바이트(i = 0, …, 9)의 8 비트들(b7b6b5b4b3b2b1b0)은 다음과 같다:
- 샘플 4i 의 2 개의 향상 비트들 (b7b6),
- 이어 샘플 4i+1의 2 개의 향상 비트들 (b5b4),
- 이어 샘플 4i+2의 2 개의 향상 비트들 (b3b2),
- 그리고 마지막으로 샘플 4i+3의 2 향상 비트들 (b1b0).
디코딩에서, 비트 할당 테이블은 상술한 동일한 원리에 따라 재구성되며, 지수 값들은 인코더 및 디코더에 가용된다. 이어, 향상 신호는 비트 할당 테이블을 사용하는 향상 계층의 비트 스트림으로부터 재구성 된다.
다만, G.711.1 코더의 저대역 향상 계층의 현재의 코딩/디코딩에 내재하는 단점이 있다.
고정 할당(일반적으로 샘플 당 2 비트들)과 비교하면, 동적 비트 할당은 코딩되는 샘플들의 진폭에 따라 다수의 향상 비트들을 할당할 수 있다. 다만, 이러한 적응 할당은 고정 할당 보다 현저하게 더 복잡하다. 이는 ROM(Read Only Memory)에 저장되는 명령의 수를 고려 하지 않고도 더 많은 랜덤 액세스 메모리(RAM: random access memory) 또한 계산을 필요로 한다.
예를 들어, 80 비트들이 40 샘플들에 할당되며 할당되는 비트들의 수가 0 비트부터 3 비트까지 다양한 G.711.1 코덱의 경우에, 고정 비트 할당과 비교하여 동적 비트 할당은 저장되는 다음과 같은 테이블들을 요구하다.
- 비트 할당 테이블: 16 비트들의 40 워드들(words)
- 지수 맵 테이블: 16 비트들의 400(=10×40) 워드들
- 지수 카운터 테이블: 16 비트들의 10 워드들
따라서, G.711.1의 경우 고정 할당에 비하여, 동적 할당은 메모리에 450 워드들의 순서를 요구한다.
지수 맵의 계산, 관련된 지수 카운터 테이블의 계산뿐만 아니라 동적 비트 할당을 위한 반복 절차와 같은 계산의 복잡도와 관련하여, 복잡한 어드레싱(addressing), 수많은 메모리 액세스들 및 테스트들을 요구한다.
예를 들어, 10 메모리 액세스들을 요구하는 지수 카운터 테이블의 초기 재설정은 이후 40 샘플들에 대하여 다음과 같은 루프가 수행된다:
a) 샘플 n의 지수 iexpn를 획득하기 위한 메모리 액세스
b) 지수 맵 내 map(iexpn,0)의 주소 adr _ map를 가리키도록 어드레싱
c) 카운터 테이블 내 cnt(iexpn)의 주소 adr _ cnt를 가리키도록 어드레싱: adr_cnt = cnt + iexpn
d) 다음에 루프는 3개의 인덱스들(i = 0, 1, 2)에 대하여 수행된다.
i. 메모리의 adr _ cnt 주소에서 저장된 값을 판독(메모리 액세스): *adr _ cnt
ii. map(iexpn,*adr _ cnt)의 주소 adr _ mapi를 가리키도록 지수 맵 내 어드레싱: adr _ mapi = adr _ map + *adr _ cnt
iii. 이 주소에 n 쓰기(저장): *adr _ mapi = n
iv. 주소 adr _ cnt에 포함된 지수 카운터의 값을 1 증가: * adr _ cnt = * adr _ cnt+1
v. 주소 adr _ cnt를 1 증가: adr _ cnt ++
vi. 주소 adr _ map를 40 증가: adr _ map = adr _ map + 40
a), b), c) 및 d)의 동작들은 40번 수행된다; d)의 내부 루프에서의 동작들(i부터 vi까지의 동작들)은 120번(= 40×3) 수행된다.
비록 일반적인 어드레싱(v 및 vi의 동작들로 인하여 상수 증가를 가짐)의 복잡도가 무시할 수 있을 정도라도, 그것이 특정의 더 적은 일반적인 어드레싱 동작들의 경우에 해당되지는 않는다. 테이블 cnt 내 어드레싱이 매우 비용이 높진 않더라도(c) 단계의 추가), 지수 맵 테이블 내 어드레싱은 상대적으로 복잡하다.
특히, 2 차원 테이블(10 및 40) 내 요소 map (j,n)의 주소를 가리키는 것은 40j+n 의 계산을 요구한다. n의 추가가 "1"의 유효를 가진다면, 40의 곱셈은 "3"의 비용을 요한다. 이러한 어드레싱 비용을 줄이기 위하여 부분적인 주소들을 저장하는 것이 가능 하지만, RAM의 크기 증가에 따른 비용을 가져온다.
비트 할당 테이블의 계산은 또한 0으로 비트 할당 테이블을 재설정하고, 80 개의 할당되는 비트들의 수는 41 번의 메모리 액세스들을 요구하는 점에서 복잡하다. 지수 카운터 테이블 및 지수 맵 내에서 어드레싱 또한 각각 cnt(9)의 주소 adr_cntmap(9,0)의 주소 adr _ map를 가리키도록 재설정된다 (adr _ cnt = cnt + 9, adr _ map = map + 40 * 9).
다음으로, 10 지수 인덱스 값(iexp이 9부터 0까지 감소)들에 대하여 루프가 다음과 같은 동작들로 수행된다:
e) 할당 될 잔존 비트 수 N b 가 현재 지수 카운터의 값보다 작은지 여부를 결정하기 위한 테스트, *adr _ cnt (=cnt(iexp));
- 만일 그렇다면, 변수 N b 는 변수 bit _ cnt에 저장된다;
- 그렇지 않은 경우, 저장된 *adr _ cnt 값이 된다.
이 저장은 메모리 액세스로 카운트된다.
f) map(iexp, 0)의 주소 adr _ mapi를 가리키도록 지수 맵 내 어드레싱 재설정: adr _ mapi = adr _ map
g) 다음으로, bit _ cnt 인덱스들(i= 0, 1, bit _ cnt-1)에 대하여 루프가 수행되어 map(iexp,0)에서 map(iexp, bit _ cnt-1)까지 저장된 각각 첫 번째 샘플들의 인덱스들 bit _ cnt의 비트 할당을 1 비트 만큼 증가시킨다. 이 내부적인 루프에서 다음과 같은 동작이 수행된다:
- 주소 adr _ mapi (즉, 요소 map(iexp,i)의 주소)에서 메모리에 저장된 샘플의 인덱스 n 을 판독(메모리 액세스): n = *adr _ mapi
- 비트 할당 테이블 내 요소 b(n)의 주소 adr _b를 가리키도록 어드레싱: adr_b = b + n
- 샘플 n 의 비트 할당에 1 증가(추가) 및 증가된 값 저장(메모리 액세스): *adr_b = *adr _b +1 (b(n) = b(n) + 1)
- 지수 맵 내 주소를 1 증가: adr _ mapi++ (이제, adr _ mapi은 요소 map(iexp,i+1)의 주소를 가리킴)
h) 할당 될 잔존 비트 수를 갱신(감산): N b = N b - bit _ cnt
i) 모든 비트가 할당 되었는지 여부를 결정하기 위한 테스트:
- 그러한 경우(N b = 0), iexp에 대한 루프를 벗어남: 비트 할당이 종료됨
- 그렇지 않은 경우(N b > 0), 요소 map(iexp-1, 0)의 주소를 가리키기 위하여 주소 adr _ map를 40 감소시키고(adr _ map = adr _ map - 40), 그리고 다음 지수(iexp = iexp - 1)를 위하여 e)에서 i)까지의 단계를 수행한다.
수행되는 외부 루프(e부터 i까지의 동작들)의 횟수는 지수 맵에 따른다(따라서, 코딩될 샘플들의 지수들의 분포에 따름). 이 횟수의 변동성은 루프를 더 복잡하게 한다. 루프의 반복 횟수가 루프에 진입하기 전에 알려지지 않는다면, 각 반복의 마지막에서 테스트(i 단계)를 수행하기 위하여 필요하다. 내부 루프 동작들의 횟수는 할당될 비트들의 총 수(G.711.1 의 경우 80)와 동일하다. 특히, 여전히 이러한 동작들은 한 번에 1 비트를 할당하도록 구성되어 있다.
상술한 바와 같이, 적응적 비트 할당과의 다중화에 관하여, 비트 스트림에서 향상 계층에서의 비트들의 다중화는 고정 비트 할당과의 다중화보다 훨씬 더 복잡하다.
비트 스트림의 구성은 동적 할당에서 일반적이지 않다: 한 바이트를 구성하는 샘플 비트들의 수가 다양하고, 동일한 샘플의 향상 비트들이 다른 바이트에 존재할 수 있다. 고정 다중화와 비교해서, 적응 다중화는 훨씬 더 복잡하고, 상술한 예에서 40 루프 테스트 ("IF" 타입) 및 80 부가적인 추가/감산을 필요로 한다. 10 바이트들의 최종 구성은 또한 20 감산 및 20 비트 오프셋(offset)을 요구한다.
따라서, G.711 코딩 기술이 동적 비트 할당과 계층적 확장의 도입으로 품질 향상되었을지라도, 이 동적 할당은 많은 수의 동작과 훨씬 더 많은 메모리를 필요로 한다. G.711에 계층적 확장에 대한 ITU -T 표준화는 낮은 복잡도를 달성하는데 그 목적이 있다.
본 발명의 목적은 이러한 상황을 개선하는데 있다.
본 발명은 디지털 오디오 신호 향상 계층의 코딩/디코딩을 포함하는 계층적 코딩/디코딩에서의 비트 할당 방법은 목적으로 한다. 디지털 오디오 신호는 연속적인 L 샘플들을 포함하고, 각 샘플은 가수 및 지수의 형태로 나타낸다. 상기 방법은 특히, L 샘플들 중 최대 지수 값을 가지는 적어도 일부에 향상 비트의 기 설정된 개수 N b 의 할당을 포함한다.
상기 방법은 다음 단계를 포함한다:
a) 각각 소정의 값을 가지는 L 샘플들의 지수를 열거하고,
b) 위에서부터 기 설정된 개수 N b 에 도달할 때까지 지수 값들을 감소시킴으로써 열거된 지수들의 적어도 하나의 누적 값을 계산하며,
c) 더 이상 향상 비트가 가용하지 않은 샘플의 최대 지수에 대한 임계 값(이하, "iexp0"로 표기)을 결정한다.
지수가 임계 값 iexp0 보다 큰 샘플들에 향상 비트들 N b 의 실제적인 할당은 선택된 규칙에 따라 수행될 수 있다.
도면들을 참조하여 후술하는 실시 예에서 알 수 있는 바와 같이, 할당 가능한 비트 수의 감소에 의하여 변수 iexp0의 결정은 상술한 종래 기술과 비교하여 비트 할당의 계산의 복잡도를 상당히 제한할 수 있다.
일 실시 예에서, 상술한 선택된 규칙에 따라 샘플에 할당될 비트의 최대 개수 N a 가 미리 설정될 수 있으며, 다음과 같이 예약될 수 있다:
- 지수가 임계값 iexp0과 최대 개수 N a 의 합계를 초과하는 각 샘플에 할당하기 위한 N a 비트들 및
- 지수가 상기 임계값 iexp0 이하인 샘플들을 위한 비트는 부존재
- 지수가 임계값 iexp0과 최대 개수 N a 의 합계, 그리고 임계값 iexp0에 1을 추가한 값 사이에 구성되는 샘플들에 할당하기 위한 비트 개수 N b 중에 추가적인 비트들의 개수.
이는 샘플들의 지수 값들에 기초하여 진보된 비트 할당을 제공한다.
특정 실시 예에서, 지수가 임계 값과 최대 개수 N a 의 합계, 그리고 임계값에 1을 추가한 값과 사이에 구성되는 각 샘플에 할당하기 위한 비트가 다음과 같이 결정될 수 있다:
- 샘플의 지수와 임계값 iexp0 간의 차이,
- 또는 이 차이가 1보다 작은 경우, 선택된 기준에 따라, 예를 들어 연속적인 샘플들 내에서 샘플 위치 순서(positional order).
그럼에도 불구하고, 샘플들의 해당 카테고리에 대해 변수들의 할당이 가능하다(예를 들어, 샘플들의 근접성 또는 다른 기준을 고려하여).
예를 들어, 오히려 지수가 [iexp0+1, iexp0+Na] 범위 내인 첫 번째 샘플들 보다 최대 지수를 가지는 샘플을 선호할 수 있다.
Na가 기 설정되어 있는 경우에, 지수가 iexp0+Na 보다 확실히 큰 샘플들이 결국 Na 비트들을 수신하도록 고려될 수 있다.
다만, 일 실시 예에서, Na는 선험적으로 미리 정의 될 수 없다. 예를 들어, Na는 상기 b) 단계의 마지막(본질적으로 누적의 마지막)에서 결정될 수도 있으며, b) 단계의 구현 이후에 이 Na를 단순히 알 수 있을 수 있다. 실제로, 할당 개수가 Nb를 초과하지 않는 것을 확인하기 위하여 횟수 Na에 대한 제약을 제공하는 것은 필연적으로 불가능하다.
일반적으로, 추가적인 비트들의 수가 최종적으로 할당된 비트들의 총 수 Nb에 해당하는 것으로 이해될 수 있으며, 이는 지수가 iexp0+Na 보다 확실히 큰 샘플들에 할당된 비트들의 수보다 작을 수 있다(그러한 샘플들의 수는 0이 될 수 있음). 반면, 상술한 임계값 iexp0의 결정으로 인하여 할당 개수가 Nb를 초과하지 않는 것을 보장할 수 있다. 임계값 iexp0은 할당된 비트들의 수 Nb를 초과하는 것을 피하도록 계산되기 때문에, 지수가 iexp0+Na 보다 큰 모든 샘플들에 Na 비트들의 할당이 "초과(overflow)" 할당을 야기시키지 않을 수 있다.
일 실시 예에서, 상기 b) 단계는 예를 들어 다음을 단계를 포함 할 수 있다:
b1) L 샘플 중 최대 지수 값(이하 "iexpmax"로 표기)의 결정;
b2) 최대 지수 값으로부터 N a 번 감소된 최대 값까지 지수들의 개수 누적; 및
b3) 다음과 같은 조건부 루프:
- 상기 누적이 L 샘플들에 할당될 비트들의 총 개수 N b 보다 작게 남은 경우, b2) 동작으로부터의 누적 결과가 N b 보다 작은 한 b2) 동작의 루프를 반복하면서, 최대 지수 값의 1씩 감소시키는 b2) 동작의 수행함으로써 상기 누적에 새로운 누적이 추가되고, b2) 동작의 수행으로 인한 감소의 결과가 최대 지수 값으로 취급된다.
- 그렇지 않은 경우, 지수가 임계값과 최대 개수 N a 의 합계, 그리고 임계값에 1을 더한 값 사이에 구성되는 샘플들의 수(L'')를 결정하기 위하여, b2) 동작의 바로 앞의 반복에서 남아 있는 추가 비트들의 개수가 계산된다.
일 실시 예에서, L 개의 샘플들에 비트 할당은 2 개의 루프의 실행에 의해 수행될 수 있다:
- 임계값과 최대 개수 N a 의 합계, 그리고 임계값에 1을 더한 값 사이의 지수를 가지는 샘플들에 비트 할당이 수행될 때까지 제1 루프가 수행되고, 제1 루프가 반복되는 수는 카운트되며,
- 다음으로, 마지막으로 남아있는 샘플들에 비트 할당을 수행하기 위한 제2 루프가 반복되고, 상기 제2 루프의 반복되는 횟수는 상기 제1 루프가 반복되는 횟수인 함수로 구성된다.
일 실시 예에서, 지수 카운터 테이블은 a) 단계에서 설정될 수 있고, 테이블 내 주소 포인터는 바람직하게 b) 단계의 수행을 위한 조건부 루프에서 감소될 수 있다.
따라서, L 샘플들 간의 최대 지수 값(iexpmax)의 결정은 상술한 테이블을 판독함으로써 효율적으로 수행될 수 있다.
특히 코딩에서, 상기 방법은 종래 향상 계층의 코딩으로부터 향상 신호의 비트 스트림의 구성을 포함할 수 있다. 아래의 부록 2(표 8)에서 예시되어 논의되는 일 실시 예에서, 이 구성은 각 샘플의 비트 할당 이후에 바람직하게 즉시 수행된다.
부록 1(표 7)에 예시되는 일 실시 예(이하, "제1 실시 예"로 표기)에 따른 변형 예에서, 비트 할당 데이터는 우선 테이블에 저장되고, 비트 스트림의 구성은 이 테이블에 기초하여 수행된다.
이 방법은 바람직하게 ITU -T G.711.1 권고에 따른 타입 A 또는 타입 μ의 대수 진폭 압축 코딩 법칙에 따른 PCM(Pulse Code Modulation) 타입 양자화에 의한 코딩/디코딩에 적용된다.
본 발명은, 바람직하게 브리지 아키텍처(bridge architecture)에서, 특히 여러 단말 간의 원격 회의를 위한 오디오, 입력되는 비트 스트림들의 적어도 부분적인 디코딩, 혼합(mixing) 및 적어도 부분적인 재인코딩(re-encoding)에 의한 신호 처리에 적용될 수 있다(다만, 물론 이에 제한되지 않음). 그러한 어플리케이션에서 특히 제2 실시 예의 수행이 아래에서 볼 수 있는 바와 같이 바람직하다.
본 발명은 프로세서에 의해 실행될 때, 상기 방법의 수행을 위한 명령들을 포함하는 컴퓨터 프로그램의 실행을 통해 구현될 수 있으며, 이 점에서 본 발명은 그러한 프로그램 예를 들어, 후술하는 도 5 내지 9에 도시된 흐름도에 관한 것이다.
도 11에서 도시 된 바와 같이, 본 발명은 디지털 오디오 신호의 계층적 코딩 내 향상 계층의 인코딩 장치(COD)에 관한 것이고, 상술한 어플리케이션 및/또는 발명의 수단 내에서 코딩 방법의 수행을 위한 컴퓨터 수단(computerized means)(예를 들어, 전형적인 프로세서(PROC) 및 메모리(MEM))을 포함한다.
또한, 본 발명은 디지털 오디오 신호의 계층적 디코딩 내 향상 계층의 디코딩 장치(DEC)에 관한 것이고, 상술한 어플리케이션 및/또는 발명의 수단 내 디코딩 방법의 수행을 위한 컴퓨터 수단(예를 들어, 전형적인 프로세서(PROC') 및 메모리(MEM'))을 포함한다. 디코더와 상술한 코더는 채널(C)에 의해 함께 연결될 수 있다.
따라서, 동적 비트 할당과 함께 계층적 확장 기술을 기반으로, 본 발명은 획득된 품질을 유지하면서 RAM과 계산들의 수를 줄이기 위하여 이용될 수 있다. 특히, 부록 1(표 7)에서 제시된 일 실시 예에서, 획득된 신호들은 어느 시점에서든 종래 기술과 호환된다. 그 결과로 구현이 용이해지고(메모리 및 처리 용량의 절약), 비용이 절약될 수 있다. 본 발명은 특히 원격 회의 시스템에서의 코딩에 매우 유용하다.
1 비트씩 비트 할당을 수행하는 대신에, 본 발명은 각 샘플에 대하여 그 지수에 따라 해당 샘플에 할당되는 향상 비트들의 총 수를 직접적으로 결정한다. 바람직하게는, 본 발명은 지수 맵을 사용하지 않음으로써 RAM를 줄일 수 있고, 또한 수많은 메모리 액세스들과 복잡한 어드레싱 동작들을 배제할 수 있다. 본 발명은 L 샘플들 지수들 중 최대 지수 iexp max 와 향상 비트를 수신하지 않는 샘플들의 최대 지수 iexp 0 를 결정한다. 그리고, 이 두 지수들로부터, 각 샘플에 할당 되는 비트들의 총 수를 계산한다.
일 실시 예에서, 본 발명을 적용함으로써 종래의 G.711.1 코딩/디코딩에서 초기에 사용되는 1 비트 별 반복 절차와 동일한 동적 비트 할당을 수행할 수 있다.
본 발명의 다른 이점들 및 특징들은 도면을 참조하여 후술하는 실시 예들의 설명으로부터 명백해질 수 있다.
도 1은 본 발명의 컨텍스트(context)에서 코더(11) 및 디코더(14)를 통해 방법의 구현을 위한 시스템의 일반적인 예시를 도시한다.
도 2는 본 발명의 구현을 위한 계층적 코더의 구조를 개략적으로 도시한다.
도 3은 종래 기술의 수단에서 지수 맵과 지수 인덱스 카운터 테이블의 계산을 도시한다.
도 4는 종래 기술의 수단에서 비트 할당 테이블의 계산을 도시한다.
도 5는 본 발명의 일 실시 예에 따른 제1 단계에서 지수 카운터 테이블의 구성을 위한 예시적인 흐름도를 도시한다.
도 6은 본 발명의 수단에서 다음 일반적 단계에 따른 지수 카운터의 누적 계산을 위한 예시적인 흐름도를 도시한다.
도 7은 향상 비트를 수신하지 않는 샘플들의 최대 지수에 해당되는 변수 iexp0의 계산을 위한 예시적인 흐름도를 도시한다.
도 8a는 일 실시 예에 따른 비트 할당 절차를 위한 예시적인 흐름도를 도시한다.
도 8b는 다양한 실시 예에 따른 비트 할당 절차를 위한 예시적인 흐름도를 도시한다.
도 9는 일 프레임의 L 샘플들에 할당될 비트들의 열거를 위한 예시적인 일반적 흐름도를 요약한다.
도 10은 여러 단말들 간의 원격 회의 브리지에 대한 본 발명의 적용을 개략적으로 도시한다.
도 11은 본 발명의 구현을 위한 코더/디코더 타입의 시스템을 도시한다.
본 발명의 가능한 어플리케이션은 계층적 코딩에서 향상 계층의 코딩에 관한 것이다. 이 계층적 코딩은 디지털 신호 S의 연속적인 L 샘플들의 진폭 압축 법칙에 따른 양자화에 의한 기본 계층의 코딩을 포함한다(도 2 참조). 샘플들은 기 설정된 개수의 비트들의 개수로 코딩되고, 여기서 기 설정된 개수의 비트들은 양자화 인덱스(IMIC)의 제1 비트 블록을 획득하기 위한 지수 비트들 및 가수 비트들과 상기 제1 블록에 고려되지 않은 최하위 가수 비트들의 기 설정된 개수를 포함한다. 특히, 향상 계층의 코딩은 제2 비트 블록에서 제1 블록에 고려되지 않은 비트들 중 최상위 비트를 보유하는 것을 의미하며, 따라서 상기 제2 블록에서 상술한 L 샘플들의 적어도 일부에 대한 추가적인 가수 정보를 전달한다. 일반적으로 향상 계층의 코딩은 L 샘플들의 각각의 지수에 따라 향상 계층에서 L 샘플들 중 이들 샘플들의 추가적인 가수 정보를 제공하기 위하여 이들 샘플들에 비트 할당과 비트들의 수의 계산을 포함한다.
따라서, 설명 된 예시에서, 계층적 코딩(도 2의 모듈(23)에 의해 수행되는)의 향상 계층(계층 "1" (L1)) 내 샘플들의 코딩을 향상시키기 위하여 L 샘플들의 지수 값들에 따라 L 샘플들의 최대값에 추가적인 비트들 N b 의 전체를 할당하게 된다.
다음의 표기가 이하 사용된다:
- 샘플에 대해 할당되는 부가적인 비트들의 최대 개수 N a  
- 지수 값들의 총 개수 N e
- L 샘플들의 지수들을 포함하는 테이블 exp[L].
비트 할당은 L 샘플들의 지수들(exp (n), n=0, …, L-1, (0=exp (n)< N e ))을 사용하여 생성된다.
제1 단계에서, 지수들이 열거되고, 다음 제2 단계에서 L 샘플들의 비트 할당이 계산된다.
보다 구체적으로, 아래 일 실시 예에서, 상술한 제1 단계는 다음과 같다:
- 소정의 값을 가지는 지수들의 개수가 카운트되고,
- 이 카운트되는 값은 테이블 cnt0[N e ]에 저장되며(후술하는 A) 내지 C) 단계에 따라),
- 다음으로, 지수 카운터들의 누적 테이블 cnt _ cum[N e + N a -1]이 계산된다.
도 9에 따른 일 실시 예는 향상 계층 인코딩 방법의 일반적인 단계들은 나타낸다. 제1 일반 단계(GEN-1)에서, 지수 카운터들의 테이블 cnt0이 구성된다. 도시된 예에서, 본래 신호 S(z)(예를 들어, L=40)의 블록(또는 프레임)의 L 샘플들에 대하여:
- 0으로 설정된 지수를 가지는 샘플의 개수: 10
- 1로 설정된 지수를 가지는 샘플의 개수: 8
- 2로 설정된 지수를 가지는 샘플의 개수: 8
- 3으로 설정된 지수를 가지는 샘플의 개수: 6
- 기타.
- 더 이상의 샘플이 남아 있지 않은 지수 값(iexpmax+1)에 도달 할 때까지.
따라서, iexpmax로 표기되는 지수 값은 여전히 지수 값 iexpmax을 가지는 적어도 하나의 샘플에서 최대 지수 값이다.
물론, 이러한 개수들의 합계는 프레임 내의 샘플들의 개수 L과 동일하다.
N a 는 샘플에 할당 될 수 있는 추가 비트들의 최대 개수를 나타내는데 사용 된다(예를 들어, N a = 3). 향상 비트를 수신하지 않는 샘플들의 최대 지수로 정의되는 값 iexp 0 을 위해 검색이 수행될 수 있다: iexp 0 이하인 지수를 가지는 샘플들에 대한 비트 할당은 0 비트가 된다.
따라서, 제2 일반 단계(GEN-2)에서, 전체 할당될 N b 비트들 중에 지수가 iexpmax와 iexpmax-N a +1 사이에 구성되는 샘플들에 대한 미래의 할당을 위하여 예약되는 비트들의 개수가 추정될 수 있다(이들 샘플들 중 하나는 단지 N a 향상 비트들의 최대값이 할당됨 유의).
다음에, 논의되는 지수 값은 감소되고, GEN-2 단계의 첫 번째 증가 이후에 남아있는 비트들, 즉 iexpmax-1와 iexpmax-N a 사이에 구성되는 지수를 가지는 샘플들에 할당되기 위해 남아 있는 비트들 중에 비트들의 개수가 추정된다. 여기서 다시, 물론 상술한 첫 번째 증가 이후에 N b ' 추가적인 비트들 중에 할당될 수 있도록 남겨진 비트들이 충분하다면, N a 향상 비트들의 최대값이 연속적으로 각 샘플에 할당될 수 있다.
이러한 감소는 샘플들의 모집단이 iexp0와 iexp0+N a -1 간에 구성되는 지수들로 달성되며, 남아있는 비트들의 개수 N b '이 더 이상 샘플들 각각에 N a 비트들의 최대값이 할당되기에 충분하지 않을 때까지 계속된다. 따라서, 도 9에서 L'은 상술한 감소의 구현을 위하여 카운트되는 비트들의 수를 나타낸다. L'는 또한 지수가 iexp0와 iexp0+N a -1 사이에 구성되는 샘플들의 수에 해당하고, 샘플 당 (exp(n)-iexp 0 ) 비트들의 할당이 보장되지 않은 지수들의 누적 cnt _ cum[iexp 0 +N a -1]에 의해 제공된다. L' 샘플들 중에 L''는 샘플 당 (exp(n)-iexp 0 ) 비트들의 할당이 가능한 샘플들에 관련된다.
따라서, 지수가 iexp 0 + N a 보다 큰 샘플들은 연속적인 비트 할당 단계(GEN-3) 동안 각각 N a 비트들이 할당될 것이나, exp(n)가 [iexp 0 +1, iexp 0 +N a ] 범위 내에서 구성되는 지수를 가지는 샘플들에 대하여 exp(n)-iexp 0 (L'' 샘플에 대하여) 또는 exp(n)-iexp 0 -1가 할당될 수 있다(L'-L'' 남아있는 샘플들에 대하여). 상술한 바와 같이, 샘플들의 카테고리에 대하여, 변수들의 할당이 가능하다. 특정 일 실시 예에서, L 샘플들의 프레임에서 "나타나는(of appearance)" 순서에 따라 단순하게 할당된다. 이후 이들 남아있는 샘플들 중에 우선적으로 처리되는 샘플들은 향상 비트들이 할당되는 동안에 우선적으로 처리될 것이다. 마지막으로, 임계값 iexp 0 이하인 지수를 가지는 샘플들은 어떠한 부가적인 비트의 효과를 가지지 않는다.
따라서, 도 5를 참조하면, 예시적인 실시 예로서 제1 일반 단계(GEN-1)는 아래에 상세히 설명되는 지수 카운터 테이블의 구성을 포함한다.
카운터들의 테이블 cnt0은 우선 0으로 리셋된다(N e 메모리 액세스를 가지고): cnt0[iexp] = 0(0≤iexp<N e ).
지수들의 테이블 내 포인터 adr _ exp는 또한 exp(0)의 주소로 리셋된다: adr _ exp=exp.
그리고, L 샘플들 (0 ≤ n < L)에 대한 루프에서, 다음의 동작들이 수행된다:
A) 샘플 n의 지수 iexpn를 획득하기 위하여 메모리 액세스(그리고, 다음 샘플의 지수의 주소를 가리키기 위한 포인터 adr_exp를 1 증가): iexpn = * adr _ exp++
B) 카운터들의 테이블 내 cnt0(iexpn)의 주소 adr _ cnt를 가리키기 위하여 어드레싱: adr _ cnt = cnt0 + iexpn
C) 주소 adr _ cnt에 포함된 지수 카운터 값을 1 증가(부가): * adr _ cnt = * adr _ cnt+1
A), B) 및 C)의 동작들은 L 번 수행된다. 상술한 종래 기술과 비교하여 내부적인 루프 또는 2차원 테이블의 고비용의 어드레싱이 존재하지 않는다.
테이블 cnt0이 계산되면, 지수 카운터의 누적 테이블 cnt _ cum[N e + N a -1]은 아래 수학식 1과 같이 계산된다:
Figure 112014045590529-pct00001
합계의 제한에 따라, 수학식 1은 아래 수학식 2와 같이 3가지 케이스로 구분된다.
Figure 112014045590529-pct00002
Figure 112014045590529-pct00003
Figure 112014045590529-pct00004
수학식 2의 3가지 케이스에 대응되는 3 개의 루프가 수행될 수 있다. 다만, 명령어들(프로그램 메모리 PROM에 저장되는)의 수의 제한하고, 합리적인 프로그램 메모리 크기를 가질 수 있는 바람직한 변형 예에서, 크기 N e +2N a 의 지수 카운터 테이블 cnt0 _a을 가지는 것이 바람직할 수 있다(따라서, 2N a 워드만이 증가). 0으로 리셋하는 단계는 다음으로 2N a 의 부가적인 메모리 액세스들과 주소 cnt0 _a+N a 를 카리키는 포인터 cnt0의 정의를 포함한다. 남은 A) 내지 C) 단계들은 동일하다. 미세하게 증가된 크기의 테이블을 가지고, 지수 카운터들의 누적 테이블의 계산은 다음과 같이 나타낸다:
- 지수 카운터들의 테이블에서 포인터 adr _ cnt0cnt0으로(=cnt0 _a+N a ), 따라서 cnt0(0)의 주소로 리셋되고(cnt0(0)는 지수로써 0을 가지는 샘플들의 수가 됨),
- 두 번째 포인터 adr _ cnt _ cumcnt _ cum(0)의 주소로 리셋된다(adr _ cnt _ cum = cnt _ cum ).
이어서, 도 6을 참조하면, N e + N a 누적들(0 ≤ j < N e + N a -1)의 루프에서 다음과 같은 동작들이 수행된다:
D) 테이블 cnt0 _a에서 두 번째 포인터 adr _ cnt의 리셋: adr _ cnt = cnt0
E) 변수 cum을 0으로 리셋: cum = 0
F) N a 카운터들을 누적하기 위한 루프(0 ≤ i < N a ):
- 이 루프의 각 반복에서, 현재 주소 adr _ cnt에서의 카운터의 값이 변수 cum에 추가되고, 주소 adr _ cnt는 1만큼 감소된다: cum = cum + * adr _ cnt--.
G) 내부 루프 F)의 출력에서, 변수 cum는 주소 adr _ cnt _ cum에 저장되고, 두 포인터 adr _ cnt _ cumcnt0는 이후 1 증가된다:
- *adr _ cnt _ cum++ = cumcnt0 ++.
누적 테이블을 효율적으로 계산하기 위하여 변수들이 제공될 수 있다.
예를 들어, 변수 cum를 0으로 재설정하고 내부 루프 F)를 N a 번 반복하는 것보다, E) 단계에서 주소 adr _ cnt에서 카운터 값을 가지는 변수 cum를 재설정하고 포인터를 1 감소시킴으로써, 한 번 더 적게 수행될 수 있다(0 ≤ i < N a -1): cum = *adr_cnt--.
유사하게, 두 루프를 수행함으로써 최후 N e 으로부터 N a 최초 누적의 계산을 분리시킬 수 있다:
- 변수 cum를 0으로 재설정하고, N a 번 반복하며(0 ≤ j < N a ), 현재 주소 cnt0에서 변수 cum에 카운터 값을 추가하며, 주소 adr _ cnt _ cum에 변수 cum를 저장하고, 두 포인터들 adr _ cnt _ cum cnt0 모두 이후 1 증가시킨다: cum += *cnt0 ++ 및 *adr _ cnt _ cum++ = cum ;
- D) 내지 G) 단계에서 설명된 루프와 유사한 두 번째 루프(j(N a j < N e +N a -1)에 대하여)를 가지고, 초기 포인터 adr _ cnt _ cumcnt0는 첫 번째 루프(0≤j<N a )의 출력에서 획득된다.
이 변형 예에서, 더 적은 계산들이 카운트되며, 테이블 cnt0 _a의 크기는 (N e+N a )이고, 다음 N a 워드만큼 감소에 대응되지만(이후, 포인터 cnt0cnt0 _a의 첫 번째 요소의 주소로 리셋됨: cnt0 = cnt0 _a), 프로그램 메모리는 첫 번째 루프의 명령어들만큼 증가된다.
현재 반복에서 누적은 아래 수학식 3과 같이 진행 중인 반복에서 계산된 누적에 카운터를 감소시키고 카운터를 증가시킴으로써 획득되며, 누적 테이블은 반복 관계로 구성될 수 있다.
누적 테이블은 반복 관계에 의해 구성될 수 있고, 현재 반복에서 누적은 카운터를 감소시키고 진행 중인 반복에서 계산된 누적에 카운터를 증가시킴으로써 획득될 수 있으며, 이는 아래 수학식 3과 같다:
Figure 112014045590529-pct00005
이는 복잡성, RAM의 크기 및 프로그램 메모리 크기 사이에서 추구되는 절충에 따라 서로 다른 변형 예들을 결합하는 것이 가능하다고 이해될 수 있다.
예를 들어, 누적을 0이 아닌 cnt0(0)로 재설정하며 반복 관계의 사용하기 때문에 누적 테이블 계산을 위한 두 가지 별개의 루프의 변형 예들을 결합하는 것이 가능하다. 이러한 경우, 첫 번째 N a 누적에 대하여 첫 번째 루프의 출력에서 변수 cum는 두 번째 누적 계산 루프에서 반복 관계의 첫 번째 반복을 계산하기 위하여 사용된다.
종래 기술의 지수 인덱스 카운터 테이블에 대응되는 본 발명에 따른 기술에 의하여 획득된 지수 카운터 누적 테이블의 계산은 많은 비용이 드는(메모리 및 복잡도 모두에서 고비용) 지수 인덱스 맵을 요구하지 않는다
이하, 비트 할당 테이블의 계산에 대하여 설명한다.
고비용인 1 비트 별 비트 할당을 피하기 위하여, 샘플에 할당되는 비트들의 총 개수는 한 번에 할당된다. 비트들의 개수는 샘플의 지수, L 샘플들의 지수 중 최대 지수(iexp max )와 향상 비트를 수신하지 않는 샘플들의 최대 지수 iexp 0 의 함수로써 결정되고, iexp 0 이하인 지수를 가지는 샘플들을 위한 비트 할당은 0비트이다(도 9에서 GEN-2 단계를 참조하여 상술한 바와 같이).
그러므로 첫 번째 두 단계들은 iexp max iexp 0 의 두 지수들을 탐색을 포함한다.
L 샘플들의 지수 중 최대 지수 iexp max 를 찾기 위하여, 루프는 최대 지수를 결정하기 위하여 샘플들의 L 개 지수들에 대하여 수행될 수 있다.
예시적인 절차를 통해, ITU-T G.191 권고("음성 및 오디오 코딩 표준을 위한 소프트웨어 툴", 2010년 3월)에 따른 기본 동작 명령들을 사용하는 의사 코드(pseudo code)가 언급될 수 있으며, 그러한 명령어들은 아래 표 2와 같이 설명된다.
ptr _ exp = exp;
iexp max = 0;
FOR(n=0; n<L; n++) {
temp = sub(iexp max , *ptr _ exp);
if(temp < 0) {
iexp max = *ptr _ exp; move16();
}
ptr _ exp++;
}
표 2의 예시에서 "FOR" 명령은 L 번 수행되는 루프에 해당되며, 이 횟수는 루프에 진입하기 전에 알려진다. 이 명령은 전체 루프에 대하여 "4"의 복잡도 가중치를 가진다. 반면, "WHILE" 명령은 조건적 루프(횟수가 루프에 진입하기 전에 알려지지 않음)에 해당되고, 이 명령은 루프의 각 반복에서 "4"의 복잡도 가중치를 가진다. 상술한 의사 코드(pseudo-code) 내 "FOR" 명령의 사용이 보다 바람직하다고 이해될 수 있다.
유사하게, 상술한 의사 코드(pseudo-code)에서, "IF" 명령(하위 케이스)은 단일 베이스를 가지는 유일한 동작이 이어지는 고유의 테스트에 해당된다. 이 경우, 그러한 테스트의 비용은 무시해도 될 정도이다. 특히, 여러 명령어들 또는 복잡한 동작(예를 들어, 기능 호출과 같은)이 테스트에 후속으로 조건적으로 수행될 때, "IF" 테스트를 위한 케이스가 아니다. "IF" 명령(상위 케이스)은 일반적으로 "4"의 가중치를 가진다. 게다가, 이 테스트가 유효하지 않은 경우(테스트의 출력에서 "if not" 지류(branch)), 후속되는 명령들이 수행되어야 한다. 이러한 경우에 해당하는 "ELSE" 명령은 일반적으로 "4"의 가중치를 가진다. 여러 가지 타입의 명령들에 대하여 복잡도 가중치를 아래 표 3에서 요약한다.
Instructions Complexity weighting Instruction label
Memory access (write or read) 1 move16 ()
Addition/subtraction 1 add()/sub()
Bit offset to left/right (multiplication/division by a power of 2) 1 shl()/shr()
"or" bit-to-bit logic 1 s_or
Comparison of two values and selection of the greatest / the smallest 1 s_max()/s_min()
Multiplication by a non-power of 2 3 i_mult()
"Simple" test (followed by a sole operator with single base) 0 If
"Complex" test (followed by several instructions) or an ?LSE 4 IF
"Complex" test with instructions if not verified 4 ELSE
Loop performed a constant N number of times 4 FOR
Loop performed a variable N number of times (output of conditional loop) 4N WHILE
바람직하게, 지수들의 개수 N e 는 일반적으로 샘플들 L의 수보다 작으므로, 마지막 영이 아닌(non-zero) 요소를 위한 카운터 테이블 cnt0[N e ] 내에서 탐색하는 것이 바람직하다. 도 7을 참조하면, S51 단계에서 변수 iexp max 를 (N e -1)으로 리셋하고, 포인터 adr _ cnt를 요소의 주소 cnt0[N e -1]로 리셋을 진행한다: iexp max = N e - 1; adr _ cnt = cnt0 + N e - 1;
다음으로, 주소 adr _ cnt에서 카운터의 값의 테스트 이후에 포인터의 이후 감소가 이어지는 테이블 cnt0[N e ]에서의 조건적 탐색 루프가 수행된다(S52 단계)
- 테스트 값이 0인 경우, iexp max 를 1만큼 감소시키고(S53 단계), 다음 반복을 진행하며,
- 그렇지 않은 경우, 루프의 출력에서의 iexp max 값은 루프 출력에서 L 샘플들의 모든 지수들 중에 최대 지수이다(S54 단계).
해당 의사 코드(pseudo-code)는 아래 수학식 4와 같다.
Figure 112014045590529-pct00006
다음 단계는 향상 비트를 수신하지 않는 샘플들(0 비트)의 최대 지수 iexp 0 의 탐색을 포함한다. 이를 수행하기 위하여, 지수 iexp 0 를 지수 iexp max -1와 동일하게 하는 단계(S55 단계)부터 시작하여, 지수 카운터 누적 테이블에서 포인터를 cnt_cum[iexp max +N a -1]의 주소로 리셋하고(S56 단계), 할당 될 잔존 비트 수 N' b N b ?nt _ cum[iexp max +N a -1]와 동일하게 하는 단계로부터(S57 단계), N' b 가 확실히 양수인 한 N' b 에 대한 테스트를 가지는 조건적 루프가 수행되고(S58 단계, N' b >0), 이 루프는 반복되며, N' b 는 cnt_cum[iexp0+Na-1] 감소되고(S59 단계), 이후 iexp 0 는 1 감소된다(S60). 도 7의 예시에 따른 절차를 제공하는 의사 코드는 아래 표 4과 같다.
iexp 0 = sub(iexp max ,1);
adr _ cum = cnt _ cum+(iexp max +N a -1);
N' b = sub(N b ,*adr _ cum--);
WHILE (N' b > 0) {
N' b = sub(N' b , *adr _ cum--);
iexp 0 = sub(iexp 0 ,1);
}
따라서, 각 반복에서, adr _ cum는 지수들 iexp 0 +i(i=0, …, N a -1)을 가지는 샘플들의 수를 제공하는 cnt _ cum[iexp 0 +N a -1]의 주소를 가리킨다.
iexp max 는 L 샘플들의 최대 지수이며, 따라서, 리셋된 adr _ cum는 지수 iexp max 를 가지는 샘플들의 수를 제공하는 주소 cnt _ cum[iexp max +N a -1]를 가리킨다(iexp max +1, iexp max +2, iexp max + N a -1 지수를 가지는 샘플은 없으므로).
다음으로, 첫 번째 반복에서, adr _ cumiexp max 또는 (iexp max -1)의 지수들을 가지는 샘플들의 수를 제공하는 주소 cnt _cum[(iexp max +N a -2)]를 가리킨다.
마지막 반복에서(S61 단계에서 조건적 루프의 출력에서), 지수 iexp 0 는 0 비트를 수신하는 샘플들의 최대 지수이다(따라서, 지수가 iexp 0 이하인 샘플들에 할당될 비트는 존재하지 않음).
iexp 0 는 음수일 수 있으며, 이 경우 모든 샘플들은 적어도 하나의 비트가 할당될 것이다.
각 샘플을 위한 비트 할당은 샘플의 지수와 iexp 0 의 차이에 따른다. 지수가 iexp 0 +1와 같은 샘플들은 할당 될 잔존 비트 수에 따라 1 또는 0 비트를 수신할 것이다.
보다 일반적으로, 지수가 iexp 0 +i (1=i=N a )와 같은 샘플들은 i 또는 (i-1) 비트들을 수신하는 반면, 지수가 iexp 0 +N a 보다 확실히 큰 샘플들은 N a 비트들을 수신할 것이다. [iexp 0 +1, iexp 0 +N a ] 범위 내에 구성되는 exp(n)의 지수를 가지는 샘플들에 대하여 exp(n)-iexp 0 또는 exp(n)-iexp 0 -1이 할당될 수 있다. 지수가 이 범위 내인 샘플들의 수는 지수들의 누적 cnt _ cum[iexp 0 +N a -1]에 의해 제공되고, 결국 상술한 도 9의 예시에서 나타난 L'에 해당한다: 즉, L' = cnt _ cum[iexp 0 +N a -1] 이다.
이들 L'샘플들 중에, iexp 0 만큼 감소된 지수의 값(즉, exp(n)-iexp 0 )과 동일한 비트들의 수가 할당되는 L'' 샘플들은 아래 수학식 5와 같다. 이 경우, S58 단계의 KO 출력에서 N' b 는 음수 또는 제로를 가진다.
Figure 112014045590529-pct00007
본 발명은 이들 iexp 0 만큼 감소된 지수의 값과 같은 비트 수가 할당되는 L'' 샘플들의 선택에 높은 유동성을 제공한다. 일 실시 예에서, 이들 L' 샘플들 중 L'' 샘플들의 선택은 종래 기술에서 기술된 바와 같이 G.711.1에서 비트 별 할당과 동일한 비트 할당을 가능하게 한다. 이 선택은 지수가 상술한 범위 내인 첫 번째 L''샘플들의 선택을 포함한다.
이하, 비트 할당의 계산에 대하여 설명한다.
일 실시예에서, L 샘플들에의 비트 할당은 다음과 같은 두 개의 루프의 실행을 통해 수행된다.
- [iexp 0 +1, iexp 0 +N a ] 범위 내 지수들을 가지는 첫 번째 L'' 샘플들에 비트 할당이 수행될 때까지의 첫 번째 루프
- 다음으로, 마지막 남은 샘플들을 위한 비트 할당을 수행하기 위한 두 번째 루프.
L 샘플들 중에 이들 L'' 샘플들의 위치뿐만 아니라 L''의 개수에 따라 첫 번째 루프의 횟수가 수행된다. 그러므로 첫 번째 루프의 수행되어야 하는 횟수는 첫 번째 루프의 진입 전에 알려지지 않는다. 반면, 두 번째 루프의 수행되어야 하는 횟수("N"으로 표기)는 첫 번째 루프가 수행되는 횟수에 기초하여 두 번째 루프의 진입 전에 결정될 수 있다.
본 발명에 따른 비트 할당 절차는 도 8a를 참조하여 수행될 수 있으며, 다음과 같이 리셋하는 단계(S101)부터 시작될 수 있다:
- [iexp 0 +1, iexp 0 +N a ] 범위 내의 지수를 가지는 샘플 카운터 NbechL''으로 리셋,
- 두 번째 루프가 수행되어야 하는 횟수 NL로 리셋
- 첫 번째 샘플에 의하여 비트 할당이 시작되는 두 포인터 ptr _ expptr _ b 를 다음과 같이 리셋한다:
˚ 포인팅 ptr _ exp은 지수 테이블의 첫 번째 요소로 리셋(이와 함께, exp[0]=exp, exp[0]는 첫 번째 샘플의 지수)
˚ 포인팅 ptr _b은 비트 할당 테이블의 첫 번째 요소로 리셋(이와 함께, b[0]=b, b[0]는 첫 번째 샘플의 비트 할당)
첫 번째 루프(Nbech와 관련된 S102 테스트를 가지는)에서:
- n 번째 샘플의 지수와 iexp 0 간의 차이(nbit)가 먼저 계산되고(S103 단계),
- 다음으로, 이 차이는 0의 하한(lower limit)으로 주어진다(S104 단계 및 S105 단계).
- 이 차이가 확실히 양수라면(S104 테스트로부터 OK 출력),
˚ 이 차이가 N a 이하인지 여부를 결정하기 위하여 또 다른 S106 테스트가 수행된다.
ㆍ 그러한 경우, 샘플의 지수는 [iexp 0 +1, iexp 0 +N a ] 범위 내에 있고, 카운터 Nbech 는 1 감소되고(S120 단계),
ㆍ 그렇지 않은 경우, 차이는 N a 의 상한(upper limit)으로 주어진다(S107 단계)
- nbit 는 n 번째 샘플의 비트 할당이 되고(S108 단계), 그리고
- 카운터 N이 1 감소된다(S109 단계).
Nbech이 확실히 양수인 경우에(S102 테스트로부터 OK 방향), 다음 반복으로 진행된다. 그렇지 않은 경우(Nbech = 0, KO 출력에 해당), [iexp 0 +1, iexp 0 +N a ] 범위 내 지수를 가지는 L'' 첫 번째 샘플들의 마지막 비트 할당이 결정되고(S108 단계), 두 번째 루프에 진입하고 N 마지막 샘플들에 비트 할당을 수행하기 위하여 Nbech에 대한 조건적 루프를 종료한다.
S106 테스트의 출력에서 "if not" 용어는 "ELSE" 명령을 의미할 수 있으며, S106 테스트에서 일반적으로 그러하듯이 "IF" 명령의 뒤에 따라온다. 그러한 실시 예는 도 8a의 예시에 명확히 도시되어 있다. 그러나, 실제적으로, 이들 두 명령들("IF" 및 "ELSE") 각각은 4의 복잡도 가중치를 가진다. 이에 따라 프로그래밍 구현 상에서, 차이에 항상 상한(upper limit)을 항상 설정하는 것이 선호된다("s_max" 명령의 가중치은 1이 됨). N a 값에 대한 차이의 테스트는, (S106 단계) 단순히 "IF" 테스트가 된다(하위 케이스의 경우, 상술한 테이블에 셋팅을 의미함). 따라서, 구현 상에서, 0 또는 Na를 가지는 "n 비트"의 비교를 위하여 바람직하게 제한들(s_min 또는 s_max)이 사용된다. 그럼에도 불구하고, 도 8a 및 8b를 명확히 하기 위하여, 흐름도 내 IF-ELSE 타입의 명령들이 보여진다.
포인터 ptr _ expptr _b가 이후 증가되기 때문에, 그 포인터들 각각은 다음 샘플의 지수 및 다음 샘플의 비트 할당을 가리킨다.
두 번째 루프에서, [iexp 0 +1, iexp 0 +N a ] 범위 내 지수를 가지는 샘플에 할당된 비트들의 개수는 (iexp 0 +1)만큼 감소된 지수의 값과 같다(즉, 그러므로 exp(n)-iexp 0 -1). 그 이외의 샘플들에 할당되는 비트들의 개수는 다음과 같다:
- iexp 0 +1 이하인 지수를 가지는 샘플들에 0, 또는
- iexp 0 +N a 보다 확실히 큰 지수를 가지는 샘플들에 N a .
마지막 N 샘플들의 처리를 균일하게 만들기 위하여, 루프에 진입하기 전에 iexp 0 는 1 증가되고(S110), 이 두 번째 루프 내에서, 이는 샘플의 지수와 0과 N a 사이에서 iexp 0 만큼 증가된 값 간의 차이를 제한하기에 충분하다.
따라서, 두 번째 루프에서(i는 0부터 N까지 범위에서 정의됨(S111)):
- n 번째 샘플과 iexp 0 간의 차이(nbit)는 S114 단계에서 먼저 계산되고,
- 차이는 0과 N a 사이에서 제한되며(S115 내지 S118),
- nbit는 이후 n 번째 샘플에 비트 할당된다(S119).
여기서 다시, 도시 된 바와 같이 S115 단계 내지 S118 단계들은 "IF" 및 "ELSE" 의 명령들로 표현된다. 다만, 프로그래밍 구현에서 제한을 부과하는 것이 선호된다.
루프는 마지막 N 샘플들의 비트 할당을 수행하기 위하여 N 번 반복된다(i에 대한 S113 단계에서의 증가 및 S112 단계의 테스트와 함께).
도 8a에 따른 비트 할당을 위한 의사 코드는 다음 표 5와 같다:
Nbech=L";
N=L;
ptr _ exp = exp ;
ptr _b = b;
WHILE (Nbech > 0) {
nbit = sub(*ptr _ exp++, iexp 0 );
nbit = s_max (nbit,0);
IF(nbit> 0) {
if(sub(nbit, N a ) <= 0) Nbech = sub(Nbech, 1);
nbit = s_min(nbit, N a );
}
*ptr _b++ = nbit;
N= sub(N, 1);
}
iexp 0 = add(iexp 0 ,1);
FOR(n=0; n<N; n++) {
nbit = sub(*ptr _ exp++, iexp 0 );
nbit = s_max(nbit, 0);
nbit = s_min(nbit, Na);
*ptr _b++ = nbit;
}
상술한 의사 코드에서, n 비트가 0보다 큰지 여부에 대한 테스트(S104) 이전에 n 비트는 처음에 0의 하한을 가지고 4의 가중치를 가지는 "ELSE" 명령의 사용을 피하기 위하여 이를 유지한다.
"WHILE" 타입의 조건적 루프가 "FOR" 루프보다 더 복잡하기 때문에, WHILE 루프를 피하도록 FOR 루프의 반복이 선호될 수 있으며, 따라서 L' 및 L'' 값(예를 들어, L'' > L'/2 인 경우)에 따라 비트 할당은 마지막 샘플에서 시작되어 수행될 수 있다. 이러한 변형 예는 도 8b에 따라 아래 표 6에 주어진 의사 코드에 상응하며, 다음과 같은 단계를 가진다.
- S201 리셋 단계:
Nbech = sub(L' ,L");
N = L;
ptr _ exp = exp+ L-1;
ptr _b = b+ L-1;
iexp 0 = add(iexp 0 ,1);
- Nbech에 대한 S202 루프로부터: WHILE (Nbech > 0) {
nbit = sub(*ptr _ exp --, iexp 0 ) (S203 단계);
IF(nbit>= 0) (S205 테스트) {
if(sub(nbit, N a ) <0) (S204 테스트) Nbech = sub(Nbech, 1) (S207 단계);
nbit = s_min(nbit, N a ) (S206 단계);
}
nbit = s_max (nbit,0) (S208 단계);
*ptr _b-- = nbit (S209 단계);
N= sub(N, 1) (S210 단계);
}
iexp 0 = sub(iexp 0 ,1) (n에 대하여 아래 두 번째 루프를 실행하기 위하여 Nbech 에 대한 루프 출력에서 S211 단계);
FOR(n=0 (S212 단계); n<N (S213 테스트); n++ (S214 증가)) {
nbit = sub(*ptr _ exp--, iexp 0 ) (S215 단계);
nbit = s_max(nbit, 0) (S216 및 S217 단계);
nbit = s_min(nbit, N a ) (S218 및 S219 단계);
*ptr _b-- = nbit (S220 단계);
}
비트 할당이 결정되면, "1" 계층(L1) 향상 신호를 위한 적응적 다중화 절차가 종래 기술과 같이 수행될 수 있다.
다만, 본 발명은 또 다른 장점을 제공한다. 단일 단계(single pass)에서 비트 할당 및 적응적 다중화의 생성의 수행을 가능하게 한다. 실제로, 종래 기술에서, 할당될 모든 비트에 대하여 1 비트 별 반복적 할당의 마지막 시점까지도 샘플의 비트 할당이 알려지지 않으므로, 모든 샘플들에 대하여 비트 별 반복적인 비트 할당의 종료 이후에 샘플들의 향상 비트들에 대한 적응적 다중화가 수행된다. 본 발명에서는 그러하지 않으며, 한 번에 샘플의 비트 할당이 결정된다.
모든 비트들의 할당을 결정하기까지 기다리지 않고, 그때 그때마다 샘플 별 적응적 다중화를 수행하는 것이 가능하다. 비트 할당 및 적응적 다중화의 생성 두 단계의 결합으로 인하여 RAM의 요구 및 복잡도가 보다 더 감소될 수 있다: L 샘플들의 비트 할당의 저장이 불필요하고, 따라서 L 샘플들에 할당될 비트들의 개수를 쓰거나 읽기 위하여 필요한 상술한 테이블 b(L) 및 2L 메모리 액세스에 해당되는 메모리가 절약된다.
따라서 복잡도가 감소되기 때문에, 본 발명은 수많은 어플리케이션들을 제공하며, 특히 후술되는 원격 회의를 위한 오디오 브릿지 아키텍처(bridge architecture)에서의 입력되는 비트 스트림의 디코딩, 혼합 및 재인코딩들과 같은 신호 처리를 제공한다.
보다 일반적으로, 본 발명은 수많은 장점을 제공한다. 복잡도, RAM, ROM(프로그램된 코드) 간에 다양한 절충을 획득하기 위하여 다양한 변형 예를 제공한다. 모든 케이스에서, RAM 및 복잡도 면에서 매우 절약된다. 본 발명은 특히 실시 예에서, 종래 기술에서 비트 별 반복 절차와 동일한 적응적 비트 할당을 달성할 수 있게 하고, 종래 기술의 코덱과의 호환성을 보장하므로 이러한 절약들은 품질의 열화 없이 얻어질 수 있다.
본 발명의 바람직한 어플리케이션 중 하나는 고품질의 오디오 원격 회의이다. 다지점 제어 유닛(MCU: Multipoint Control Unit)에 기초한 중앙 집중적인 통신 아키텍처(centralized communication architecture)의 경우, 오디오 브릿지는 입력되는 비트 스트림의 혼합뿐만 아니라 디코딩을 수행하고, 이어 혼합된 신호를 원격의 단말들에게 전송하기 위하여 재인코딩을 수행한다.
처리되는 스트림들의 수에 의존하여, 복잡도가 상당히 클 수 있다. 이러한 복잡도를 제한하기 위하여, G.711.1 표준에 따라 코딩된 스트림들을 혼합하기 위하여 부분적 혼합 기술이 제공될 수 있다. 따라서, 비트 스트림들을 전체적으로 디코딩하기 보다 G.711.1의 수단 내에서 계층적 코딩의 컨텍스트(context)에서는 단지 코어 계층(G.711과 호환되는)만이 재인코딩되기 전에 디코딩 및 혼합되고, 향상 계층(하위 및 상위)는 디코딩되지 않는다. 변형 예로서, 모든 입력 스트림 중에서 활성 스트림을 선택하고, 혼합되고 재인코딩된 코어 계층들과 결합된 향상 계층을 다른 원격 단말들에게 재전송할 수 있다. 이러한 부분적 혼합 기술은 단지 향상 계층이 스위칭되므로(switched) 코어 계층 레벨에서 혼합의 연속성을 보장하는 반면 현저하게 복잡도를 감소시킬 수 있다. 그러나, 향상 계층에서 제공되는 통신 품질이 손실될 수 있다.
입력 스트림의 저대역 향상 계층에서의 디코딩 및 혼합된 향상 신호들의 재인코딩에서 복잡도가 현저하게 감소됨으로써, 본 발명은 고역 통과(high-pass) 대역 계층들에 스위칭을 제한하여 부분적 혼합이 모든 향상 저대역으로 확장될 수 있게 한다. 따라서 혼합된 저대역의 연속성이 보장되고, 이는 증가되는 복잡도의 수준이 타당하도록 혼합된 스트림들의 품질을 향상시킨다. 도 10을 참조하면, 3개의 단말들 (TER-A, TER-B, TER-C) 간의 원격 회의 브릿지(DIS)의 예시에서, 브릿지(DIS)에서 단말 A(TER-A)로부터 단말 B(TER-B) 및 단말 C(TER-C)로의 G.711.1 신호의 질을 높이기 위하여 결정들이 만들어 질 수 있고, 그럼에도 불구하고 단말 A(TER-A)로부터 단말 B(TER-B) 및 단말 C(TER-C)로의 향상 계층 스트림 L2[A]이 제공되면서 다음과 같이 저대역 계층들(코어 계층 L0 및 향상 계층 L1)이 혼합될 수 있다:
- 단말 B(TER-B) 및 단말 C(TER-C)로부터 단말 A(TER-A)로의 저대역 계층들 (L0+L1[B+C]),
- 단말 A(TER-A) 및 단말 C(TER-C)로부터 단말 B(TER-B)로의 저대역 계층들(L0+L1 [A+C]),
- 단말 A(TER-A) 및 단말 B(TER-B)로부터 단말 C(TER-C)로의 저대역 계층들(L0+L1 [A+B])
바람직하게, 하위 계층들 L0와 혼합된 3개의 L1 계층들의 디코딩 및 3개의 L1 향상 계층들의 재인코딩이 본 발명의 실시 예에 따라 낮은 복잡도를 가지고 수행될 수 있다.
이후 부록 1(표 7) 및 부록 2(표 8)는 두 가지의 상황들 각각에 해당하는 의사 코드들의 두 실시 예를 예시한다:
- 현재의 G.711.1 권고에 따른 기술 분야의 기술에 따라 다중화가 수행되고(부록 1(표 7)에서의 첫 번째 예시적인 실시 예),
- 각 샘플의 비트 할당에 이어서 그 때마다 다중화가 수행된다(부록 2(표 8)의 두 번째 예시적인 실시 예).
G.711.1 권고의 일 부분으로서, 80 비트들을 가지는 40 샘플들의 코딩이 개선되어야 한다.
지수들 값의 개수 N e 는 8과 동일하고, 향상 비트들의 최대 개수 N a 는 3과 같다.
첫 번째 실시 예에서, 지수 카운터들의 누적값은 반복 공식을 사용하여 계산되고, 저장되지 않는다.
RAM 및 복잡도의 측면에서 보다 절약을 하기 위하여, 두 번째 실시 예에서, 비트 할당 및 적응적 다중화를 위한 계산이 결합되고 비트 할당 테이블은 저장되지 않는다.
첫 번째 실시 예에서, 모든 수들의 두 가지 테이블, 즉 지수 카운터들을 저장하기 위한 10(=8+3-1) 차원의 테이블과 40 샘플들의 비트 할당을 저장하기 위한 40 차원의 테이블이 16 비트들(16 워드)에 걸쳐 제공된다.
의사 코드는 부록 1(표 7)에서 주어진다:
- COM-1은 코멘트에 해당한다: 테이블의 포인터들,
- COM-2는 코멘트에 해당한다: 주소 cnt[2]에서의 포인터, 지수로서 0을 가지는 샘플들의 수,
- COM-3: 0으로 리셋되는 지수 카운터,
- COM-4: 지수 카운터 테이블의 계산,
- COM-5: 샘플 n 의 지수를 판독하기 위한 메모리 액세스,
- COM-6: 주소 cnt0[iexp]에서의 포인팅,
- COM-7: cnt0[iexp]의 1 증가 및 메모리에 쓰기,
- COM-8: 40 샘플들의 최대 지수의 탐색: cnt의 마지막 0이 아닌(non-zero) 요소,
- COM-9: iexp0를 위한 탐색: 어떠한 향상 비트를 수신하지 않는 샘플들의 최대 지수,
- COM-10: 반복에 의한 지수 카운터 누적 cum의 계산,
- COM-11: cum에 cnt0[iexp0]의 합산: cum = cnt0[iexp0+2] + cnt0[iexp0+1] + cnt0[iexp0],
- COM-12: iexp0의 1 감소,
- COM-13: cum으로부터 cnt0[iexp0+3] 차감: cum = cnt0[iexp0+2] + cnt0[iexp0+1],
- COM-14: nbEch1의 계산: exp(n)-exp0의 향상 비트들을 수신하며 [iexp0+1, iexp0+3] 범위 내인 지수를 가지는 샘플들의 수,
- COM-15: [iexp0+1, iexp0+3] 범위 내의 지수들을 가지는 샘플들의 수의 계산: cnt0[iexp0+3] + cnt0[iexp0+2] + cnt0[iexp0+1] (cum에 cnt0[iexp0+3]를 합산함으로써),
- COM-16: 조건적 루프의 출력에서 (음수) 비트들의 수에 cum을 합산함으로써 nbEch1의 계산,
- COM-17: 샘플의 지수 iexpn와 iexp0 간의 차이에 따른 비트 할당: iexpn<=iexp0의 경우, nbBit=0; iexp0<iexpn<=3의 경우([iexp0+1, iexp0+3] 범위 내 지수들을 가지는 샘플들), 첫 번째 nbEch1 샘플들에 대하여 nbBit= iexpn-iexp0; 마지막 샘플들의 경우, nbBit=iexpn-iexp0-1; iexpn>iexp0+3의 경우, nbBit = 3,
- COM-18: 샘플의 지수와 iexp0의 지수 간의 차이로 nbBit 계산,
- COM-19: nbBit가 3 이하인지 여부의 테스트에 의하여 샘플의 지수가 [iexp0+1,iexp0+3] 범위 내에 존재하는지 테스트,
- COM-20: 지수들이 상기 범위 내에 존재할 때, 할당된 iexp-iexp0 비트들의 범위에서 샘플들의 개수의 감소,
- COM-21: 할당된 비트들의 최대 수를 3으로 제한,
- COM-22: 비트 할당을 수신한 샘플들의 카운터 감소,
- COM-23: 마지막 nbEch0 샘플들에 비트 할당: nbEch0 샘플들 중 [iexp0+1, iexp0+3] 범위 내 지수를 가지는 샘플들은 iexpn-iexp0-1 비트들을 수신함.
또한, 비정규적인 어드레싱의 복잡도를 고려하기 위하여 추가 (add(0,0))가 지시된다.
40 샘플들의 최대 지수인 iexpMax의 탐색 덕분에 카운터들의 누적 값들의 계산은 평균적으로 덜 복잡하다는 것에 주목할 수 있다(iexpMax보다 큰 지수들의 누적 값들은 계산되지 않으므로).
가능한 변형 예에서, iexpMax = 0인 특수한 케이스가 차별된다(이 케이스에서 40 샘플들 각각에 2 비트들의 할당을 가짐). 이 변형 예에서, iexpMax의 결정 후에, iexpMax가 확실이 양수인지 여부에 대하여 테스트가 수행되며(IF (iexpMax >0)), 그러한 경우 iexp0를 결정하고, NbEch1를 계산하며, 두 루프 내 iexp0으로부터 차이를 계산함으로써 비트들을 할당하는 단계들이 수행된다. 그렇지 않은 경우(iexpMax =0), 이들 단계들이 생략되고, 2 비트들이 각 샘플에 할당된다. iexpMax =0인 케이스가 별개로 처리되는 변형 예에서, 테이블 cnt(cnt0가 cnt+1으로 리셋되며)의 차원은 1 감소될 수 있다. 반면, 이러한 특수한 케이스를 구별하는 것은 프로그램 메모리의 크기를 증가시킨다(이 케이스의 프로그램 명령들의 부가적인 세트가 요구되어). 이 케이스는 다중화 절차가 매우 단순하고 복잡하지 않으므로, 특히 비트 할당 단계가 다중화와 결합될 때 가치가 있다(후술되는 두 번째 실시 예에 따라).
따라서, 본 발명은 목표하는 어플리케이션에 따라 다양한 가능한 변형 예들을 제공할 수 있다.
부록 2(표 8)에서 나타난 두 번째 실시 예에서, 비트 할당과 적응적 다중화를 위한 계산하는 단계가 결합되고, 비트 할당 테이블의 저장이 불필요하다. 첫 번째 단계들(지수 카운터 테이블의 계산, 40 샘플들의 최대 지수의 탐색, 어떠한 향상 비트들을 수신하지 않은 샘플들의 최대 지수의 탐색, (exp(n)-exp0)의 향상 비트들을 수신하는 [iexp0+1, iexp0+3] 범위 내 지수를 가지는 샘플들의 수의 계산)은 앞서 첫 번째 실시 예와 동일하다.
일반적인 케이스(iexpMax >0)가 먼저 제공된다.
예비적인 단계들 이후에, 적응적 다중화가 두 비트 할당 계산 루프들 내에서 수행될 수 있다. 조건적 루프(WHILE(nbEch1 > 0)) 이전에, 종래 기술에서 기술된 동일한 리셋들이 수행된다.
부록 2(표 8)에 대한 의사 코드는 다음과 같은 코멘트를 호출한다:
- COM-50: mux_cod 루틴(routine)으로부터 추출되고, 이 루틴은 적응적 다중화를 수행하고, 종래 기술에서의 명령들의 동일한 세트를 포함한다;
- COM 51: 다만 종래 기술과 달리, 비트가 할당되지 않으면 루틴이 호출되지 않을 수 있다; 변형 예에서 테스트(ELSE)를 회피하고 명령들의 수를 감소시키기 위하여 종래 기술과 같이 0의 향상 비트가 할당되는 샘플들을 포함하여 모든 샘플들을 위한 루틴을 호출할 수 있다.
따라서 본 발명은 필요한 RAM의 크기와 계산들의 수를 현저하게 감소시킬 수 있다. 더욱이, 복잡도 및 메모리의 감소로 인하여, 바람직하게 코어 계층들에 제한된 부분적 혼합을 저대역 신호들의 완벽한 부분적 혼합(코어 계층과 향상된 계층적 계층을 포함함)으로 대체함으로써 특히 원격 회의 브릿지에서 부분적 혼합의 품질을 향상시킬 수 있다.
부록 1

Word16 cnt[10], b[40];
Word16 *ptr_cnt, *ptr_cnt2, *ptr_exp, *ptr_b; /* COM-1 */
Word16 iexp, n, iexpMax, iexp0, cum, nbBit;

Word16 *ptr_cnt0 = cnt+2; /* COM-2 */

/* COM-3 */
ptr_cnt = cnt;
FOR(iexp=0; iexp<10; iexp++)
{
*ptr_cnt++ = 0; move16();
}

/* COM-4 */
ptr_exp =exp;
FOR(n=0; n<40; n++)
{
iexp = *ptr_exp++; move16();/* COM-5 */
ptr_cnt = cnt0 + iexp; add(0,0); /* COM-6 */
*ptr_cnt = add(*ptr_cnt, 1); move16();/* COM-7 */
}
/* COM-8 */
iexpMax = 7; move16();
ptr_cnt = cnt0 + iexpMax; add (0,0);
WHILE(*ptr_cnt-- == 0) iexpMax = sub(iexpMax,1);

/* COM-9 */
/* COM-10 */
ptr_cnt++; /* ptr_cnt = &cnt0[iexpMax] */
ptr_cnt2 = ptr_cnt;
nbBit= sub(80, *ptr_cnt--); /* nbBit = 80 - cnt0[iexpMax] */
cum = add(*ptr_cnt2, *ptr_cnt--); /* cum = cnt0[iexpMax] + cnt0[iexpMax-1] */
nbBit= sub(nbBit, cum);
/* nbBit = 80 - cnt0[iexpMax] - (cnt0[iexpMax] + cnt0[iexpMax-1]) */
iexp0 = sub(iexpMax, 2);
WHILE(nbBit> 0) {
/* COM-11 */
cum = add(cum, *ptr_cnt--);
nbBit= sub(nbBit, cum);
/* COM-12 */
iexp0 = sub(iexp0, 1);
/* COM-13 */
cum = sub(cum, *ptr_cnt2--);
}
/* COM-14 */
/* COM-15 */
cum = add(cum, *(++ptr_cnt2));
/* COM-16 */
nbEch1= add(nbBit, cum);

/* COM-17 */
ptr_exp =exp;
ptr_b = b;
WHILE(nbEch1 > 0) {
/* COM-18 */
nbBit = sub(*ptr_exp++, iexp0);
nbBit = s_max (nbBit,0); /* if exp <iexp0, 0 bit */
IF(nbBit> 0) {
/* COM-19 */
if(sub(nbBit, 3) <= 0) {
/* COM-20 */
nbEch1 = sub(nbEch1, 1);
}
/* COM-21 */
nbBit = s_min(nbBit, 3);
}
*ptr_b++ = nbBit; move16();
nbEch0 = sub(nbEch0 ,1); /* COM-22 */
}

/* COM-23 */
iexp0= add(iexp0, 1);
FOR(i=0; i<nbEch0; i++) {
nbBit = sub(*ptr_exp++, iexp0);
nbBit = s_max (nbBit,0);
nbBit = s_min(nbBit, 3);
*ptr_b++ = nbBit; move16();
}
부록 2

WHILE(nbEch1 > 0)
{
nbBit = sub(*ptr_exp++, iexp0);
IF(nbBit> 0)
{
nbShr = sub(3, nbBit);
if(nbShr >= 0) nbEch1 = sub(nbEch1, 1);
nbShr = s_max(nbShr , 0);
*ptr = shr(*ptr, nbShr); move16();
nbBit = sub(3, nbShr);
mux_cod(&tmp1, nbBit, *ptr, &bit_pos, &pcode1);
}
ELSE
{
*ptr = shr(*ptr, 3); move16();
}
ptr++;
nbEch0 = sub(nbEch0 ,1);
}

iexp0= add(iexp0, 1);
FOR(i=0; i<nbEch0; i++)
{
nbBit = sub(*ptr_exp++, iexp0);
IF(nbBit> 0)
{
nbBit = s_min(nbBit, 3);
nbShr =sub(3, nbBit);
*ptr = shr(*ptr, nbShr); move16();
mux_cod(&tmp1, nbBit, *ptr, &bit_pos, &pcode1);
}
ELSE
{
*ptr = shr(*ptr, 3); move16();
}
ptr++;
}

/* COM 50 */
octet = shl(octet, nbBit);
octet = s_or(octet, val);
bit_pos= add(bit_pos, nbBit);
IF (sub(bit_pos, 8) >= 0)
{
bit_pos= sub(bit_pos, 8);
temp = shr(octet, bit_pos);
octet = sub(octet, shl(temp, bit_pos));
**ptr_bst = (unsigned char)temp; move16();
(*ptr_bst)++;
}

/* COM-51 */
WHILE(nbEch1 > 0)
{
nbBit = sub(*ptr_exp++, iexp0);
nbBit = s_max (nbBit,0);
IF(nbBit> 0)
{
if(sub(nbBit, 3) <= 0)nbEch1 = sub(nbEch1, 1);
nbBit = s_min(nbBit, 3);
}
nbShr = sub(3, nbBit);
*ptr = shr(*ptr, nbShr); move16();
mux_cod(&tmp1, nbBit, *ptr, &bit_pos, &pcode1);
ptr++;
nbEch0 = sub(nbEch0 ,1);
}

iexp0= add(iexp0, 1);
FOR(i=0; i<nbEch0; i++)
{
nbBit = sub(*ptr_exp++, iexp0);
nbBit = s_max (nbBit,0);
nbBit = s_min(nbBit, 3);
nbShr = sub(3, nbBit);
*ptr = shr(*ptr, nbShr); move16();
mux_cod(&tmp1, nbBit, *ptr, &bit_pos, &pcode1);
}

Claims (14)

  1. 연속적인 L 샘플들을 포함하는 디지털 신호 향상 계층의 코딩/디코딩을 포함하고, 각 샘플은 가수 및 지수를 포함하며, 적어도 일부 샘플들은 최대 지수 값들을 갖는 L 샘플들의 적어도 일부에 향상 비트(enhancement bit)들의 기 설정된 개수 Nb 의 할당을 포함하는 계층적 코딩/디코딩에서의 비트 할당 방법에 있어서,
    a) 각각의 소정의 값의 가지는 L 샘플들의 지수들을 열거하는 단계;
    b) 상기 열거된 지수의 적어도 하나의 누적 값을 계산하되, 상기 적어도 하나의 누적 값이 기 설정된 개수 Nb 과 같거나 클 때까지 상기 지수의 값들을 감소시킴으로써 상기 열거된 지수들의 적어도 하나의 누적 값을 계산하는 단계; 및
    c) 더 이상 향상 비트가 가용하지 않은 샘플의 최대 지수에 대한 임계값 (iexp0)을 결정하는 단계를 포함하고,
    선택된 규칙에 따라 지수가 상기 임계값 (iexp0) 보다 큰 샘플들에 Nb 개의 향상 비트들을 할당하는 향상된 계층적 코딩/디코딩에서의 비트 할당 방법.
  2. 제1항에 있어서,
    상기 선택된 규칙에 따라 샘플에 할당 될 비트들의 최대 개수 Na 가 미리 설정되고,
    - 지수가 상기 임계값 (iexp0) 및 상기 최대 개수 Na 의 합계를 초과하는 각 샘플에 할당하기 위한 Na 비트들,
    - 지수가 상기 임계값 (iexp0) 이하인 샘플들을 위한 비트 부존재 및
    - 지수가 상기 임계값 (iexp0)과 상기 최대 개수 Na 의 합계, 그리고 상기 임계값 (iexp0)에 1을 추가한 값 사이에 구성되는 샘플들에 할당하기 위한 비트들의 개수 Nb 중에 추가 비트들의 개수가 예약되는 향상된 계층적 코딩/디코딩에서의 비트 할당 방법.
  3. 제2항에 있어서,
    샘플의 지수 (iexp(n))와 상기 임계값 (iexp0) 간의 차이가 지수가 상기 임계값 (iexp0)과 상기 최대 개수 Na 의 합계, 그리고 상기 임계값 (iexp0)에 1을 추가한 값 사이에 구성되는 각 샘플에 상기 비트 수가 다음과 같이 할당되되,
    상기 샘플의 지수 (iexp(n))와 상기 임계값 (iexp0) 간의 차이,
    또는, 상기 차이가 1 보다 작은 경우, 선택된 기준에 따라 할당되는 향상된 계층적 코딩/디코딩에서의 비트 할당 방법.
  4. 제3항에 있어서, 상기 선택된 기준은 연속적인 샘플들 내에서 샘플의 위치 순서에 해당되는 향상된 계층적 코딩/디코딩에서의 비트 할당 방법.
  5. 제2항에 있어서,
    b1) 상기 L 샘플들 중 최대 지수값 (iexpmax)을 결정하는 단계;
    b2) 상기 최대 지수 값으로부터 Na 번 감소된 최대 값까지 지수들의 개수를 누적하는 단계; 및
    b3) 다음과 같은 조건적 루프를 수행하는 단계를 더 포함하고,
    - 상기 누적이 L 샘플들에 할당될 비트들의 총 개수 Nb 보다 작게 남은 경우, 상기 b2) 단계의 누적 결과가 Nb 보다 작으면 상기 b2) 단계를 반복하면서, 최대 지수 값의 1씩 감소시키는 상기 b2) 단계의 수행함으로써 상기 누적에 새로운 누적이 추가되고, 상기 b2) 단계의 수행으로 인한 감소의 결과가 최대 지수 값으로 취급되며,
    - 상기 누적이 상기 L 샘플들에 할당될 비트들의 총 개수 Nb 보다 작게 남지 않은 경우, 지수가 임계값과 최대 개수 Na 의 합계, 그리고 임계값에 1을 더한 값 사이에 구성되는 샘플들의 수(L'')를 결정하기 위하여, 상기 b2) 단계의 바로 앞의 반복에서 남아 있는 추가 비트들의 개수가 계산되는 향상된 계층적 코딩/디코딩에서의 비트 할당 방법.
  6. 제2항에 있어서,
    상기 임계값 (iexp0)과 상기 최대 개수 Na 의 합계, 그리고 상기 임계값 (iexp0)에 1을 추가한 값 사이의 지수를 가지는 샘플들 (L'')에 비트 할당이 수행될 때까지의 첫 번째 루프와,
    마지막 남은 샘플들의 비트 할당을 수행하기 위한 두 번째 루프가 수행됨으로써 상기 L 샘플들에 비트 할당이 수행되고,
    상기 첫 번째 루프의 반복 횟수는 카운트되며, 상기 두 번째 루프는 상기 첫 번째 루프의 반복 횟수의 함수인 횟수만큼 반복되는 향상된 계층적 코딩/디코딩에서의 비트 할당 방법.
  7. 제1항에 있어서,
    지수 카운터의 테이블 (cnt0)은 상기 a) 단계에서 설정되고, 상기 테이블 내 주소 포인터는 상기 b) 단계의 수행을 위한 조건적 루프에서 감소되는 향상된 계층적 코딩/디코딩에서의 비트 할당 방법.
  8. 제6항에 있어서,
    상기 a) 단계에서 지수 카운터의 테이블 (cnt0))이 설정되고,
    상기 테이블 내 주소 포인터는 상기 b) 단계의 수행을 위한 조건적 루프에서 감소되며,
    상기 L 샘플들 중 최대 지수값(iexpmax)은 상기 테이블을 판독함으로써 설정되는 향상된 계층적 코딩/디코딩에서의 비트 할당 방법.
  9. 제1항에 있어서,
    코딩에 있어서, 상기 향상 계층의 코딩의 결과로 향상 신호의 비트 스트림이 구성되며, 상기 비트 스트림의 구성은 각 샘플의 비트 할당 이후에 바로 수행되는 향상된 계층적 코딩/디코딩에서의 비트 할당 방법.
  10. 제1항에 있어서,
    양자화 단계는 ITU-T(International Telecommunications Union Telecommunication) G.711 권고에 따른 A 타입 또는 뮤(μ) 타입의 대수 진폭 압축 코딩(logarithmic amplitude compression coding) 법칙에 따른 펄스 코드 변조(Pulse Code Modulation) 타입인 향상된 계층적 코딩/디코딩에서의 비트 할당 방법.
  11. 제1항에 있어서,
    원격 회의(teleconferencing)을 위한 오디오 브릿지(bridge) 아키텍처에서 입력되는 비트 스트림들의 적어도 부분적 디코딩, 혼합(mixing) 및 적어도 부분적 재인코딩(re-encoding)에 의하여 신호를 처리하는 향상된 계층적 코딩/디코딩에서의 비트 할당 방법.
  12. 제1항 내지 제10항 중 어느 한 항에 따른 방법을 프로세서(PROC, PROC')에 의하여 수행하기 위한 명령들을 포함하는 컴퓨터 프로그램이 저장된 비휘발성 저장매체.
  13. 연속적인 샘플들을 포함하는 디지털 오디오 신호의 계층적 코딩에서 향상 계층의 코딩을 위한 장치에 있어서, 제1항에 내지 제10항 중 어느 한 항에 따른 방법을 수행하기 위한 컴퓨터 수단들(PROC, MEM)을 포함하는 장치.
  14. 연속적인 샘플들을 포함하는 디지털 오디오 신호의 계층적 디코딩에서 향상 계층의 디코딩을 위한 장치에 있어서, 제1항 내지 제10항 중 어느 한 항에 따른 방법을 수행하기 위한 컴퓨터 수단들(PROC, MEM)을 포함하는 장치.
KR1020147013053A 2011-10-19 2012-10-19 향상된 계층적 코딩 KR102017892B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
FR1159425A FR2981781A1 (fr) 2011-10-19 2011-10-19 Codage hierarchique perfectionne
FR1159425 2011-10-19
PCT/FR2012/052400 WO2013057453A2 (fr) 2011-10-19 2012-10-19 Codage hierarchique perfectionne

Publications (2)

Publication Number Publication Date
KR20140090632A KR20140090632A (ko) 2014-07-17
KR102017892B1 true KR102017892B1 (ko) 2019-10-21

Family

ID=47191967

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147013053A KR102017892B1 (ko) 2011-10-19 2012-10-19 향상된 계층적 코딩

Country Status (7)

Country Link
US (1) US8981970B2 (ko)
EP (1) EP2769378B1 (ko)
JP (1) JP6165151B2 (ko)
KR (1) KR102017892B1 (ko)
CN (1) CN104067338B (ko)
FR (1) FR2981781A1 (ko)
WO (1) WO2013057453A2 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2969360A1 (fr) * 2010-12-16 2012-06-22 France Telecom Codage perfectionne d'un etage d'amelioration dans un codeur hierarchique
CN105379345B (zh) * 2014-03-24 2019-05-24 华为技术有限公司 物理层数据的传输方法及数据传输设备
FR3024581A1 (fr) * 2014-07-29 2016-02-05 Orange Determination d'un budget de codage d'une trame de transition lpd/fd
US11445152B2 (en) 2018-08-09 2022-09-13 Cobalt Robotics Inc. Security automation in a mobile robot
US10265859B2 (en) 2016-02-09 2019-04-23 Cobalt Robotics Inc. Mobile robot with removable fabric panels
US11460849B2 (en) 2018-08-09 2022-10-04 Cobalt Robotics Inc. Automated route selection by a mobile robot

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3162773B2 (ja) * 1992-01-06 2001-05-08 キヤノン株式会社 画像処理方法及び装置
JP3139831B2 (ja) * 1992-05-27 2001-03-05 キヤノン株式会社 画像編集方法及び装置
JP3093494B2 (ja) * 1992-11-18 2000-10-03 株式会社東芝 多様性信号処理装置
JP3210862B2 (ja) * 1996-06-27 2001-09-25 シャープ株式会社 画像符号化装置及び画像復号装置
US6144968A (en) * 1997-03-04 2000-11-07 Zellweger; Paul Method and apparatus for menu access to information objects indexed by hierarchically-coded keywords
JP4251675B2 (ja) * 1997-07-30 2009-04-08 ソニー株式会社 記憶装置およびアクセス方法
JP3861957B2 (ja) * 1998-02-03 2006-12-27 ソニー株式会社 記憶装置、並びに書き込み方法および読み出し方法
US7558441B2 (en) * 2002-10-24 2009-07-07 Canon Kabushiki Kaisha Resolution conversion upon hierarchical coding and decoding
US7813453B2 (en) * 2004-01-21 2010-10-12 Qualcomm Incorporated Data detection for a hierarchical coded data transmission
FR2876860A1 (fr) * 2004-10-20 2006-04-21 Thomson Licensing Sa Procede de codage hierarchique d'images video
WO2006076439A1 (en) * 2005-01-11 2006-07-20 Qualcomm Incorporated Method and apparatus for decoding data in a layered modulation system
US7725799B2 (en) * 2005-03-31 2010-05-25 Qualcomm Incorporated Power savings in hierarchically coded modulation
FR2887711A1 (fr) * 2005-06-23 2006-12-29 Thomson Licensing Sa Procede de codage et decodage hierarchique
EP1958366B1 (en) * 2005-12-05 2018-01-17 QUALCOMM Incorporated Hierarchical coding for multicast messages
JP5264901B2 (ja) 2007-07-06 2013-08-14 フランス・テレコム デジタルオーディオ信号の階層符号化
EP2187387B1 (en) * 2007-08-16 2013-07-31 Electronics and Telecommunications Research Institute Method for encoding and decoding an enhancement layer
KR100912826B1 (ko) * 2007-08-16 2009-08-18 한국전자통신연구원 G.711 코덱의 음질 향상을 위한 향상 계층 부호화 및복호화 장치와 그 방법
KR101336891B1 (ko) * 2008-12-19 2013-12-04 한국전자통신연구원 G.711 코덱의 음질 향상을 위한 부호화 장치 및 복호화 장치
JP5191617B2 (ja) * 2010-06-29 2013-05-08 日本電信電話株式会社 ビット割当装置、方法、プログラム及びその記録媒体
CN102420987A (zh) * 2011-12-01 2012-04-18 上海大学 基于分层b帧结构的码率控制的自适应比特分配方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
ITU-T Recommendation. G.718. Frame error robust narrow-band and wideband embedded variable bit-rate coding of speechand audio from 8-32 kbit/s. ITU-T, 2008.06.
Milan Jelinek, et al. G. 718: A new embedded speech and audio coding standard with high resilience to error-prone transmission channels. IEEE Communications Magazine, 2009.10., Vol.47,No.10, pp.117-12
Pulse code modulation (PCM) of voice frequencies. ITU-T Recommendation G.711. 1998.11.

Also Published As

Publication number Publication date
FR2981781A1 (fr) 2013-04-26
EP2769378B1 (fr) 2015-12-16
EP2769378A2 (fr) 2014-08-27
WO2013057453A3 (fr) 2013-06-13
WO2013057453A2 (fr) 2013-04-25
CN104067338B (zh) 2016-10-05
CN104067338A (zh) 2014-09-24
JP2014531054A (ja) 2014-11-20
US8981970B2 (en) 2015-03-17
KR20140090632A (ko) 2014-07-17
JP6165151B2 (ja) 2017-07-19
US20140247166A1 (en) 2014-09-04

Similar Documents

Publication Publication Date Title
KR102017892B1 (ko) 향상된 계층적 코딩
EP2006840B1 (en) Entropy coding by adapting coding between level and run-length/level modes
US7433824B2 (en) Entropy coding by adapting coding between level and run-length/level modes
US7383180B2 (en) Constant bitrate media encoding techniques
JP4426483B2 (ja) オーディオ信号の符号化効率を向上させる方法
EP1581928B1 (en) Reducing scale factor transmission cost for mpeg-2 aac using a lattice
NO341186B1 (no) Selektiv anvendelse ved bruk av flere entropimodeller i adaptiv koding og dekoding
CN109313908B (zh) 用于对音频信号进行编码的音频编码器以及方法
KR20060131782A (ko) 최적의 다중 부호화 방법
US20200273472A1 (en) Audio Encoders, Audio Decoders, Methods and Computer Programs Adapting an Encoding and Decoding of Least Significant Bits
US8498875B2 (en) Apparatus and method for encoding and decoding enhancement layer
WO2018142017A1 (en) Stereo audio signal encoder
US7003453B2 (en) Encoder and decoder for minimizing effects of transmission errors using a synthetic signal
US20130268268A1 (en) Encoding of an improvement stage in a hierarchical encoder
JPH0918348A (ja) 音響信号符号化装置及び音響信号復号装置
US20080095276A1 (en) Method and device to provide arithmetic decoding of scalable bsac audio data
JPH04114516A (ja) 音声符号化装置

Legal Events

Date Code Title Description
AMND Amendment
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant