순열 코드들로 벡터 양자화함에 있어서 디지털 신호들의 향상된 인코딩/디코딩

申请号 KR1020087022736 申请日 2007-02-13 公开(公告)号 KR1020090007294A 公开(公告)日 2009-01-16
申请人 오렌지; 发明人 라고트스테팡; 램블린클라우드;
摘要 The invention relates to the encoding/decoding of digital signals, especially using transposition codes involving a calculation of combinatorial expressions. According to the invention, the combinatorial expressions are represented by prime factor power decompositions, and determined by a preliminary reading of pre-recorded representations of decompositions of selected whole numbers.
权利要求
  • 조합 표현들(combinational expressions)의 계산을 포함하는 순열 코드들을 이용하여, 디지털 신호들을 인코딩/디코딩하는 방법으로서,
    상기 조합 표현들은, 소인수 거듭제곱 분해들(decompositions)에 의해 표현되며, 선택된 정수들의 분해들의 미리-기록된 표현들을 메모리 판독하는 것에 의해서 판별되는 것을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제1항에 있어서,
    상기 미리-기록된 표현들은,
    지수들(exponents)을 대표하는 값들을 포함하며, 상기 선택된 정수들 각각에 대하여, 연속적인 소수들(successive prime numbers)을 대표하는 값들에 상관되어 각각 저장되는 것을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제1항 또는 제2항에 있어서,
    상기 조합 표현들은 정수들(l)의 계승 값들(l!)을 포함하며, 그리고 상기 미리-기록된 표현들은 계승 값들(l!)의 분해들의 표현들을 적어도 포함하는 것을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 선행하는 청구항들 중 어느 한 항에 있어서,
    상기 조합 표현들(t') 중 적어도 하나는,
    정수 분자(v)를 정수 분모(p)로 나눈 몫을 포함하며,
    그리고 상기 몫은, 소인수 거듭제곱 분해에 의해 표현되며, 상기 소인수 거듭제곱 분해의 각 거듭제곱은, 상기 분자(v)와 상기 분모(p)에 각각 관련되고 동일한 소수(prime number)(p i )에 할당된 지수들의 차이( )인 것을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 선행하는 청구항들 중 어느 한 항에 있어서,
    선택된 정수의 상기 미리-기록된 표현은 어드레싱가능한 메모리에 저장되는 것을 특징으로 하며, 그리고
    어드레싱 가능한 상기 메모리는, 상기 선택된 정수를 재구성하기 위하여, 각 소수들에 지정될 지수들의 연속(succession)을 제공하는 것을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제5항에 있어서,
    선택된 정수의 상기 미리-기록된 표현은, 어드레스들의 연속이라는 형태로 저장되며, 이들 각각은 하나의 소수(prime number)에 대해, 선택된 상기 정수를 재구성하기 위하여, 상기 소수에 지정될 하나의 지수를 제공하는 것을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제1항 내지 제4항 중 어느 한 항에 있어서,
    상기 미리-기록된 표현들은, 비트들의 그룹들의 연속을 포함하는 워드들의 형태로 저장되며, 각각의 그룹은,
    - 소수(prime number)에 의존하는 가중치, 그리고
    - 상기 소수에 관계되는 지수에 의존하는 값을 갖는 것
    을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제7항에 있어서,
    상기 소인수 거듭제곱들은, 비트들의 가중치들과 잔여 비트들의 판독들에 따른 연속적인 오프셋들로, 적어도 하나의 부분 마스크(partial mask)를 비트들의 워드에 연속적으로 적용함에 의해 판별되는 것을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제2항에 있어서,
    조합 표현의 계산을 위해서, 아래의 단계들,
    - 상기 선택된 정수들로부터, 상기 조합 표현( )을 구성하는 곱 및/또는 몫에서 나타나는 항들((n-1-k)!, S k , P k )을 식별(identification)하고,
    - 상기 항들의 소인수 분해들에 포함되어 있는 지수들( )을 메모리로부터 판독하고,
    - 상기 조합 표현의 소인수 거듭제곱 분해에 포함된 지수들( )을 판별하기 위해, 상기 판독된 지수들을 덧셈 및/또는 뺄셈하고( ), 그리고, 이로부터,
    상기 조합 표현의 소인수 거듭제곱 분해로부터 상기 조합 표현을 계산하는 것
    을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제2항 내지 제9항 중 어느 한 항에 있어서,
    이전 재귀(recurrence)에서 판별된 곱이 곱해지는 항을 각각의 재귀에서 포함하고 있는 곱을 계산하기 위한 재귀 단계(recurrent step)를 포함하며,
    - 이전 재귀에서 판별된 상기 곱은, 소인수 거듭제곱 분해의 형태로 메모리내에 유지되며,
    - 곱이 곱해지는 상기 항은, 분해가 미리-기록되는 선택된 정수들 중 하나이며, 그리고
    - 현재 재귀에서 상기 곱을 판별하기 위하여, 이전 재귀에서 판별된 상기 곱의 분해로부터 유도된 지수들과 곱이 곱해지는 상기 항의 분해로부터 유도된 지수들이, 각각의 소수(prime number)에 대해 하나씩 서로 더해지는 것
    을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제2항 내지 제9항 중 어느 한 항에 있어서,
    이전 재귀(recurrence)에서 판별된 몫을 나누는 항을 각각의 재귀에서 포함하고 있는 나눗셈을 계산하기 위한 재귀 단계(recurrent step)를 포함하며,
    - 이전 재귀에서 판별된 상기 몫은, 소인수 거듭제곱 분해의 형태로 메모리내에 유지되며,
    - 몫을 나누는 상기 항은, 분해가 미리-기록되는 선택된 정수들 중 하나이며, 그리고
    - 현재 재귀에서 상기 나눗셈을 판별하기 위하여, 이전 재귀에서 판별된 상기 몫의 분해로부터 유도된 지수들로부터, 상기 항의 분해로부터 유도된 지수들을, 각각의 소수(prime number)에 대해 하나씩 감산하는 것
    을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 선행하는 청구항들 중 어느 한 항에 있어서,
    상기 순열 코드들은, 부분 랭크들( )의 누적을 포함하여 이루어진 순열(t)의 랭크의 대표량에 대한 계산을 포함하며, 각각의 부분 랭크들은 상기 조합 표현들 중 하나에 대응하는 것을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제12항에 있어서,
    벡터 양자화된 디지털 신호들을 인코딩할 때에, 리더 벡터의 구성요소들의 순열들을 인덱싱하기 위해서, 순열의 랭크에 대한 계산(OP2)이 이용되며,
    이들 순열들은 입력 벡터에 가장 가까운 코드 벡터를 판별하기 위해서 이전 단계(OP1)에서 이미 수행되는 것을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제12항 또는 제13항에 있어서,
    순열 랭크(t)의 주어진 값으로부터, 벡터 양자화된 디지털 신호들을 디코딩할 때에,
    - 구성되어질 코드 벡터의 적어도 하나의 추정된 구성요소(d k )에 따라, 상기 주어진 값에 접근하는 순열 랭크의 적어도 하나의 대표량이 계산되고(OP3),
    - 상기 대표량이 랭크의 상기 소정값에 근접한다라는 조건을 만족시키면, 상기 추정된 구성요소(d k )에 대한 선택이 유효해지는 것
    을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제14항에 있어서,
    한편으로는 상기 추정된 구성요소(d k )에 관계된 부분 랭크까지의 부분 랭크들의 누적 그리고 다른 한편으로는 상기 추정된 구성요소의 증분(d k + 1)에 대응하 는 구성요소에 관계된 부분 랭크까지의 부분 랭크들의 누적에 의해서, 랭크(t)의 상기 주어진 값이 괄호화(bracketing)될 수 있다면, 상기 근접 조건이 만족되는 것을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제13항 내지 제15항 중 어느 한 항에 있어서,
    상기 인코딩/디코딩은 벡터 양자화를 구비한 소스 인코딩/디코딩 유형인 것을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제12항에 있어서,
    상기 인코딩/디코딩은 채널 변조 소스 인코딩/디코딩 유형이며, 이는,
    - 전송 전에, 순열의 랭크로부터 코드 벡터를 판별하고(OP3), 그리고
    - 수신시에, 수신된 벡터에 대응하는 코드 벡터로부터 순열의 랭크를 계산하는 것(OP2)
    을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제3항과 결합되는, 제12항 내지 제17항 중 어느 한 항에 있어서,
    상기 순열 코드들은 최대 n 차원을 가지며,
    상기 선택된 정수들은 적어도,
    - 1부터 최대 차원 n까지의 정수들,
    - 정수 0 의 계승값(factorial value),
    - 그리고, 바람직하게는, 1부터 최대 차원 n까지의 정수들의 계승값들
    을 포함하는 것을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제18항에 있어서,
    상기 선택된 정수들은 0 값을 또한 포함하는 것을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제12항 내지 제19항 중 어느 한 항에 있어서,
    상기 순열 코드는 Schalkwijk 계산을 이용하며, 코드 벡터(y 0 ,,,,y n-1 )의 끝수버림(y k ,...y n-1 )에 관계된 부분 랭크 는,
    로 표현되며,
    - 는, 0 부터 m 까지의 정수 인덱스 i 에 대한 곱을 나타내며,
    - 는, 0 부터 m 까지의 인덱스 i 에 대한 합계(sum)을 나타내며,
    - l! 표시는, 정수 l의 계승값(factorial value)을 나타내며, l 〉0 에 대해 l! = 1×2×3×...(l-1)×l 이고, 0!=1 이며,
    - 정수 n은 순열 코드의 차원이고, 코드 벡터를 이루는 구성요소들의 총 갯 수에 해당하며,
    - 0 부터 n-1 까지의 정수 k는 코드 벡터의 k 번째 구성요소 y k 의 인덱스이며,
    - 정수 q는 코드 벡터를 구성하는 개별(separate) 구성요소들의 숫자이며, 그리고
    - 항은, k 와 n-1 사이의 인덱스 구성요소들의 숫자를 나타내며, 이는 인덱스 구성요소 d의 값과 동일한 값을 갖는 것
    을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제9항과 결합되는, 제20항에 있어서,
    식별되고 그리고 부분 랭크( )를 형성하는 곱 및/또는 몫에서 조합 표현으로서 나타나는 상기 정수들은,
    - 0 부터 n-1 사이의 모든 정수들 k에 대한 팩토리얼 항들 (n-1-k)!,
    - 각 항 의 값 및/또는 그것의 계승 값, 곱 에 포함되며, 각 항 은 0 과 n 사이이며, 그리고
    - 항들, 0 과 n-1 사이의 모든 정수 k 에 대해 각각은 1 과 n-1 사이임
    인 것을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제13항과 결합되는, 제20항 또는 제21항에 있어서,
    랭크의 계산은 부분 랭크들 의 누적을 판별함에 의해 인코딩시에 수행되며, n-1 부터 0 까지의 인덱스 k에 대해, 코드 벡터(y 0 ,,,,y n-1 )의 끝수버림(y k ,...y n-1 )에 따라 각각이 평가되는 것
    을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제22항에 있어서,
    S k 항이 0인 경우에, 부분 랭크 를 평가하는 것을 회피하기 위하여, 항의 값에 대해 테스트가 수행되는 것을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제14항과 제15항 중 어느 한 항과 결합되는, 제20항 또는 제21항에 있어서,
    부분 랭크들 의 누적해제(decumulation)에 대한 대표량의 계산은 디코딩시에 수행되어, 0 부터 n-1까지의 인덱스 k의 코드 벡터의 구성요소들 y k 를 판별하는 것을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 제10항과 제11항 중 어느 한 항과 결합되는, 제22항 내지 제24중 어느 한 항에 있어서,
    현재 인덱스 k에 대한 항의 분해의 지수들로부터 뺄셈되거나 또는 현재 인덱스 k에 대한 항의 분해의 지수들에 더해지기 위해서, 선행하는 인덱스 k에 대한 항의 분해의 지수들의 합계는 메모리에 일시적으로 저장되는 것을 특징으로 하는 디지털 신호들을 인코딩/디코딩하는 방법.
  • 순열 코드들을 이용한 디지털 신호 인코딩/디코딩 디바이스의 메모리에 저장되는 컴퓨터 프로그램으로서,
    상기 컴퓨터 프로그램은, 제1항 내지 제25항 중 어느 한 항에 청구된 방법의 단계들을 구현하기 위한 명령들을 포함하는 것을 특징으로 하는 컴퓨터 프로그램.
  • 순열 코드들을 이용하는 디지털 신호 인코딩/디코딩 디바이스로서,
    - 제26항에 청구된 컴퓨터 프로그램의 명령들을 저장하고 그리고 선택된 정수들의 분해들의 미리-기록된 표현들을 저장하기 위한 메모리 유닛 MEM, 그리고
    - 제1항 내지 제25항 중 어느 한 항에 청구된 방법을 구현하기 위해 상기 메모리 유닛 MEM에 액세스하는 계산 모듈 PROC
    를 포함하는 것을 특징으로 하는 디지털 신호 인코딩/디코딩 디바이스.
  • 说明书全文

    순열 코드들로 벡터 양자화함에 있어서 디지털 신호들의 향상된 인코딩/디코딩{IMPROVED ENCODING/DECODING OF DIGITAL SIGNALS, ESPECIALLY IN VECTOR QUANTIZATION WITH PERMUTATION CODES}

    본 발명은 오디오 신호, 비디오 신호 및 좀더 일반적으로는 멀티미디어 신호들과 같은 디지털 신호들의 저장 또는 전송을 위해서, 이들 신호들을 인코딩/디코딩하는 것에 관한 것이다.

    본 발명은, 특히 순열 코드들(permutation codes)의 인코딩 및 디코딩에 의해 야기되는 문제점들에 대한 해결책을 제공한다.

    일반적으로, 또한 본 발명은 소스 인코딩의 상대역(counterpart)으로 적용될 수 있다: 채널 인코딩 또는 "변조(modulation)".

    본 발명의 견지에서 디지털 신호의 압축 인코딩/디코딩은, 변환 계수(transform coefficient)의 양자화(quantization)에 매우 유용할 수 있다.

    벡터 양자화(vector quantization)

    디지털 신호 압축 솔루션으로 널리 사용되고 있는 것들 중 하나가 벡터 양자화이다. 벡터 양자화는 유한 세트(finite set)로부터 선택된 동일 차원의 벡터에 의해서 입력 벡터를 나타낸다. M 레벨들(또는 "코드 벡터들")을 갖는 양자화기는, 입력 벡터들, 일반적으로는 n-차원 실제 유클리드 공간(real euclidian space) R n 또는 M개의 개별 요소들을 갖는 R n 의 유한 서브세트 Y 내에서 R n 의 서브세트의 비-전단사(non-bijective) 적용이다 : Y = {Y 0 , Y 1 ,...Y M-1 }

    여기서, Y는 재생성 알파벳(reproduction alphabet) 또는 "딕셔너리(dictionary)" 또는 심지어 "디렉토리" 라고도 호칭되며, 그것의 코드 벡터 요소들은 "코드 워드들(code words)" 또는 "출력 포인트들(output points)" 또는 "대표자들(representatives)" 이라고 호칭된다.

    양자화기의 각 차원 r에 대한 비트율(또는 그것의 "해상도(resolution)")는, 다음과 같이 정의된다.

    r = 1/n log 2 M

    벡터 양자화에서, n개 샘플들의 블록은 n-차원 벡터로 취급된다. 소스 인코딩의 이론에 따르면, 상기 차원(dimension)이 매우 커지게 되는 경우, 벡터 양자화(vector quantization)의 성능은 소스 왜곡 비트율 제한(source distortion bit rate limit)에 가까워진다. 벡터 양자화기 딕셔너리들(vector quantizer dictionaries)은, 벡터 양자화기의 최적화를 위한 필요 조건들에 기초하여, 일반형 로이드 알고리즘(Generalized Lloyd Algorithm : GLA)과 같은 통계적인 방법들을 이용하여 디자인될 수 있다.

    정식으로(duly) 획득된 통계적인 벡터 양자화기들은 구조(structure)를 갖고 있지 않는바, 계산 및 저장 리소스의 관점에서 보면 이들의 탐사(exploration)를 비싸게 만드는데, 이는 인코딩 및 저장 모두의 복잡성이 n2 nr 에 비례하기 때문이다.

    도1A를 참조하면, 3개의 주요한 연산들이 벡터 양자화기를 사용한다(인코딩에서 2개 그리고 디코딩에서 1개). 딕셔너리로부터 코드 벡터를 처음 선택함으로써, 입력 벡터가 인코딩된다(단계 COD). 이를 가장 많이 닮은 것은 바로 코드 벡터이다(도1A의 연산 OP1). 이후, 전송 또는 저장되기 위해서(도1A의 연산 OP2), 상기 코드 벡터의 인덱스가 판별된다(단계 IND). 디코더에서(단계 DEC), 그것의 인덱스로부터 상기 코드 벡터가 결정된다(도1A의 연산 OP3).

    변조(modulation)에서, 도1A의 3개의 연산들 OP1, OP2, 및 OP3는 상이한 순서로 적용된다. 이러한 변조/양자화 이중성(duality)을 예시하고 있는 도1B를 참조하면, 인덱스로부터 코드 벡터로의 변이(transition)에 대해 준비된다(도1B의 COD' 단계는 도1A의 연산 OP3에 대응). 다음으로, 잡음이 있는(noise-affected) 채널상에서 전송한 이후, 수신된 벡터와 가장 가까운 코드 벡터가 검색된다(도1B의 단계 DEC'는 도1A의 연산 OP1에 대응). 마지막으로, 코드 벡터의 인덱스에 대한 디코딩이 세번째 단계이다(도1B의 단계 IND'는 도1A의 연산 OP2에 대응).

    차원, 벡터들 및 비트율에 따른 복잡도의 지수적인 증가는, 작은 차원(small demension) 및/또는 낮은 비트율들을 갖는 비-구조화된(non-structured) 벡터 양자화기의 사용을 제한하는바, 이는 실시간으로 이들의 사용을 가능케하기 위함이다. 비-구조화된 벡터 양자화기의 경우, 가장 가까이 이웃하는 것을 검색하기 위해서 는(연산 OP1), 바로 그것과 입력 벡터 간의 거리 측정을 최소화하는 딕셔너리 요소를 선택하기 위해서, 딕셔너리의 모든 요소들을 소모적으로 검색해야 한다. 후자의 2개의 연산들(인덱싱 OP2 및 역(reverse) 연산 OP3)은, 테이블들을 단순히 판독함으로써 수행되는 것이 일반적이지만, 그럼에도 불구하고 이는 메모리 공간을 낭비한다. 사이즈와 차원(dimension)에 관한 제한사항들을 극복하기 위해서, 기본적인 벡터 양자화에 대한 다수의 변형예들이 연구되어 왔다. 이들 변형예들은, 딕셔너리 구조의 부재(absense)를 치유하여 복잡성을 감소시키고자 하지만, 대신에 품질을 희생한다. 하지만, 성능/복잡성 트레이드-오프가 개선되는바, 이는 벡터 양자화가 비용-효율적으로 적용될 수 있는 해상도(resolution) 및/또는 차원의 범위를 증가시킬 수 있다. 구조화된 수많은 벡터 양자화기 체계(scheme)가 제안되어 왔는데, 이하에서는 특히, "순열 코드(permutation code)"를 이행하는 벡터 양자화기가 설명된다.

    순열 코드들(permutation codes)

    "순열 코드" 벡터 양자화기에서는, "리더(leader)" 또는 "리더 벡터" 라고 호칭되는 제 1 코드 벡터의 구성요소들의 순열들에 의해서 코드 벡터들이 획득된다(사전 편찬상의 순서로(in lexicographic order)). 이들 구성요소들은, 사이즈 q의 알파벳 A = {a 0 , a 1 ,..., a q-1 } (i≠j 에 대해 a i ≠ a j 인 q-ary 알파벳 A) 로부터 이들의 값들을 취한다. 구성요소들 a i 는 실수(또는, 정수(whole number))이다. 가중치(weight) w i (여기서, i는 0 에서 q-1 까지의 인덱스)는, 상기 알파벳의 문자 a i 의 반복 횟수이다. 가중치들 w i 은,

    을 만족하는 양의 정수이다. 약속에 의해, 상기 알파벳의 값들은 a

    0 〉a

    1 〉K 〉a

    q-1 을 만족한다. 상기 리더의 n 구성요소들은 위치 0으로부터 위치 (n-1)로 내림차순으로 진행한다. 따라서, 상기 리더 벡터 y

    0 는 다음과 같은 n 차원의 벡터이다.

    (1)

    상기 구성요소들의 상이한 순서가 선택될 수 있다는 점이 이해되어야 하는바, 예를 들면, a 0 〈 a 1 〈 K 〈 a q-1 도 될 수 있다.

    상기 리더 벡터는 "사인드(signed) 리더" 라고 호칭되며 그리고 상기 순열 코드는 "타입 Ⅰ" 이라고 지칭된다. y 0 의 구성요소들의 순열들에 의해서 다른 코드 벡터들이 획득된다. 순열들의 총 갯수 M 은 다음과 같다.

    (2)

    또 다른 타입의 순열 코드(타입 Ⅱ)가 존재한다. 상기 리더 벡터는 앞서 설명된 형태와 동일한 형태를 갖지만, 그 구성요소들은 양(positive)이어야 한다(a 0 〉a 1 〉K 〉a q-1 ≥ 0). 또한, 가능한 모든 사인 조합(sign combination)에 이들을 지정함으로써, y 0 의 구성요소들의 순열들에 의해서 다른 코드 벡터들이 획득된다. 순열들의 총 갯수 M 은 다음과 같다.

    (3)

    만일,a q-1 >0 이면 h=n 이고 그리고 다른 경우에는 h = nw q-1 이다.

    이러한 경우, 상기 리더 벡터는 절대 리더(absolute leader)라고 호칭된다.

    상기 "순열 코드" 벡터 양자화기는 순열 코드들의 혼성(compounding)(또는, 결합(union))으로까지 확장되었으며, 최근에는 상기 순열 코드 결합(union) 구조는 가변 차원(variable dimension) 및 해상도 벡터 양자화(resolution vector quantization)로 일반화되었다(본 출원인 명의의 문서 WO 2004/00219 참조). 상기 순열 코드들은 통계적인 벡터 양자화에서만 이용되는 것은 아니다. 고도로 구조화된 딕셔너리들을 사용하며, 도트들의 정규 어레이들 또는 에러 정정 코드들로부터 유도되는 대수(algebraic) 벡터 양자화에서도 이들 순열 코드들이 발견된다. 또한, 상기 순열 코드들은 변조(modulation)에도 적용된다. 순열 코드 구조를 이용하면, 최적화되었으며 고속인, 가장 가까이 이웃하는 것을 검색하는 알고리즘(도1A의 연산 OP1)의 개발이 가능해진다. 하지만, 코드 벡터들의 인덱싱(또는 넘버링)(도1A의 연산 OP2)과 상기 역 디코딩 연산(도1A의 연산 OP3)은, 비-구조화된 벡터 양자화기에 비하여 더 많은 계산을 필요로 한다.

    상기 순열들을 계산(enumerating)하는 다양한 방법들이 존재한다. Schalkwijk 알고리즘이 그 중 하나이다.

    " An algorithm for source coding ", Schalkwijk JPM 에 의한, 1972년 5월의 IEEE Trans. on Information Theory, vol. IT-18, NO3, pp 395-399을 참조하라.

    조합론(combinatorial analysis)을 사용하여, 이들 기술들은 순열 코드의 코드 벡터를 인덱스하는 것(연산 OP2)을 가능케하며 그리고 또한 역 인덱스 디코딩 연산(연산 OP3)을 수행한다. 순열 인덱싱 알고리즘들 중에서, 널리 이용되고 있는 Schalkwijk 알고리즘은, 예컨대, 다음의 표준들에서 살펴볼 수 있다.

    - [3GPP TS 26.273] (ANSI-C code for the Fixed-point Extended AMR - Wideband (AMR-WB+) codec; V6.1.0 (2005-06) (Release 6)),

    - [3GPP TS 26.304] (Extended Adaptive Multi-Rate - Wideband (AMR-WB+) codec; Floating-point ANSI-C code; V6.3.0 (2005-06) (Release 6), June 2005).

    인코딩에서 순열의 랭크(rank)를 계산(도1A의 연산 OP2)

    이는, 벡터 y = (y 0 , y 1,.... y n-1 )의 구성요소들의 가능한 모든 순열들을 배열(ordering)하고 그리고 인덱싱하는 것을 포함한다. 상기 순서(order)는 사전편찬상의 순서이며 그리고 상기 인덱스는 "랭크(rank)" 라고 지칭된다. 벡터 y의 랭크를 계산하는 것은, y에 관하여 벡터 D = (d 0 , d 1,... d n-1 )의 랭크를 계산하는 것을 포함하며, y k = a d 인 경우에 한해서 d k 는 인덱스 값 d를 갖는다.

    예를 들어, 차원 n = 8 인 벡터 y 는 다음과 같은 구성요소들을 갖는다.

    y = (4, 2, 4, 0, 0, 4, 4, 2)

    q = 3 글자들(상이한 값들의 구성요소들)인 알파벳은 A = {4, 2, 0} 으로 주어지며, 여기서 a 0 = 4, a 1 = 2 및 a 2 = 0 이다.

    이후, 벡터 y 는 벡터 D = (0, 1, 0, 2, 2, 0, 0, 1)와 관계되는바, 그 구성요소들은 단순히 알파벳 A의 q 글자들의 인덱스들이다.

    y 와 D의 랭크들은 동일하다. 하지만 벡터 D의 정의는 상기 연산을, 세트 {0, 1,..., q-1} (알파벳 {a 0 , a 1 ,..., a q-1 }와 같은 동일한 갯수의 요소들로 구성됨) 내에서 그 값들을 갖는 시퀀스 D의 랭크를 계산하는 것으로 감소시킨다.

    벡터 y 와 D의 가중치들은 동일한데, 이는 이들의 각 구성요소들의 발생(occurrence)이 동일하기 때문이다. 또한, 중간(intermediate) 가중치

    는 구성요소들 의 벡터의 가중치로서 정의되며 따라서, 이는 k에서 n-1까지의 위치들로 남아있도록 끝수가 버려진(truncated) 벡터 y에 대응한다. 결과적으로,

    (4)

    여기서, δ(x, y)는 Kronecker 연산자(x=y 이면 δ(x, y) =1이고 다른 경우에는 0)이다.

    다음의 것이 적용된다 :

    조합론에 의하고, 다음의 공식에 의해서, 벡터 y의 랭크 t가 계산될 수 있다.

    (5)

    이 공식은 다음과 같이 간략화될 수 있다.

    (6)

    주로 사용되는 것은 후자의 공식이며, 본 명세서에서도 후자의 공식이 적용된다. 여기서,

    는 "오더

    k 의 부분 랭크(partial rank of order

    k )" 라고 지칭될 것인바, 이는 다음과 같다.

    (7)

    랭크를 디코딩(연산 OP3): 그 인덱스로부터 순열을 판별

    랭크 t를 디코딩하는 것은 y에 관하여 벡터 D = (d 0 , d 1 ,..., d n-1 ) 를 복원하는 것을 수반한다. d k 를 순차적으로 검색하는 방법 중 하나가 아래에서 설명된다. 구성요소 d 0 가 먼저 판별되며, 이후 구성요소 d 1 이 판별되고.... 마지막으로 구성요소 d n-1 이 판별된다.

    *d 0 의 판별:

    다음의 부등식들을 포함하는 공식에 의해서 d 0 가 발견된다.

    (8)

    다음의 항들 (n-1)!, t,

    및 d = 0, 1, 2..q-1에 대한 의 값들은 알려저 있다. d

    0 의 값을 찾아내기 위해서, d

    0 = 0 이 시작점으로 사용되며, 그리고 상기 식(8)을 만족시킬 때까지 d

    0 는 계속해서 1 만큼씩 증분된다. 부분 랭크들로 상기 식(8)을 써보면, d

    0 의 값은 다음과 같다.

    *d 1 의 판별:

    d 1 을 찾기 위해서 다음의 관계식이 이용된다.

    (9)

    d = 0, 1, 2..q-1에 대한

    의 값들은 의 값들로부터 다음과 같이 추론된다.

    d = d 0 이면,

    그리고

    d ≠ d 0 이면,

    (d 와 d

    0 가 서로 다른 한 는 반복된다)

    구성요소 d 0 의 판별에서와 같은 동일한 문제들로 되돌아 가자.

    d 1 의 값을 찾아내기 위해서, d 1 = 0 이 시작점으로 사용되며, 그리고 상기 부등식 (9)이

    을 만족시킬 때까지 d

    1 는 계속해서 1 만큼씩 증분된다.

    *다른 d k 의 판별:

    후속 d k 의 계산은 앞서 설명된 케이스들로부터 추론될 수 있다.

    d k 의 값을 찾아내기 위해서, d k = 0 이 시작점으로 사용되며, 그리고 부등 식

    을 만족시킬 때까지 d

    k 는 계속해서 1 만큼씩 증분된다.

    일단 벡터 D = (d 0 ,..., d n-1 )가 디코딩되면, 단순한 알파벳 이항(transposition)에 의해서 벡터 y가 추론된다.

    관련 기술의 현황 및 문제점들

    순열 코드의 인덱싱 및 역 연산은 복잡한 연산들이다. 조합론을 적용하기 위해서 알고리즘들이 이용되고 있다. 조합들(combinations)의 인덱싱과 역 연산은, 계승 곱의 나눗셈(divisions of factorial products)을 요구한다.

    나눗셈의 복잡성

    집적회로 분야 및 신호처리 프로세서 분야에서 많은 발전이 있어왔지만, 나눗셈은 여전히 복잡한 연산이다. 일반적으로, 16비트로 표현되는 정수(integer number)로 16비트로 표현되는 정수를 나눗셈하는 것은 이들의 곱셈하는 것보다 18배 이상의 노고를 필요로 한다. 16비트 정수로 32 비트 정수를 나누는 나눗셈의 가중치는 32 인 반면에 이들의 곱셈의 가중치는 5 이다.

    변수들의 구성(framing of the variables)

    나눗셈의 문제점은 그 뿐만이 아니다. 변수들의 구성(framing)이 또 다른 문제점이며 이는 아래에 예시된 테이블 1과 같다.

    오직, 8 이하의 정수들의 계승들(factorials, 이하에서는 '팩토리얼' 이라고도 함)이 16비트 전체 워드들 상에서 표현될 수 있다. 12 보다 큰 숫자들의 계승들은, 32비트 전체 워드들 상에서도 표현이 더이상 가능하지 않다.

    더 나아가, 변수들을 표현하는 비트들의 숫자가 증가함에 따라 연산의 복잡성이 더욱 증가한다. 따라서, 32-비트 정수를 16-비트 정수로 나누는 것(가중치 32)은, 16-비트 정수를 16-비트 정수로 나누는 것(가중치 18) 보다 거의 2배 가까이 더 복잡하다.

    n n ! Log 2 ( n !)
    0 1 0
    1 1 0
    2 2 1
    3 6 2.5849625
    4 24 4.5849625
    5 120 6.9068906
    6 720 9.4918531
    7 5040 12.299208
    8 40320 15.299208
    9 362880 18.469133
    10 3628800 21.7910611
    11 39916800 25.2504927
    12 479001600 28.8354552
    13 6227020800 32.535895
    14 87178291200 36.3432499
    15 1307674368000 40.2501405
    16 20922789888000 44.2501405

    테이블 1 : 정수들의 계승들(factorials of integer numbers)

    연산 OP1의 복잡도를 감소시키고자 하는 해결책들이 제안되어 왔다. 연산 OP2 및 연산 OP3의 복잡도에 관한 문제점은 잘 해결되지 않았다. 하지만, 명백하게도, 출원인의 TDAC 인코더/디코더, 또는 3GPP-AMR-WB+ 인코더에서는, Schalkwijk 공식에 기초하여 인코딩 및 디코딩 알고리즘들에 대한 간략화가 수행되었다.

    순열들의 간략화된 계산(enumeration) 및 역 연산(연산 OP2 및 연산 OP3)의 간략화

    순열의 랭크 t의 계산 및 역 연산의 계산은, n 항들

    의 계산에 대해 수행된 간략화에 의해서 가속되는바, 의 정의는 아래와 같다.

    처음의 2개는 인코딩 및 디코딩 모두의 복잡성을 감소시키기 위해서 이용된다. 세번째 것은 인코딩에서 이용되며, 마지막 2개는 디코딩에서 이용된다.

    인코딩 기법은 도2 및 도3에서 예시된다. 특히, 도3은 종래기술의 견지에서 Schalkwijk 공식에 의해 랭크의 계산을 나타내며, 반면에 도2는 예비 단계들(도2에서 "EP-n" 으로 지칭되는 것은 n 번째 예비 단계를 나타냄)을 예시한다.

    도2를 참조하면, 상기 프로세싱은 단계 EP-1에서 시작되는바, 여기서는 벡터 y = (y 0 ,... y n-1 )의 구성요소들이 복원된다. 후속되는 일반적인 단계 EP-2는, 상기 벡터 A = (a 0 , ... a q-1 )를 위해 이용되는 알파벳의 구성요소들에 대한 계산을 나타내며, 그리고 최대 인덱스 q의 판별을 나타낸다. 이를 위해서, q=1, a 0 = y 0 이 세팅되는 초기화 단계 EP-21 이후에, 1 에서 n-1 까지의 인덱스 k (종료 테스트 EP-26 및 그렇지 않으면 EP-27에서 증분)에 대해서 루프가 수행되는바, 이는 요소 a q 를 다음과 같이 검색하기 위함이다.

    - 현재 인덱스 k의 구성요소 y k 가 {a 0 , ... a q-1 }의 성분들 사이에 있지 않다면(단계 EP-22), 집합 {a 0 , ... a q-1 }에 대해서 a q = y k 가 되도록 새로운 구성요소 a q 가 지정되어야 하며(단계 EP-23), q는 1만큼 증분되어야 한다(단계 EP-25).

    후속하는 일반적인 예비 단계 EP-3는, 벡터 D = (d 0 ,...,d n-1 )의 계산인바, 이는 다음과 같다.

    - 0 부터 n-1 까지 범위의 k에 대해서(k를 0으로 초기화하는 단계 EP-31, k에 대한 종료 테스트 EP-37, 그 밖의 증분단계 EP-38), y k = a d 가 되도록 인덱스들의 집합 (0, ... , q-1) 내에서 d 값이 찾아진다(d에 대한 루프에서의 테스트 EP-33 그리고 그 밖의 d=d+1 인 증분 EP-36).

    도2에 도시된 예비 프로세싱에 후속하여, 이제 도3을 참조하여, 랭크 t를 계산하기 위한 단계들의 설명이 이어진다. 도3에 예시된 단계들은, 종래기술에서 n번째 인코딩 단계를 디자인하기 위하여, "CA-n" 으로 참조된다.

    단계 CA-1는, 랭크 t는 0으로, 변수 P(단계 CA-13에서 랭크의 계산에 이용되는 분모(denominator))는 1로, q 가중치들 w o ,..., w q-1 은 0으로 초기화하는 단계이다.

    여기서, k의 값은 n-1에서 0으로 감분된다(k를 n-1로 초기화하는 단계 CA-2, 종료 테스트 CA-14, 그밖의 감분단계 CA-15). 이러한 선택의 장점이 아래에 설명된다. 이후, 예비 단계 EP-3에서 획득한 벡터 D의 구성요소들이 이용되며, 그리고 현재의 k에 대해서 d = d k 가 설정된다(단계 CA-3). 관련된 가중치 w d (단계 CA-4의 w d = w d +1)가 업데이트되어 P항(단계 CA-5의 P = P xw d )을 평가한다. 단계 CA-13의 랭크 계산에서 분자(numerator)로 이용되는 합계 S는 0으로 초기화되며(단계 CA-6), 이후 가중치 w i 의 인덱스 i 에 대해서 루프가 수행되어(종료 테스트 CA-9 그리고 증분 CA-10 그렇지 않으면 d-1로), 상기 합계 S가 업데이트(단계 CA-8에서 S = S + w i ) 된다. 단계 CA-13에서 랭크 t를 계산하기 이전에, 상기 합계 S가 0이 아님을 확인하기 위한 체크가 수행된다(테스트 CA-11). 이러한 구현예의 장점이 아래에 설명된다.

    다음과 같은 랭크 t 의 계산(단계 CA-13)은, 계승 항(factorial term) (nk-1)! 을 포함하고 있다.

    t = t + (S/P)(nk-1)!

    랭크 t에 대한 각각의 업데이트시에 상기 (nk-1)! 항을 계산하는 대신에, 이들 값들을 메모리에 선행-기록하고 그리고 간단한 메모리 액세스를 이용하여(단계 CA-12), (nk-1)! 의 현재 값을 얻는 것이 바람직하다.

    따라서, 도3에 도시된 프로세싱의 몇몇 장점들은, 본 발명에서도 다시 한번 채택될 것이다. 이들 장점들은 상세히 후술된다.

    * 계승들(factorials)의 저장

    (nk-1)! 항 및

    항을 실시간으로 계산하는 것을 회피하기 위하여, n+1 계승들(0!, 1!, .... n!)의 값들이 미리 계산되어 저장된다. 상기 차원 n 이 제한된 방식으로(n ≤ n

    max )으로 변화한다면, 0!, 1!,..., n

    max ! 의 값들은 미리 계산되며 저장된다.

    나눗셈을 회피하기 위한 중간 가중치의 축적에 대한 테스트

    만일, 항

    이 0 이라면, 를 계산함에 있어 포인트가 없다. 이제, 이 항은 종종 0 이 되는바, 특히 마지막 위치들(positions)(n-1에 가까운 k)에 대해서 종종 0 이 된다. 이러한 항의 제로 성질에 대한 테스트(도3의 테스트 CA-11)를 추가함으로써, 나눗셈(그리고 곱셈)이 회피될 수 있다. 테스트에 비하여 나눗셈 계산은 매우 복잡하므로, 복잡도가 상당한 정도로 절감될 수 있다.

    인코딩의 위치들 상의 루프의 반전(Reversal of the loop on the positions in encoding)

    가중치들

    (d = 0, 1,...q-1)은, 를 1 씩 증분시키고 그리고 d ≠ d

    k 에 대해 다른 값들 을 반복함으로써, 로부터 추론된다. 이후, 벡터의 마지막 위치(k = n-1)로부터 처음 위치(k = 0)로 작용하는 루프(도3의 단계 CA-2, CA-14, CA-15)를 생성하는 것이 가능해진다. 이러한 "반전된" 루프는, 1로 초기화한 이후에 항 P

    k 를 다음과 같이 계산할 수 있게 한다.

    ,

    각각의 반복(iteration)에 대해서 오직 한번의 증분과 한번의 곱셈을 가지고, 또는:

    마지막 2개의 위치들을 별도로(k = n-1 및 k = n-2)을 프로세스하는 것도 또한 가능하다. 사실상,

    ■ 마지막 위치(k =n-1)에 대해,

    따라서,

    ■ 끝에서 두번째 위치(penultimate position)(k = n-2)에 대해,

    아래에 설명된 다른 유익한 이행 세부사항들은 다음과 같은 것을 제공할 수 있다.

    * 디코딩에서 나눗셈의 제거

    d 0 을 검색하는 경우 디코딩에서 나눗셈을 회피하기 위해서, 상기 부등식 (8)은 다음과 같이 다시 쓰여질 수 있다.

    이와 유사하게, d 1 을 검색하는 경우에도 부등식 (9)를 다음과 같이 다시 씀으로써, 나눗셈을 회피할 수 있다.

    또는 :

    d k (0≤k≤n-1)를 검색하는 경우에 나눗셈을 제거하는 것이 가능하지만,

    (0≤k≤n-3)를 계산하기 위해서는 (n-1)번의 나눗셈을 여전히 필요로 한다는 점을 유의해야 한다.

    * 디코딩의 가중치들에 대한 테스트

    마지막 위치들에서, 소정의 d 값들에 대해,

    = 0 이다(위치 k에 선행하는 위치들을 점유하는 값 d의 구성요소들에 대해). 따라서, 이들 d 값들에 대해서 부등식 (8) 및 (9)의 상기 항들을 계산하는 것은 적절치 못한 것이다.

    종래 기술의 다른 문제점들 : 변수들의 구성(the framing of the variables)

    변수들의 구성에 대한 문제점들은, 본 출원인의 TDAC 인코더에서도 다뤄져 왔다.

    첫번째 해결책은, 12 보다 큰 차원들에 대한 프로세싱 연산과 12 보다 작은 차원들에 대한 연산을 구분하는 것이다. 작은 차원들(n〈 12)에 대해서는, 상기 계산들은 32 비트 상에서 부호없는 정수(unsigned integer)에 대해 수행된다. 큰 차원들에 대해서는, 2배 정밀도 부동 변수들(double-precision floating variables)이 사용되는바, 대신에 계산 복잡도가 증가하고(2배 정밀도 부동 연산은 이들의 정수 정밀도 등가물들에 비해 복잡함) 한정된 메모리 용량이 증가한다.

    더 나아가, 최대 정밀도가 부호없는 32 비트 정수에 제한된다면(고정-소수점 프로세서에 의해 실행), 12 보다 큰 정수 계승들은 곧바로 선행 저장될 수 없으며, 12 보다 큰 차원의 벡터들은 별도로 코딩되어야 한다. 이러한 문제점을 해결하기 위하여, 좀더 정밀한 해결책들은, 2 j × r 형태인 팩토리얼 n! 의 가수(mantissa) 및 지수(exponent)에 의한 의사-부동-소수점(pseudo-floating-point) 표현을 사용한다. 이러한 분해(decomposition)는 아래의 테이블 2 에 상세히 도시된다. 16 이하의 n에 대한 n!의 저장은, 간단한 비트 오프셋에 해당하는 지수 j 뿐만 아니라 최대 30 비트 정밀도를 갖는 r 을 저장하는 것으로 감소된다.

    테이블 2 : 계승들의 인수분해(Factorization of the factorials)

    n log 2 (n!) 2 j r log 2 r
    0 0 1 1 0
    1 0 1 1 0
    2 1.0000 2 1 0
    3 2.5849625 2 3 1.5849625
    4 4.5849625 8 3 1.5849625
    5 6.9068906 8 15 3.9068906
    6 9.4918531 16 45 5.4918531
    7 12.299208 16 315 8.29920802
    8 15.299208 128 315 8.29920802
    9 18.469133 128 2835 11.469133
    10 21.7910611 256 14175 13.7910611
    11 25.2504927 256 155925 17.2504927
    12 28.8354552 1024 467775 18.8354552
    13 32.535895 1024 6081075 22.535895
    14 36.3432499 2048 42567525 25.3432499
    15 40.2501405 2048 638512875 29.2501405
    16 44.2501405 32768 638512875 29.2501405

    따라서, 대부분의 경우 종래기술의 테크닉은, 제한된 정밀도를 갖는 변수들(특히 고정 소수점)의 구성에 관한 문제점을 해결하지 못한다. 비록, TDAC 인코더의 구현은 구성(framing)에 관한 문제를 해결하지만, 2개 정수들의 복잡한 나눗셈들을 회피하지는 못한다. 더 나아가, 높은 차원들에 대해서는, 중간 계산들(예를 들어, 부분 랭크(partial rank)

    의 분자 및 분모)이 포화에 접근할 수 있다. 이 경우, 전술한 간략화는 디코딩 프로세싱에서 이용되지 못할 수 있으며, 부등식 (8) 및 (9)의 공식으로 되돌아가 할 필요가 있는바, 따라서 많은 나눗셈들이 재도입된다.

    Schalkwijk 기법 이외의 다른 계산 기법들 역시 동일한 문제점을 갖고 있다. 이들이 조합론(combinatorial analysis)을 이용한다 할지라도, 계승들(factorials)의 곱셈 및 이들의 나눗셈들에 대한 계산을 수반한다.

    본 발명은 이러한 상황을 개선하기 위한 것이다.

    이를 위해서, 먼저 본 발명은 조합 표현들(combinatorial expressions)의 계산을 수반하는 순열 코드들을 이용하여 디지털 신호들을 인코딩/디코딩하는 방법을 제공한다. 여기서, 이들 조합 표현들은, 소인수 거듭제곱 분해(prime factor power decomposition)에 의해 표현되며, 그리고 선택된 정수들의 분해들에 대한 미리-기록된 표현들을 메모리 읽기함으로써 이들 조합 표현들이 판별된다.

    이후, 본 발명은 순열 코드의 인덱싱 및 역 연산 둘다에 관련된 문제점들에 대한 효과적인 해결책을 제공한다. 동시에, 본 발명은 2개의 문제점들 즉, 변수들의 구성 및 나눗셈에 대한 문제점들을 해결한다.

    사실, 유용한 구현예들에서, 상기 미리-기록된 표현들은, 상기 선택된 정수들 각각에 대하여 연속적인 소수들(prime numbers)을 대표하는 값들에 상관되어 각각 저장된, 지수들(exponents)을 대표하는 값들을 포함한다.

    따라서, 변수들의 구성에 관한 종래기술의 문제점은 이미 해결된다.

    변수들의 구성에 관한 상기 문제점은, 계승 항들(factorial terms)을 다루는 경우에 더욱 민감해진다.

    유용한 구현예에서, 조합 표현들이 정수 계승 값들을 포함하고 있을 때, 이들 조합 표현들을 조작하기 위해서는, 상기 미리-기록된 표현들은 계승 값들의 분해들의 표현들을 적어도 포함한다.

    상기 구현예는 변수 구성의 제약들을 걷어낼 수 있으며, 이로부터 관심있는 n 차원의 순열 코드들에 대해 통상적으로 설정된 제한들로 되돌릴 수 있다

    본 발명의 다른 유용한 특성에 따르면, 적어도 하나의 상기 조합 표현들은, 정수 분자를 정수 분모로 나눈 몫(quotient)을 포함하며, 이 몫은 소인수 거듭제곱 분해에 의해 표현되는바, 여기서 각각의 거듭제곱은 상기 분자 및 분모에 각각 관계된 지수들(exponents)의 차이(differece)이며, 동일한 소수에 지정된다.

    따라서, 나눗셈 계산을 간단한 뺄셈 계산으로 대체함으로써, 종래기술의 나눗셈 계산에 관한 문제점들이 해결된다.

    제 1 실시예에서, 앞서 언급된 선택된 정수들 중 하나에 대한 미리-기록된 분해를 검색하기 위하여 메모리 어드레싱이 제공된다. 이를 위하여, 선택된 정수의 미리-기록된 표현이 어드레스가능한 메모리에 저장되는바, 상기 메모리에 대한 어드레싱은, 상기 선택된 정수를 재구성하기 위하여, 각 소수들에 지정될 지수들의 연속(succession)을 제공한다.

    바람직하게는, 선택된 정수의 상기 미리-기록된 표현은 어드레스들의 연속 형태로 저장될 것이며, 이들 각각은, 소수에 대해서, 상기 소수에 지정될 지수를 제공하는바, 이는 상기 선택된 정수를 재구성하기 위함이다.

    이하에서, 본 발명의 제 1 실시예에 따른 상기 구현예는 "exploded representation of the decompositions" 이라고 지칭될 것이다.

    변형예로서, 본 발명의 제 2 실시예에서, 상기 미리-기록된 표현들은 비트 그룹들의 연속을 포함하는 워드들(words)의 형태로 저장되는바, 각 그룹은,

    - 소수에 의존하는 가중치, 그리고

    - 상기 소수에 관계될 지수에 의존하는 값

    을 갖는다.

    바람직하게는, 이후 비트들의 가중치들 및 잔여 비트들의 판독에 따른 연속적인 오프셋들로, 적어도 하나의 부분 마스크(partial mask)를 비트들의 워드에 연속적으로 적용함으로써, 상기 소인수 거듭제곱들(prime factor powers)이 판별된다.

    이하에서, 본 발명의 제 2 실시예에 따른 상기 구현예는 "분해들의 간결한 표현(compact representation of the decompositions)" 이라고 지칭될 것이다.

    조합 표현들의 계산을 위한 동일한 방법 프로세스는 다음의 단계들에 따라 수행될 수 있다.

    - 상기 선택된 정수들로부터, 상기 조합 표현을 형성하는 곱(product) 및/또는 몫(quotient)에서 나타나는 항들의 식별,

    - 메모리에서 상기 항들의 소인수 분해에 포함된 지수들을 판독,

    - 상기 조합 표현의 소인수 거듭제곱 분해에 포함된 지수들을 결정하기 위해 판독된 지수들의 합산 및/또는 각 감산, 그리고 이로부터, 그것의 소인수 거듭제곱 분해로부터 상기 조합 표현을 계산함.

    순환적으로(recurrently) 수행될 것이며 각각의 순환(recurrence)에서 새로운 항을 포함하는 곱(poduct)을 계산함에 있어서, 이전의 순환에 대해 수행된 곱 계산(product calculation)의 분해를 일시적으로 저장하는 것이 바람직할 수 있다. 따라서, 상기 방법이 곱을 계산하기 위한 순환 단계를 포함하여 구성되고, 이전의 순환에서 판별된 곱이 곱해지는 항을 상기 곱이 각각의 순환에서 포함하고 있다면:

    - 이전 순환에서 판별된 곱은, 소인수 거듭제곱 분해의 형태로 메모리에 유지되는 것이 바람직하고,

    - 곱이 곱해지는 상기 항은, 선택된 정수들(상기 분해가 미리-기록되는) 중 하나인 것이 바람직하며, 그리고

    - 현재 순환에서 곱을 판별하기 위해서는, 이전 순환에서 판별된 상기 곱의 각 분해들로부터 유도되는 지수와, 상기 곱이 곱해지는 상기 항의 분해들 각각으로부터 유도되는 지수를 각 소수에 대해 차례로 합산하는 것으로 충분하다.

    이와 유사하게, 상기 방법이 나눗셈을 계산하기 위한 순환 단계를 포함하여 구성되고, 이전 순환에서 판별된 몫을 나누는 항을 상기 나눗셈이 각각의 순환에서 포함하고 있다면:

    - 이전 순환에서 판별된 상기 몫은, 소인수 거듭제곱 분해의 형태로 메모리에 유지되는 것이 바람직하고,

    - 상기 몫을 나누는 상기 항은, 선택된 정수들(상기 분해가 미리-기록되는) 중 하나인 것이 바람직하며, 그리고

    - 현재 순환에서 상기 몫을 판별하기 위해서는, 이전 순환에서 판별된 몫의 분해로부터 유도된 지수들로부터, 상기 항의 분해로부터 유도된 지수들이, 각 소수에 대해 차례로 뺄셈된다.

    순환적으로 계산된 곱들 및/또는 몫들의 중간 분해들을 일시적으로 저장하는 것은, 순환 부분 링크(recurrent partial rank)를 결정함에 있어서 특히나 유용한바, 이의 누적은 순열의 랭크의 대표이다.

    따라서, 본 발명의 유용한 구현예에서, 상기 순열 코드들은, 부분 랭크들의 누적을 포함하여 구성된 순열의 랭크의 대표량(quantity representative)에 대한 계산을 포함하며, 각각의 부분 랭크는 상기 조합 표현들 중 하나에 대응한다.

    이후, 벡터-양자화된 디지털 신호들을 인코딩할 때, 리더 벡터의 구성요소들의 순열들을 인덱스하기 위하여(도1A의 연산 OP2), 순열의 랭크에 대한 계산이 이용될 수 있는바, 이들 순열들은 입력 벡터에 가장 근접한 코드 벡터를 판별하기 위해서 이전 단계(연산 OP1)에서 수행된다.

    이와 유사하게, 벡터 양자화된 디지털 신호들을 디코딩할 때, 다음의 조건이 주어지면, 순열 랭크의 소정 값으로부터 순열의 랭크에 대한 평가가 수행된다:

    - 구성되어질 코드 벡터의 적어도 하나의 추정된 구성요소에 따라, 상기 소정 값에 접근하는 순열 랭크의 적어도 하나의 대표량이 계산되고(도1A의 연산 OP3),

    - 상기 대표량이 랭크의 상기 소정값에 근접하다는 조건(이하, 근접 조건이라함)을 만족시키면, 추정된 구성요소에 대한 선택이 유효해짐.

    예시적인 실시예에서, 한편으로는 추정된 구성요소에 관한 부분 랭크까지 및 다른 한편으로는 추정된 구성요소의 증분(incrementation)에 대응하는 구성요소에 관한 부분 랭크까지의, 부분 랭크들의 누적들에 의해서, 랭크의 상기 소정값이 괄호화(bracketing)될 수 있다면, 상기 근접 조건이 만족된다.

    따라서, 이러한 근접 조건은, Schalkwijk 계산에서 전술한 바와같은 부등식 (8)의 일반 형식(general formulation)에 해당한다.

    따라서, 본 발명은 도1A의 관점에서 벡터 양자화를 이용한 소스 인코딩/디코딩에 유용하게 적용될 수 있다.

    하지만, 다음을 포함한다면, 상기 인코딩/디코딩은 또한 도1B의 관점에서 채널 변조 인코딩/디코딩 유형이 될 수 있다:

    - 전송 전에, 순열의 랭크로부터 코드 벡터의 판별(도1A와 도1B의 연산 OP3와 동일), 그리고

    - 수신시에, 수신된 벡터에 대응하는 코드 벡터로부터 순열의 랭크를 계산(도1A와 도1B의 연산 OP2와 동일).

    부분 랭크의 계산은, 항들(곱 또는 몫에서)을 포함하는바, 일반적으로 이들 항들은, 순열 코드들의 최대 차원 n 보다 여전히 작거나 또는 같다. 따라서, 유용한 실시예에서, 미리-기록된 분해들을 갖는 선택된 정수들은 적어도 다음을 포함한다:

    - 1부터 최대 차원 n까지의 정수들,

    - 정수 0 의 계승값,

    - 그리고, 바람직하게는, 1부터 최대 차원 n까지의 정수들의 계승값들.

    특정한 구현예에서, 상기 선택된 정수값들은 또한 0 값을 포함한다.

    따라서, 순열 코드가 Schalkwijk 계산을 이용한다면, 코드 벡터(y 0 ,,,,y n-1 )의 끝수버림(truncation)(y k ,...y n-1 )에 관한 부분 랭크

    는 다음과 같이 표현된다:

    여기서,

    표시는, 0 부터 m 까지의 정수 인덱스 i 에 대한 곱을 나타내며,

    표시는, 0 부터 m 까지의 인덱스 i 에 대한 합계(sum)를 나타낸다.

    - l! 표시는, 정수 l의 계승값(factorial value)을 나타내며, 여기서 l 〉0 에 대해 l! = 1×2×3×...(l-1)×l 이며, 0!=1 이다.

    - 정수 n은 순열 코드의 차원(dimension)이며, 코드 벡터를 이루는 구성요소들(components)의 총 숫자에 해당한다,

    - 0 부터 n-1 까지의 정수 k는 코드 벡터의 k 번째 구성요소 y k 의 인덱스인바, 소스 디코딩에서 랭크 값으로부터 구해지거나(각각의 채널 인코딩에서) 또는 소스 인코딩에서 순열들이 인덱싱되어질 인덱스이다(각각의 채널 디코딩에서),

    - 정수 q는 코드 벡터를 구성하는 개별 구성요소들의 숫자이며, 그리고

    -

    항("중간 가중치" 라 명명된)은, k 와 n-1 사이의 인덱스들을 갖는 구성요소들의 숫자를 나타내며, 이는 인덱스 구성요소 d의 값과 동일한 값을 갖는다.

    이 경우, 미리-기록된 분해들(decompositions)을 갖는 선택된 정수들과 그리고 곱 및/또는 몫에서, 부분 랭크

    의 표현에서 식별되어질 것은, 바람직하게도:

    - 0 부터 n-1 사이의 모든 정수들 k에 대한 팩토리얼 항 (n-1-k)!, (즉, 0 과 n-1 사이의 모든 정수들에 대한 팩토리얼 값들),

    - 곱

    에 포함된 각각의 항 의 값 및/또는 그것의 계승 값, 각각의 항 은 0 과 n 사이이며, 그리고

    - 0 과 n-1 사이의 모든 정수 k 에 대한 항들

    , 각각은 1 과 n-1 사이임.

    Schalkwij 계산의 특정 케이스에서, 중간 분해의 일시적인 스테이지가 유용하게 적용되는바, 이는 다음과 같다: 선행 인덱스 k에 대해, 상기 항

    의 분해에서 지수들의 합은 메모리에 일시적으로 저장되는바, 이는 현재 인덱스 k에 대해 항의 분해의 지수들을 더하거나 또는 뺄셈하기 위함이다.

    본 발명의 다른 장점들 및 특징들은 하기의 설명들 및 앞서 설명된 도1A, 1B, 2 및 3 이외의 첨부된 도면을 참조하여 명백해질 것이다.

    도1A 내지 도1B는 벡터 양자화기를 사용하는 주요한 연산들을 도시한 도면이다.

    도2는 예비 단계들(도2에서 "EP-n" 으로 지칭되는 것은 n 번째 예비 단계를 나타냄)을 예시한 도면이다.

    도3은 종래기술의 견지에서 Schalkwijk 공식에 의해 랭크를 계산하는 것을 나타낸 도면이다.

    도4는 본 발명을 이용하여 순열의 랭크를 인코딩/디코딩하는 원리를 예시한 것이다.

    도5는 본 발명의 제 1 실시예를 이용하여 순열의 랭크를 인코딩하는 프로세싱 연산을 예시한 것으로, 여기서는 이러한 계산에서 사용되는 항들의 소수 거듭제곱 분해(prime number power decomposition)의 지수들의 해체된 표현(exploded representation)이 제공된다.

    도6은 본 발명의 제 2 실시예를 이용하여 순열의 랭크를 인코딩하는 프로세싱 연산을 예시한 것으로, 여기서는 상기 분해의 지수들의 간결한 표현(compact representation)이 제공된다.

    도7은 본 발명의 제 1 실시예를 이용하여 순열의 랭크를 디코딩하는 프로세싱 연산을 예시한 것으로, 여기서는 상기 분해의 지수들의 해체된 표현(exploded representation)이 제공된다.

    도8은 본 발명의 제 2 실시예를 이용하여 순열의 랭크를 디코딩하는 프로세 싱 연산을 예시한 것으로, 여기서는 상기 분해의 지수들의 간결한한 표현이 제공된다.

    도9는 본 발명을 구현하는 인코딩/디코딩 디바이스를 도식적으로 나타낸 도면이다.

    특히, 도4 내지 도8을 참조하여 다시 한번 강조하자면, 다음의 것들을 유의해야 한다.

    - 용어 "인코딩" 은, 순열의 랭크 t에 대한 계산을 가리킨다(도1A 및 도1B의 연산 OP2), 그리고

    - 용어 "디코딩"은 상기 랭크 t로부터 순열을 판별하는 것을 나타낸다(도1A 및 도1B의 연산 OP3).

    따라서, 이들 연산들은 벡터 양자화를 갖는 소스 인코딩/디코딩이라 지칭될 수도 있다. 또한, 이들 연산들은 변조시에, 채널 인코딩/디코딩에서 수행될 수 있다.

    본 발명의 원리를 설명하기 위하여, 소수 거듭제곱 인수분해(prime number power factorization)가 아래에서 설명된다.

    소수 거듭제곱에서, 비제로(non-zero) 양의 정수 K의 분해는 다음으로 표현된다:

    여기서, p i 는 i 번째 소수 (즉, p 0 =1, p 1 =2, p 2 =5, p 3 =7, p 4 =11, p 6 =13, p 7 =17 등등)이다.

    정수 K의 분해에서 p i 의 지수는

    로 표현되며, m

    k 는 비제로 지수를 갖는 정수 K의 분해에 포함된 가장 큰 소인수의 인덱스를 나타낸다.

    예를 들어, 숫자 K = 120 (5!) 의 경우는 다음과 같다.

    120 = 1ㆍ2 3 ㆍ3 1 ㆍ5 1 그리고 m k = 3 왜나하면 가장 큰 인수 "5" 의 인덱스는 3 이므로(p 3 = 5). 따라서 다음의 것들이 적용된다:

    .

    실제로, 숫자 "1"은 상기 곱셈의 중성 요소(neutral element)가 되며, p 0 는 상기 분해로부터 제거될 수 있는바, 즉:

    물론, K=0 은, 소인수 거듭제곱에서 분해될 수 없다.

    16 이하인 양의 정수에 대한 소수 거듭제곱들의 곱으로의 분해가 테이블 3a에 주어지며, 이들의 계승들에 대한 분해가 테이블 3b에 주어진다. 이러한 분해는 6개의 소수들(2, 3, 5, 7, 11 및 13)을 포함한다. 컬럼들은 소수 p i 에 인덱스되고 그리고 로우들(rows)은 n에 인덱스되므로, 컬럼 p i 와 로우 n이 서로 만나는 테이블 3a의 각 셀(cell)(테이블 3b의 각 셀)은, 숫자 n(각각의 n!)의 소수 거듭제곱 곱 분해에서 소수 p i 의 지수

    (각각의 ) 이다.

    n > 1 인 임의의 양의 정수에 대해서, n!의 소인수들의 숫자 m n! 은 다음과 같다:

    . 숫자 m

    n! (각각의 숫자 m

    n )은, 테이블 3b의 마지막 컬럼(테이블 3a의 마지막 두번째 컬럼)에 표시되어 있다. 다음의 부등식을 유의해야 한다: m

    n ≤ m

    n!

    테이블 3a에 도시된 바와 같이, 숫자 n에 대한 분해에서 많은 지수들이 0 이다. 테이블 3a의 마지막 컬럼에는, n에 대한 분해에서 0 이 아닌 지수들의 갯수인 m' n 가 표시되어 있다. n=0 에 대해 분해가 존재하지 않음(따라서 지수가 존재하지 않음)은, 테이블 3a의 n=0 인 로우에서 심볼 "-"에 의해 표시된다.

    테이블 3a: 양의 정수 n (n<17)에 대한 소수 거듭제곱 분해

    테이블 3b: n! (n<17)에 대한 소수 거듭제곱 분해

    이하에서는, 순열 코드의 부분 랭크에 대한 계산에 이러한 분해를 적용하는 적용예에 대한 설명이 어어지는바, 처음에는 Schalkwijk 공식의 경우에 대해 설명하고, 이후에는 일반적인 케이스에 대해 설명한다.

    여기서,

    라고 표현되는 부분 랭크(partial rank)" 는, 전술한 바와 같이 식 (7)에 의해 주어진다는 점을 유의해야 하며, 식 (7)은 앞다음과 같다.

    (7)

    따라서, 3개의 항들이 소수 거듭제곱들로 분해될 수 있는바, 이들 3개의 항들은 다음과 같다.

    (n-1-k)! ,

    및 이다.

    (n-1-k)!, P k 및 S k 의 분해들의 지수들로부터

    의 분해들의 지수들이, 간단한 덧셈 및 뺄셈으로 계산된다.

    사실,

    의 분해에서 소인수 p

    i 의 지수 는, (n-1-k)!, P

    k 및 S

    k 3개 항들의 분해에서 p

    i 의 3개 지수들로부터 계산된다. 상기 지수 는, 처음 2개의 항들( 의 분자)의 p

    i 지수들의 합으로부터 마지막 항( 의 분모)의 p

    i 지수가 감산된 것과 동일하다. 이러한 관측(observation)을 공식화하면 다음과 같이 표현된다.

    (10)

    도4는 인코딩과 디코딩 모두에 대해 본 발명의 프로세싱 연산에 포함될 수 있는 일반 단계("Gn" 이라는 표현은 n 번째 일반 단계를 나타냄)를 나타낸 것이다.

    따라서, 현재 인덱스 k 에서부터(단계 G-1) 그리고 상세히 후술될 몇몇 중간 단계들이 예시된 도4를 참조하면, 미리 기록된 테이블들(도4에서 일례로서 예시된 단계 G-2에서 D l 및 D l! 로 표현)을 참조하기 위해 준비가 이루어진다는 점이 상기되어야 하는바, 이는 전술한 관계식 (10)에 따라 글로벌 지수

    를 계산(단계 G-3)하기 위함이며, 상기 지수는, 소인수 거듭제곱에서 중간 랭크 의 분해에 특정한다. 이후, 중간 랭크 의 값은 이것(단계 G-4)으로부터 추론될 수 있는바, 이는 소인수들에 특정한 인덱스 i 에 대해 루프를 수행함으로써 가능하다. 이후, 상기 중간 랭크의 계산은 순열의 전체 랭크 t 의 업데이트(update)을 계속할 수 있다(단계 G-5):

    - 인덱스 k 를 감소시켜 랭크를 인코딩하기 위한 t = t +

    유형에 대해(단계 G-6),

    - 또는 인덱스 k 를 증가시켜 랭크를 디코딩하기 위한 t = t -

    유형에 대해(단계 G-6), 이는 후술될 것이다.

    마지막으로, 단계 G-7의 인코딩에서 또는 디코딩(도4의 파선들)에서 순열의 랭크 t가 획득된다. 벡터 D의 구성요소들 d k 는, 단계 G-8에서 상기 식(8)의 부등식들로부터 추론되며 그리고 전술한 관계식 y k = a d 에 의해서 벡터 Y의 구성요소들로부터 추론된다.

    일반적인 경우, 그리고 Schalkwijk 계산에 무관하게, 순열의 부분 랭크 t'(t' > 0)가, N t' 항들 v j (1≤j≤Nt')의 분자 형태이고 그리고 D t' 항들 ρ j (1≤j≤Dt')의 분모 형태라면, 즉:

    ,

    부분 랭크 t'의 분해의 지수들

    은, 의 분해들 및 의 분해들인 중간 분해들로부터 판별되는바, 이는 다음과 같이 표현된다.

    또한, 이하에서는 부분 랭크 t'의 정수들의 몫들의 곱의 공식화를 위해서, 소인수에서의 분해(decomposition in prime number factor)가 사용될 것이다.

    또한, 일반적인 규칙으로서,

    라면, 이다.

    Schalkwijk 계산의 특정 케이스로 되돌아가서, 부분랭크의 분해로부터 부분 랭크

    를 계산하기 위해서, 일단 상기 분해가 판별되면, 다음과 같이 수행될 수 있다.

    상기 관계식

    의 개념을 유지하면, 부분 랭크 는 대응 거듭제곱들을 단순히 곱함으로써 계산된다:

    (n-1-k)! 항과 P k 는 순전히 양의 정수이나, S k 항은 제로(0)가 될 수 있음을 유의해야 하며, 따라서 분해될 수 없다. 이러한 경우, 부분 랭크

    는 0 이다. S

    k ≠ 0 인 경우에만 부분 랭크 를 계산하기 위해서 S

    k 항의 값에 대한 테스트 (S

    k = 0 ?)가 제공되는바, 이는 전술한 바와같다(도3의 단계 CA-11).

    좀더 일반적으로는,

    라면

    이며,

    그리고,

    라면, 이다.

    부분 랭크를 구성하는 항들에 대한 소인수 분해(prime factor factorization)는, 나눗셈들을 소인수 거듭제곱의 곱셈들로 대체함으로써, 이들 나눗셈들을 제거할 수 있게 하는바, 특히, 이들 소수들에 관계된 지수들의 간단한 덧셈 및 뺄셈으로 대체한다.

    따라서, 본 발명에 따르면, 메모리에 저장된, 정수들에 대한 제한된 수의 소인수 분해들(이하에서는, "기본 분해들(basic decompositions)" 이라고 지칭된다)로부터, 다음의 단계들이 제공된다.

    - 순열의 랭크에서 나타나는 항들(예컨대, (n-1-k)!,

    및 )에 대한 소인수 분해들(이하에서는, "중간 분해들" 이라고 지칭됨)의 판별, 도4의 단계 G-2를 참조,

    - 이러한 중간 분해들로부터, 순열의 부분 랭크

    의 소인수 분해를 판별, 특히, 상기 부분 랭크의 분해에 포함되어 있는 지수들을 계산함으로써(예를 들어, 유형 의 관계를 이용하여), 도4의 단계 G-3을 참조, 그리고,

    - 그것의 분해로부터(예를 들어, 유형

    의 관계를 이용하여) 부분 랭크 를 계산, 도4의 단계 G-4를 참조.

    물론, 저장되어질 기본 분해들은, 유용한 선택의 대상(subject)인 것이 바람직하다. 바람직하지만 이에 제한되는 것은 아닌 실시예에서, 저장될 기본 분해들은, 관심있는 순열 코드들의 최대 차원(상기 최대 차원은 n 으로 표시됨)에 따라 선택될 것이다. 따라서, 상기 기본 분해들은 다음인 것이 바람직하다:

    - 정수 l(l!로 표시됨)의 계승들의 분해들, 상기 정수 l은 0≤l≤n 임,

    - 그리고 정수 l의 분해들 그 자체, 이번에는 1≤l≤n 임,

    여기서, n 은 관심있는 순열 코드의 최대 차원이라는 점을 상기해야 한다.

    그 다음에, 다음의 것들을 제공하는 숫자 m에 의해 기본 분해를 식별하는 것이 가능해진다:

    - 고려되는 소인수들의 숫자 m,

    - 이들 m 소인수들 자체,

    - 그리고 이들의 각각의 지수들.

    분해들의 소위 "해체된(exploded)" 표현을 배경으로 하여, 이러한 구현예에 대한 일례들이 테이블 4a 내지 4d를 참조하여 후술될 것이다. 후술될 소위 "간결한(compact)" 표현은 하나의 워드(word)를 저장하는 것임을 유의해야 하는바, 이것의 비트들은 분해에 포함된 모든 지수들을 제공한다.

    기본 분해들 및 이들 기본 분해들을 표현하고 저장하는 절차들의 상이한 세트들을 정의하는 것도 가능하다.

    또한, 항들(중간 분해들이 이를 위해 판별되는)을 선택하는 것과 이들 중간 분해들을 적절히 판별하는 것은, 후술될 유용한 실시예들의 주제이다. 부분 랭크의 분해와 그 분해로부터 부분 랭크를 계산하는 것 역시, 후술될 유용한 실시예들의 주제이다.

    이제, 저장되어질 기본 분해들을 선택하는 것에 대한 설명이 이어진다.

    일반적으로, 그리고 차원 n 의 순열 코드를 계산하기 위한 기법과는 무관하게, 순열의 랭크에 대한 계산은, 정수들 l (0≤l≤n) 및 이들의 팩토리얼들 l! (0≤l≤n)을 이용한다. 바람직한 실시예에서, 상기 기본 분해들은, 팩토리얼들 l! (0≤l≤n) 과 l (1≤l≤n)의 분해들이며, 여기서 n은 관심있는 순열 코드들의 최대 차원이다. 따라서, 상기 바람직한 실시예에서는 (2n+1)개의 기본 분해들이 제공된 다.

    그럼에도 불구하고, 다른 구현예들 역시 가능하다.

    예를 들어, (n+1)개의 기본 분해들, 특히 l (1≤l≤n)과 0!의 분해들만이 제공될 수도 있다. 따라서, 부분 랭크를 계산함에 있어 l! (l>0)의 분해가 필요하다면, 이는 중간 랭크를 판별하는 단계에서 계산되는바,

    을 이용하여 j (1≤j≤l)의 l개의 기본 분해들로부터 계산된다.

    이와 반대로, l! (0≤l≤n)의 (n+1)개의 분해들만이 필요할 수도 있다. 만일, 부분 랭크를 계산하기 위해서 l (l>0)의 분해가 필요하다면, 이는 중간 분해들을 판별하는 단계에서 계산되는바, l! 및 (l-1)!의 베이스의 2개의 기본 분해들로부터 그리고 다음의 관계식으로부터 계산된다:

    따라서, 기본 분해들의 세트를 선택한다는 것은, 이들 기본 분해들의 표현을 저장하기 위해 필요한 메모리를 최소화하는 것과 중간 분해들을 판별하는 단계의 복잡도를 최소화하는 것 사이에서 유용한 트레이드-오프를 야기할 수도 있다는 점을 유의해야 한다.

    이하에서는 본 발명에 따라, 분해들의 표현에 대한 설명이 후속된다.

    전술한 바와 같이, 고려되는 소인수들의 숫자, 이들 m 소인수들 및 이들의 각각의 지수들을 제공하는 숫자 m에 의해서, 분해(부분 랭크건, 중간 또는 기본 분해들이건간에)가 정의된다. 분해들을 표현하기 위한 그리고 기본 분해들에 대한 데이터를 저장하기 위한 상이한 솔루션들이 아래에서 제안된다.

    지수들의 해체된 표현(Exploded representation of the exponents)

    *팩토리얼들 l! (0≤l≤n)의 표현

    l! 값의 분해에 포함된 소인수들의 숫자 m l! 는 숫자 l 과 함께 증가한다. l! (0≤l≤n)의 분해를 표현하기 위한 첫번째 솔루션은, l (0≤l≤n)의 각 값에 대하여, 숫자 m l! 및 거듭제곱 p i (0≤i≤m l! )의 m l! 지수들을 저장하는 것이다. l!의 m l! 지수들은 0 이 아님을 유의해야 한다.

    좀더 유용한 변형예에서, 기본 분해들의 세트는, 소인수들의 동일한 숫자 m n! 을 공유하며, m n! 지수들은 각 기본 분해에 대해 저장되는바, m l! 보다 큰 인덱스의 l!의 기본 분해들의 지수들은 0 이다. 이러한 솔루션은, 지수들의 테이블을 사용하는 것을 가능케 하는바, 이러한 테이블에 규칙적인(regular) 어드레싱을 제공함으로써 가능하다. 하지만, 이러한 구현예는 상당히 큰 메모리 사이즈를 필요로 한다. 이러한 테이블은, m n! ×(n+1) 값들을 포함하고 있으며 그리고 지수

    는, 상기 테이블의 (mn!, l+(i-1)) 어드레스에 저장된다. 이 테이블에서 (x,y) 표시는, x 로우 및 y 컬럼 상의 셀을 가리킨다. 물론, 다른 약속들이 고려될 수도 있다. 따라서, m 개의 컬럼들과 N 라인들을 가지며 따라서 m×N 개의 셀들(요소들)을 갖는 2 차원 테이블을 고려하는 대신에, m×N 개의 셀들(요소들)을 갖는 1차원 테이블을 고려하는 것도 가능한바. 상기 2차원 테이블의 어드레스(x, y)의 셀은, 1차원 테이블의 m×x+y 어드레스에 위치될 수 있다. 2차원 테이블의 어드레스 (l, (i-1))에 저장된 지수 는, 이제 1차원 테이블의 (mn!×l +(i-1))! 어드레스에 저장할 수 있다. 예를 들어, 0 에서 8까지 숫자들의 팩토리얼들의 분해들의 지수들은, 36 셀로 이루어진 2차원 테이블에 저장될 수 있는바, 상기 2차원 테이블은 테이블 3b의 4개의 컬럼들(컬럼 p

    i = 2, 3, 5, 7)) 및 9개의 로우들(로우 n=0, 1,...8)로 이루어진다. 이들 동일한 지수들은, 36 셀을 갖는 1차원 테이블

    D

    i! 에 저장될 수 있는바, 이에 대해서는 아래에 주어진 바와 같다(부록

    A-11 ). 제 1 테이블의 어드레스 (x, y)에서의 셀은, 어드레스

    D

    i! : 4×x+y 에서의 셀과 동일하다.

    또한, l!의 기본 분해들을 이용하여 중간 분해들의 계산을 감소시킬 수 있게 하기 위하여, m l! 의 (n+1)개의 값들이 저장될 수도 있다.

    * 정수들 l (1≤l≤n)의 표현

    기본 분해 l (1≤l≤n)을 표현하기 위해서, 여러가지 솔루션들이 제공된다. 첫번째 솔루션은, l의 각각의 값에 대해서, 숫자 m l 및 l의 거듭제곱 p i (1≤i≤m l )의 m l 지수들을 저장하는 것이다. 변형예에서는, l! (m l! 또는 m n! ) 지수들 만큼 많은 지수들을 저장하는 것이 바람직하다. 이후, l 과 l!의 기본 분해들은 동일한 숫자 m 을 공유한다.

    또 다른 변형예에서는, l의 분해의 비제로 지수들의 숫자 m' l 가 작다는 사실이 이용될 수도 있다. 예를 들어, 테이블 3a에서 상기 숫자 m' l 은 기껏해야 2 임이 명백하다(l≤16). 따라서, 상기 숫자 및 해당 p i 값들 또는 인덱스들 i 만을 저장하는 것도 가능하다.

    하지만, 비제로 거듭제곱의 이들 소인수들의 인덱스들 i도 저장할 준비를 할 필요가 있는데, 왜나하면, 이들은 테이블에서 해당 지수의 어드레스에 의해서 더 이상 음으로 인식되지(implicitly recognized) 않기 때문이다.

    * 기본 분해 이외의 분해에 대한 표현

    중간 분해에 대한 표현은, 기본 분해들에 대한 표현에 의존하는바, 상기 중간 분해에 대한 표현은 기본 분해들에 대한 표현으로부터 판별된다. 이와 유사하게, 부분 랭크의 분해에 대한 표현은, 중간 분해들에 대한 표현에 의존하는바, 부분 랭크의 분해에 대한 표현은 중간 분해들에 대한 표현으로부터 판별된다.

    * 기본 분해들의 저장

    일반적으로, 4개의 가능한 저장 솔루션들이, 차원 8(n=8)의 순열 코드에 대한 이하의 테이블 4a 내지 4d에 의해 일례로서 설명될 수 있는바, 여기에서는 4개(m8! = 4)의 소수들(2, 3, 5 및 7)이 고려된다. 이들 일례들은, 3GPP AMR-WB+ 인코더 ([3GPPTS26.273] 및 [3GPPTS26.304] 표준)에 적용될 수 있다. 상기 인코더는 대수(algebraic) 벡터 양자화를 이용하며, 이것의 딕셔너리는 8 차원 Gosset array RE 8 의 순열 코드들의 합집합(union) 이다.

    처음 세개의 솔루션들(테이블 4a-4c)은 동일한 방식으로 l!의 기본 분해들을 표현 및 저장한다. 사실, l!의 거듭제곱 p i (1≤i≤m l! )의 m l! 지수들의 저장 및 m l! 의 저장이 제공된다. 이들은, l의 기본 분해들의 표현 및 저장에 있어서 상이하다. 테이블 4a는, l의 거듭제곱 p i (1≤i≤m l! )의 m l 지수들의 저장과 m l 의 저장을 목적으로 하는 제 1 솔루션을 나타낸다. 테이블 4b는, l의 거듭제곱 p i (1≤i≤m l! )의 m l! 지수들의 저장을 목적으로 하는 제 2 솔루션을 나타낸다.

    테이블 4a: 8 차원(l 은 0 부터 8까지)의 순열 코드에 대해, l 과 l!의 소수 거듭제곱 분해를 저장하기 위한 제 1 솔루션

    테이블 4b: 8 차원(l 은 0 부터 8까지)의 순열 코드에 대해, l 과 l!의 소수 거듭제곱 분해를 저장하기 위한 제 2 솔루션.

    아래의 테이블 4c는 l의 거듭제곱 p i 의 비제로 지수들의 숫자 m' l 의 저장과 대응 인덱스들 i 및 이들의 지수들의 저장을 목적으로 하는 제 3 솔루션을 나타낸다.

    도시된 테이블에서 표현된 것은 소인수들 p i 인바, 이는 설명의 명료함을 위한 것이다.

    테이블 4c: 8 차원(l 은 0 부터 8까지)의 순열 코드에 대해, l 과 l!의 소수 거듭제곱 분해를 저장하기 위한 제 3 솔루션

    아래의 테이블 4d에 예시된 제 4 솔루션에서, 기본 분해들의 세트는 숫자 m n! 에 의해 표현되며, 각각의 기본 분해(l 또는 l!)에 대해, m n! 지수들이 저장된다. 테이블 4d는, 앞서 주어진 테이블 3a 및 3b의 4개 컬럼들(p i = 2, 3, 5 및 7)과 9개 로우들(n은 0 에서 8까지)로부터 추출될 수 있다.

    테이블 4d: 8 차원(l 은 0 부터 8까지)의 순열 코드에 대해, l 과 l!의 소수 거듭제곱 분해를 저장하기 위한 제 4 솔루션

    가변 차원 및 해상도(resolution)를 갖는 통계적 벡터 양자화를 이용하는 TDCA 인코더(최대 15차원)에서는, 6개(m 15! = 6)의 소수들이 고려되는바, 이는 2, 3, 5, 7, 11 및 13 이다. 테이블 3a 및 3b의 6개의 컬럼들(pi = 2, 3, 5, 7, 11 및 13) 및 16개의 로우들(n은 0 부터 15까지)은, 상기 제 4 솔루션에 대한 기본 표현들의 세트의 저장을 예시할 수 있을 것이다.

    지수들의 간결한 표현

    이하에서는, 저장을 최소화할 수 있으며, 제한된 갯수의 워드들 상에서 기본 분해의 지수들을 간결하게 표현할 수 있는 또 다른 유용한 솔루션이 후술된다. 기본 분해들의 표현에 대한 이러한 변형예에서, 중간 분해들 및 부분 랭크들의 그것들 역시 간결하게 표현된다. 바람직하게도, 이러한 솔루션은 이들 분해들을 판별하는 것의 복잡도 역시도 최소화시킬 수 있다.

    * 분해들의 간결한 표현

    각각의 소인수 p i 에 대해, 부분 랭크들의 분자에서 그 지수의 최대값에 대한 상한(upper limit) β i 을 판별하기 위한 검색이 수행된다. 이러한 제한(limit)은, p i 의 지수의 가능한 값들의 최대수, 특히 β i + 1 를 제공한다. 상기 값 (β i + 1)을 이진법으로 표현하기 위해서, 비트들의 정수를 나타내는

    을 이용함으로써, 우리는 다음의 것들을 얻는다:

    여기서,

    는 x 보다 바로 크거나(immediately greater) 또는 동등한 정수를 나타낸다 .

    부분 랭크 t'에 포함된 K 항의 소인수 거듭제곱 분해의 지수들은, B n 비트

    의 워드 e

    K 에 의해서 간결하게 표현될 수 있는바, 상기 워드 e

    K 는 다음과 같다.

    여기서 "<<B" 표시는, B 비트들의 좌측 쉬프트(left shift)를 나타낸다.

    만일, 상기 숫자 n 이 매우 크다면, 정수들을 표현하는데에 사용되는 B 0 비트의 숫자(16, 32 또는 40 비트) 보다 B n 이 더 클수도 있다는 점을 유의해야 한다. 이러한 경우, t'에 포함된 정수 K의 소인수 분해의 지수들은, M 전체 워드들(whole words) e K (m)의 형태로 표현된다(0≤m≤M (물론, M>1)).

    바람직하게도, 상기 M 워드들은 다음과 같이 형성될 수 있다:

    ● e k (0)은 i 0 제 1 지수들(p 1 부터

    까지의 지수)을 포함한다:

    여기서

    ● e K (1)은

    부터 까지의 지수들을 포함한다:

    여기서

    ● 마지막 워드가

    의 지수를 포함하여 구성된다면, 후자의 관계는 임의의 m에 대해서 일반화될 수 있다.

    물론, 다른 변형예들도 제공될 수 있다. 예를 들어, 하나의 변형예는, p 1 의 지수를 별도로 저장하고 p 2 의 지수로부터 상기 프로세싱 연산을 적용하는 것이다.

    * 상한(upper limit)의 판별

    상기 제한(limit) β i 은, 여러가지 방법으로 판별될 수 있다. 순열 코드에 대한 정보(알파벳의 사이즈 q, 가중치 w i , 0≤i<q)를 이용함으로써, 부분 랭크의 분자의 각 지수의 최대값은 명확히 판별될 수 있다. 만일, 다수의 순열 코드들(아마도 상이한 차원들의)이 사용된다면, 최대값들 중 가장 큰 것이 각각의 지수에 대해서 선택되는 것이 바람직하다.

    본 발명에서는, Schalkwijk 계산을 배경으로 하여 상한을 판별하기 위한 일반적인 프로세싱 연산이 유용하게 제안된다. 상기 프로세싱 연산은, 최대 차원을 제외하고는 사용된 순열 코드들에 대한 그 어떤 선험적인(a priori) 정보도 이용하지 않는다. 본 발명은 다음의 관계만을 이용할 뿐이다.

    이러한 매우 일반적인 프로세싱은, 많은 종류의 순열 코드들이 이용되는 경우에 특히 유용하다.

    테이블 5a는 8 차원과 15 차원에 대해서

    의 분자들에서 지수들의 최대값들의 상한들을 제시한다. 테이블 5b는 8 차원과 15 차원에 대해서 이들 지수들을 표현하기 위해서 비트들 의 숫자를 제공하며, 이들의 합계 B

    n 을 마지막 컬럼에서 제공한다. 8 차원에 대해서, 소인수 2의 지수는 3 비트 상에서 표현되고 있으며, 다른 소인수들(3, 5 및 7)의 지수들은 2 비트 상에서 표현되고 있다. 15 차원의 경우, 소인수 2의 지수는 4 비트 상에서 표현되고, 소인수 3의 지수는 3 비트 상에서 표현되며, 다른 소인수들(5, 7, 11 및 13)의 지수들은 2 비트 상에서 표현되고 있다.

    테이블 5a: 8 차원과 15 차원의 순열 코드들에 대한 분자들의 지수들의 상한들

    테이블 5b: 8 차원과 15 차원의 순열 코드들에 대해 지수들을 표현하기 위한 비트들의 숫자

    테이블 6a(또는, 테이블 6b)는 n 차원(테이블 6a는 8차원, 테이블 6b는 15차원)에 대해서, l 및 l!의 지수들에 대한 간결한 표현을 제공한다.

    테이블 6a: 8차원의 순열 코드들에 대한 지수들의 간결한 표현

    테이블 6b: 15차원의 순열 코드들에 대한 지수들의 간결한 표현

    순수하게 예시적인 일례로서, 테이블 6b를 이용하여 정수 l = 12의 분해를 판별해보자.

    바람직하게도, 테이블 6b에서는, 코드들의 최대 차원이 n=15 이므로, "2"의 지수는 4 비트 상에서 표현되고, "3"의 지수는 3 비트 상에서 표현되고, 그리고 다른 소인수들 5, 7, 11, 13은 2 비트 상에서 표현된다. 상기 테이블에서, l=12 인 컬럼에서, 그것의 간결한 지수 e 12 = 18 이 판독될 수 있다.

    아래 테이블의 판독에 의존하여, B 15 = 15 비트 상에서의 18(= 16+2)의 이진 표현은:

    000 0000 0001 0010 이다. 즉, 동일한 소수에 관계된 비트들을 함께 그룹핑하면 00 00 00 00 001 0010 이다.

    4개의 하위 오더 비트들(가중치 i = 0 부터 3)은, 소인수 2의 지수이다. 즉, 0010 = 2, 이는 소수 2에 지정될 지수는 바로 2 라는 점을 의미한다.

    다음 3개의 비트들(가중치 i = 4 부터 6)은, 소인수 3의 지수이다. 즉, 001 = 1, 이는 소수 3에 지정될 지수는 바로 1 이라는 점을 의미한다.

    다음 2개의 비트들(가중치 i = 7 부터 8)은, 소인수 5의 지수이다. 즉, 00 = 0.

    다음 2개의 비트들(가중치 i = 9 부터 10)은, 소인수 7의 지수이다. 즉, 00 = 0.

    다음 2개의 비트들(가중치 i = 11 부터 12)은, 소인수 11의 지수이다. 즉, 00 = 0.

    다음 2개의 비트들(가중치 i = 13 부터 14)은, 소인수 13의 지수이다. 즉, 00 = 0.

    추출 과정은, 하위 오더 비트들에 포함된 소인수의 지수를 복원하기 위해서 상위 오더 비트들을 마스킹하는 것과, 이후 다음 소인수의 지수로 스위칭하기 위해서 복원된 비트 숫자의 간결한 지수(compact exponent)를 쉬프팅하는 것을 수반한다.

    따라서, 15 차원에서는, 추출될 6개의 지수들이 존재하는바, 이는 2의 지수에서 시작한다.

    2의 지수에 대한 이진 표현은, 18의 4개 하위 오더 비트들 즉, 0010 에 대응하며, 이는 2에 대응한다. 이들을 복원하기 위해서, 18의 상위 오더 비트들은 15 로 마스크되는바(18 & 15로 표현됨), 이는 다음과 대등하다:

    2 4 - 1 = 1111.

    얻어진 결과는 e 12 = 18 & (2<<4 - 1) = 2 이며, 이는 소수 2에 할당될 지수는 바로 2 라는 것을 의미한다.

    이후, 18이 오른쪽으로 4비트 쉬프트되면, 000 0000 0001 = 1 이 된다.

    3의 지수에 대한 이진 표현은, 1의 3개 하위 오더 비트들 즉, 001 (=1)에 해당한다. 이들을 복원하기 위해서, 1의 상위 오더 비트들은 7에 의해 마스크된다(1 & 7로 표현되며, 2 3 - 1 = 111 임).

    얻어진 결과는 e 1 12 = 1 & (2<<3 - 1) = 1 이며, 이는 소수 3에 할당될 지수는 바로 1 이라는 것을 의미한다.

    이후, 1이 오른쪽으로 2비트 쉬프트되면, 다음과 같다 : 다른 모든 상위 비트들에 대해서 0000 0000 = 0.

    따라서, 다음과 같은 점이 상기되어야 하는바, l=12 의 거듭제곱들은:

    - 소수 2에 대해서는 2, 그리고

    - 소수 3에 대해서는 1,

    즉, l=12 = 2 2 ×3 1

    * 분모에 대한 상한(upper limit for the denominator)

    여기에서는, 각각의 소인수에 대해서, 부분 랭크 t'의 분모에서 그것의 지수는 t'의 분자에서 그것의 지수보다 작거나 같다라고 가정된다.

    이므로 t'가 엄밀히 양(positive)이 라면 따라서, 인 경우가 바로 그런 경우이다.

    실제로는(In practice), Schalkwijk 공식을 이용하고, 그리고 q > 1 이라면,

    값이, 분모 Pk 의 지수의 최대값 β'

    i 의 상한(upper limit)이 된다.

    따라서, 부등식

    을 체크하는 것만으로도 충분한데, 이는 앞서 설명된 β

    i 값을 판별하는 프로세싱 연산에 의해서 이미 완료된다. 다른 경우들에서는, β'

    i 를 명확하게 검색하는 것도 가능하며, β

    i 과 β'

    i 의 최대값을 이용하여 를 계산하는 것도 가능하다.

    q = 1 인 경우,

    알고있는 랭크(t=0)의 하나의 코드 워드가 순열 코드내에 포함되어 있다라는점을 유의해야 하며, 따라서, 랭크 계산들을 수행하는 것과 대응 역 연산을 수행하는 것은 선험적으로 불필요하다. 하지만, 이러한 특정 케이스를 별도로 다루고자하지 않는다면, β i

    의 최대값에 의해 를 계산하는 준비가 여전히 마련될 수 있다. 아래의 테이블 7은 n=16 인 경우에 이러한 케이스를 예시한 것이다.

    테이블 7: 16 차원의 순열 코드들에 대해 분자 β i

    (1≤i≤6)의 상한에 대한 계산

    이제, 기본 분해들을 저장하는데에 필요한 메모리의 용량에 대해 간략히 설명한다.

    기본 분해들을 표현하기 위해 선택된 솔루션에 무관하게, 기본 분해들은 테이블들 내에 저장되며 그리고 이후에 랭크 인코딩 및 디코딩 연산에서 이들 테이블들에 대한 어드레싱이 이용될 수 있다. 비록, 0 의 분해는 불가능하지만(그리고 또한, 사용되지 않음), 0 의 분해에 대한 "더미(dummy)" 지수들을 저장하는 것이 바람직한바, 이는 어드레스 계산을 간단히 하기 위한 것이다. 아래의 테이블 8은, 전술한 바와같은 2개의 케이스들(0의 더미 분해를 저장하는 경우 또는 저장하지 않는 경우)에 관한 5개의 솔루션들에 대해서, 기본 분해들에 관련된 데이터를 저장하기 위해 필요한 메모리 사이즈를 요약한 것이다.

    테이블 8 : 기본 분해들을 저장하기 위해 필요한 메모리

    5번째 솔루션에서, 비트들의 수

    의 저장(+ m

    n! )이 고려된다. 하지만, 실제로는, 메모리로부터 판독하는 대신에, 후자는 "하드웨어에 내장(hardwired)" 되는바(즉, 이들의 값은 변수로 선언됨이 없이 계산 프로그램내에 세팅됨), 이는 아래의 실시예들에서 보여지는 바와 같다. 따라서, 실제로는 이들을 저장하는 것은 소용이 없어 보인다.

    테이블 9는, n max = 8 및 15(0 의 더미 저장이 있음)에 대해 이들 5개의 솔루션들의 분해의 지수들에 관한 데이터를 저장하는데에 필요한 메모리를 예시한다.

    테이블 9: 8차원과 15차원의 순열 코드들에 대한 기본 분해들을 저장하기 위해 요구되는 메모리

    이제, 소인수 거듭제곱들(prime factor powers)의 저장에 대한 설명이 후속된다. 기본 분해들 이외에도, 본 발명에서는 분해들로부터 부분 랭크를 계산하기 위해서 소인수 거듭제곱들이 이용된다. 이들 소인수들의 테이블로부터 소인수들의 거듭제곱들을 실시간으로("온라인 : on line") 계산하는 것이 가능하다. 바람직하게는, 2 이외의 소수들의 거듭제곱들은 미리 계산되고 그리고 저장되며, 오직 2의 거듭제곱들만이 실시간으로 계산된다. 아래의 테이블 10a는 8차원의 순열 코드들에서 필요한 3, 5, 및 7의 거듭제곱들(AMR-WB+ 인코더에서 사용되는 것들과 유사한 것들)을 제공한다. 테이블 10b는 최대 15차원의 순열 코드들에서 필요한 3, 5, 7, 11 및 13의 거듭제곱들(TDAC 인코더에서 사용되는 것들과 유사한 것들)을 제공한다.

    테이블 10a: 8차원 순열 코드들에대한 소인수 거듭제곱들

    테이블 10b: 15차원 순열 코드들에대한 소인수 거듭제곱들. 변수 Npfp는, 저장될 소인수 거듭제곱들의 수를 나타낸다.

    여기서, 각각의 소인수에 대해서 필요한 거듭제곱들의 수 만을 저장하는 것도 또한 가능할 것이다. 변형예로서, 규칙적으로(regularly) 어드레스가능한 거듭제곱들의 단일 테이블만을 갖는 것이 바람직하다면, 각각의 소인수에 대해서, 필요로 하는 p2 의 거듭제곱들의 숫자만큼 많은 값(p2 = 3)을 저장할 수도 있다. 사용되지 않는 거듭제곱들에 대해서는, 가령 1s 또는 0s 와 같은 더미 값들의 저장을 이용하는 것도 물론 가능하다.

    이하에서는 본 발명에 따른, 인코딩 을 수행하기 위해 순열의 랭크를 계산하는 것에 대한 설명이 후속된다. 선택된 기본 분해들의 세트 및 이들의 표현에 기초하여, 여러개의 변형예들이 있다. 간결함을 위해서, 다음에 기재된 가능한 구현예들에 대한 설명은, l! 및 l 의 팩토리얼들의 분해들을 갖는 기본 분해들의 세트에 대한 바람직한 실시예의 경우로 한정된다.

    하기에서는, 각 기본 분해에 대해 m n! 지수들을 갖는 지수들의 해체된 표현에 관한 솔루션이 먼저 설명되는바, 이는 가장 일반적인 케이스이다. 이후, 지수들의 해체된 표현에 관한 변형예들이 설명된다. 마지막으로, 기본 분해들의 지수들의 간결한 표현에 관한 솔루션이 설명되는바, 몇몇개의 변형들과 함께 설명된다. 따라서, 순열의 랭크를 인코딩하기 위한 프로세싱 연산에 본 발명이 적절히 적용가능하다는 점이 명백해질 것이다.

    아래에서는, 계산(enumeration) 프로세싱의 일례로서, Schalkwijk 알고리즘이 검토된다.

    분해의 지수들의 해체된 표현(Exploded representation of the exponents of the decomposition)

    이용되는 순열 코드들의 최대 차원이 n 이라 가정하고, 그리고

    n! 분량의 분해(decomposition of the quantity n!)에 포함된 소인수들의 갯수가 m n! 라고 가정하자. 인코딩의 제 1 실시예가 아래에서 설명되는바, 상기 인코딩은, 분해의 지수들의 해체된 표현(exploded representation of the exponents of the decomposition)을 사용한다.

    제 1 실시예에 따른 인코딩

    여기서, l 과 l! 의 기본 분해들의 지수들은, 전술한 테이블 4d의 "4번째" 솔루션에 따라 저장되는바, m n! × (n+1) 셀들을 가지며 D l 과 D l! 으로 각각 표시되 는 2개의 1-차원적인(two sngle-dimensional) 테이블들에 l=0 에 대한 더미 저장을 구비한다. 전술한 바와 같이, m n! 컬럼들과 (n+1) 로우들을 갖는 2-차원적인 테이블들을 고려하는 것도 가능하다. 규칙적으로 저장되는(m n! 값들 각각에) l(각각의 l!)의 지수들, 기본 분해들의 지수들을 판독하기 위한 연산들은, 테이블 D l (각각의 D l! )내에서 어드레스 계산을 필요로 한다. l!(각각의 l)의 분해의 지수들을 판독하기 위해서, 테이블 Dl!(각각의 Dl)의 어드레스(l × m n! )를 지적할 필요가 있으며, 그러므로 지수 e 1 l! (각각의 e 1 l ), 다음 어드레스 (l × m n! +1)에 있는 지수 e 2 l! (각각의 e 2 l ), 그리고 좀더 일반적으로는 어드레스 (l × m n! + i - 1)에 있는 지수 e i l! (각각의 e i l )의 어드레스를 목표로 할 필요가 있다. 전술한 바와 같이, 2-차원적인 테이블들에서, 지수 e i l! (또는 e i l )는, 어드레스[(l:(i-1)) (컬럼 (i-1) 그리고 로우 l] 에 있다.

    l = 0에 대해 더미 저장이 준비되지 않는다면, l(l > 0)의 n 개의 기본 분해들의 D l 테이블 내에서의 어드레스 계산은, (l-1)× m n! 이 된다는 점을 유의해야 한다.

    초기화(Initialization)

    ● P k (아래의 단계 C-3을 참조하여 볼 수 있는 것처럼, 각각의 위치에서 바람직하게 업데이트되는 m n! 셀들을 갖는 테이블 P에 저장되는)의 중간 분해의 m n! 지수들은, 0으로 초기화된다. 따라서, 명령들은 다음과 같다:

    ○ P[i] =0, 1≤i≤m n! )

    ● 랭크 t 및 q 가중치들

    (q 셀들을 갖는 테이블 W에 저장되며, 각각의 위치에서 업데이트될 예정인(아래의 단계 C-2))은, 또한 0으로 초기화된다. 명령들은 다음과 같다:

    ○ t = 0

    ○ w[i] = 0, 0 ≤ i < q

    ○ k = n - 1

    인덱스 k 에 대한 반복(iteration)

    도5를 참조하여, n개의 위치들 상에서의 반복(iteration)이 후속된다(변수 k 에 대한 루프). 도5의 단계 Cn 에서 문자 "C"는 "코딩(coding)"을 나타내는 것이다.

    단계 C-1에서, 변수 d k 가 판독된다. 단계 C-2는 테이블 w의 셀 d k 의 업데이트를 포함하여 이루어진다: w[d k ] = w[d k ] + 1

    단계 C-3은 P k (테이블 P)의 분해의 지수들의 업데이트인바, 특히 다음과 같다.

    - 어드레스 m n! × w[d k ]로부터 테이블 D l 내의 기본 분해 w[d k ]의 m n! 지수들

    의 판독(단계 C-31), 그리고

    - 업데이트: P[i] = P[i] +

    , 1≤i≤m

    n! (단계 C-32)

    따라서, 단계 C-31을 구현하기 위해서, 테이블 D l 내의 기본 분해 w[d k ]의 첫번째 지수(

    로 표시됨)는 어드레스 m

    n! × w[d

    k ] 에 있으며, 두번째 지수( 로 표시됨)는 m

    n! × w[d

    k ] + 1 에 있다(기타 등등). 좀더 일반적으로는, 지수 는, 어드레스 m

    n! × w[d

    k ] + i-1 에 있다.

    이와 병렬로, 단계 C-4에서, 통상적인 관계식

    으로부터 S

    k 가 계산된다. 단계 C-5는, S

    k 값에 대한 테스트이다. 만일, S

    k 가 제로라면( Y 화살표), 이는 부분 랭크 가 제로(앞의 공식 (7))임을 의미하며, 랭크 t는 바뀌지 않으며, 프로세싱은 단계 C-11로 계속된다. 이와 다른 경우에는(N 화살표, S

    k ≠ 0), 프로세싱은 단계 C-6으로 진행하는바, 여기서는 기본 분해 S

    k 의 m

    n! 지수들 이, 어드레스 m

    n! × S

    k 에서 테이블 D

    l 내에서 판독된다.

    이와 병렬로, 단계 C-7은, 기본 분해 (n-1-k)! 의 mn! 지수들

    을, 어드레스 m

    n! × (n-1-k) 에서 테이블 D

    l! 내에서 판독하는 것이다. 단계 C-7은, S

    k 가 0이 아닌 경우(테스트 C-5의 N 출력)에 수행된다는 점을 유의해야 하며, 이는 임의의 경우에, 부분 랭크 가 0 이라면 테이블 D

    l! 의 불필요한 판독을 회피하기 위한 것이다.

    단계 C-8에서, 테이블들의 상이한 판독들의 결과들이 함께 그룹지워질 수 있는바, 이는 다음의 관계식에 따라서 부분 랭크

    의 분해의 m

    n! 지수들을 먼저 계산하기 위함이다:

    마지막으로, 단계 C-9에서, 부분 랭크

    는, 다음에 의해서 계산된다.

    w[d k ] 는, 관심있는 순열 코드의 최대 차원 n 보다 반드시 작거나 같은 가중치라는 점이 상기될 것이다. 이와 유사하게, 이러한 가중치들의 합계 S k 는, 최대 차원 n 보다 작으며, 물론 (n-1-k)!에 대해서도 동일한 것이 적용된다. w[d k ], S k , 그 리고 (n-1-k)!의 분해들은, 최대 차원 n 까지의 범위를 갖는 정수 또는 정수 계승들의 분해들의 테이블 내에 리스트화되는바, 이는, 가령 테이블 4d와 같다. 테이블내에 리스트화된 w[d k ]의 분해 그리고 이전의 루프(k-1) 상에서 판별되고 메모리에 저장된 P k-1 의 분해로부터, P k 의 분해가 판별된다.

    도5의 부분 랭크 계산 단계들에 대한 예시적인 일례로서, 차원 n=8 순열 코드 및 q=4 가 고려된다. 이러한 일례에서, 지수들은 4개의 컬럼들과 9개의 로우들을 갖는(따라서, 36 셀들) 2-차원 테이블에 저장된다. 따라서, 이는, 컬럼에 pi = 2, 3, 5, 7 및 로우에 l = 0,..., 8 인, 전술한 테이블 4d로부터 추출될 수 있다.

    이러한 일례에서, 선행 위치(preceding position) k=3 에서, 가중치 w의 테이블은 {1, 1, 0, 3} 이며 따라서 P 3 = 1! 1! 0! 3! = 6 으로 가정된다.

    위치 k = 2 에서, 단계 C-1에 대해, d 2 = 2 가 읽혀졌다고 가정된다. 이러한 일례에서, 단계 C-2에서, 이를 1 만큼 증분시킴으로써, 셀 w[2] 는 업데이트된다(w[2] = 0+1 = 1).

    단계 C-31에서, 1(=w[2])의 분해의 4개의 지수들이 판독되는바, 즉, 0, 0, 0, 0(테이블 4d, 6번째에서 9번째 컬럼들 및 3번째 로우 l=1을 참조)이 판독된다.

    이후(단계 C-32), 테이블 P가 업데이트되며, 따라서 P={1, 1, 0, 0} 이 얻어진다. 단계 C-4에서, S k 가 계산된다: S k = w[0] + w[1] = 1+1 = 2. 따라서, S k 는 0 이 아니다.(테스트 단계 C-5).

    ○ S k 의 분해의 4개의 지수들이 판독되며(단계 C-6)(여전히, 테이블 4d, 6번째에서 9번째 컬럼들 하지만 4번째 로우 l=2 을 참조): p 1 = 2(6번째 컬럼)에 대해 지수는 1, 그리고 p i = 3, 5, 7(7번째 에서 9번째 컬럼)에 대해 상기 지수는 0 이다.

    ○ 여전히 도4d를 참조하여 5! ((n-1-k)!에 대응)의 분해의 4개의 지수들이 판독되는바(단계 C-7), 이번에는 2번째에서 5번째 컬럼들 및 l=5 인 7번째 로우를 참조한다), p 1 = 2(2번째 컬럼)에 대해서 지수는 3 이다. p 2 = 3(3번째 컬럼)에 대해서 지수는 3 이며, p 3 = 5(4번째 컬럼)에 대해서 지수는 1 이다. 다른 한편으로, p 4 = 7(5번째 컬럼)에 대해서 지수는 0 이다.

    ○ 단계 C-8에서, 부분 랭크

    의 분해의 4개의 지수들을 다음과 같이 계산된다:

    단계 C-9에서, 부분 랭크

    는, 그 분해들로부터 계산된다: 2

    3 × 3

    0 × 5

    1 × 7

    0 = 40

    다시 도5를 참조하면, 단계 C-10에서 관계식 t = t +

    에 따라 업데이트함으로써(단계 C-9에서 발견된 부분 랭크 를 합산), 순열의 글로벌 랭크 t 는 자체적으로 판별된다.

    이후 단계 C-11는 변수 k를 감소시키는 것을 목적으로 하며(k = k-1) 그리고 단계 C-12는 k 값에 대한 테스트인바, 이는 상기 프로세싱을 계속할지를 결정하기 위한 것이다. 따라서, 만일, 0 ≤ k 이라면(테스트 C-12의 Y 화살표 출력), 프로세싱 연산의 상기 단계들은, 한 단위만큼 감분된 k 값을 갖고 처음 단계인 단계 C-1 에서부터 재반복(reiteration)된다. 그렇지 않다면(테스트 C-12의 N 화살표 출력), 상기 프로세싱 연산은 종료단계 C-13("END")에서 종료한다.

    따라서, 전술한 단계 C-9는, 단계 C-8에서 판별된 그의 분해로부터 부분 랭크를 계산하며, 다음의 3개의 중간 분해들로부터 판별된 그 자체로부터 부분 랭크를 계산한다는 점을 유의해야 한다:

    - (n-1-k)!

    - S k , 그리고

    - P k

    이들 중 2개 즉, (n-1-k)! , S k 는 단계 C-6 및 C-7 에서 판별되는바, 이는 기본 분해들의 각 테이블들 D l 및 D l! 에 대한 간단한 판독을 포함한다. 또한, 세번째 중간 분해(P k )에 대한 판별은, 다음과 같은 유형의 관계식에 따라 테이블 D l! 에서 판독된 w[d]! 의 q개의 기본 분해들로부터 간단히 수행될 수 있다:

    직접적인 변형예들(dirtect variants)

    단계 C-3은 이러한 중간 분해의 판별에 대한 좀더 유용한 변형예를 나타낸다. 사실, P k 의 중간 분해는, 테이블 D l 에서 판독된 기본 분해로부터 그리고 또 다른 부분 랭크(

    )를 위해 계산된 또 다른 중간 분해(P

    k+1 의 그것)로부터 판별될 수 있는바, 예를 들면, k의 반복(iteration)에서 선행하는 중간 분해 를 들 수 있다. 좀더 일반적으로는, 본 발명의 변형예에서, 중간 분해는, 이전에 판별된 적어도 하나의 중간 분해(적어도 하나의 또 다른 부분 랭크에 대한)로부터 추론될 수 있다.

    전술한 바와 같이, 랭크의 계산은, 마지막 위치(k=n-1)에서부터 처음 위치(k=0)로의 루프(loop)에 의해서 수행된다. 하지만, 본 발명에서는 처음 위치에서 마지막 위치로의 루프 역시도 적용될 수 있음은 물론이다. 필요한 모든 것은, 초기화 페이즈(initialization phase)를 변화시키고 그리고 단계 C-2 및 C-3과 이들의 순서를 적응시키는 것 뿐이다. 이를 위해서, 가중치 w의 테이블은 q개의 가중치들

    로 초기화될 수 있다. 이후, 0 부터 q-1 까지의 d에 대해, w[d]! 의 분해의 m

    n! 지수들이 테이블 D

    l! 에서 판독되는바, 이는 중간 분해의 테이블의 m

    n! 값들(P

    0 의 분해의 지수들)을 누적 합산(cumulative addition)에 의해 계산하기 위함이다.

    다음으로, 단계 C-10 이후 및 단계 C-2 전에 단계 C-3 가 수행된다. w[d k ] 의 기본 분해의 지수

    를 P[i] 로부터 감산함으로써(1≤i≤m

    n! 에 대해, P[i] = P[i] - ), P의 중간 분해가 업데이트된다. 다음으로, w[d

    k ]의 값을 1 만큼 감산(w[d

    k ] = w[d

    k ] - 1)함으로써, 단계 C-2가 수행될 수 있다. 단계 C-11은 변수 k를 1 만큼 증분시키는 것을 목표로 할 수 있으며, 단계 C-12 는 k=n 인지를 단순히 테스트한다.

    가변 차원 n의 순열 코드들에 대해서,

    연산들을 수행하는 것 보다는, 상기 연산을 오직 m

    n! 번만 수행하기 위해서 초기화시(on initialization) m

    n! 을 읽는 것이 바람직하는 점은, 간단히 언급할 가치가 있다.

    제 1 실시예의 일반적인 변형예

    좀더 일반적으로, 본 발명에 따른 인코딩에 대해 도5에 표현된 구현예는, 많 은 변형예들을 가질 수 있다.

    따라서, 제 1 변형예에서, 각각의 기본 분해(l 또는 l! 의)는 또한, m l! 을 포함할 수 있다. m l! (0≤l≤n)을 판독하는 것은 여러 장점을 제공한다. 사실, C-3 및 C-6 에서 단계 C-10까지의 단계들은, 각각 더 이상 m n! 번 수행되지 않는다. 하지만 오직:

    - 단계 C-3에 대해서는, m w[dk]! 번,

    - 단계 C-6와 단계 C-8의 덧셈

    에 대해서는 m

    sk! 번, 그리고

    - 단계 C-7 및 C-9와 단계 C-8의 뺄셈

    에 대해서는 m

    (n-1-k)!

    이 수행된다.

    더 나아가 만일, m l 값이 저장되었다면, 다음을 수행하는 것만이 필요할 뿐이다:

    - 단계 C-3에 대해 m w[dk] 번, 그리고

    - 단계 C-6에 대해 m sk 번 그리고 단계 C-8의 덧셈

    인코딩의 또 다른 변형예에서, 또한 l의 기본 분해의 지수들의 저장이 제 3 솔루션(상기의 테이블 4c)에 따라 이용된다면, 단계 C-3은 m' w[dk] 값들에 대해 수행될 수 있다. 이와 유사하게, 단계 C-6은 m' sk 값들에 대해 수행될 수 있다. 단계 C-8에서는, m (n-1-k)! 개의 덧셈들과 m (n-1-k)! 개의 뺄셈들을 제공하는 대신에, 수행되어야할 뺄셈들의 갯수는 여전히 m (n-1-k)! 개이지만, 오직 m' sk 개의 덧셈만이 필요할 뿐이다. 특히:

    제 3 변형예에서는, 부분 랭크를 3개의 항들로(분자에서의 2개 항과 분모에서의 1개 항)로 분해하는 대신에, 이는 2개의 항들로 분해되며, 이들 중 하나는 몫(quotient)이다. 따라서, 부분 랭크

    는, 2개의 항들로 분해된다:

    - 합계 S k , 그리고

    - 몫

    .

    상기 몫은 다음의 관계식에 의해서 업데이트될 수 있다:

    따라서, q+1 개의 기본 분해들((n-1-k)! 및 테이블 D l! 에서 읽혀진 qw[dk]! 의 그것들)로부터 R k 의 분해를 판별한다라기 보다는, R k 의 중간 분해가 판별되는바, R k+1 의 중간 분해로부터 그리고 (n-1-k)의 기본 분해들과 w[d k ]의 기본분해들(이들 2개의 기본 분해들은 테이블 D l 에서 읽혀짐)로부터 판별된다. 이는 다음과 같이 표현된다:

    앞선 변형예들과 비교해보면,

    의 분모의 중간 분해(테이블 P)를 판별 및 저장하는 대신에, 몫 R

    k 의 중간 분해가 판별되고 저장된다(이를 위해 테이블 R이 제공됨). 테이블 P의 0 에서의 초기화는, 상기 비율(this ratio)의 지수들의 테이블 R의 그것으로 대체된다. 단계 C-3은, 테이블 R을 업데이트하기 위한((n-1-k)와 w[d

    k ]의 기본 분해들의 지수들을 판독하여) 간단한 단계가 되는바, 이는 다음과 같이 표현된다:

    저장 옵션에 따라, 이러한 업데이트는, m n! 덧셈들 및 뺄셈들 또는 m (n-1-k)! 덧셈들(각각 m w[dk]! 뺄셈들), 또는 m (n-1-k) 덧셈들(각각 m w[dk] 뺄셈들)로 완료될 수 있으며, 또는 (n-1-k)와 w[d k ]의 0이 아닌(non zero) 지수들에 대해서는, m' (n-1-k) 덧 셈들 및 m' w[dk] 뺄셈들로 완료될 수 있다. 다음으로, 단계 C-8은 다음 유형의 덧셈들만을 포함한다:

    저장 옵션에 따라, m n! 덧셈들 또는 m sk! 덧셈들, 또는 m sk 덧셈들이 카운트되며, 또는 S k 의 비제로 지수들에 대해서는 m' sk 덧셈들이 카운트된다.

    상기 비율 R k 는, 정수일 필요는 없다는 점을 유의해야 하는바, 이는 지수들 R[i] 가 음수일 수도 있다는 것을 의미한다. 이러한 변형예에서, 인코딩에서의 팩토리얼들의 분해(따라서, 테이블 D l! )는 더 이상 유용하지 않은바, 따라서, 테이블 D l 만을 저장함으로써, 정수들 l(l≤n)의 (n+1) 기본 분해들의 간단한 세트가 사용될 수 있다.

    분해의 지수들의 간결한 표현(compact representation of the exponents of the decomposition)

    이제, 분해의 지수들의 간결한(compact) 표현에 기초하여, 코딩에 대한 제 2 실시예가 설명된다.

    기본 분해들의 지수들은 간결하게 표현되며, 제 1 실시예를 참고하여 앞서 설명된 바와 같은 해체된 폼(expolede form)은 더 이상 아니다. 명료함을 위하여, 지수들의 간결한 표현이 하나의 워드(single word) 내에 포함되어 있는 경우만을 설명한다. 따라서, 이들 워드들은 전술한 바와 같이 저장되는바, (n+1) 셀들을 가지며 D' l 과 D' l! 으로 각각 표시되는 2개의 테이블들에 l=0 에 대해 더미 워드의 저장을 구비한다. 이들 2개의 테이블들에서, 기본 분해의 지수들을 포함하고 있는 워드의 어드레스에 대한 계산은 직접적인바, 이는 l!(각각 l)의 분해의 워드를 읽는 것이기 때문이며, 테이블 D' l! (각각 D' l )의 어드레스 l을 지적하기만하면 되기때문이다.

    다음의 점을 유의해야 한다. l=0에 대한 더미 워드의 저장이 없다면, 기본 분해 l(l > 0) 에 해당하는 워드는, 테이블 D' l 의 어드레스 (l-1)에 있다.

    제 2 실시예에 따른 인코딩

    ● P k 의 중간 분해의 m n! 지수들의 간단한 표현을 포함하고 있는 워드 e p 는, 0 으로 초기화된다: e p = 0

    워드 e p 는 각각의 위치에서 업데이트될 것이다(아래의 단계 CC-3).

    ● 앞에서와 같이, 랭크 t 및 q 가중치들

    (각각의 위치에서 업데이트될 것인 q 셀들을 갖는 테이블 W 에 저장되는)은, 또한 0으로 초기화된다. 명령들은 다음과 같다:

    ○ t = 0

    ○ w[i] = 0, 0 ≤ i < q

    ○ k = n - 1

    n 위치들에 대한 반복(iteration) (k에 대한 루프)

    이제 도6을 참조하여, 제 2 실시예에 따른 인코딩에서의 주요 단계들이 설명된다. 도6의 단계들 CC-n 에서 문자 "CC"는 "간결한 표현(compact representation)"을 구비한 "인코딩(encoding)"을 나타내는 것이다.

    단계 CC-1에서, 변수 d k 가 판독된다. 단계 CC-2는 변수 w의 업데이트를 포함하여 이루어진다: w[d k ] = w[d k ] + 1.

    단계 CC-3은 특히 다음과 같은 것들로 워드 e p 를 업데이트하는 것이다:

    - 단계 CC-31에서, 테이블 D' l 에서 w[d k ]의 분해의 지수들의 간결한 표현을 포함하고 있는 워드 e w[dk] 의 판독, 다음으로,

    - 단계 CC-32에서, 워드의 e p = e p + e w[dk] 의 적절한 업데이트

    이와 병렬로, 단계 CC-4에서, 합계 S k 가 계산된다:

    후속하는 단계 CC-5는 S k 값에 대한 테스트이다. 합계 S k 가 0 이라면(N 화살표), 인덱스 k는 직접적으로 감소된다. 그렇지 않다면(테스트 단계 CC-5의 출력에서 Y 화살표), 프로세싱은 단계 CC-6으로 계속되어 테이블 D' l 에서 S k 의 분해의 지 수들의 간결한 표현을 포함하고 있는 워드 e sk 를 판독한다.

    이와 병렬로(그리고, 바람직하게는 테스트 CC-5의 결과에 의존하여), (n-1-k)! 의 지수들의 간결한 표현을 포함하고 있는 워드 e (n-1-k)! 가 테이블 D' l! 에서 판독된다(단계 CC-7).

    단계 CC-8에서는, 다양한 단계들 CC-3, CC-6, CC-7에서 얻어진 결과들이 함께 그룹지워지는바, 이는 부분 랭크

    의 분해의 간결한 표현을 포함하고 있는 워드 를, 다음과 같은 2개의 간단한 연산들(바람직하게는, 덧셈 다음에 뺄셈)에 의해서 계산하기 위함이다:

    단계 CC-9 는, 워드

    에 포함되며 부분 랭크 의 분해의 m

    n! 지수들 의 추출을 목표로 하는바, 이는 전술한 바와 같이, 상기 워드의 비트들의 적절한 오프셋에 의해 이루어진다. 이를 위해서, 1 에서 m

    n! 까지의 인덱스 i 에 대해 루프가 제공된다(CC-91에서 1로 초기화, CC-93에서 i 값에 대한 테스트, CC-94에서 i 가 m

    n! 값에 도달할 때까지 증분). i에 대한 각각의 루프는 다음 유형의 명령들을 적용한다(단계 CC-92):

    "<<b" 와 ">>b" 라는 표현들은, b 비트의 왼쪽 쉬트프와 오른쪽 쉬프트를 각각 나타낸다는 점이 상기될 것이다. 더 나아가, 표현 "&" 은, 비트-바이-비트(bit-by-bit) "AND" 논리 연산자를 나타낸다. 명령 i'1 은,

    의 b

    i

    n 하위 오더 비트들을 복원하는 것이다. 실제로는, 명령 "((1 << b

    i

    n ) - 1)" 에 해당하는 마스크들은 하드와이어된다.

    달리 표현하면, 상위 오더 비트들의 마스크 ((1 << b 1 n ) - 1) 가 처음부터(outset) 적용되는바(루프 인덱스 i가 1인 경우), 이는

    의 b

    1

    n 하위 오더 비트들만을 무엇보다도 먼저 복원하기 위한 것이며, 이는 제 1 소인수 P

    1 과 관계된 지수 를 제공한다.

    다음으로:

    - 최상위 비트들을 복원하기 위하여,

    의 비트들이 b

    1

    n 만큼 "오른쪽으로" 쉬프트되는바, 이는 다음 소인수 P

    2 와 관계된 지수들을 제공한다, 상위 오더 비트들의 마스크 ((1 << b

    2

    n ) - 1),

    - 다음으로, 지수

    가 추출된다,

    - 다음으로, b 2 n 비트들의 오른쪽 쉬프트가 적용된다,

    그리고 i = m n! 이 될때까지 계속된다.

    후속하는 단계 CC-10은, 부분 랭크

    를 계산하는 것인바, 이는 다음과 같다:

    다음으로, 부분 랭크

    가, 전체 랭크 t에 더해진다(t = t + , 단계 CC-11).

    다음 단계 CC-12에서 인덱스 k 의 값이 감분되며 그리고, 단계 CC-4, CC-1, CC-7 및 후속 단계들을 이 감분된 값으로 재개하기 전에, 테스트 CC-13 에서 체크가 수행되는바, 이는 k 값이 -1(k < 0)에 도달했는지를 알아보기 위한 것이며, 도달한 경우에는 프로세싱이 종료한다(단계 CC-14).

    따라서, 분해들의 표현에 상관없이, 본 발명은 부분 랭크들의 효율적인 계산을 가능케 한다. 상기 단계 CC-10은, 선행 단계들 CC-8 및 CC-9에서 판별된 부분 랭크의 분해로부터 부분 랭크를 계산하는 것을 목표로 한다. 3개의 중간 분해들(n-1-k)!, P k 및 S k 항의 중간 분해들)이 사용된다. 이들 중 2개 즉, (n-1-k)! , S k 에 대한 판별은, 단계 CC-6 및 CC-7 에서 수행되는바, 이는 테이블들 D' l 및 D' l! 에서 이들의 간결한 표현들을 그저 읽는 것이다. 세번째 중간 분해(P k )에 대한 판별은, 단계 CC-3에서 수행되는바, 이 또한 테이블 D' l 의 판독을 필요로 하며, 판독된 기본 분해의 간결한 표현의 가산에 의해 상기 중간 분해의 간결한 표현에 대한 업데이트가 후속된다.

    제 1 실시예를 참조하여 앞서 설명된 바와 같이, m l! (0≤l≤n) 값들의 저장은, 단계 CC-9 및 CC-10의 복잡도를 감소시킬 수 있게 한다. 부분 랭크

    의 분해의 지수들을 추출하기 위한 루프는, m

    n! 번 대신에 m

    (n-1-k)! 번 수행된다. 이와 유사하게, 단계 CC-10은 더 이상 m

    n! 곱셈들을 포함하고 있지 않으며, m

    (n-1-k)! 곱셈들을 포함한다.

    이제, 본 발명을 이용하여 순열의 랭크를 디코딩 하는 설명이 후속된다.

    다시한번, 기본 분해들의 표현(해체된 표현 또는 간결한 표현)에 대한 솔루션에 따라서, 다양한 변형예들이 존재한다. 이하에서는 디코딩에 대한 제 1 실시예가 설명될 것인바, 이는 분해들의 해체된 표현을 이용하고 테이블 4d에 관계된 제 4 솔루션에 따른 분해들의 저장을 이용하는 앞서 설명된 인코딩에 대한 제 1 실시 예와 유사하다. 따라서, Schalkwijk 알고리즘을 일례로서 취하는 순열의 랭크를 디코딩하는데 본 발명이 바람직하게 적용될 수 있다는 점이 명백해질 것이다.

    제 1 실시예에 따른 디코딩

    분해의 지수들의 해체된 표현을 이용하는 디코딩은, 다음과 같은 데이터 초기화로 시작된다:

    초기화

    ● w 값들의 테이블은 q 가중치들

    (w는 단계 D-19의 각 위치에 대한 루프의 말미에서 업데이트되며, 이에 대해서는 후술함)로 초기화된다. 적절한 명령은 다음과 같다:

    ○ w[i] =

    , 0≤i≤q

    ● P 0 항의 분해의 m n! 지수들이 계산된다(m n! 셀들을 갖는 테이블 P에 저장되며, 단계 D-18의 각 위치에 대한 루프의 말미에서의 각 위치에서 업데이트되는바, 이에 대해서는 후술함). 적절한 명령은 다음과 같다:

    ○ P[i] = 0, 1≤i≤m n!

    ○ d=0 부터 q-1 까지의 루프

    ■ 테이블 D l! 에서

    의 분해의 m

    n! 지수들 의 판독

    ■ 다음으로, P[i] = P[i] +

    , 1≤i≤m

    n!

    ● 마지막으로, k = 0 이 초기화됨.

    이제 도7을 참조하여, 제 1 실시예에 따른 디코딩의 주요 단계들이 설명된다. 도7의 단계들 Dn 이라는 표현에서 문자 "D" 는, "디코딩(decoding)"을 의미한다.

    n 위치들에 대한 반복(iteration)(인덱스 k에 대한 루프)

    제 1 단계 D-1은, 테이블 D l! 에서 (n-1-k)!의 분해의 m n! 지수들

    을 읽는 것이다.

    다음 단계 D-2는, d k = 0 및

    = 0 값들을 세팅하는 것이다.

    다음으로, 알파벳 d k 의 제 1 값이 w[d k ] ≠ 0 를 만족하는지를 검색하는 것이다. 이를 위해서, 테스트 단계 D-3가 제공되어, w[d k ] = 0 인지를 체크하는바, w[d k ]가 0 이라면(Y 화살표), d k 값은 증분되며(d k = d k + 1), 테스트 단계 D-3는 0 이 아닌 w[d k ] 값이 발견될 때까지 재반복된다. 0이 아닌 w[d k ] 값이 발견되면(N 화살표, w[d k ] ≠ 0), 다음 단계는 랭크 t의 값에 대한 테스트 D-5 이다. 만일, 랭크가 0 이라면(테스트 D-5 출력에서 Y 화살표), P k 의 지수들이 업데이트될때까지(단계 D-18) 다음 단계를 적용하는 것은 의미가 없다. 랭크가 0이 아니라면(테스트 D-5 출력에서 N 화살표), 상기 프로세싱은 후속 단계 D-6 및 D-7로 진행하는바, 여기에서는 각각 S k = 0 으로 세팅되며, 중간 값 I k 는 I k =

    으로 세팅된다.

    다음 단계 D-8는, 합계 S k = S k + w[d k ] 를 업데이트 하기 위한 계산이다. 다음 단계는, 테이블 D l 에서 합계(S k )의 분해의 m n! 지수들

    을 판독하는 것이다(단계 D-9).

    단계 D-10은 다음의 관계식으로부터 부분 랭크의 분해의 m n! 지수들

    을 계산하는 것을 목표로 한다: 1≤i≤m

    n! 에 대해 . 앞서 설명된 바와같이 초기화된 지수들 P[i]는, 다음 루프를 위해서 현재 루프의 말미에서 업데이트되는바, 이에 대해서는 후술될 것이다(단계 D-18).

    단계 D-11은 부분 랭크의 계산을 목표로 한다:

    다음 3개의 단계들은 전체 랭크와 부분 랭크의 값을 비교함으로써, 전체 랭크 t의 값에 대한 테스트를 목표로 한다. 이를 위해서, 단계 D-12에서, d k 의 값이 증분되며(d k = d k + 1) 그리고 테스트 D-13은 다음과 같다: t -

    ≥ 0 ?

    만약 상기 부등식이 만족된다면(Y 화살표), 단계 D-7 내지 D-13은, 증분된 새로운 d k 값으로 반복된다. 그렇지 않다면(N 화살표), 프로세싱은 단계 D-14로 진행하여 d k 값을 감분시키는바(d k = d k - 1), 이는 단계 D-12 이전으로 d k 값을 되돌려 놓기 위함이다. 이러한 d k 값에 대해서, 부분 랭크

    는, 전술한 바와같은 중간 값 I

    k 을 취한다(단계 D-15: = I

    k ). 다음으로 랭크 t가 업데이트되어 t = t - 가 되며(단계 D-16), 그리고 테이블 D

    l 에서 w[d

    k ]의 분해의 m

    n! 지수들 을 판독함으로써, P

    k 의 지수들이 업데이트(테이블 P에서)된다(단계 D-17). 다음으로 단계 D-18에서, 지수들이 적절히 업데이트된다(1≤i≤m

    n! 에 대해, P[i] = P[i] - ). 다음으로 w[d

    k ] 의 값이 감분되며(w[d

    k ] = w[d

    k ] -1 : 단계 D-19) 그리고, 다음 루프를 준비하기 위해서 인덱스 k 가 증분된다(k = k + 1 : 단계 D-20).

    제 1 단계 D-1로 되돌아 가기 전에, n 개의 구성요소들이 모두 프로세싱되었는지를 확인하고자 하는 체크가 수행된다. 이를 위해서, k를 n에 비교(k < n)함으로써, k 값에 대한 테스트 D-21 가 제공된다. 인덱스 k 가 n 값에 도달하지 않는한(테스트 D-21의 출력에서 Y 화살표), 프로세싱은 다음 k 값에 대해서 단계 D-1을 재개한다. 그렇지 않다면(테스트 D-21의 출력에서 N 화살표), 프로세싱은 종료 단계 D-22에서 종료한다.

    단계 D-11은, (n-1-k)!, S k 및 P k 각 항의 3개의 중간 분해들로부터 단계 D-10에서 판별된 그것의 분해를 이용하여 부분 랭크를 계산하는 것을 목표로 한다는 점을 잊지 말아야 한다. 이들 중 2개((n-1-k)! 와 S k )에 대한 판별은 단계 D-1 및 D-9에서 수행되며, 상기 단계 D-1 및 D-9는 각각의 테이블 D l! 및 D l 을 단순히 읽는 것이다. 단계 D-18에서 수행된 3번째 중간 분해(P k )에 대한 판별 역시, 테이블 D l 을 판독(단계 D-17)함으로써 수행되는바, 이후에는, 판독된 기본 분해의 지수들을 상기 중간 분해의 지수들에서 감산함으로써, 업데이트가 후속된다(단계 D-18). 전술한 바와같은 상기 중간 분해의 초기화는, 테이블 D l! 를 q 번 판독하는 것을 필요로 하며, 이어서, 판독된 q개의 기본 분해들의 지수들의 합산에 의해 상기 중간 분해의 지수들에 의한 업데이트가 후속된다.

    전술한 인코딩에서와 같이, 도7의 프로세싱은 소정 단계들의 복잡성을 감소시킬 수 있는 다양한 변형예를 가질 수 있다.

    비율 R k (전술한 바와같은)의 지수들의 사용을 포함하고 있는 변형예들이 관심있는 것들이다. 사실, 도7을 참조하여 앞서 설명된 디코딩 프로세싱 연산에서, 소정 위치 k에 대해, 복수의 d 값들에 대해 지수

    가 계산된다. 테스트된 각각의 d 값에 대해서, 다른 변형예들은, 각각의 지수에 대해, 뺄셈 및 덧셈 ( )을 요구한다. 하지만, 비율 R

    k 의 지수들의 이용 하는 변형예들은, 덧셈( ) 만을 요구할 뿐인데, 이는 소정 위치 k에 대한 d 값에 따라 오직 합계 S

    k 와 그것의 지수 만이 변화하기 때문이다

    제 2 실시예에 따른 디코딩

    이제, 도8을 참조하여, 분해들의 간결한 표현을 이용하는 디코딩의 구현에 관한 일례가 설명된다.

    먼저, 데이터는 다음과 같이 초기화된다.

    초기화

    ● 먼저, 0 ≤ i < q 에 대해 항 w[i] = w i 0 을 판별하기 위해서, q 셀들을 갖는 테이블 w가 참조된다.

    ● P k 의 분해의 m n! 지수들의 간결한 표현을 포함하고 있는 워드 e p 가 계산된다. 이를 위해:

    ■ e p = 0 이 세팅된다.

    ■ 그리고 0 부터 q-1 까지의 d에 대해 루프가 제공된다:

    ○ 테이블 D l! 에서

    의 m

    n! 지수들의 간결한 표현을 포함하고 있는 워드 가 판독된다.

    ○ 그리고 업데이트(

    ) 가 수행된다.

    ● k = 0 으로 세팅된다.

    n 위치들에 대한 반복(k에 대한 루프)

    도8의 단계 DC-n 에서 문자 "DC"는 '간결한 표현을 구비한 디코딩'( d ecodong with a c ompact representation)을 의미한다.

    단계 DC-1은, 테이블 D'l! 에서 (n-1-k)! 항의 m n! 지수들의 간결한 표현을 포함하고 있는 워드 e (n-1-k)! 를 판독하는 것이다.

    단계 DC-2 내지 단계 DC-8은, 도7을 참조하여 앞서 설명된 단계 D-2 내지 D7과 유사하다.

    다른 한편으로, 단계 DC-9에서, 테이블 D'l 에서 합계 S k 의 m n! 지수들의 간결한 표현을 포함하고 있는 워드

    가 판독된다.

    이후, 단계 DC-10에서, 부분 랭크

    의 지수들의 간결한 표현을 포함하고 있는 워드가 계산되는바, 바람직하게는 다음과 같다:

    일반적으로 단계 DC-11은 전체적으로는, 부분 랭크

    의 지수들을 추출하는 것이다. 이를 위해서 다음이 준비된다:

    - i(1≤i≤m l! )에 대한 루프(단계 DC-111에서 i=1의 초기화 그리고 단계 D- 112의 지수

    의 추출(후술됨), m

    n! 값에 도달할 때까지 인덱스 i를 증가시키면서(단계 D-114), 루프 인덱스 i와 m

    n! 값과의 비교(단계 D-113));

    - 지수

    의 추출(단계 DC-112):

    마스크((1 << b i n )-1)에 의해

    의 상위 오더 비트들을 마스킹함에 의해서, 간결한 지수 의 하위 오더 비트들에서 표현됨:

    상기 마스킹 이후로는 간결한 지수

    의 b

    i

    n 비트들의 오른쪽으로 쉬프트가 후속된다:

    이러한 통상적인 단계 DC-11은, 인코딩에 대한 도6의 통상적인 단계 CC-9와 유사하다.

    단계 DC-12 내지 DC-17은, 해체된 표현에서의 디코딩에 대해 특별한 도7을 참조하여 설명된 단계 D-11 내지 D-16과 유사하다.

    일반적인 단계 DC-18에서 P k (테이블 P)의 지수들의 업데이트가 완료되는바, 다른 한편으로는, 단계 DC-181에서, 테이블 D' l 에서 w[d k ]의 m n! 지수들의 간결한 표현을 포함하고 있는 워드

    를 판독하고, 그리고 단계 DC-182에서 P

    k 의 지수들 을 적절히 업데이트( )한다.

    다음으로, 단계 DC-19 내지 단계 DC-22는, 해체된 표현을 이용하는 디코딩에 대해 특별한 도7에서의 단계 D-19 내지 D-22와 유사하다.

    이제, 전술한 다양한 변형예들이 제공할 수 있는 장점들이 설명된다.

    m l! (및/또는 m l 또는 m' l ) 테이블들을 이용하는, 해체된 표현을 갖는 제 1 실시예의 변형예들은, m n! 값들의 테이블만을 이용하는 주요 실시예에 비하여 더 적은 수의 덧셈/뺄셈 연산을 포함한다.

    이러한 경우, 마지막 위치들(즉, m (nk)! , m' l , 또는 m l 이 m n! 보다 작은 경우)에 대해, 복잡도의 감소가 상당하다. 그럼에도 불구하고, 이러한 복잡도의 감소는, 메모리 판독 단계들(단계 C-31, C-6 및 C-7)에서의 복잡도가 증가하는 것을 수반한다. 즉, 읽어야할 값들은 보다 적어지지만, 다른 한편으로는 어드레스 계산이 좀더 복잡해진다.

    따라서, 이러한 흥미있는 트레이드-오프는, 기본 분해들(m n! 지수들을 갖음)의 규칙적인 저장을 필요로하는바, 이는 테이블 D l 및 D l! 에 대한 어드레싱을 용이하게 하고 그리고 (n+1) 셀들을 갖는 테이블 D m 에 m l! 값들을 저장하기 위한 것이다. 상기 m l 값들은, 덧셈들/뺄셈들의 수를 효율적으로 감소시키기 위해서 저장되어야 한다. 하지만, 이러한 조치(measure)는 단계 C-6 및 D-9(각각 C-3 및 D-19) 이 전에,

    값들의 판독이 반드시 수반되어야 하며 반면에, m

    (nk)! 값은 k에 대한 각 반복(iteration)의 시작시에서만 판독되어야만 한다.

    또한, 해체된 표현에 비교되는 간결한 표현의 장점들은 다음과 같다:

    - 테이블 P를 업데이트하는 단계는 이제, 인코딩에 대해서(각각 디코딩에 대해서는) 오직 하나의 덧셈(각각 뺄셈)만을 포함한다,

    - 지수

    의 계산 역시, 오직 하나의 덧셈과 하나의 뺄셈만을 요구한다,

    - 워드 e k 를 판독하기 위한 어드레스 계산들은 직접적이며 그리고, 각각의 k 값에 대해서, 오직 하나의 메모리 액세스 및 판독을 필요로 한다.

    하지만, 상기 간결한 표현은, 워드

    에 포함된 부분 랭크 의 지수들의 추출(단계 CC-9 및 DC-11)을 필요로 한다.

    하지만, 이러한 연산이, 부분 랭크의 소인수 분해(prime factor decomposition)로부터 부분 랭크를 계산함에 있어서, 꼭 단점이 되는 것은 아닌바, 이에 대해서는 후술될 것이다.

    이제, 그 소인수 분해로부터 부분 랭크를 계산하기 위한 이러한 변형예들의 장점이 설명된다.

    비록, 종래기술의 나눗셈에 비하면 여전히 덜 복잡하지만, 소인수 거듭제곱들의 곱을 계산하는 단계의 복잡성은, 인코딩에서의(각 디코딩에서의) 단계 C-9 및 단계 CC-10(각 단계 D-11 및 단계 DC-12)을 참조하면, 인수들의 수에 따라 상당히 증가한다. 이제, 실제로는, 부분 랭크의 분해의 지수들 중 많은 것들이 0 이며, 따라서, 해당 거듭제곱들 역시 1 이다. 종종, 모든 지수들이 0 이거나 또는 오직 첫번째 지수들만이 0 이 아니다. 따라서, 0 이 아닌 지수 거듭제곱들만을 검출하고 추적할 수 있도록 하는 것은 매우 유용하다. 상세한 표현에서는, 오직 m n! 테스트들 또는 m (n-1-k)! 테스트들(각 소인수에 대해 하나씩)에 의해서 이러한 검출이 수행될 수 있다.

    유용하게도, 간결한 표현은, 모든 지수들이 0 인지를(만일,

    = 0) 한번의 테스트로 테스트하는 것을 가능케 하며, 그리고 이러한 경우에는 랭크 t' = 1 이다. 더 나아가, e

    t' 의 상위 오더 비트의 검출은, 랭크 t' 에서 가장 큰 비제로 지수 소인수(non-zero exponent prime factor)의 인덱스를 획득하는 것을 가능케 하며, 인코딩에서(디코딩에서) 단계 CC-9(단계 DC-11)의 루프의 반복 횟수를 감소시키는 것을 가능케한다.

    그럼에도 불구하고 다음과 같은 점을 유의해야 하는바, 간결한 표현에서와 같이 상세한 표현에서 비제로 지수들을 검출하는 것은, 복잡도를 증가시킨다. 만일, 모든 지수들이 0 이 아니라면, 소인수 거듭제곱들의 곱셈의 복잡도는 동일하게 남아있으며, 이러한 복잡도는, 비제로 지수들을 검출하고자하는 절차의 복잡도에 의해 악화된다.

    따라서, 제 1 변형예에서, 가능한 소인수들의 수가 매우 커지고(n 보다 매우 적은 k) 그리고 이들의 거듭제곱들의 곱셈의 복잡도가 검출 절차의 복잡도보다 매 우 큰 경우에만, 제로 지수들의 검출이 수행될 수 있다. 이를 위해서는, 위치들에 따른 상이한 루프들이 제공될 수 있는바, 비록 명령 배선들이 증가할지라도 상기 구현예가 적용될 수 있다.

    또한, 해체된 표현과 간결한 표현을 결합하는 것도 가능하다. 마지막 위치들(m l! 보다 작은 값)에 대해서는, 중간 분해들의 계산은 매우 적은 연산들을 수반한다. 따라서, 해체된 표현의 사용이 선호되는바, 이러한 표현은 부분 랭크의 지수들의 추출을 요구하지 않는다. 다른 한편으로는, 처음 위치들에 대해서는 간결한 표현을 사용하는 것이 좀더 효과적이다.

    이제, 현존하는 인코더/디코더들에 대한 몇몇 예시적인 구현예들에 대한 설명이 후속된다.

    3GPP AMR-WB+ 인코더

    3GPP AMR-WB+ 인코더(표준 [3GPPTS26.304)]는, 대수(algebraic) 벡터 양자화를 이용하며, 이를 위한 딕셔너리는 8 차원 Gosset network RE 8 의 순열 코드들의 합집합(union) 이다.

    TCX 기술은 변환(transform)에 의한 예측 인코딩에 대응한다. 좀더 상세하게는, 이는, 지각 가중 필터링(perceptual weighting filtering) 이후에 적용되는 FFT 변환 인코딩 방법을 포함한다. 표준 [3GPPTS26.304)]에서, 획득된 FFT 스펙트럼은, 8 차원의 서브 밴드들(subbands 또는, 서브 벡터들)로 나뉘어지며 그리고 이들 서브 벡터들은 별도로 인코딩된다. 서브 벡터들의 양자화는, 포인트 RE 8 의 정규 네트워크(regular network of points RE 8 )를 이용한다. 8 차원의 양자화 딕셔너리들은, 포인트 RE 8 의 네트워크로부터 획득된 타입 I의 순열 코드들의 합집합을 포함한다.

    표준 [3GPPTS26.304)]에 따른 TCX 인코더에서, 각각의 순열 코드는 소정의 사인된 차원 n=8의 리더 벡터에 대응한다. 네트워크 RE 8 의 포인트의 양자화 인덱스는, 다음 유형의 공식에 의해 계산된다:

    인덱스 = cardinality offset + 순열 랭크

    상기 랭크는 Schalkwijk 공식에 의해 계산되며, 반면에 cardinality offset은 표로 만들어진다(tabulated). 그럼에도 불구하고, 이러한 사인된 리더들은, 이들의 절대(absolute) 리더들을 통해 표현되는바, 이는 순열 코드들에서 저장 및 검색을 최적화하기 위함이다. 관계된 절대 리더들의 리스트는 다음 참조문헌에서 찾아볼 수 있다:

    "Low-complexity multi-rate lattice vector quantization with application to wideband TCX speech coding at 32 kbit/s" Ragot S., Bessette B., Lefebvre R., in Proc. ICASSP, vol. 1, May 2004 pp. 501-4.

    본 발명의 상이한 변형예들을 설명하기 위하여, 3개의 예시적인 구현예들이 아래에 설명된다. 처음 2개의 예시적인 구현예들은, 순열의 랭크의 계산(인코딩)에 관계된 것인바, 하나는 분해들의 해체된 표현을 사용하고, 다른 하나는 간결한 표현을 이용한다.

    아래에 설명된 이러한 예시적인 구현예들과 대응 부록들에서, 테이블 R 과 테이블 P는, R[0] 부터 R[m n! - 1] 까지 인덱스되며 그리고 P[0] 부터 P[m n! - 1](일례로서 앞서 설명된, 1 부터 m n! 까지가 아님)까지 인덱스되는바, 랭크를 계산하기 위한 프로세싱에 그 어떠한 특정한 영향을 미치는 것은 아니다.

    예시적인 제 1 구현예(인코딩)

    이 실시예에서는, 기본 분해들의 해체된 표현이 이용된다.

    이들의 지수들은, 36 셀들(= (8+1)×4)을 갖는 2개의 테이블에 저장된다. 이들 테이블들은 부록 A-11에서 주어지는바, D l [36] 이라고 표현된 것(정수 l (0≤l≤8)의 분해들의 지수들을 포함하며, 따라서 0에 대한 더미 분해를 저장함)과 D l! [36] 이라고 표현된 것(이들의 팩토리얼들의 분해들의 지수들을 포함함)이다.

    3, 5, 및 7의 거듭제곱들의 3개의 테이블 역시 저장된다:

    Pow3[4] = {1, 3, 9, 27}, Pow5[3] = {1, 5, 25}, Pow7[3] = {1, 7, 49}

    이러한 실시예에서, 부분 랭크의 분해는 2개의 중간 분해들로부터 판별되는바, 하나는 정수 S k 의 기본 분해가 되며, 다른 하나는 그 몫의 중간 분해가 된다:

    앞서 언급한 바와 같이, (7-k)! 및

    의 (q+1) 개의 기본 분 해들에 대응하는 기본 분해들로부터 R

    k 의 중간 분해를 판별하기 보다는, R

    k+1 의 중간 분해와 (7-k) 및 의 2개의 기본 분해들로부터, 상기 중간 분해가 판별된다. 이 중간 분해의 4개의 지수들은 테이블 R에 저장된다.

    테이블 11: 위치 k에 있는 부분 랭크의 항들의 분해들에 대하고 그리고 8차원의 순열 코드들에 대한, m l 또는 m l! 의 최대값

    본 발명은, 위의 테이블 11의 각 위치에 대해 표시된

    와 의 최대값들에 대한 지식 및 m

    (7-k)! 에 대한 지식을 적용하는바, 이는 이들 제한들(limits)보다 큰 인덱스들로 소인수들의 지수들을 계산하지 않기 위함이다.

    이에 해당하는 프로세싱이 부록 A-12에 주어진다. 위치들에 대한 루프가 해 부되었다는 점을 유의해야 한다. 또한, 몫의 소인수 p i 의 지수는, 4개의 셀을 구비한 테이블 R의 셀 R[i-1]에 저장된다는 점을 유의해야 한다.

    예시적인 제 2 구현예(인코딩)

    3GPP-AMR-WB+ 인코더를 구비한 변형예에서, 기본 분해들은 간결하게 표현된다. 이들의 지수들을 포함하고 있는 워드들은 9개의 셀들(= 8+1)을 구비한 2개의 테이블들에 저장된다. 부록 A-21을 참조하면, 테이블 D' l 은 정수들 l(0≤l≤8)의 분해들(따라서, l=0에 대해 더미 분해를 저장함)에 대한 워드들을 포함하며, 테이블 D' l! 은 이들의 팩토리얼들의 분해들에 대한 워드들을 포함한다.

    3, 5, 및 7의 거듭제곱들 역시 12 셀들을 갖는 테이블 Pow[12](사용되지 않은 거듭제곱들에 대해 0 의 더미 저장을 구비함)에 저장된다.

    부분 랭크의 분해는 3개의 중간 분해들로부터 판별되는바, 이들 중 2개는 정수 S k 와 계승 (7-1)!의 기본 분해들이 되며, 나머지 하나는 부분 랭크의 분모의 중간 분해가 된다:

    앞서 언급한 바와 같이,

    의 q 개의 기본 분해들로부터 P

    k 의 중간 분해를 판별하기 보다는, 상기 분해는 P

    k+1 의 중간 분해 및 의 기본 분해 로부터 판별된다. 이 중간 분해의 4개의 지수들을 포함하는 간결한 워드는, 부록 A-22에서 "eP" 로 표현된다.

    또한, "el" 이라는 표현은, 부분 랭크의 분해의 4개의 지수들을 포함하고 있는 간결한 워드를 나타낸다.

    여기서 다시한번, 부분 랭크의 분해를 나타내는 간결한 워드의 m (7-k)! 지수들만을 추출하기 위해서, m (7-k)! 에 대한 지식이 적용된다.

    해당 프로세싱이 부록 A-22에 제공된다. 앞서와 마찬가지로, 위치들에 대한 루프는 해체된다.

    예시적인 제 3 구현예(디코딩)

    예시적인 제 3 구현예는, 3GPP-AMR-WB+ 인코딩에서, 순열의 랭크에 대한 디코딩에 관한 것이다.

    예시적인 제 1 실시예에서와 같이, 기본 분해들의 해체된 표현이 바람직하게 사용되며, 그리고 3개 항들에서 부분 랭크의 분해가 이용되는바, 이는 예시적인 제 2 실시예와 유사하다. 하지만, 위치들에 대한 루프는 해부되지 않는다.

    앞서 언급된 바와 같이, 기본 분해들로부터 P k 의 중간 분해를 판별하기 보다는, P k-1 의 중간 분해로부터 그리고

    의 기본 분해로부터 판별된다. 이 중간 분해의 4개의 지수들은 테이블 P에 저장된다. 이와 유사하게, P

    k 의 중간 분해로부터 그리고 (7-k)!의 기본 분해로부터, 또 다른 중간 분해가 계산되는바(몫의 중간분 해), 이것의 지수들은 테이블 R에 저장된다.

    이에 해당하는 프로세싱이 부록 A-3에 주어진다. 또한, 몫(또는, 곱)의 소인수 p i 의 지수는, 4개의 셀을 구비한 테이블 R의 셀 R[i-1](또는, 테이블 P의 셀 P[i-1])에 저장된다는 점을 유의해야 한다.

    따라서, 전술한 첫번째 일례는 2개 항들(몫을 포함)에서 부분 랭크의 분해를 사용하며, 다른 2개의 일례는, 3개의 항들(2개는 분자에 하나는 분모에)에서 분해를 이용한다. 디코딩을 위한 모드(mode)는, 오직 m 8! (=4) 항들만을 이용하나, 반면에 인코딩을 위한 2개의 모드들은 위치들에 대한 개별 프로세싱을 사용하여, m l! 항들 또는 m l 항들을 이용하는바, 이들은 판독되진 않으나 Gosset 네트워크의 포인트의 8개의 위치들에 대한 루프를 해부함에 의해서 알고리즘 내에서 "하드와이어" 된다.

    TDAC 인코더를 위한 예시적인 구현예

    예시적인 마지막 구현예는, 16 kHz(광대역 : wideband)에서 샘플링된 디지털 오디오 신호을 인코딩하는데에 이용되는, 본 출원인의 TDAC 지각 주파수 인코더(perceptual frequency encoder)에 관한 것인바, 이것의 원리가 후술된다.

    TDAC 인코더는, 가변 차원 및 해상도(resolution)와 최대 15차원을 갖는 통계적 벡터 양자화를 이용한다.

    8 차원의 포인트 RE 8 의 정규 네트워크(regular network)의 순열 코드들의 경 우에 있어서, 본 발명은 본질적으로 복잡도를 감소시킬 수 있다. 하지만, 12 차원보다 큰 차원들을 이용하는 TDAC 인코더의 경우, 본 발명은 대단히 유용한바, 왜나하면 복잡도를 감소시킬 수 있을 뿐만 아니라, 고정 소수점 프로세서들(fixed point proxessor) 상에서 인코더의 구현을 가능케하기 때문이다. 상기 프로세서의 최대 정확도는 부호없는(unsigned) 32-비트 정수에 제한된다. 본 발명의 적용되지 않는다면, 이러한 구현예는 극히 복잡해질 것이다.

    이러한 인코더의 원리는 다음과 같다.

    7 kHz의 대역폭에 제한되며 16 kHz에서 샘플링되는 오디오 신호는 320개 샘플들(20 ms)의 프레임들로 나뉘어진다. 수정된 이산 코사인 프리에 변환(Modified DCT : MDCT)이, 50%의 오버랩(overlap)을 가지고(매 20ms 마다 MDCT 분석을 리프레싱하는 것에 해당) 640 샘플들의 입력 신호 블록들에 적용된다. 마지막 31개의 계수들을 0으로 세팅함으로써, 스펙트럼은 7225 Hz에 제한된다(따라서, 처음 289개의 계수들만이 0과 다름). 이러한 스펙트럼으로부터 마스킹 커브(masking curve)가 판별되며 그리고 마스크된 모든 계수들은 0 으로 세팅된다. 상기 스펙트럼은 동등하지 않은 폭들을 갖는 32개의 대역폭들로 나뉘어진다. 임의의 마스킹된 대역폭들이, 신호들의 변환 계수들에 따라서 판별된다. 스펙트럼의 각각의 대역폭에 대해서, MDCT 계수들의 에너지가 계산된다(스케일 팩터(scale factor)를 평가하기 위해). 32개의 스케일 팩터들은 신호의 스펙트럼 포락선(spectral envelope)을 구성하며, 이는 이후 양자화되고, 인코딩되며 그리고 프레임내에서 전송된다. 비트들의 동적 할당(dynamic allocation)은, 스펙트럼 포락선의 양자화된 버전으로부터 계산 된 각각의 대역폭에 대해서 마스킹 커브에 기초하는바, 이는 인코더의 이진 할당(binary allocation)과 디코더의 이진 할당 사이에서 양립성(compatibility)을 획득하기 위함이다. 이후, 각 대역폭의 표준화된 MDCT 계수들은, 알맞은 사이즈로 자리잡은 딕셔너리들을 이용하여 벡터 양자화기에 의해서 양자화된다. 상기 딕셔너리들은 유형 Ⅱ 순열 코드들의 합집합(union)을 포함한다. 마지막으로, 톤(tone) 및 보이싱(voicing) 정보 그리고 상기 스펙트럼 포락선 및 코딩된 계수들이 멀티플렉싱되며 프레임내에서 전송된다.

    순열의 랭크를 계산(인코딩)하기 위한 예시적인 구현예는, 분해들의 간결한 표현을 이용한다. 사용된 순열 코드들의 차원은 가변적이며, 위치들에 대한 루프는 해부되지 않는다. 이러한 실시예는, 부분 랭크의 분해의 비제로 지수들을 검출하는 방법을 예시한다.

    여기서, 상기 기본 분해들은 간결하게 표현된다. 이들의 지수들을 포함하고 있는 워드들은 16개의 셀들(= 15+1)을 구비한 2개의 테이블들에 저장된다. 부록 B-1에서, 테이블 D' l 은 정수들 l(0≤l≤15)의 분해들에 대한 워드들을 포함하며, 테이블 D' l! 은 이들의 팩토리얼들의 분해들에 대한 워드들을 포함한다.

    3의 거듭제곱들 역시 8개의 셀들을 갖는 테이블(Pow[3]으로 표현됨)에 저장되며 그리고 5, 5, 11 및 13의 거듭제곱들은 20개의 셀들을 갖는 테이블(Pow 로 표현됨)(사용되지 않은 거듭제곱들에 대해 0 의 더미 저장을 구비함)에 저장된다.

    대응하는 프로세싱은 부록 B-2에서 다시 설명된다.

    물론, 본 발명은 일례로서 앞서 설명된 실시예들에게만 국한되는 것은 아니며, 다른 변형예들을 포함할 수도 있다.

    본 출원인이 알고있는 바에 따르면, 본 발명은 순열 코드들에서 소인수 거듭제곱 분해들을 사용하는바 이는 신규한 것이다. 하지만, 이러한 사용은, 순열 코드들로 벡터 양자화하는 경우에서 처럼, 조합 표현 계산들(combinatorial expression calculations)이 제공되는 때에 특히나 유용하다. 따라서, 일반적으로는, 본 발명은 하나 이상의 순열 코드들에 의해 인코딩/디코딩함에 있어 순열의 랭크가 상이할지라도, 임의의 조합적인 표현에 대해서 소인수 거듭제곱 분해들을 이와같이 사용하는 것을 목표로 한다.

    본 발명은 예컨대, 전화 단말기(telephony terminal) 특히 휴대폰과 같은, 스피치 신호(speech signal) 인코딩/디코딩에 특히 유용하게 적용가능하다. 하지만, 본 발명은 임의 유형의 신호들, 특히 이미지 또는 비디오 신호들을 인코딩/디코딩함에 있어서도 적용가능하다.

    또한, 본 발명은 순열 코드들을 이용한 디지털 신호 인코딩/디코딩 디바이스의 메모리에 저장되도록 디자인된 컴퓨터 프로그램을 목표로 한다. 이러한 프로그램은, 본 발명에 따른 방법의 단계들을 구현하기 위한 명령들을 포함한다. 전형적으로는, 앞서 설명된 도4 내지 도8이, 이러한 프로그램이 구성될 수도 있는 알고리즘 순서 다이어그램에 대응할 수 있다.

    또한, 본 발명은 순열 코드들을 이용하는 디지털 신호 인코딩/디코딩 디바이 스를 목표로하며, 도9를 참조하여 다음과 같은 것들을 포함할 수 있다:

    - 앞서 언급된 유형의 컴퓨터 프로그램의 명령들과 선택된 정수들의 분해들의 미리-기록된 표현들을 저장하기 위한 메모리 유닛 MEM, 그리고

    - 본 발명의 방법을 구현하기 위해서 상기 메모리 유닛 MEM에 액세스하는 계산 모듈 PROC.

    이러한 수단들 MEM, PROC 는 다음과 같이 설계될 수 있다:

    ● 선택된 코드 벡터 y(도9의 실선 화살표)로부터 순열의 랭크 t를 제공하도록:

    ○ 소스 인코더의 인덱싱 모듈내에서, 또는

    ○ 채널 디코더의 인덱싱 모듈내에서,

    ● 또는, 재구성될 코드 벡터 y(도9의 점선 화살표)를 순열의 랭크 t 로부터 제공하도록:

    ○ 소스 디코더의 인덱싱 모듈내에서, 또는

    ○ 채널 디코더의 인코딩 모듈내에서.

    물론, 메모리 MEM 내에 미리 기록된 표현들은 어드레스 콘텐츠(address contents) 형태를 가질 수도 있으며(해체된 표현) 또는 비트들의 워드들 형태를 가질 수도 있다(간결한 표현).

    부록들(APPENDICES)

    QQ群二维码
    意见反馈