통신 채널을 통해 소스로부터 목적지로 데이터를 송신 및 인코딩하는 방법

申请号 KR1020067012629 申请日 2004-12-01 公开(公告)号 KR1020060096156A 公开(公告)日 2006-09-07
申请人 디지털 파운튼, 인크.; 发明人 쇼크롤라히엠아민;
摘要 An encoder (115) reads an ordered plurality of input symbols (110), comprising an input file (101) or input stream (105), and produces output subsymbol. The ordered plurality of input symbols are each selected from an input alphabet, and the generated output subsymbols comprise selections among an output subsymbols alphabet. The output subsymbol is generated using a function evaluator applied to subsymbols of the input symbols. The functions used to generate the output subsymbols can be XOR's of some of the input subsymbols and these functions are obtained from a linear code defined over an extension field GF(2). In a decoder (155), output subsymbols received by the recipient are obtained from output subsymbols transmitted from one sender that generates those output symbols based on an encoding of an input sequence.
权利要求
  • 전송할 데이터가 입력 심볼의 순서대로 나열된 세트로 배열되어 있는 통신 채널을 통해 소스로부터 목적지로 데이터를 송신하는 방법으로서,
    데이터의 입력 서브심볼을 지정하는 단계로서, 입력 서브심볼은 입력 심볼의 일부 또는 전부이며, 적어도 하나의 입력 심볼은 둘 이상의 서브심볼로 분할되고, 각각의 입력 서브심볼은 그 입력 심볼 내의 유일한 지수에 의해 식별 가능하도록 하는 것인, 입력 서브심볼의 지정 단계와;
    상기 입력 서브심볼로부터 복수의 출력 서브심볼을 발생하는 단계로서, 출력 서브심볼은 값 함수 및 관련도의 세트를 이용하여 하나 이상의 입력 서브심볼로부터 발생되며, 상기 관련도의 세트는 상기 값 함수가 적용되는 입력 서브심볼을 식별하고, 적어도 하나의 출력 서브심볼은 각각 입력 심볼 내의 별개의 지수를 갖는 복수의 입력 서브심볼의 함수인 것인, 복수의 출력 서브심볼의 발생 단계와;
    상기 발생된 복수의 심볼의 출력으로부터 복수의 출력 심볼을 발생하는 단계로서, 상기 복수의 출력 심볼은, 인코딩된 입력 심볼과 동일한 크기의 수신된 출력 심볼의 적어도 하나의 가능한 세트에 대해, 인코딩된 입력 심볼을 재발생하기 위하여, 추가적으로 수신된 출력 심볼이 수신된 출력 심볼의 완전한 디코딩에 요구되도록 하는 것인, 복수의 출력 심볼의 발생 단계와;
    상기 복수의 출력 심볼을 통신 채널을 통해 송신하는 단계로서, 수신자가 상기 복수의 출력 심볼의 일부 또는 전부로부터 순서대로 나열된 입력 심볼의 세트를 재생할 수 있도록 하는 복수의 출력 심볼을 송신하는 단계
    를 포함하는, 소스로부터 목적지로 데이터를 송신하는 방법.
  • 제1항에 있어서,
    입력 심볼의 주어진 세트에 대한 가능한 출력 심볼의 수는 입력 심볼의 세트를 재발생하기 위하여 필요한 출력 심볼의 수에 대하여 효율적으로 무제한인 것인, 소스로부터 목적지로 데이터를 송신하는 방법.
  • 제1항에 있어서,
    하나 이상의 입력 서브심볼로부터, 입력 서브심볼의 세트의 전부보다 적은 입력 서브심볼로부터, 및 적어도 하나의 입력 심볼의 전부보다 적은 서브심볼로부터, 적어도 하나의 출력 서브심볼이 발생되는 것인, 소스로부터 목적지로 데이터를 송신하는 방법.
  • 제1항에 있어서,
    각각의 입력 심볼은 서브심볼의 공통의 수로 분할되고 공통의 수는 1보다 큰 것인, 소스로부터 목적지로 데이터를 송신하는 방법.
  • 제1항에 있어서,
    상기 값 함수는 모든 출력 서브심볼에 대해 동일한 것인, 소스로부터 목적지 로 데이터를 송신하는 방법.
  • 제1항에 있어서,
    상기 값 함수는 적어도 2 개의 출력 서브심볼에 대해 상이한 것인, 소스로부터 목적지로 데이터를 송신하는 방법.
  • 제1항에 있어서,
    상기 관련도의 세트는 연쇄 반응 코딩 처리를 이용하여 결정되는 것인, 소스로부터 목적지로 데이터를 송신하는 방법.
  • 제1항에 있어서,
    상기 값 함수는 상기 관련도의 세트의 선형 함수인 것인, 소스로부터 목적지로 데이터를 송신하는 방법.
  • 제8항에 있어서,
    상기 선형 함수는 인터리빙된 변환 처리를 이용하여 유도되는 것인, 소스로부터 목적지로 데이터를 송신하는 방법.
  • 제1항에 있어서,
    출력 서브심볼 상에서 변하는 상기 값 함수는 인터리빙된 변환 처리를 이용 하여 유도된 상기 관련도의 세트의 선형 함수이며, 복수의 값 함수는, 그 주요 필드 상의 적어도 2 개의 등급의 유한 필드 상에서 정의된 코드의 발생기 행렬에 적용되는 인터리빙된 변환 처리를 이용하여 얻어지는 것인, 소스로부터 목적지로 데이터를 송신하는 방법.
  • 제10항에 있어서,
    상기 코드는 제로보다 큰 종수의 곡선 상에서 정의된 대수-기하 코드인 것인, 소스로부터 목적지로 데이터를 송신하는 방법.
  • 제10항에 있어서,
    상기 코드는 랜덤 코드인 것인, 소스로부터 목적지로 데이터를 송신하는 방법.
  • 제10항에 있어서,
    상기 코드는, 그 주요 필드 상의 적어도 2 개의 등급의 확장인 유한 필드 상의 연쇄 반응 코드인 것인, 소스로부터 목적지로 데이터를 송신하는 방법.
  • 제13항에 있어서,
    상기 연쇄 반응 코드는 랜덤 코드인 것인, 소스로부터 목적지로 데이터를 송신하는 방법.
  • s 입력 심볼(s는 1보다 큰 정수)을 포함하는 데이터를 t 심볼(t는 1보다 큰 정수)로 인코딩하는 방법으로서,
    각각의 s 입력 심볼을 동일한 크기의 m 서브심볼로 분할하는 단계와;
    t 행 및 s 열의 기본 행렬을 얻고, 상기 기본 행렬 엔트리는 유한 필드 GF(2 m )의 멤버(member)이고, 상기 기본 행렬은 리드-솔로몬 기본 행렬과 다르게 구성하는 단계와;
    기본 행렬의 각각의 엔트리를 GF(2) 모듈인 유한 필드의 규칙적인 표현으로 치환함으로써, 기본 행렬로부터 확장 2진 행렬을 발생하여, t*m 행 및 s*m 열의 2진 행렬을 발생하는 단계와;
    s*m 입력 서브심볼에 대해 확장 2진 행렬을 연산하여 t*m 출력 서브심볼을 구성하는 단계와;
    m 출력 서브심볼의 그룹을 출력 심볼로 그룹화하여, s 입력 심볼과 함께, s 입력 심볼에 대한 에러 정정을 위해 사용 가능한 t 출력 심볼을 구성하는 단계
    를 포함하는, 데이터를 인코딩하는 방법.
  • 제15항에 있어서,
    상기 기본 행렬은 제로보다 큰 종수의 곡선에 의거하여 대수-기하 코드를 나타내는 것인, 데이터를 인코딩하는 방법.
  • 说明书全文

    서브심볼 기반 코드를 이용한 데이터 삭제를 방지하기 위한 방법{PROTECTION OF DATA FROM ERASURES USING SUBSYMBOL BASED CODES}

    관련출원에 대한 상호-참조

    본 출원은 모두 계류중인 아래의 미국 가특허 출원: 2003년 12월 1일에 출원된 "Protection of Data From Erasures Using Interleaved Transformations and Codes From Algebraic Geometry"(대리인 번호 19186-005400US)로 명칭이 붙여진 미국 가특허 출원 제60/526,218호와, 2003년 12월 2일에 출원된 "Protection of Data From Erasures Using Interleaved Transformations and Codes From Algebraic Geometry"로 명칭이 붙여진 미국 가특허 출원 제60/526,452호의 우선권을 주장하고 있으며, 상기 특허 모두는, 본 명세서에서 그 전체가 설명되는 것과 같이, 모든 목적의 참조를 위해 여기에 포함된다.

    또한, 본 출원은, Luby(이하, "Luby I"라고 한다)에게 특허 허여된 "Information Additive Code Generator and Decoder for Communication Systems"로 명칭이 붙여진 미국 특허 제6,307,487호, 및 Shokrollahi et al(이하, "Shokrollahi I"라고 한다)의 "Multi-Stage Code Generator and Decoder for Communication Systems"로 명칭이 붙여진 2001년 12월 21에 출원된 미국 출원 제10/032,156호를 포함하는 공유 특허 및 출원을 참조로 하며, 그 각각은, 본 명세서에서 그 전체가 설명되는 것과 같이, 모든 목적의 참조를 위해 여기에 포함된다.

    장애가 있는 네트워크를 통한 데이터의 송신은 많은 연구의 주제가 되고 있다. 인터넷과 같은 컴퓨터 네트워크, 또는 다른 패킷 기반의 네트워크 상에서는, 먼저, 데이터를 패킷으로 재분할한 다음, 패킷을 네트워크를 통해 목적지에 독립적으로 라우팅(routing)함으로써 데이터가 송신된다. 이러한 네트워크에서는, 종종 패킷의 손실이 예상된다. 물리적인 송신층에서의 에러, 기기가 패킷을 누락하게 하는 라우터 또는 다른 네트워크 포인트에서의 오버플로우(overflow) 등으로 인해 패킷이 손실될 수도 있다. 데이터가 완전히 수신되는 것을 보증하기 위하여, 이러한 데이터 손실을 방지하기 위한 메커니즘이 주로 사용된다. 일반적으로, 패킷이 적절하게 수신되거나, 또는 패킷이 손실된 것으로 간주되어 전체 패킷의 손실을 처리하기 위한 조치가 취해진다는 점에서, 손실의 단위는 패킷이다. 이와 같이, 패킷의 비트가 수신되지만, 패킷이 완전히 올바르게 수신되지 않으면, 전체 패킷은 손실된 것으로 간주된다. 손실은 패킷 전체를 누락하는 형태이거나, 신뢰할 수 없는 비트를 생성하는 패킷에서의 에러, 즉 삭제 및 에러가 존재한다고 판정하는 형태일 수 있다.

    최근, 송신 도중에 데이터가 손실될 것이라는 예상이 있을 경우, 데이터를 보호하기 위한 2 종류의 코드, 즉 연쇄 반응 코드(chain reaction code) 및 다단계 연쇄 반응 코드(multi-stage chain reaction code)가 제안되었다. 이들 코드는, k 심볼(symbol)을 갖는 주어진 콘텐츠에 대해, 그 누적된 수가 대략 k와 동일한 별개의 출력 심볼의 임의의 세트의 수신으로부터 원래의 k 심볼의 복구가 가능하도록 하여, 출력 심볼의 효율적으로 무제한인 스트림(stream)을 생성한다. 다르게 표시되지 않으면, 여기서 사용된 "연쇄 반응 코드" 또는 "연쇄 반응 코드들"에 대한 참조 문헌은 Luby I 및/또는 그 밖의 문헌에 기재된 것과 같은 연쇄 반응 코드에 적용될 수 있으며, Shokrollahi I에 기재된 것과 같은 다단계 연쇄 반응 코드에도 적용될 수 있음을 이해해야 한다.

    연쇄 반응 코드에서는, 거의 모든 경우, 가능한 출력 심볼의 수는, 입력 심볼의 복구를 위해 실제로 발생되거나 사용되는 출력 심볼의 수(가능한 심볼의 수보다 훨씬 적다)에 비해 상대적으로 클 수 있으므로, k 입력 심볼 입력의 주어진 세트에 대해 가능한 출력 심볼의 수는 "효율적으로 무제한"이라고 한다. 예를 들어, 10,000 비트에 대한 입력 심볼 코드 및 대표적으로 예상되는 송신이 크기 10 기가비트(gigabit)에 이르는 파일 또는 스트림이면, 인코더(encoder)는 k=1,000,000 심볼의 입력을 처리하도록 설계되어야 한다. 이러한 인코더는 2 32 (40억)에 이르는 출력 심볼을 반복할 필요없이 발생할 수 있도록 구성될 수도 있다. 이것이 충분하지 않으면, 인코더는 더 많은 출력 심볼을 반복할 필요없이 발생할 수 있도록 구성될 수 있다. 물론, 모든 물리적으로 실현 가능한 시스템은 한정되어 있으므로, 인코더는 궁극적으로 반복되는 상태에 도달할 것이지만, 임의의 예상된 송신 및 에러 레이트에 대하여, 반복없는 출력 심볼의 수가 효율적으로 무제한이 되도록, 그 상태가 항상 설계될 수 있다.

    여기서, 패킷은 하나의 심볼 또는 다수의 심볼을 운반할 수 있다. 요구되는 것은 아니지만, 입력 심볼에 대해 코딩(coding)된 비트의 수와, 출력 심볼에 대해 코딩된 비트의 수는 동일할 수 있다.

    일부 실시예에서, 이들 코드는 입력 심볼에 대해 XOR을 수행하여 데이터를 인코드(encode)하고, 수신된 심볼에 대해 XOR을 수행하여 디코드(decode)하지만, 다른 연산이 이와 마찬가지로, 또는 그 대신에 사용될 수도 있다. XOR은 신속하고 가역성이 있기 때문에 유용한 연산이다. 다른 연산도 이러한 장점을 제공할 수 있다.

    이들 코드는, 송신기 또는 수신기에 손실률이 알려져 있지 않은 장애가 있는 네트워크 상의 하나 이상의 송신기로부터 하나 이상의 수신기로 데이터를 분배하는 문제를 해결한다. 이에 대한 하나의 이유는, 입력 심볼의 수에 대해 가능한 출력 심볼의 많은 수에 의하여, 수신기들 사이의 조정이 없이도, 수신기가 압도적으로 불리함에도 불구하고 다른 수신기에 의해 송신된 패킷을 복제하지 않는다는 것이다. 이 특성을 수신기가 "정보 부가적"이라고 한다.

    일부의 경우, 주어진 콘텐츠로부터 출력 심볼의 효율적으로 무제한인 수를 생성하는 것이 필요하지 않거나 바람직하지 않을 수도 있다. 예를 들어, 수신기가 시간에 제약되어 있을 경우에는, 소정의 시간 기간 이후에 도달하는 부가적인 심볼을 대기하는 사치가 없을 수도 있다. 이러한 경우는, 예를 들어, 라이브 영화(live movie)가 하나 또는 다수의 수신기에 송신될 때이다. 라이브 송신의 특성으로 인해, 수신기의 피드(feed)는 송신기의 피드와 동기화되어야 하고 무제한으로 차단될 수 없으므로, 충분한 인코딩 데이터가 수신기에 도달하는 것을 항상 대기하는 것은 불가능할 수도 있다. 이러한 경우, 손실이 예상되며, 송신기는 고정된 추가적인 양의 용장성(redundant) 심볼을 콘텐츠에 추가할 수 있고, 용장성 심볼과 함께 콘텐츠를 송신할 수도 있다. 콘텐츠의 송신 중의 손실량이 용장성 심볼의 수보다 크지 않으면, 수신기에서 손실된 데이터의 복구가 예상된다.

    이 문제는 연쇄 반응 코드에 의해 해결될 수도 있다. 이러한 경우, 인코더는 효율적으로 무제한인 스트림보다는, 고정된 양의 인코딩된 데이터만을 발생한다. 그러나, 일부의 경우, 상이한 해결책이 더 바람직할 수도 있다. 예를 들어, 연쇄 반응 코드에 대한 디코딩 처리(decoding processing)의 확률적인 속성으로 인해, 이들 처리는 매우 작은 콘텐츠 크기에 대해 약간의 부가적인 오버헤드(overhead)를 초래할 수도 있다.

    리드-솔로몬(Reed-Solomon) 코드("RS 코드")는 코더(coder) 출력 및 디코더(decoder) 입력 사이에서 삭제되는 데이터의 송신 또는 저장을 처리하기 위해 사용되고 있는 코드의 클래스(class)이다. 이 개시된 내용의 전반에 걸쳐, 코딩은 송신에 한정되는 것이 아니라, 인코딩된 데이터가 채널을 통과할 경우에 삭제 및/또는 에러를 나타낼 수도 있는 채널에 의해, 디코더와는 시간, 장소 등에 있어서 분리된 인코더에서 원래의 데이터를 표현하는 것임을 이해해야 한다. RS 코드는 다수의 연구자에 의해 많은 조건, 데이터 및 채널에 대해 광범위하게 연구되고 있으며, 일정한 특성이 있음을 알게 되었다.

    이러한 하나의 조건은 "최적 조건"으로서 기술되어 있는 것이다. RS 코드는 2진 필드(binary field) 상에서 연산되는 것이 아니라 더 큰 갈로아 필드(Galois field) 상에서 연산된다. RS 코드의 기본적 특성 중 하나는, k 심볼이 RS 코드에 의해 인코딩될 경우, 저장 또는 송신을 위해 n<k 심볼을 산출하며, 원래의 k 심볼은 인코딩된 n 심볼의 k개의 별개의 수신된 심볼의 임의의 가능한 조합으로부터 확실하게 복구될 수 있도록 하는 최적 조건을 RS 코드가 충족시킨다는 것이다. 원래의 k 심볼은 k보다 더 적은 별개의 수신된 심볼로부터는 복구될 수 없으므로, 이에 따라, 수신된 심볼의 수가 "최적"인 것으로 간주된다.

    이 최적화는, 인코딩에 요구되는 연산의 수가 크고, 더 긴 코드(즉, 갈로아 필드)에서 더 커진다는 점에서, 상당한 대가를 치른다. RS 코드에서, 최대 블록 길이 n은, 블록 길이가 원래의 k 입력 심볼로부터 발생된 출력 심볼의 수인 경우보다 시간상으로 앞서서 결정된다. nk 이상의 출력 심볼이 손실되면, 원래의 k 입력 심볼은 복구될 수 없음에 유의해야 한다. 더 큰 블록 길이에 대해서는 계산이 어려워지며 매우 큰 블록 길이에 대해서는 계산이 실행 불가능하므로, 블록 길이 n은 임의의 예상된 조건을 처리하기 위해 임의로 그 길이가 증가될 수 없다.

    블록 길이 n 및 차원(dimension) k를 갖는 갈로아 필드 GF(2 A ) 상에서 정의된 리드-솔로몬 코드에 대해, 출력 심볼을 생성하기 위한 심볼의 XOR의 수는 평균적으로 k*(nk)*A/(2*n)과 동일함을 알 수 있다. 이러한 리드-솔로몬 코드를 이용하면, 전체적으로 n 출력 심볼을 생성하기 위하여, k 입력 심볼이 사용되며, 대표적으로, k 입력 심볼은 n 출력 심볼들 사이에 포함되고 n은 k보다 더 크다. 이에 비해, 연쇄 반응 코드를 이용하면, 출력 심볼을 생성하기 위한 심볼의 XOR의 평균 적인 수는 k에 독립적인 상수, 또는 생성된 출력 심볼의 수와 동일하다. 디코더에 대해서도 이와 유사한 결과가 유효하다.

    리드-솔로몬 코드의 길이 n은 2 A +1을 초과할 수 없다. 이 후자의 조건은, A가 2의 제곱인 것으로 주로 선택된다는 사실과 함께, 때때로 인코딩 및 디코딩 처리를 상당히 늦출 수도 있다. 예를 들어, 원래의 콘텐츠가 32 KB(1 KB = 1024 바이트) 크기라고 가정하면, 각 패킷은 인코딩을 위해 입력 데이터의 1 KB에 대해 인코딩할 수 있고, 전체 48 패킷이 송신되어야 한다. 이 예에서, 콘텐츠는 32개의 1 KB 청크(chunk)(각각은 송신될 하나의 패킷에 대해 할당됨)로 분할될 수도 있고, 그 다음으로, 각 청크는 X 입력 심볼로 다시 재분할될 수도 있다. 그 다음, (각 청크의 첫 번째 입력 심볼 모두에 대해 연산한 다음, 각 청크의 두 번째 입력에 대해 연산하는 등과 같이) 각 청크로부터의 하나의 입력 심볼에 대해 연산할 때마다, 리드-솔로몬 코딩 처리가 병렬로 X회 적용되며, 이것은 각 연산이 32개의 입력 심볼을 계산함을 의미한다. 이것은 X 위치의 각각에 대해 16개의 추가적인 출력 심볼을 생성한다고 가정하면, 각각 길이가 1 KB인 송신되어야 할 16개의 추가적인 패킷을 생성하기 위하여, X 출력 심볼의 각 그룹이 함께 위치된다. 이 예에서, 2의 제곱인 가장 작은 수용 가능한 A는 A = 4이기 때문에 A = 8일 것이며, 2 A +1 = 17이 되며, 이것은 48보다 작다. 이 경우, 리드-솔로몬 코드는 필드 GF(256)에서 연산되며, 따라서, 각 심볼은 1 바이트 길이 및 X=1024이다. 이 예에 의하여 알 수 있는 것과 같이, 이들 코드는 최적 조건을 충족할 수 있는 반면, 상당한 계산을 필요로 하며, 가능한 코드의 길이에 관해 제약을 가지고 있다.

    코딩의 개념에 대해 약간 소개한다. 송신 세분화도(transmission granularity)는 하나의 단위로 송신 및 수신되는 오브젝트의 크기를 말한다. 예를 들어, 패킷 네트워크는 데이터를 패킷으로 송신 및 수신한다. 패킷의 비트 중 일부만 삭제 또는 오염되더라도, 전체 패킷은 폐기되고 그 패킷을 전체적으로 복구하기 위한 메커니즘(포워드 에러 정정, 재송신 요구 등)이 활성화된다. 이와 같이, 이러한 오브젝트는 에러 없이 수신되거나 완전히 삭제된다. 일부 응용예에서는, 오브젝트 크기가 송신 패킷의 크기이거나 그것보다 작을 수 있다. 송신 패킷 사이의 손실의 상호관련이 예상될 경우, 송신 세분화도는 패킷 크기보다 클 수 있다. 다른 응용예에서는, 송신 세분화도가 패킷 크기보다 작을 수 있다.

    계산 세분화도(computational granularity)는 인코더 및/또는 디코더에서 연산되는 오브젝트의 크기를 말한다. 따라서, 인코더의 기본 연산이 128-바이트 단위의 XOR이면, 이것이 계산 세분화도이다. 128-바이트 서브심볼로 재분할된 1024 바이트를 포함하는 심볼(예를 들어, 패킷일 수도 있음)은 8개의 서브심볼로 재분할된 심볼이며(반드시 요구되는 것은 아니지만, 모든 서브심볼이 동일한 크기이면, 더욱 간단하다), XOR은 이들 서브심볼에 대해 수행된다. 따라서, 계산 세분화도는 128 바이트이다.

    리드-솔로몬 코드의 최적화에 대한 한 가지 이유는 그 송신 세분화도와 계산 세분화도 사이의 관계에 있다. 하나의 예는 이 점을 예시할 것이다.

    주어진 파일을 인코딩하고, 인코딩된 정보를 채널을 통해 각각 1024 바이트 크기의 패킷으로 송신하기 위해 사용되는 필드 GF(256) 상의 리드-솔로몬 코드를 고려한다. 이 경우의 계산 세분화도는 128 바이트(1024 바이트를 8로 나눔)일 수 있는 반면, 송신 세분화도는 1024 바이트와 동일하다. 이 경우, 비트의 시퀀스(sequence)의 XOR과 같은 기본 연산은 전체를 단위로 하여 128 바이트에 대해 수행된다.

    일반적으로, 인코딩 및 디코딩의 효율은 계산 세분화도에 따라 변한다. 효율은 많은 방법으로 측정될 수 있지만, 측정하는 한 가지 방법은 데이터의 단위를 인코딩 또는 디코딩하기 위한 평균적인 연산의 수에 의한 것이다. 종종, 더욱 미세한 계산 세분화도에 대해 인코딩 및 디코딩이 덜 효율적이며, 더욱 개략적인 계산 세분화도에 대해 인코딩 및 디코딩이 더 효율적이다. 그러나, 더욱 미세한 계산 세분화도를 갖는 코드는 더 양호한 수신 오버헤드를 제공할 수 있으며, 바꾸어 말하면, 인코더에 제공되는 데이터를 나타내는 심볼의 수에 대한, 올바른 디코딩을 보증하기 위해 수신될 필요가 있는 심볼의 수의 초과량은 매우 작게 유지될 수 있다. 그 결과, 코딩 효율성과, 주어진 코드에 대한 송신 오버헤드 사이에는 교환관계(trade off)가 있다.

    리드-솔로몬 코드는, 인코딩된 데이터만큼 수신될 경우에 삭제에도 불구하고 데이터의 최적의 복구가 보장될 정도로 계산 세분화도가 작기 때문에, 이 코딩 교환관계의 한쪽에 해당한다. 다른 한쪽에서는, (패킷 네트워크를 통한 송신에 사용되는 코드와 같은) 2진 알파벳 상에 정의된 코드가 송신 세분화도 만큼 큰 계산 세분화도를 갖지만, 완전한 디코딩을 보증하기 위해 요구되는 수신 오버헤드에 있어 서는 비효율적일 수도 있다.

    전술한 것과 같이, 리드-솔로몬 코드는 최대 에러율(error rate)이 미리 결정될 것을 필요로 하며, 다시 말하면, k 심볼이 n RS-심볼로 인코딩되면, (nk)/n보다 큰 에러율은 디코더가 송신된 데이터를 복구하지 못하게 할 것이다. 따라서, 송신된 데이터의 성공하지 못한 복구의 최종 확률에 의해 측정되는 송신 시스템에서는, 리드-솔로몬 코드가 그 최적화에도 불구하고 긍정적인 실패 확률을 나타낸다. 이것은 수신기에 의해 수신된 데이터의 양이 송신된 데이터보다 정말 작다고 하는 긍적적인 확률이 존재하기 때문이다. 그 결과, 궁극적으로, 코딩 시스템은 덜 효율적인 코딩을 가지며, 낮출 필요가 있는 실패 확률을 여전히 가지게 될 것이다.

    그러므로, 특수한 응용, 입수 가능한 처리능력 및 데이터 세트에 대해 계산 노력 및 오버헤드 효율이 필요에 따라 교환관계가 될 수 있는 코딩 시스템 및 방법으로서, 채널을 통해 송신된 데이터를 인코딩 및 디코딩하기 위한 코딩 시스템 및 방법이 필요하다.

    본 발명에 따른 통신 시스템의 하나의 실시예에서는, 인코더가 출력 심볼 서브심볼을 사용하여, 예를 들어, 오버헤드 효율의 소량의 대가에 비해 계산 노력을 크게 감소시키기 위하여, 계산 노력 및 오버헤드 효율의 교환관계를 실시 또는 제어한다. 인코더는 입력 파일 또는 입력 스트림을 포함하는 순서대로 나열된 복수의 입력 심볼을 판독하고, 출력 서브심볼을 생성한다. 순서대로 나열된 복수의 입력 심볼은 입력 알파벳으로부터 각각 선택되며, 발생된 출력 서브심볼은 출력 서브심볼 알파벳 중에서 선택된 것을 포함한다. 출력 서브심볼은 입력 심볼의 서브심볼에 적용되는 함수 평가기(function evaluator)를 이용하여 발생된다. 일부 실시예에서, 인코더는 출력 서브심볼을 생성할 때마다, 한번 또는 그 이상 호출될 수도 있다. 다음으로, 출력 서브심볼은 출력 심볼로 결합되어 그 목적지로 송신될 수 있다.

    본 발명의 특징에 따른 하나의 인코딩 처리에서, 입력 서브심볼로부터 출력 서브심볼을 발생시키기 위해 사용되는 함수는 일부의 입력 서브심볼의 XOR이다. 본 발명의 특징에 따른 또 다른 인코딩 처리에서, 이들 함수는, GF(2) 상의 확장 필드의 규칙적인 표현을 이용하여 이 코드의 발생기 또는 패리티-검사 행렬(parity-check matrix)에서의 각 엔트리를 적절한 2진 행렬로 변환함으로써, GF(2)의 확장 필드 상에 정의된 선형 코드(linear code)로부터 얻어진다.

    본 발명의 특징에 따른 디코더에서는, 수신자에 의해 수신된 출력 서브심볼은 입력 시퀀스(파일, 스트림 등)의 인코딩에 의거하여 출력 심볼을 발생한 하나의 송신기로부터 송신된 출력 심볼로부터 얻어진다. 출력 심볼은 송신시에 손실될 수 있으므로, 디코더는 송신된 출력 심볼의 임의의 부분만을 수신하더라도 적절하게 연산한다.

    본 발명은 계산 노력 및 송신 효율의 교환관계를 제어할 수 있는 것과 같은 장점을 제공한다. 예를 들어, 완화된 최적화 요건에 의하여, 가능한 송신 노력에 있어서의 작은 증가에 대해 계산 노력이 크게 감소될 수 있다. 특정 코드에 의하여, 추가적인 출력이 용이하게 입수 가능하므로, 최대 최적화 조건 하에서 디코딩하기 위해 요구되는 심볼의 수에 비해 상대적으로 적은 추가적인 심볼의 수신에 의해 디코딩 실패율(failure rate)이 임의로 감소될 수 있다. 구현예에서는, 계산의 단위(개별 코딩 또는 디코딩 연산의 일부를 구성하는 데이터 사이의 경계)와 손실의 단위(단위의 경계 내의 임의의 데이터가 입수 불가능할 경우, 그 단위의 경계 내의 모든 데이터가 손실될 것 같은 데이터 사이의 경계)를 구비함으로써, 계산 노력이 감소된다. 구체적인 구현예에서, 손실의 단위는 심볼 또는 패킷이고, 계산의 단위는 서브심볼이다.

    여기에 설명된 발명의 속성 및 장점에 대한 추가적인 이해는 명세서의 나머지 부분 및 첨부 도면을 참조하여 실현될 수도 있다.

    도 1은 본 발명의 하나의 실시예에 따른 통신 시스템의 블록도이다.

    도 2는 도 1의 인코더의 일부를 더욱 상세하게 도시한 블록도이다.

    도 3a 및 도 3b는 발생기 행렬을 예시한 것으로서, 도 3a는 GF(4) 필드 상의 기본 행렬을 도시한 것이며, 도 3b는 GF(2) 상의 2진 발생기 행렬을 예시한 것이다.

    도 4는 도 1의 출력 심볼 발생기를 예시한 것이다.

    도 5는 도 1의 서브심볼 발생기를 예시한 것이다.

    여기에 설명된 예에서는, "서브심볼 기반 코딩"으로 표시된 코딩 방식이 설명되며, 본 설명에서 사용된 각종 용어의 의미 및 범위의 설명이 이어진다.

    인코더는, 파일, 스트림, 또는 다른 입력 데이터 소스로부터 입력 데이터를 수신하고, 이 데이터를 인코딩하여, 채널이 만들 수 있는 데이터에 대한 효과가 채널의 다른 단부의 디코더에 의해 교정될 수 있도록 하고, 디코더는 원래의 데이터를 필요한 정확도로 다시 발생시킬 수 있는 소프트웨어 처리, 하드웨어 장치 그 조합 등이다.

    서브심볼 기반의 코딩에 의하여, 출력 심볼은 입력 파일로부터의 송신기에 의해 필요에 따라 발생된다. 각각의 출력 심볼은 하나 이상의 서브심볼을 포함하며, 적어도 하나의 출력 심볼은 적어도 두 개의 서브심볼을 포함한다. 인코더 또는 디코더 소프트웨어 및/또는 하드웨어를 이용하여, 입력 파일을 포함하는 심볼의 서브심볼에 대한 계산 연산(computational operation)을 수행함으로써, 출력 심볼 내의 각각의 서브심볼이발생된다. 일단 발생되면, 출력 심볼은 패킷으로 배치될 수 있고, 그 목적지로 송신될 수 있으며, 각 패킷은 하나 이상의 출력 심볼을 포함한다.

    여기서 사용된 것과 같이, 용어 "파일"은 하나 이상의 소스에 저장되어 하나 이상의 목적지에 하나의 단위로서 전달되는 임의의 데이터를 말한다. 따라서, 파일 서버 또는 컴퓨터 저장 장치로부터의 문서, 이미지 및 파일은 전달될 수 있는 "파일"의 모든 예이다. 파일은 (하드 디스크에 저장된 1 메가바이트 이미지와 같이) 알려진 크기이거나, (스트리밍 소스의 출력으로부터 취득된 파일과 같이) 알려지지 않은 크기일 수 있다. 여하튼, 파일은 입력 심볼의 시퀀스이고, 각 입력 심볼은 파일 내의 위치와 값을 가진다.

    송신은 파일은 전달하기 위하여 채널을 통해 하나 이상의 송신기로부터 하나 이상의 수신자에게 데이터를 송신하는 처리이다. 하나의 송신기가 완전한 채널에 의해 임의의 수의 수신자에게 접속되면, 모든 데이터가 올바르게 수신될 것이기 때문에, 수신된 데이터는 입력 파일의 정확한 카피(copy)일 수 있다. 여기서, 대부분의 현실 세계의 채널의 경우와 같이, 채널이 완전하지 않다고 가정한다. 많은 채널 불완전 중에서, 관심이 있는 두 개의 불완전은 데이터 삭제 및 데이터 미완성(데이터 삭제의 특수한 경우로 취급될 수 있음)이다. 데이터 삭제는 채널이 데이터를 잃거나 누락할 경우에 발생한다. 데이터 미완성은, 데이터의 일부가 이미 통과할 때까지 수신자가 수신을 시작하지 않거나, 수신자가 송신이 종료되기 전에 데이터의 수신을 중지하거나, 수신자가 데이터의 수신을 간헐적으로 중지하고 다시 시작할 경우에 발생한다. 데이터 미완성의 예로서, 이동하는 위성 송신기는 입력 파일을 나타내는 데이터를 송신하는데, 수신자가 범위 내에 들기 전에 송신을 시작할 수 있다. 일단 수신자가 범위 내에 들어오면, 위성이 범위 밖으로 이동할 때까지 데이터가 수신될 수 있으며, 그 지점에서 수신자는 위성 접시의 방향을 바꾸어(이 기간에는 데이터를 수신하지 않음), 범위 내부로 이동한 다른 위성에 의해 송신되고 있는 동일한 입력 파일에 대한 데이터의 수신을 시작할 수 있다.

    이 설명을 읽어보면 명백한 것과 같이, 수신자가 전체 시간 동안 범위 내에 있었지만, 수신자는, 수신자가 데이터의 수신을 시작한 지점에 이르기까지 채널이 모든 데이터를 손실한 것처럼, 데이터 미완성을 처리할 수 있으므로(수신자가 동일한 문제를 가진다), 데이터 미완성은 데이터 삭제의 특수한 경우이다. 또한, 통신 시스템의 설계시에 잘 알려져 있는 것과 같이, 검출 가능한 에러를 갖는 모든 데이터 블록 또는 심볼을 단순히 누락함으로써, 검출 가능한 에러는 삭제와 동등할 수 있다.

    일반적으로, 송신은 송신기와 수신자를 접속하는 채널을 통해 송신기로부터 수신자에게 데이터를 이동하는 작업이다. 채널은 채널이 데이터를 취득할 경우에 송신기로부터 수신자에게 데이터를 이동하는 실시간 채널일 수 있으며, 또는, 채널은 송신기로부터 수신자로의 송신시에 데이터의 일부 또는 전부를 저장하는 저장 채널일 수도 있다. 후자의 예는 디스크 저장 또는 다른 저장 장치이다. 이 예에서, 데이터를 발생하는 프로그램 또는 장치는 데이터를 저장 장치에 송신하는 송신기로서 간주될 수 있다. 수신자는 저장 장치로부터 데이터를 판독하는 프로그램 또는 장치이다. 저장 장치로의 데이터를 얻기 위하여 송신기가 사용하는 메커니즘, 저장 장치 자체, 및 저장 장치로부터 데이터를 얻기 위해 수신자가 사용하는 메커니즘은 총체적으로 채널을 구성한다. 이들 메커니즘 또는 저장 장치가 데이터를 손실할 기회가 있으면, 이것은 채널에서의 데이터 삭제로서 처리될 것이다.

    1. 기본 구현예

    대표적인 구현예에서, 서브심볼 기반의 코딩을 이용한 송신은, 입력 파일로부터 입력 심볼을 발생, 구성 또는 추출하는 것과, 각각의 입력 심볼에 대해 서브심볼을 발생하는 것과, 이들 서브심볼을 하나 이상의 출력 서브심볼로 인코딩하는 것과, 출력 서브심볼로부터 출력 심볼을 생성하는 것과, 출력 심볼을 채널을 통해 하나 이상의 수신자에게 송신하는 것을 포함한다.

    서브심볼 기반의 코딩을 이용하여 입력 파일의 카피(copy)를 수신(그리고 재구성)하는 것은, 하나 이상의 데이터 스트림으로부터 출력 심볼의 일부 세트 또는 서브세트(subset)를 수신하는 것과, 각각의 수신된 출력 심볼에 대해 서브심볼을 발생하는 것과, 수신된 출력 서브심볼의 값으로부터 입력 서브심볼을 디코딩하는 것과, 디코딩된 입력 서브심볼로부터 입력 심볼을 생성하는 것과, 입력 심볼로부터 입력 파일을 재결합하는 것을 포함한다. 일부 실시예에서, 예를 들어, 입력 파일이 디코딩된 입력 서브심볼로부터 직접 재결합될 경우에는, 마지막 단계가 폐기될 수도 있다.

    이하, 도면을 참조하여 본 발명의 특징에 대해 설명할 것이다.

    도 1은 서브심볼 기반의 코딩을 이용하는 통신 시스템(100)의 블록도이다. 통신 시스템(100)에서는, 입력 파일(101) 또는 입력 스트림(105)이 서브심볼 발생기(110)에 제공된다. 서브심볼 발생기(110)는 입력 파일 또는 스트림으로부터 하나 이상의 입력 서브심볼(IS(0,0), IS(0,1), IS(0,2), ...)의 시퀀스를 발생하며, 각각의 입력 심볼은 하나의 값과 두 개의 위치(도 1에서 괄호로 삽입된 정수로 표시됨)를 가진다. 서브심볼 발생기(110)는 그 입력의 하나로서 값 m을 사용하며, 이것은 각각의 입력 또는 출력 심볼 내의 서브심볼의 수이다. 서브심볼 발생기의 출력은 각각 m의 그룹으로 분할되고, 각 그룹의 요소는 괄호의 두 번째 정수에 의해 식별되며, 이것은 0과 m-1 사이의 정수이다.

    상술한 것과 같이, 각 입력 서브심볼의 크기는 코딩 시스템의 계산 세분화도인 반면, 송신 세분화도는 계산 세분화도의 m배 이상의 임의의 수일 수 있다. 여기 에 제공된 예에서는, 설명의 편의를 위해, 서브심볼의 크기가 모두 동일한 것으로 가정하지만, 이 크기는 변할 수 있고, 적절한 기능을 위해서는 일정한 크기가 필요하지 않다는 점을 이해해야 한다.

    입력 서브심볼에 대한 가능한 값, 즉, 그 알파벳은 대표적으로 2 M 심볼의 알파벳이므로, 각각의 입력 서브심볼은 입력 파일의 M 비트에 대해 코드화된다. M의 값은 통신 시스템(100)의 사용에 의해 일반적으로 결정되지만, 범용 시스템은 입력 서브심볼 발생기(110)에 대한 서브심볼 크기 입력을 포함할 수도 있으므로, M은 사용하는 것에 따라 변할 수 있다. 입력 서브심볼 발생기(110)의 출력은 인코더(115)에 제공된다.

    인코더(115)는 입력 서브심볼 발생기(110)에 의해 제공되는 입력 서브심볼로부터 값 OS(i,j)를 갖는 출력 서브심볼을 발생한다. 각 출력 서브심볼의 값은, 여기서, 출력 서브심볼의 "관련된 입력 심볼" 또는 간단히 "관련도(associate)"라고 하는 하나 이상의 입력 서브심볼의 일부의 함수에 의거하여 발생된다. 함수("값 함수(value function)")와 관련도의 선택은 이후에 더욱 상세하게 설명되는 처리에 따라 행해진다. 항상 그런 것은 아니지만, 대표적으로, M은 입력 서브심볼 및 출력 서브심볼에 대해 동일하며, 다시 말하면, 이들은 모두 동일한 수의 비트에 대해 코드화된다.

    일부 실시예에서는, 관련도를 선택하기 위하여, 입력 서브심볼의 수 K가 인코더에 의해 사용된다. 입력이 스트리밍 파일인 경우와 같이, K가 미리 알려지지 않으면, K는 단지 추정값(estimate)일 수 있다. 입력 서브심볼에 대해 저장공간을 할당하기 위하여, 값 K가 인코더(115)에 의해 사용될 수도 있다.

    인코더(115)는 출력 서브심볼을 출력 심볼 발생기(135)에 제공한다. 출력 심볼 발생기(135)에는, 각 심볼 내의 서브심볼의 수 m이 제공된다. 출력 심볼 발생기(135)는, 도 1에서 OS(0), OS(1), ..., 등으로 도시된 그 출력을 송신 모듈(140)에 제공한다. 송신 모듈(140)은 출력 심볼을 채널(145)을 통해 수신 모듈(150)에 송신한다. 채널(145)은 삭제 채널인 것으로 가정하지만, 이것이 통신 시스템(100)의 적절한 동작을 위한 요건은 아니다. 송신 모듈(140)이 출력 심볼과, 채널(145)로의 키(key)에 관한 필요한 데이터를 송신하도록 구성되고, 수신 모듈(150)이 심볼과, 채널(145)로부터의 키에 관한 잠재적으로 일부의 데이터를 수신하도록 구성되기만 하면, 모듈(140, 145, 150)은 임의의 적당한 하드웨어 구성요소, 소프트웨어 구성요소, 물리 매체, 또는 그 임의의 조합일 수 있다. 관련도를 결정하기 위해 사용될 경우, K의 값은 채널(145)을 통해 송신되거나, 인코더(115) 및 디코더(155)의 약속에 의해 미리 설정될 수도 있다.

    상술한 것과 같이, 채널(145)은 인터넷, 또는 텔레비전 송신기로부터 텔레비전 수신자로의 방송 링크, 또는 하나의 지점으로부터 다른 지점으로의 전화 접속을 통하는 경로와 같은 실시간 채널일 수 있으며, 또는 채널은 CD-ROM, 디스크 드라이브, 웹 사이트 등과 같은 저장 채널일 수 있다. 채널(145)은, 한 사람이 입력 파일을 전화선을 통해 개인용 컴퓨터로부터 인터넷 서비스 제공업자(ISP : Internet Service Provider)에게 송신할 때, 입력 파일이 웹 서버 상에 저장되고 인터넷을 통해 순차적으로 수신자에게 송신될 경우에 형성되는 채널과 같이, 실시간 채널 및 저장 채널의 조합일 수도 있다.

    채널(145)이 삭제 채널인 것으로 간주되므로, 통신 시스템(100)은, 수신 모듈(150)에서 나오는 출력 심볼과, 송신 모듈(140)에 들어가는 출력 모듈 사이에서 일대일 대응관계를 가정하지 않는다. 사실상, 채널(145)이 패킷 네트워크를 포함할 경우, 통신 시스템(100)은 임의의 둘 이상의 패킷의 상대적인 순서가 채널(145)을 통한 송신시에 보존될 것이라고 가정하지 못할 수도 있다.

    수신 모듈(150)은 수신된 심볼 RS(0), RS(1)을 서브심볼 발생기(160)에 제공한다. 또한, 이 발생기에는, 각각의 수신된 출력 심볼이 포함하는 서브심볼의 수의 값 m이 주어진다. 이 정보는 송신기와 수신기 사이에서 송신에 앞서 공유될 수 있으며, 송신의 일부가 되거나, 이 정보가 수신기에 의해 알려져 있지 않고 수신기가 즉시 디코딩할 필요가 없으면, 나중에 제공될 수 있다. 앞서 논의한 것과 같이, m의 값은 모든 수신된 출력 심볼에 대해 동일하지 않을 수도 있다.

    서브심볼 발생기(160)는 RS(0,0), RS(0,1), ..., 등으로 표시된 디코더(155)에 대한 출력을 발생한다. 각각의 수신된 심볼이 m 서브심볼을 포함할 경우, 서브심볼 발생기(160)의 출력은 각각 m의 그룹으로 분할되고, 각 그룹은 각각의 수신된 심볼 내의 서브심볼에 대응한다. 괄호의 두 번째 정수는 수신된 심볼 내의 서브심볼의 위치에 대응하는 반면, 첫 번째 정수는 수신된 심볼에 대응하며, 출력된 서브심볼은 수신된 심볼의 서브심볼이다. 이 경우, 서브심볼 발생기의 출력은 RS(0,0), ..., RS(0,m-1), RS(1,0), ..., RS(1,m-1) 등이다.

    디코더(155)는 입력 서브심볼(다시, IS(0,0),IS(0,1),IS(0,2),...)을 수신하기 위하여, 서브심볼 발생기(160)에 의해 제공되는 출력 서브심볼을 이용한다. 디코더(155)는 수신된 입력 서브심볼을 심볼 발생기(162)에 제공하고, 이어서, 입력 심볼 IS(0),IS(1),..., 등을 생성한다. 이들 입력 심볼은 입력 파일 재결합기(165)에 제공되어, 입력 파일(101) 또는 입력 스트림(105)의 카피를 발생한다. 일부 응용예에서는, 심볼 발생기(162)가 우회될 수도 있고, 출력은 직접 입력 파일 재결합기(165)에 보내질 수도 있다.

    2. 기본적인 인코더

    도 2는 기본적인 인코더의 예시적인 블록도이다. 각각의 발생된 출력 심볼(230)에 대하여, 인코더는 F(i,j)로 표시된 함수 평가기(220)를 포함한다. 도 2의 예에서는, m=4이고, 201, ..., 212로 표시된 모두 12개의 입력 서브심볼이 있다. 함수 평가기(220)는 출력 서브심볼(230)을 발생하기 위하여 입력 서브심볼의 함수를 포함한다. 예를 들어, 도 2에 도시된 상황에서는, 함수 평가기가 함수 F(i,j)를 이용하여, 입력 IS(0,0), IS(0,3), IS(1,1), IS(1,3) 및 IS(2,2)로부터 그 출력 OS(i,j)에 대한 값을 계산한다.

    일부 실시예에서, 각각 발생된 출력 서브심볼은 결정론적으로 또는 의사난수(pseudo-random)에 의해 발생되는 상이한 연관된 함수를 가진다. 다른 실시예에서는, 함수 평가기(220)가 다수의 발생된 출력 심볼에 대해 동일할 수 있고, 함수로서 사용되는 입력 값의 세트에서만 상이할 수 있다. 예를 들어, 간단한 인터리빙(interleaving) 기술이 사용되면, F(i,j)는 j의 모든 값에 대해 동일할 수 있고, 입력 값의 세트에서만 상이할 수 있다. 구체적으로, 이 경우, 함수 F(i,j)는 서브심볼 IS(0,j), IS(1,j), IS(2,j) 등을 입력으로서만 사용한다.

    도 2에 개시된 것과 같이, 함수 평가기(220)는 그 입력의 임의의 함수일 수 있다. 일부 실시예, 구체적으로, 선형 코드를 갖는 것이 바람직한 실시예에서는, 함수가 그 변수의 선형 함수, 예를 들어, 변수의 XOR인 것으로 선택되어야 한다. "인터리빙된 변환(interleaved transformation)"으로 불리는, 함수 평가기(220)에 의해 사용될 수 있는 선형 함수의 이러한 종류에 대해 이하에서 설명할 것이다.

    3. 인터리빙된 변환

    여기서 설명된 일부 처리는, Bloemer, Kalfane, Karp, Karpinski, Luby 및 Zuckerman, "An XOR Based Erasure Resilient Coding Scheme", International Computer Science Institure(ICSI) Technical Report TR-95-048에 함축적으로 기술되어 있는 방법을 채용한다.

    s 심볼로 조직화된 입력 데이터를 t 심볼로 조직화된 출력 데이터로 변환하는 변환 처리를 고려하면, (입력 데이터 및 출력 데이터의) 각 심볼은 동일한 크기의 m 서브심볼을 포함하고, 변환은 t 행(row) 및 s 열(column)의 기본 행렬을 이용하며, 각 기본 행렬 엔트리(entry)는 유한 필드 GF(2 m )에서의 값이다.

    변환 처리는 기본 행렬의 각 엔트리를 m 행 및 m 열의 기본 행렬로 변환함으로써 시작된다. 이 변환은 유한 필드(finite field)의 규칙적인 표현을 GF(2) 모듈로서 사용하고, 유한 대수 및 코딩 이론의 분야에서 숙련된 기술자에게 잘 알려진 개념이므로, 여기서는 더욱 상세하게 설명하지 않는다. 이 변환을 원래의 기본 행렬의 모든 엔트리에 대해 적용하면, t*m 행 및 s*m 열을 갖는 새로운 2진 행렬이 산출된다. 변환 처리는 이 새로운 행렬을 입력 데이터의 s*m 서브심볼에 적용하여, 새로운 2진 행렬의 행 당 하나씩, t*m 출력 서브심볼에 도달한다. 새로운 2진 행렬의 각 행은 하나의 서브심볼에 대응하며, 변환 처리는, 그 행 및 열이 1인 각각의 입력 서브심볼을 XOR 하여 소정의 출력 서브심볼을 결정한다. 이와 같이 생성된 최종 t*m 서브심볼은 각각 m 서브심볼의 그룹으로 그룹화되어 t 심볼이 산출된다.

    변환 처리는 서브심볼의 XOR만을 수행할 필요가 있음에 유의해야 한다. 수행하는 XOR의 수는 원래의 행렬에 의존하지만, 이 수는 평균적으로 s*t*m/2와 같다.

    상술한 변환 처리의 하나의 예로서, 도 3a에 도시된 필드 GF(4)={0, 1, α, α 2 } 상에서 s(=5)×t(=2)의 기본 행렬을 고려한다. GF(4)에 대하여, m=2이다. 기저(basis) {1,α}에 대한 GF(2) 상의 GF(4)의 규칙적인 표현을 이용하면, 도 3a의 기본 행렬은 도 3b에 도시된 새로운 2진 행렬로 변환되고, 이 행렬은 s*m=10 열 및 t*m=4 행의 행렬이다.

    이 변환된 행렬을 이용하면, 각각 두 개의 서브심볼을 포함하는 5개의 심볼을 포함하는 원래의 데이터는 다음과 같이 변환된다: 입력 서브심볼은 도 3b의 행렬의 첫 번째 행의 "1"의 위치이므로, 4개의 제1 출력 서브심볼은 입력 서브심볼 3, 6, 7, 9, 10의 XOR로서 계산된다. "1"은 2진 값의 한 상태의 임의의 표시이므로, 입력 심볼이 사용되고 있는 라벨(label)로서 간주되어야 함에 유의해야 한다.

    제2 출력 서브심볼은 입력 서브심볼 4, 5, 6, 8, 9의 XOR로서 계산된다. 제3 출력 서브심볼은 입력 서브심볼 1, 5, 8, 10의 XOR로서 계산된다. 마지막으로, 마지막(제4) 출력 서브심볼은 입력 서브심볼 2, 6, 7, 8, 9, 10의 XOR로서 계산된다. 이 경우에 수행되는 서브심볼의 XOR의 전체 횟수는 20이다.

    이 구체적인 예에서의 함수 F(i,j)는 다음과 같이 주어진다:

    F(0,0)=IS(1,0)+IS(2,1)+IS(3,0)+IS(4,0)+IS(4,1)

    F(0,1)=IS(1,1)+IS(2,0)+IS(2,1)+IS(3,1)+IS(4,0)

    F(1,0)=IS(0,0)+IS(2,0)+IS(3,1)+IS(4,1)

    F(1,1)=IS(0,1)+IS(2,1)+IS(3,0)+IS(3,1)+IS(4,0)+IS(4,1)

    여기서, 기호 "+"는 XOR을 나타낸다.

    인터리빙된 변환은, GF(2)의 확장 필드 상에서 발생기 및 패리티-검사 행렬에 의해 정의된 코드를 이용한 인코더 및/또는 디코더의 실시예의 일부로서 사용될 수 있다.

    4. 기본적인 출력 심볼 발생기

    도 4는 출력 심볼 발생기(135)의 블록도이다. 도면은 m=4이고 3개의 출력 심볼인 경우를 예시한 것이다. 이 예에서, 출력 심볼 발생기(135)는 OS(i,0), OS(i,1), OS(i,2),...,OS(i,m-1)(도면에는 401, ..., 412의 도면번호로 나타냄)로 표시된 4개의 출력 심볼의 그룹을 출력 심볼 OS(i)(도면에는 420, 430 및 440의 도면번호로 나타냄)로 묶는다. 모든 출력 심볼에 대해 동일한 값 m을 선택한 것은 오직 단순화를 위한 것이다. 출력 심볼 발생기가 m의 값이 발생될 출력 심볼에 대한 것이라는 점을 나타내기만 하면, 이 값은 상이한 출력 심볼에 대해 상이할 수 있다.

    5. 기본적인 서브심볼 발생기

    도 5는 기본적인 서브심볼 발생기(160)의 블록도이다. 도면은 m=4이고 3개의 수신된 심볼 RS(0), RS(1), RS(2)가 있는 경우를 예시한 것이다. 서브심볼 발생기(160)의 연산은 도 4에 주어진 출력 심볼 발생기(135)의 연산의 역에 대응한다.

    도 5에 주어진 예에서, 서브심볼 발생기(135)는 각각의 수신된 심볼에 대해 4개의 서브심볼(도면에서 501, ..., 512의 도면번호로 나타낸 서브심볼)을 생성한다. 서브심볼 RS(i,0), ..., RS(i,3)은 수신된 심볼 RS(i)(도면에서 520, 530 및 540의 도면번호로 나타냄)에 대응한다. 모든 수신된 심볼에 대해 동일한 값 m을 선택한 것은 단순화를 위한 것이다. 각각의 수신된 심볼에 대해, m의 값이 그 심볼을 위한 것이라는 표시가 서브심볼 발생기에 제공되기만 하면, 이 값은 상이한 수신된 심볼에 대해 상이할 수 있다. 이러한 표시는 송신기로부터의 대역 외 정보(out-of-band information)를 통해, 또는 송신기 및 수신기에 의해 공유되는 소정의 알고리즘을 통해, 서브심볼 발생기에 제공될 수 있다.

    6. GF (2)의 확장 필드 상의 인터리빙된 변환 및 코드를 이용한 서브심볼 기반의 코딩

    상술한 것과 같이, 삭제가 예상되는 패킷 네트워크 상에서의 송신을 위한 코드를 설계하기 위하여, 서브심볼 기반의 코딩은 여기에 설명된 인터리빙된 변환과 함께 사용될 수 있으며, 코드는 계산 및 삭제 세분화도 및 노력에 대하여 의도하는 교환관계를 나타내도록 한다.

    하나의 실시예에서, 인코더 및 디코더는 확장 필드 GF(2 m ) 상에서 정의된 코드를 이용하도록 설계된다. 코드는, 발생기 행렬, 패리티 검사 행렬, 또는 일부의 개괄 인코딩 처리(abstract encoding process) 혹은 유사한 결과에 도달하는 규칙의 세트에 의해 정의될 수도 있다. 간단하게 나타내기 위하여, 본원 명세서의 예는 발생기 행렬을 이용하여 코딩을 설명하지만, 동일하거나, 유사하거나 또는 상이한 결과를 위해 다른 접근법이 사용될 수도 있음을 이해해야 한다.

    발생기 행렬은 n 행 및 k 열을 가진다고 가정한다. 코드가 체계적(systematic)이지 않을 수도 있음을 이해하면서, 코드는 체계적이라고 가정한다.

    체계적인 코드에 있어서, 첫 번째 k 열로 이루어진 서브-행렬은 단위 행렬(identity matrix)이다. 나머지 r = nk 열로 이루어진 서브-행렬은 여기서 C라고 한다. 이 행렬 C는 r 행 및 k 열을 가진다. 인코딩할 데이터는 k 심볼(또는 패킷) 길이라고 가정한다. 다음으로, 인코딩 처리는 상기한 인터리빙된 변환 처리를 행렬 C와 인코딩할 데이터에 적용하는 처리이다.

    이전의 코딩 방법에 비해, 이 코딩 방법의 장점 중 하나는, 계산은 필드 GF(2) 상에서 수행되면서, 송신 방식의 오버헤드 속성이 유한 필드 GF(2 m ) 상의 원래의 코드의 구조에 의해 지배된다는 점이다. 여기서 설명되거나 여기서 설명된 선택 방법에 따른 것과 같이, 코드 파라미터(parameter)의 사려깊은 선택을 위하여, 위에서 설명한 교환관계의 우수한 균형을 제공하는 코딩 구조를 얻는 것이 가능하 다.

    디코딩 처리는 서브심볼로 인해 더욱 복잡하며, 대표적으로는, 아래에 설명하는 것과 같이 단계에 따라 진행된다. 명백히, 디코딩 계산 노력은 이전의 방법이 동일한 에러 복구 결과를 얻기 위해 사용되었던 것보다 적을 수 있다.

    디코딩 처리의 예에서, 인코딩된 데이터 패킷은 각각 관련된 위치를 가지며, 이 위치는 1 내지 n의 정수에 의해 표현 가능하다고 가정한다. 첫 번째 k 위치는 체계적 위치라고 하며, 송신에 앞서 이 위치에서의 인코딩된 데이터는 인코딩되었던 데이터와 동일하다. 나머지 위치에서의 데이터(또는 패킷)는 용장성 패킷(redundant packet)이라고 한다. 이전과 같이, 발생기 행렬은 첫 번째 k 행이 단위 행렬을 구성하도록 주어지며, 나머지 r 행은 행렬 C를 구성한다고 가정한다.

    디코딩 처리의 하나의 실시예에서, 단계는 다음과 같다:

    1) 삭제된 체계적 패킷의 위치 q 1 , q 2 , ..., q e 를 기록 및 저장하며, 여기서, e는 이러한 삭제된 패킷의 수이다. 이러한 패킷이 존재하지 않으면, 성공적인 디코딩을 선언하고 빠져 나온다.

    2) 카운터 l=0으로 설정한다.

    3) 디코딩이 성공적이지 않으면(즉, 모든 원래의 패킷이 아직 복구되지 않으면), 아래의 서브단계 (a) 내지 (e)를 수행한다:

    (a) e+l의 삭제되지 않은 용장성 패킷을 찾는다. e+l 보다 적은 삭제되지 않은 용장성 패킷이 입수 가능하다면, 디코딩 에러를 선언한다. 그렇지 않으면, e+l 의 삭제되지 않은 용장성 패킷의 위치를 p 1 , p 2 , ..., p e +l 에 의해 표시한다.

    (b) 위치 p 1 , p 2 , ..., p e +l 에 대응하는 행과, 위치 q 1 , q 2 , ..., q e 에 대응하는 열을 포함하는 발생기 행렬의 서브-행렬을 구성한다. 이 매트릭스를 D라고 한다. 이 매트릭스는 C의 서브-행렬임을 유의해야 한다.

    (c) 예를 들어, 가우스 소거(Gaussian elimination) 또는 명시적 결정 또는 다른 방법에 의해 가역성의 exe 서브-행렬을 찾는다. 이러한 서브-행렬이 존재하지 않으면, 카운터 l을 하나 증가시키고 단계 3)으로 진행한다.

    (d) 이러한 가역성의 서브-행렬이 존재하면, 그 행 r 1 , ..., r e 을 기록하고, 기본 필드 상에서 그 역(inverse)을 계산하며, 이 역을 B라고 한다.

    (e) 위치 q 1 , q 2 , ..., q e 에서 삭제된 체계적 패킷을 구하기 위하여, 행렬 B와, 위치 r 1 , ..., r e 에서 용장성 패킷을 포함하는 데이터에 대하여 인터리빙된 변환 처리를 적용한다. 디코딩 성공을 선언하고 정지한다.

    아래의 설명은 하나의 구체적인 값의 세트를 이용한 이 디코딩 처리의 상세한 예이다. k=16이고 n=24라고 가정하고, 24 패킷의 송신 후, 위치 1, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 20, 22에서의 패킷이 수신된다고 가정한다. 위치 3 및 10에서의 체계적 패킷은 손실되어 있지만, 다른 14개는 올바르게 수신된다. 따라서, q 1 =3이고 q 2 =10이다. 카운터 l을 0으로 설정하면, 2+0=2의 삭제되지 않은 용장성 패킷이 얻어진다. 이들은 위치 18 및 20에서의 패킷일 수 있으므로, p 1 =18이고 p 2 =20이다. 발생기 행렬의 행이 18 및 20이고 열이 3 및 10인 행렬, 즉, 행이 2 및 4이고 열이 3 및 10인 C의 서브-행렬을 설정한다. 이 행렬의 계수(rank)가 2가 아니라고 가정하면, 단계 3(c)는 성공이 아니다. 카운터 l을 1로 증가시키고 다시 단계 3으로 돌아가서 처리를 계속한다. 이번에는, 예를 들어, p 1 =18, p 2 =20 및 p 3 =22를 설정하면, C의 서브-행렬은 발생기 행렬의 이러한 행과 3 및 10인 열을 포함하도록 구성될 수 있다. 이 행렬이 최고 계수를 가지면, 단계 3(c)는 성공이며, 삭제되지 않은 체계적 위치 18 및 22에 대응하는 행 1 및 3은 가역성의 서브-행렬을 구성할 것이다. 단계 3(d)에서 이 행렬의 역을 계산하여 B라 하고, 인터리빙된 변환 처리(단계 3(e))를 이 행렬에 적용하면, 위치 18 및 22에서 용장성 패킷으로 이루어진 데이터는 위치 3 및 10에서의 삭제된 패킷의 값을 산출한다.

    특정 실시예에서는, l의 값은 단계 2의 0보다 큰 수로 선택될 수도 있다. 예를 들어, l의 작은 값에 대해, 단계 3(c)가 성공적이지 않을 것이라는 예상이 있으면, 이러한 일이 발생할 수 있다. 많은 다른 변형이 가능하며, 이 기술 분야의 통상의 지식을 가진 자는 이 개시내용을 읽어본 후에 이러한 변형을 도출할 수 있다.

    7. 대수-기하 코드

    인터리빙된 변환과 서브심볼 디코딩 처리가 결합하여 특히 양호한 결과를 산출하는 코드의 한 클래스(class)는 대수-기하(Algrbraic-geometric) 코드, 또는 "AG 코드"의 클래스이다. AG 코드는, 동일한 필드 상의 리드-솔로몬 코드보다 더 긴 코드의 구성을 허용하는 리드-솔로몬 코드의 확장이다. 이 코드는 유한 필드 상 의 곡선의 지점을 이용하여 구성되며, 규정된 극(pole)을 갖는 곡선 상에서 작용한다. 이 코드의 구성은 유한 대수 및 코딩 이론의 분야에서 통상의 지식을 가진 자에게는 잘 알려져 있으므로, 여기서는 더욱 상세하게 설명하지 않는다. 이들 코드에 대한 문헌의 많은 소스 중 하나는 Goppa, VD, "Geometry and Codes"(Kluwer Academic Publishers 1988)이라는 서적이다.

    AG 코드는 리드-솔로몬 코드의 많은 속성을 공유한다. 이들은 명시적 발생기 및 패리티-검사 행렬에 의해 주로 기술될 수 있고, 그 최소 거리, 주어진 차원 k, 및 블록-길이 n은 n-k+1-g 보다 작을 수 없으며, g는 기초가 되는 곡선의 파라미터인 음(negative)이 아닌 정수이다. 이 파라미터는 곡선의 종수(genus)라고 한다. 종수(genus)가 0인 곡선은 필수적으로 리드-솔로몬 코드를 산출하는 반면, 더 높은 종수의 곡선은, 더 작은 최소 거리의 대가에도 불구하고, 블록-길이의 측면에서 대략 개선된 코드를 산출한다.

    예를 들어, 기초가 되는 필드가 GF(16)이면, 가장 긴 가능한 리드-솔로몬 코드는 블록-길이 17을 가진다. 이에 비해, 블록-길이 24를 갖는 종수가 1인 AG 코드를 나타내는 것이 가능하다. 이 코드의 최소 거리는 그 최적의 값보다 작은 값이다. 이러한 코드는 아래의 예시적인 경우에 사용될 수 있다. 이 경우는 예시의 목적으로만 나타낸 것이며, 발명의 범위를 한정하기 위한 것이 아니다.

    16 KB 길이의 데이터가 패킷이 1 KB의 페이로드(payload)를 갖는 네트워크를 통해 송신될 것이라고 가정한다. 또한, 데이터는 33%의 손실에 대해 보호될 수 있다고 가정한다. 다음으로, 종수(genus)가 1, 블록-길이가 24, 차원이 16인 AG 코드 에 대한 발생기 행렬을 이용하고, 위에서 설명한 인터리빙된 변환 처리를 이용하면, 24 KB의 인코딩된 콘텐츠를 생성하는 것이 가능하다. 각 서브심볼은 패킷 페이로드(즉, 심볼)의 1/4이므로, 이 변환은 크기 256 바이트의 서브심볼을 XOR 하는 것을 포함한다. 그 결과로 얻어지는 코드는, 확률 1을 갖는 수신된 17 패킷의 임의의 세트와, 대략 96%의 확률을 갖는 수신된 16 패킷의 세트(즉, 16 패킷의 가능한 조합의 96%는 원래의 16 패킷이 그 조합으로 디코딩 가능하도록 되어 있음)로부터 원래의 16 패킷을 디코딩하는 능력을 가진다.

    AG 코드는 체계적인 것이 되도록 할 수 있다. 예를 들어, 상기의 경우, 인코딩된 데이터의 첫 번째 16 KB는 원래의 16 KB와 동일할 수 있고, 추가적인 8 KB는 용장성 데이터를 나타낸다. 이 용장성 데이터를 생성하기 위하여, 위에서 설명한 인터리빙된 변환 처리가 8 행 및 16 열을 갖는 행렬에 적용된다. 이러한 경우, 용장성 데이터를 생성하기 위한 서브심볼의 XOR의 수는 평균적으로 8*16*4/2, 또는 256이다. 이 연산 후, 생성된 코딩된 데이터는 96 서브심볼을 포함하므로, 발생된 서브심볼 당 서브심볼의 XOR의 수는 256/96, 또는 3보다 약간 작다.

    리드-솔로몬 코드가 위에서 사용되었다면, 그 위에서 리드-솔로몬 코드가 정의되는 2의 제곱인 가장 작은 가능한 필드 확장은 GF(256)일 필요가 있었다. 그 경우, 서브심볼은 이전의 경우의 절반 크기이며, 용장성 데이터를 생성하기 위하여, 평균적으로, 서브심볼의 8*16*8/2=512의 XOR을 필요로 하며, 다음으로, 이전의 경우의 인코딩 속도의 절반으로 변환한다.

    이하, 1 KB의 패킷 페이로드 크기를 갖는 패킷 기반의 네트워크 상에서 64 KB에 이르는 크기의 콘텐츠의 전송에 사용될 수 있는 AG 코드에 대해 설명한다. 이 예는 예시적인 목적으로만 작용하며, 본 발명의 범위를 한정하도록 해석되어서는 안된다. 이 예는 원래의 콘텐츠의 길이가 아니라, 인코딩된 콘텐츠의 길이에 의해 파라미터화 되어 있다. 후자로의 변화는 의도하는 방지 손실률을 통해 행해질 수 있다. 예를 들어, 인코딩된 콘텐츠의 길이가 24 KB이고, 25%의 손실이 예상되면, 원래의 콘텐츠의 길이는 18 KB와 동일하게 설정될 수 있다.

    8 KB에 이르는 인코딩된 콘텐츠 크기에 대하여, 9개의 추론 지점의 가장 큰 가능한 수를 갖는 GF(4) 상의 타원 곡선으로부터 AG 코드를 이용하는 것이 가능하다. 이러한 곡선의 예는 에르미트 곡선(Hermitian curve)이다. 이 곡선에 대응하는 코드는, 기껏 하나의 추가적인 패킷의 초과량으로부터 콘텐츠를 복구하는 것이 가능함을 보장한다. 이 작업을 위해, 리드-솔로몬 코드는 필드 GF(16)에서 연산해야 할 것이고, 이 예에서 구성된 AG 코드의 인코딩 및 디코딩 속도의 대략 절반을 가지게 될 것이다.

    24 KB에 이르는 인코딩된 콘텐츠 크기에 대하여, 25개의 추론 지점의 가장 큰 가능한 수를 갖는 GF(16) 상의 타원 곡선으로부터 AG 코드를 이용하는 것이 가능하다. 이러한 곡선은 이 기술 분야의 통상의 기술을 가진 자에게 잘 알려져 있으며, 대응하는 코드는 용이하게 구성될 수 있다. 이들 코드에 대하여, 위에서 설명한 디코딩 처리에서의 지수(index) l은 1을 절대로 초과하지 않을 것이라는 보장이 있다. 다시 말하면, 수신된 패킷의 수가 원래의 패킷의 수보다 큰 수이면, 디코딩 처리가 성공할 것이다. 그러나, 수신된 패킷의 수가 원래의 패킷의 수와 동일하면, 디코더와 관련하여 일정한 실패 확률이 있다. 이 확률은 이 경우에 수학적으로 계산되며, 4%인 대략 1/25이다.

    32 KB에 이르는 인코딩된 콘텐츠 크기에 대하여, 33개의 지점을 갖는 GF(16) 상의 종수가 2인 최대 과도타원(hyperelliptic) 곡선으로부터 AG 코드를 이용하는 것이 가능하다. 이 곡선은, 관련된 코드의 구성에서와 같이, 이 기술 분야의 통상의 지식을 가진 자에게 잘 알려져 있다. 이 경우, 상기 처리의 지수 l은 2를 절대로 초과하지 않을 것이다. 37 KB에 이르는 인코딩된 콘텐츠 크기에 대하여, 38 지점을 갖는 GF(16) 상의 종수 3인 최대 곡선으로부터 AG 코드를 이용하는 것이 가능하다. 이 경우, 상기 처리의 지수 l은 3을 절대로 초과하지 않을 것이다. 44 KB에 이르는 인코딩된 콘텐츠 크기에 대하여, 38 지점을 갖는 GF(16) 상의 종수 4인 최대 곡선으로부터 AG 코드를 이용하는 것이 가능하다. 이 경우, 상기 처리의 지수 l은 4를 절대로 초과하지 않을 것이다. 64 KB에 이르는 인코딩된 콘텐츠 크기에 대하여, 65개의 추론 지점을 갖는 GF(16) 상의 에르미트 곡선(Hermitian curve)을 이용하는 것이 가능하다. 이 경우, 지수 l은 값 6을 절대로 초과하지 않을 것이다.

    상기한 각각의 경우에는, k 패킷을 포함하는 원래의 콘텐츠의 복구는 임의의 k개의 수신된 패킷으로부터 양호한 확률로 가능하며, 이 확률은 수신된 패킷의 수가 k를 초과할 경우에 급속하게 증가하며, 초과량이 사용된 곡선의 종수와 동일하면, 확률 1에 도달한다.

    8. 랜덤 코드

    인터리빙 변환과 결합된 서브심볼 기반의 코딩의 처리는 결코 블록 코드에 특수하지 않다. 일반적으로, 본 발명의 교시 내용은 유한 필드 GF(2 m ) 상의 임의의 코드, 보다 일반적으로는, 임의의 유한 필드 GF(q) 상의 임의의 코드로부터 이익이 될 수 있다. 예를 들어, 이 처리는 유리한 효과를 위하여 랜덤 코드(random code)와 결합될 수 있다.

    랜덤 코드는 블록 코드로서 사용되거나, 연쇄 반응 코드와 유사할 수 있으며, 발생될 수 있는 출력 심볼의 수는 미리 고정되지 않으며, 입력 심볼의 수보다 큰 크기의 차수(order)일 수 있다. 구체적으로, 가능한 출력 심볼의 수는 예상되는 손실 패턴보다 클 수 있으며, 송신기(또는 송신기의 세트, 동격이 아닌 것도 가능함)는 성공적인 송신이 예상되는 시간에 걸쳐 출력 심볼을 반복하지 않는다. 물리적 처리가 무한이고 반복 가능한 것이 아닐 경우, Luby I 또는 그 외에 설명한 것과 같이, 연쇄 반응 코드는 쉽게 사용될 수 있으며, 주어진 입력 시퀀스에 대한 출력 심볼의 수는 효율적으로 무제한이다. 관련되지 않은 출력 심볼의 시퀀스는 (주어진 입력 시퀀스에 대한 출력 심볼의 큰 공간으로 인해) 중첩되지 않을 것이므로, 이들 코드는 때때로 "정보 부가 코드"라고 한다.

    랜덤 블록 코드에 대하여, GF(q)의 요소를 랜덤하게 또는 의사-난수에 의해 선택함으로써, 발생기 행렬이 얻어진다. 여기서 사용된 것과 같이, "랜덤"은 "의사-난수"를 포함할 수도 있지만, 개시된 내용의 판독성을 향상시키기 위하여 어디에서나 명백하게 기술된 것은 아니라는 점을 이해해야 한다. 필드의 크기 q는 행렬의 계수 속성의 원인이 된다. 일반적으로, q가 클수록, 주어진 차원의 행렬이 최대 계 수를 가질 확률도 높아진다. 위에서 설명한 디코딩 처리에서의 단계 3(c)의 성공은 행렬의 계수 속성에 의해 결정된다.

    GF(q) 상의 랜덤 연쇄 반응 코드에 대하여, Luby I 및 Shokrollahi I에 설명된 것과 같이, 각각의 출력 심볼은 키(key)를 이용하여 발생된다. 각각의 키에 대하여, 입력 심볼의 서브세트는, 각각의 선택된 입력 심볼 요소에 대한 필드 GF(q)에서의 랜덤 또는 의사-난수 요소와 함께 선택된다. 개념상으로, GF(q)에서 선택된 값과, 선택되지 않은 입력 심볼에 대응하는 위치에 대한 제로(zero)를 포함하는 벡터가 구성되고, 인터리빙된 변환과 결합된 서브심볼 기반의 코딩의 처리가 이 행렬에 적용된다. 행렬을 생성하는 중간 단계는 순수하게 개념적이며, 응용예에서는 완전히 생략될 수도 있다.

    하나의 예로서, GF(16) 상의 코드의 경우를 다시 고려한다. k 행 및 k 열을 갖는 랜덤 행렬은 대략 93%의 확률로 GF(16) 상에서 가역 가능하다("랜덤"으로서 여기에 설명된 것은, "의사난수"도 적용될 것이며, 그렇지 않으면 다르게 표시됨을 이해해야 한다). 이것은, 위에서 설명한 디코딩 처리를 적용함에 있어서, 카운터 l이 0으로 유지되는 경우의 93%에서는, 원래의 데이터의 크기를 초과하는 데이터의 수신이 요구되지 않는다는 것을 의미한다. k 행 및 k+1 열을 갖는 랜덤 행렬은 대략 99.5%인 확률을 갖는 계수 k를 가진다. 이것은 카운터 l이 그 경우의 0.5%에서만 2에 도달할 것이라는 점을 의미한다. 이와 유사하게, l이 절대로 2를 초과하지 않을 확률은 대략 99.97%이며, l이 절대로 3을 초과하지 않을 확률은 대략 99.998%이며, 절대로 4를 초과하지 않을 확률은 99.99998% 등이며, 6을 초과할 확률은 약 4x10 -9 이다. 표 1은 수신된 초과 패킷의 수의 여러 다른 값에 대한 디코더의 에러 확률을 도시한 것이다. 표 1의 데이터는, 랜덤 코드는 더 작은 필드 상에서 구축되므로, 리드-솔로몬 코드보다 더욱 효율적인 인코딩 및 디코딩 알고리즘에 의하여, 매우 양호한 오버헤드를 갖는 랜덤 코드를 구성하는 것이 가능함을 보여준다.

    수신된 초과 패킷 디코딩 에러 확률
    0 6.6 x 10 -2
    1 4.2 x 10 -3
    2 2.7 x 10 -4
    3 1.7 x 10 -5
    4 1.2 x 10 -6
    5 6.4 x 10 -8
    6 4.0 x 10 -9
    7 2.5 x 10 -10
    8 1.6 x 10 -11
    9 9.8 x 10 -13
    10 6.1 x 10 -14

    유사한 결과가 필드 GF(4)에서 발생한다. 표 2는 GF(4)에 대해 수신된 초과 패킷의 수의 함수로서 디코더의 에러 확률을 도시한 것이다. GF(4)는, GF(16) 상의 코드에 비해, 2의 인수(factor)에 의해 인코딩 및 디코딩 속도를 증가시키고 있음에 유의해야 한다.

    수신된 초과 패킷 디코딩 에러 확률
    0 3.1 x 10 -1
    1 8.2 x 10 -2
    2 2.1 x 10 -2
    3 5.2 x 10 -3
    4 1.3 x 10 -3
    5 3.3 x 10 -4
    6 8.2 x 10 -5
    7 2.1 x 10 -5
    8 5.1 x 10 -6
    9 1.3 x 10 -6
    10 3.2 x 10 -7

    상기 수는, GF(4) 또는 GF(16) 상의 랜덤 코드에 의거하여 정보 부가 코드가 매우 작은 오버헤드에서도 우수하게 수행하는 것을 제시한 것이다.

    몇몇 예는 인터리빙된 변환에 의해 사용되는 비 리드-솔로몬(non-Reed-Solomon) 코딩을 도시한 것이지만, 다른 비 리드-솔로몬 기본 행렬은 마찬가지로 작동할 수도 있다.

    변형예

    일부 변형예에서, 인코더는 출력 심볼을 더욱 신속하게 발생하기 위하여 병렬로 연산한다. 서브심볼 연산의 특정 이익을 얻기 위하여, 전체가 독립적으로 연산하는 것이 아니라, 병렬 인코더 모듈이 독립적이어야 한다. 예를 들어, 병렬 인코더는 값 함수(value function)의 응용예에 대한 다수의 입력 심볼 상의 서브심볼 세트의 선택을 대등하게 할 것이며, 서브심볼은, 다수의 입력 심볼 상에서, 그리고 입력 심볼 내의 상이한 서브심볼 위치로부터 혼합된다.

    결론

    서브심볼 기반의 코딩은 리드-솔로몬 코드보다 더 적은 산술 연산에 의해 연산할 수 있다. 이러한 코드는 최적화 조건이 요구되지 않으면 존재하지 않지만, 그 요건을 완화함으로써, 관심있는 코드가 가능해진다는 점을 알게 되었다. 이러한 코드에 대하여, 원래의 콘텐츠를 디코딩할 수 있기 위하여, 수신할 필요가 있는 출력 심볼의 수의 측면에서 최적화 조건을 잃어야 할 수도 있음을 보여줄 수 있었지만, 일부의 코드 클래스는, 대부분의 경우, 리드-솔로몬 코드와 유사하게 수행하며, 매우 드문 경우에만, 원래의 콘텐츠를 복구하기 위한 여분의 심볼을 필요로 함을 보여주는 합리적인 통계 속성을 나타낸다.

    절대적인 최적화는 항상 요건이 아니며 항상 데이터의 완전한 복구로 귀결되는 것은 아니라는 고찰에 의하여, 충분히 양호한 최적의 송신 효율에 근사한 것은 상당히 적은 계산 노력에 의해 주로 구비될 수 있다. 예를 들어, 더 작은 알파벳을 갖는 코드를 이용하면, 절대적인 최적화로부터 약간만 완화하면서도, 계산 노력을 크게 감소시킨다.

    일부의 바람직한 실시예에서, 상술한 계산 처리를 수행하기 위한 명령 세트(또는 소프트웨어)는 손실이 많을 가능성이 있는 통신 매체 상에서 통신하는 둘 이상의 다용도 컴퓨팅 장치(computing machine)에 제공된다. 장치의 수는 하나의 송신기 및 하나의 수신자 내지, 송신 및/또는 수신하는 임의의 수의 장치의 범위일 수 있다. 장치를 접속하는 통신 매체는 유선, 광, 무선 등일 수 있다. 상술한 통신 시스템은 다수의 용도를 가지며, 이것은 본 설명으로부터 명백하다.

    상기 설명은 예시적이며 제한적인 것이 아니다. 본 발명의 많은 변형은 이 개시 내용을 검토할 경우에 이 기술 분야의 통상의 지식을 가진 자에게 명백할 것이다. 그러므로, 본 발명의 기술적 사상은 위의 설명만을 참조하여 결정되는 것이 아니라, 첨부된 청구범위를, 그 완전한 등가 범위와 함께 참조하여 결정되어야 한다.

    QQ群二维码
    意见反馈