KR20080040669A - 다양한 클래스의 코드들을 인코딩 및 디코딩하는 애플리케이션을 갖는 인-플레이스 변환 - Google Patents
다양한 클래스의 코드들을 인코딩 및 디코딩하는 애플리케이션을 갖는 인-플레이스 변환 Download PDFInfo
- Publication number
- KR20080040669A KR20080040669A KR1020087000734A KR20087000734A KR20080040669A KR 20080040669 A KR20080040669 A KR 20080040669A KR 1020087000734 A KR1020087000734 A KR 1020087000734A KR 20087000734 A KR20087000734 A KR 20087000734A KR 20080040669 A KR20080040669 A KR 20080040669A
- Authority
- KR
- South Korea
- Prior art keywords
- symbols
- matrix
- memory
- place
- source
- Prior art date
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/37—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
- H03M13/3761—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 using code combining, i.e. using combining of codeword portions which may have been transmitted separately, e.g. Digital Fountain codes, Raptor codes or Luby Transform [LT] codes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L27/00—Modulated-carrier systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1191—Codes on graphs other than LDPC codes
- H03M13/1194—Repeat-accumulate [RA] codes
- H03M13/1197—Irregular repeat-accumulate [IRA] codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/1515—Reed-Solomon codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/27—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes using interleaving techniques
- H03M13/2782—Interleaver implementations, which reduce the amount of required interleaving memory
- H03M13/2785—Interleaver using in-place interleaving, i.e. writing to and reading from the memory is performed at the same memory location
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/37—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/37—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
- H03M13/373—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 with erasure correction and erasure determination, e.g. for packet loss recovery or setting of erasures for the decoding of Reed-Solomon codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/47—Error detection, forward error correction or error protection, not provided for in groups H03M13/01 - H03M13/37
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/61—Aspects and characteristics of methods and arrangements for error correction or error detection, not provided for otherwise
- H03M13/611—Specific encoding aspects, e.g. encoding by means of decoding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/61—Aspects and characteristics of methods and arrangements for error correction or error detection, not provided for otherwise
- H03M13/615—Use of computational or mathematical techniques
- H03M13/616—Matrix operations, especially for generator matrices or check matrices, e.g. column or row permutations
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/65—Purpose and implementation aspects
- H03M13/6502—Reduction of hardware complexity or efficient processing
- H03M13/6505—Memory efficient implementations
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/65—Purpose and implementation aspects
- H03M13/6569—Implementation on processors, e.g. DSPs, or software implementations
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/004—Arrangements for detecting or preventing errors in the information received by using forward error control
- H04L1/0041—Arrangements at the transmitter end
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/004—Arrangements for detecting or preventing errors in the information received by using forward error control
- H04L1/0045—Arrangements at the receiver end
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/004—Arrangements for detecting or preventing errors in the information received by using forward error control
- H04L1/0056—Systems characterized by the type of code used
- H04L1/0057—Block codes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L27/00—Modulated-carrier systems
- H04L27/32—Carrier systems characterised by combinations of two or more of the types covered by groups H04L27/02, H04L27/10, H04L27/18 or H04L27/26
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Probability & Statistics with Applications (AREA)
- Mathematical Physics (AREA)
- General Physics & Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Algebra (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Error Detection And Correction (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
메모리 제약을 가진 컴퓨팅 장치을 이용하는 데이터의 인코딩 기호들을 위한 인코더에서, 소스 블록을 컴퓨팅 장치의 메모리에 로딩하는 단계를 포함하는 변환을 수행하고, 소스 블록보다 더 작은 소스 블록의 중간 변환을 수행하여, 메모리의 중간 결과값을 갖는 소스 블록의 일부를 교체하며, 메모리에 저장된 출력 기호들이 한 세트의 인코딩된 기호들을 형성하도록 변환을 완성하는 단계의 방법이 개시된다. 디코더는 수신된 데이터 및 디코딩된 소스 블록을 저장하기 위한 메모리와 실질적으로 동일한 메모리 사용을 허용하기 위해 디코딩 단계들을 수행하여, 인-플레이스 변환을 수행할 수 있다. 인-플레이스 변환을 이용하여, 수신된 데이터를 위한 메모리의 큰 부분은, 디코딩된 소스 데이터를 위한 메모리의 큰 부분을 차지하는 유사한 크기를 요구하지 않고서도 수신된 데이터가 디코딩된 소스 데이터로 변환되도록 중복기재될 수 있다.
Description
본 발명은 대체적으로는 데이터 인코딩 및 디코딩에 관한 것이고, 상세하게는 고비용의 추가 메모리를 사용하지 않고 데이터 선형 변환을 계산하는 것에 관한 것이다.
많은 애플리케이션은, 이후부터 "소스 블록"으로서 언급되는 주어진 데이터 블록을 변환함으로써 그들의 결과를 달성한다. 본 명세서에 사용되는 바와 같이, "소스 블록"이라는 단어는 하나 이상의 소스에 저장되는 임의의 데이터를 언급한다. 따라서, 파일 서버 또는 컴퓨터 저장 장치로부터의 문서, 이미지, 및 파일은 모두 소스 블록의 예이다. 소스 블록은 (스트리밍 소스의 출력으로부터 취해진 소스 블록과 같이) 크기가 알려지지 않은 것일 수 있고 또는 (하드 디스크에 저장된 1 메가 바이트 같이) 그 크기가 알려진 것일 수 있다. 둘 중 어느 쪽이든, 소스 블록은 하나 이상의 소스 기호들의 시퀀스이고, 이 각각의 소스 기호는, 소스 블록 및 그 값으로 위치를 갖는 소스 블록의 소정의 데이터이다.
본 명세서에서, 소스 블록의 변환은 특정 결과를 달성하기 위해 소스 블록에 수행되는 하나의 액션을 언급한다. 예를 들어, 소스 블록이 카메라와 같은 외부 장치에 의해 캡쳐되는 경우, 한 가지 가능한 변환은, 더 작은 저장 장치에 저장 또는 하나 이상의 가능한 대체 수용 장치로의 더 빠른 전송을 용이하게 하기 위해 소스 블록의 크기를 상당히 작은 크기로 압축하는 것일 수 있다. 다른 예로서, 소스 블록은 컴퓨터 네트워크, 또는 변조 또는 손실될 가능성이 있는 채널과 같은 채널 상의 운송을 위해 지정될 수 있다. 이와 같은 경우, 소스 블록은 자신의 전송 에러에 관한 확고함(robustness)을 증가시키기 위해 전송 이전에 변환될 수 있다.
소스 블록의 변환을 요구하는 많은 애플리케이션 중에서 특히 중요한 것들은 전송 중에 발생하는 에러에 대한 소스 블록의 확고함을 증가시키기 위해 변환을 수행하는 애플리케이션들이다. 전송은, 소스 블록을 전달하기 위해 하나 이상의 전송자로부터의 소스 블록을 채널을 통해 하나 이상의 수용자에게 전송하는 과정이다. 하나의 전송자가 완벽한 채널을 통해 임의의 수의 수용자에게 접속되는 경우, 수신된 데이터는 모든 데이터가 올바르게 수신되는 것으로서, 원본 소스 블록의 정확한 사본일 수 있다. 그러나, 대부분의 실제 채널의 경우인, 채널이 완벽하지 않은 경우, 또는 몇몇의 시스템의 경우인, 하나 이상의 전송자로부터 나오는 데이터의 경우, 수신된 데이터는 정확한 사본이 아닐 수 있다.
채널의 불완전성은 데이터 삭제, 데이터 불비, 또는 데이터 변조를 의미할 수 있다. 데이터 전송의 수행은 지리적으로 떨어져 있는 위치 간의 데이터 전송을 의미할 뿐만 아니라 데이터가 물리적으로 이동되는 경우를 포함할 수도 있다. 예를 들어, 소스 블록이 다시 액세스될 때 데이터 변조의 가능성이 있기 때문에 결점의 가능성이 있는 저장 매체 상에 저장된 소스 블록이 전송 형태를 구성할 수 있다.
가능한 전송 에러에 대한 소스 블록의 일반적인 보호 프로세스가 코딩이다. 코딩함으로써, 소스 블록이 변환되거나 새로운 세트의 데이터(때때로 "용장(redundant)" 또는 "수리(repair)" 데이터라고도 불리는)가 소스 블록으로부터 계산된다. 변환된 소스 블록은, 전송 중에 발생한 에러에 대한 정보를 얻기 위해 내부 용장도를 이용하고, 이와 같은 에러를 보정할 목적으로, 종종 원본의 소스 블록으로부터 계산된 여분의 정보를 포함한다. 코드들을 지정 및 이용하는 이론 및 실행에 대한 큰 규모의 학문이 있다.
코드 선택은 특정 애플리케이션 및 전송이 수행될 통신 채널에 의존한다. 종종, 선택된 코드는 소정의 선형적 특성들을 갖는다. 예를 들어, 소스 블록이 비트 그룹인 하나 이상의 소스 기호들로 구성되는 경우, 선형적 조건은, 2개 소스 블록의 기호(symbol-wise) 합산(맵핑)의 코딩이 소스 블록의 코딩의 기호(symbol-wise) 합산(맵핑)과 같다는 것을 보장할 것이다. 이와 같은 선형적 조건은 인코딩 및 디코딩 프로세스를 기술 및 계산하기에 큰 이점으로 이용될 수 있다. 실행시 사용된 큰 서브-클래스의 코드들은 이와 같은 선형적 조건을 만족시킨다.
소스 블록의 인코딩을 가져오는 변환의 역프로세스가 디코딩 프로세스이다. 이 프로세스에서, (변조될 가능성이 있는) 인코딩된 소스 블록의 버전은 전송 이전의 소블 블록의 원본 상태의 양호한 (또는 가끔은 가장 가능한) 추정을 얻기위한 이와 같은 방식으로 처리된다.
선형 코딩 방식의 많은 혜택들 중 하나는 인코딩 및 디코딩 프로세스가 행렬 에 의해 설명될 수 있다는 사실이다. 행렬은 2차원 배열의 형태로 엔트리들을 포함하는 수학적 대상이다. 당업자들에게 잘 알려진 바와 같이, 행렬은, 대상들 간의, 예를 들어, 소스 블록들을 포함하는 기호 세트들 간의 선형 매핑을 나타내기 위해 편의적으로 이용될 수 있다.
종종, 인코딩 및 디코딩 프로세스는 중간 결과값들을 저장하기 위한 추가 메모리를 사용함으로써 이득을 얻을 수도 있다. 예를 들어, 몇몇 디코딩 프로세스는 디코딩된 소스 블록과 더불어 수신된 데이터의 사본을 유지할 것을 요구할 수 있다. 디코딩 및 인코딩 프로세스를 위해 필요한 추가 메모리의 양은 제한된 메모리를 갖는 장치에 너무 많은 부분을 차지할 수 있다. 예를 들어, 장치가, 이동 전화 또는 PDA(Personal Digital Assistant)와 같은 이동 수신 장치인 경우, 장치 상의 메모리는 작을 수 있고, 및/또는 메모리는 장치 상에서 구동되도록 의도된 다른 애플리케이션을 위해 마련된 것일 수도 있다. 이와 같은 상황에서, 디코딩 및 인코딩 프로세스는 메모리를 효율적으로 사용해야 하지만, 때로는 이것이 구현{하기 매우 어려운 일이기도 하다.
본 발명의 측면에 따른 디코더의 구현{에서, 디코더는, 수신된 데이터 및 데코딩된 소스 블록을 저장하고, 인-플레이스(in-place) 변환으로서 수행되기 위한 실질적으로 동일한 메모리의 사용을 혀용하는 순서의 디코딩 단계들을 수행하도록 프로그램된다. 인-플레이스 변환을 사용함으로써, 수신된 데이터를 위해 마련된 메모리의 큰 부분이 수신된 데이터를 위한 메모리의 큰 부분 및 디코딩된 소스 데이터를 위한 유사한 크기의 메모리의 큰 부분을 요구하지 않고서도 수신된 데이터가 디코딩된 소스 데이터로 변환되는 것으로 과장되어 기술될 수 있다.
종종, 인-플레이스 변환의 사용은, 프로세스가 메모리를 액세스하는데 더 적은 시간을 소모할 프로세스로서의 특정 프로세스의 구동 시작을 감소시키는 결과를 가져오므로써, 단순 감소된 메모리 요구량을 넘어선 혜택들을 제공할 수 있다. 저장된 데이터의 총 크기가 너무 큰 경우, 프로세스 유닛은 2차의 좀 더 느린 저장 장치를 액세스하도록 유도될 수 있다.
본 발명의 실시예들은 비싼 추가 메모리의 사용을 요구하지 않고서도 인-플레이스 선형 변환을 수행하기 위한 방법 및 프로세스들을 사용한다. 이런 방법 및 프로세스들은 소스 블록의 FEC 인코딩 및 디코딩 변환으로 사용될 수 있다.
첨부한 도면과 함께 후속되는 상세한 설명은 본 발명의 특성 및 이점들의 보다 나은 이해를 제공할 것이다.
본 명세서의 문자 및 등식들은 본 발명의 측면들을 설명한다.
도 1은 본 발명의 실시예에 따라 FEC 인코딩을 이용하는 통신 시스템의 하이 레벨 도면이다.
도 2는 도 1의 통신 시스템과 유사하지만 복수의 송신자 및 수신자를 갖는 통신 시스템을 도시한 도면이다.
도 3은 송신자 및/또는 수신자를 구현{시키기 위해 사용될 수 있는 하드웨어의 예를 도시한 도면이다.
도 4는 종래의 FEC 디코딩 프로세스를 도시한 도면이다.
도 5는 본 발명에 따라 인-플레이스 FEC 디코딩 프로세스의 실시예를 도시한 도면이다.
도 6은 본 발명의 실시예에 따른 변환 프로세스의 순서도이다.
도 7은 체계적인 Reed-Solomon의 인-플레이스 디코딩의 방법에 대한 순서도이다.
도 8은 체계적인 Reed-Solomon 코드의 인-플레이스 디코딩에 대한 방법을 더 도시한 순서도이다.
도 9는 벡터 계산의 방법에 대한 순서도이다.
도 10은 벡터 계산의 방법에 대한 순서도이다.
도 11은 디코딩을 위해 이용 가능한 행렬이다.
도 12는 행렬 및 변환을 도시한 도면이다.
도 13은 프로세스를 위해 이용 가능한 데이터 구조를 도시한 도면이다.
도 14는 행렬 및 그것의 변환을 도시한 도면이다.
도 15은 행렬 및 그것의 변환을 도시한 도면이다.
도 16은 행렬 및 그것의 변환을 도시한 도면이다.
도 17은 방법의 순서도이다.
도 18은 방법의 순서도이다.
도 19는 방법의 순서도이다.
도 20은 방법의 순서도이다.
도 21은 방법의 순서도이다.
도 22는 방법의 순서도이다.
도 23은 방법의 순서도이다.
도 24는 방법의 순서도이다.
수신된 데이터 및 디코딩된 소스 블록을 저장하기 위한 동일한 메모리를 실질적으로 사용하는 프로세스는 종종 인-플레이스(in-place) 변환으로서 언급된다. 때때로, 인-플레이스 변환의 사용은, 프로세스가 메모리 액세스하는 시간을 덜 소비하기 때문에 특정 프로세스의 구동 시간의 감소를 가져온다. 이는 저장된 데이터의 총 크기가 너무 큰 경우, 프로세싱 유닛이 제2의, 보다 느린 저장 디바이스에 액세스하도록 강제할 수 있기 때문에 특히 중요하다. 본 발명의 실시예들은 비싼 추가 메모리의 사용을 요구하지 않고 인-플레이스 선형 변환을 수행하는 방법 및 프로세스를 이용한다. 이 방법 및 프로세스는 소스 블록의 FEC(forward error correction) 인코딩 및 디코딩 변환에 특히 적용가능하다.
본 발명이 많은 디바이스들에 적용가능하지만, 본 명세서에 모두 기술하지는 않겠다. 제한이 아닌 예시로서, 이동전화, 컴퓨터, 소형 컴퓨팅 디바이스, 미디어 플레이어, 통신 디바이스, 및/또는 이런 디바이스들을 구현{하기 위한 하드웨어 및/또는 소프트웨어가 있다.
개요
송신기(110)의 FEC 인코딩을 및 수신기(140)의 FEC 디코딩을 이용하는 통신 시스템의 하이 레벨 도면이 도 1에 도시되어 있다. 송신기(110) 및 수신기(140)는 광범위한 영역의 디바이스들을 포함할 수 있다는 것이 이해되어야 한다. 많은 실시예에서, 송신기 및 수신기는 단일 트랜시버 디바이스 내에 포함되고 그와 같은 2개 이상의 디바이스들은 그들 사이에서 통신할 수 있다.
도 1에서, 송신기(110)는 통신 채널(130)을 통해 FEC 디코더(150)를 포함하는 수신기(140)에 전송되는 데이터에 대한 보호를 더하기 위해 사용되는 FEC 인코더(120)를 포함한다. 송신기(110)는 패킷들, 예를 들어, 인터넷 프로토콜(IP) 패킷 또는, 수신기(140)가 그 패킷 안의 데이터가 어떻게 발생하는지 및/또는 전송된 데이터의 어떤 부분이 보여지는지를 결정하도록 허용하는 각 패킷의 식별 정보를 포함하는 다른 형태의 패킷들의 FEC 인코더(120)에 의해 생성된 데이터를 전송할 수 있다.
채널(130)은 네트워크 채널, 무선 채널, PSTN 채널, 또는 기타의 채널일 수 있다. 전형적으로, 채널(130)은, 데이터가 손실되는 몇몇의 상황에서는 약간의 제한을 가질 수 있다. 전형적으로, 패킷 네트워크에 대해, 수신된 패킷의 일부가 판독 불가능한 경우, 전체 패킷은 폐기된다. 따라서, 송신기(110)로부터 전송된 패킷이 수신기(140)에서 수신된 것으로 간주되지 않는 상황들이 존재하게 되므로, 이와 같은 손실들을 회복하기 위한 메커니즘들이 필요하다.
수신기(140)는 필요한 만큼의 수신된 패킷들을 갖는 FEC 디코더9150)를 제공하고, FEC 디코더(150)는 모든 또는 일부의 데이터를 복구한다. FEC(forward error correction)는 에러 발생시 에러 보정을 허용하기 위해 포워드 채널 상에 먼저 제 공되는 메커니즘들을 제공한다. FEC 노력들이 단지 백업인 경우, 에러들은 요구되지 않고, 몇몇의 경우, 즉, FEC를 이용하여 복구될 수 있는 것보다 더 많은 에러들이 발생하는 경우, 통신 실패 또는 재전송 등이 발생하는 측면 통신의 경우에는 에러들이 요구된다.
전송은 점 대 점일 필요는 없다. 도 2에 도시된 바와 같이, 시스템은 복수의 송신기 및 복수의 수신기들을 가질 수 있다. 도 2는, 각각 FEC 인코더(211), FEC 디코더(232, 242), 또는 양자 모두(222, 221)를 포함하는, 송신기(210), 수신기들(230, 240), 및 송/수신기(220)를 포함하는 시스템을 도시한다. 도 2에 도시된 예에서, 모든 송신기들, 송/수신기들, 및 수신기들은 통합 IP 네트워크, 해체된 네트워크들의 조합, 또는 다른 유사한 네트워크 조합을 포함할 수 있는 채널(250)을 통해 통신할 수 있다.
도 3은 송신기 및/또는 수신기를 구현{하기 위해 사용될 수 있는 하드웨어의 더 상세한 예를 도시하고 있다. 도시된 바와 같이, FEC 인코더/디코더(305)는, 동작을 수행하기 위해 사용되는 CPU(310), CPU(310)에 대해 고속의 액세스를 갖는 임시 메모리를 제공하는 캐시(320), CPU(310)에 대해 상대적으로 빠른 액세스를 가진 더 큰 메모리, 및 CPU(310)에 대해 합리적인 액세스 속도를 가진 큰 영구 메모리를 포함한다.
이 실시예의 많은 다른 변경들이 가능하다. 예를 들어, 캐시(320)는 운영체제(OS)에 의해 제어되는 부분 및 FEC 인코딩/디코딩 프로세스의 제어하에 있는 파트로 분할되어, CPU에 의해 처리, 즉, DMA(Direct Memory Access) 동작을 위한 준 비를 위해 다른 메모리 디바이스로부터 데이터를 프리로딩한다. 다른 예로서, 하나 이상의 캐시 레벨이 존재할 수 있고, 플래시 같은 다른 타입의 저장 디바이스가 존재할 수 있으며, 예컨대 디스크 스토리지 같은 몇몇의 스토리지 타입들은 분실될 수 있다.
보다 일반적으로, 메모리를 가진 컴퓨팅 디바이스들은 종종 변화하는 클래스의 메모리를 갖는다. 몇몇 클래스의 메모리들은, 더 근접한 메모리는 프로세서에 물리적으로 더 근접할 수 있거나, 또는 더 긴 리드를 요구하거나 더 느린, 멀리 있는 메모리보다 프로세서가 더 빨리 메모리를 판독 및/또는 기록하도록 허용하는 고속 응답을 갖는다는 의미에서 다른 메모리들보다 "더 근접한"것으로 간주된다. 더 일반적으로는, 한 클래스의 메모리는, 잠복, 응답률, 메모리 위치를 판독/기록하기 위해 필요한 에너지의 양, 메모리의 정보를 유지하기 위한 에너지의 양, 비트당 가격, 및 다른 고서사항들 때문에 다른 클래스보다 선호될 수 있다. 메모리 클래스들은, 가장 빠르고 가장 전력 효율적인 메모리가 선호되는 바와 같이, 통상적으로 선호도에 의해 순서가 정해질 수 있다. 통상적인 공학 및 설계 제약들은 복수 클래스의 메모리들의 사용을 지시할 수 있다. 예를 들어, 한 메모리는 영구 저장이 가능하지 않기 때문에 RAM 캐시 메모리를 원하지 않을 수 있고, 어떤 것은 프로세서 액세스가 느리기 때문에 디스크 메모리만을 원하지 않을 수 있다.
상술한 바와 같이, 디바이스는 상이한 클래스의 메모리를 가질 수 있고, 선호도에 의해 클래스의 순서가 정해진다. 가장 선호되는 메로리가 특정 계산 연산의 결과를 포함하기에 충분히 크지 않을 때, 덜 선호된 클래스의 메모리와 교환하는 것과 같은 메모리 관리가 요구될 수 있다. 이와 같은 특정 디바이스에서 및 특정 동작에 대한 잠복, 계산 비용, 전력 용법에 의해 비용이 부가되고, 따라서 효율적인 인-플레이스 변환을 위한 본 명세서에 기술되는 방법 및 장치들이 디바이스의 동작에 대한 큰 혜택을 제공한다.
도 3에서, FEC 인코더/디코더(305)는 다양한 메모리 유닛들을 제어할 수 있고 FEC 인코더/디코더(305)를 사용하는 애플리케이션의 제어하에 있는 다른 부분들이 존재할 수 있다. 따라서, 예를 들어, FEC 인코딩을 수행할 때, 애플리케이션은 인코딩될 자신의 소스 블록의 사본을 제어할 수 있고, FEC 인코더는 별도의 메모리 위치에 있을 애플리케이션에 의해 자신에게 전해질 자신의 소스 블록의 사본을 가질 수 있다.
이 예에서, 애플리케이션에 의해 사용되는 다른 메모리에 상관없이, FEC 인코더에 의해 사용되는 메모리를 최소화하는 것이 중요하고, 그러한 예는, 애플리케이션이 자신의 별도 소소 블록의 사본을 갖고, 및/또는 애플리케이션이 채널에 이미 전송된 일부의 소스 블록을 가져 더 이상 그 일부 소스 블록의 사본들을 유지할 필요가 없기 때문에, FEC 인코더가 소스 블록에 대한 재생 기호들의 계산 중 소스 블록의 일부 또는 모두를 겹쳐 쓰기 할 수 있는 이런 예와 같은 경우가 될 수 있다. 다른 예로서, 일반적으로 FEC 디코딩 중에, 일단 인코딩 기호들의 사본들이 소스 블록의 원본 소스 기호들을 복구하기 위해 사용되면, 그 사본들을 유지하는 것은 중요하지 않다.
도 4는, 메모리(420)에 저장된 수신된 인코딩 기호들(440)로부터 소스 기호 들의 소스 블록(430)을 발생시키기 위해 CPU(405)를사용할 수 있는 (아마도 프로그램 코드로서 구현{될) 종래의 FEC 디코딩 프로세스(410)가 도시되어 있는데, 메모리(420)는 도 3에 도시된 타입 또는 다른 타입의 메모리들을 포함할 수 있다. 도시된 바와 같이, 기호 저장을 위해 FEC 디코딩 프로세스(410)에 필요한 메모리의 크기는 통상적으로 인코딩 기호들의 총 크기에 소스 블록의 총 크기를 더한 것이다. 종래 FEC 인코딩 프로세스와 유사하다.
도 5는 본 발명에 따라 인-플레이스 FEC 디코딩 프로세스의 실시예를 도시하고 있다. 시작시 인-플레이스 FEC 디코딩 프로세스의 스냅샷(510)은, 도 3에 도시된 타입들 또는 다른 타입들의 메모리를 포함할 수 있는 메모리(520)에 저장된 수신된 인코딩 기호들(530)을 처리하기 위한 CPU(505)를 도시하고 있다. 종료시의 인-플레이스 FEC 디코딩 프로세스의 스냅샷은, 수신된 인코딩 기호들(530)이 원래 저장되어 있던 동일한 메모리(520)에 저장된 소스 블록의 복구된 소스 기호들(540)을 생성하기 위해 사용되었던 CPU(505)를 도시하고 있다. 또한, FEC 디코딩 프로세스의 중단 단계 중, 기호들을 위해 사용된 메모리는 작은 크기이지만, 수신된 인코딩 기호들(53)을 저장하기 위해 필요한 메모리 최대 크기 및 복구된 소스 기호들(540)을 저장하기 위해 필요한 메모리 최대 크기보다는 크다. 따라서, 소스 블록을 복구하기 위해 필요한 인코딩 기호들의 총 크기가 소스 블록의 크기와 비슷하기 때문에, 인-플레이스 FEC 디코딩 프로세스(510 및 515)는 디코딩 중 기호 저장을 위한 종개의 FEC 디코딩 프로세스(410)의 메모리의 약 절반을 사용한다. 인-플레이스 FEC 인코딩 프로세스도 유사하다.
이어지는 섹션에서, 도 5에 도시된 이점들을 깨닫게 해줄 방법 및 프로세스들을 도입한다. 특히, 선형 코드로서 표현될 수 있는 FEC 코드들에 대한 인-플레이스 FEC 인코딩 및 디코딩 프로세스를 도입한다.
선형 연산자
실시예를 추가로 도시하기 위해, 링의 수학적 개념을 사용할 것이다. 후속되는 설명에서, 다양한 수학적 프로세스 및 단계들은 하드웨어의 동작, 프로그램 명령어들의 실행, 또는 이와 유사한 것들에 의해 컴퓨팅/통신 다바이스에 의해 수행될 수 있다.
당업자들에게 잘 알려진 바와 같이, 링은 2개의 연산, 가산 및 곱이 분배 법칙을 만족시키도록 정의되는 하나의 세트이다. 또한, 가산에만 고려되는 세트는 아벨군을 형성한다, 즉, 가산의 결과는 피가수(summand)들의 순서에 독립적이고, 가산에 대해 중립적인 요소 0이 존재하며, 각 요소에 대해, 이 요소의 합이 0이 되도록하는 다른 요소가 존재한다. 다른 필요사항은, 곱도, 1과의 임의의 요소의 곱이 그 요소의 값을 변화시키지 않도록 중립적인 요소 1을 갖는다는 것이다. 일반적인 링에 대해, 본 발명은 임의의 논제로(nonzero) 요소가 역수를 가질 것을 요구하지 않고, 곱이 가환적(commutative)일 것을 요구하지도 않는다. 그러나, 이 조건 양자 모두가 만족될 때, 링을 "필드"로 칭한다. 이 기수법은 대수학의 한 표준이다.
본 명세서에 사용되는 바와 같이, "기호"는 통상적으로 소스 블록보다 더 작은 일부 데이터를 언급한다. 기호의 크기는 종종 비트로 측정될 수 있고, 이는 기 호는 M 비트 크기를 갖고, 2M개의 기호들의 알파벳으로부터 선택된다. 패킷 네트워크를 통한 신뢰할 수 있는 정보 전송의 애플리케이션에서, 예를 들어, 기호의 크기는 패킷 크기와 같거나, 또는 더 작을 수 있으므로, 각각의 패킷은 하나 이상의 기호들을 포함한다.
맵핑(기호 합산; symbol-wise)은, 동일한 크기의 기호 쌍들을 같은 크기의 다른 기호에 맵핑하는 하드웨어 및/또는 소프트웨어 등에서 구현{ 가능한 논리 구조이다. 이러한 맵핑을 ""로, 그리고 기호 쌍(S, T)에 대한 이러한 맵의 이미지를 로 나타낸다. 이와 같은 맵핑의 예가 비트 배타적 논리합(XOR)이다.
본 명세서에서 사용되는 다른 구조는 특별한 타입의 세트의 "액션"이다. A가 모든 요소들에 대해 중립적인 요소를 갖는 가환 합 연산자 "+"가 갖춰진다고 가정하면, 모든 요소들에 대해, 자신의 가산 역수를 포함한다. 이와 같은 세트를 또한 통상적으로 아벨군이라 한다. 기호 세트에 대한 이 그룹의 "액션"은 그룹 요소 r 및 기호 S를 포함하는 하나의 쌍을 다른 기호에 맵핑하는 맵핑 단계이다. 우리는, 이 팹핑이 그룹의 가산을 하는, 즉, 그룹 A의 모든 요소 쌍 a 및 b에 대해, (a+b)*S= a*Sb*S인 r*S로 이미지를 표시한다. A가 링이고 액션이, A의 곱셈 연산자가 "·"인, 즉, (a·b)*S = a*(b*S)인, A의 곱인 경우, 이 액션은 "연산"이라 한다.
링 또는 기호에 대한 필드 연산의 예들은 많다. 몇몇 예들이 아래에 기술된다. 이 예들의 리스트는 도시의 목적일 뿐이고, 본 발명을 규명하는 리스트로서 간 주되면 안되며, 본 발명의 범위를 한정하는 것으로 해석되어서도 안된다.
0과 1로 이루어진 필드 GF(2)는, 가산이 배타적 논리합(XOR)이고, 곱셈이 논리 연산 AND이므로, 1 * S = S, 및 0 * 5 = 0을 정의하는 기호 세트에 대해 연산을 수행하고, 여기서 S는 임의의 기호를 나타내고, 0은 0을 전체적으로 포함하는 기호를 나타낸다.
필드 GF(4)는 4개의 요소 0, 1, 2, 3으로 구성되어 있고, 여기서 가산은 정수의 통상적인 XOR이고, 곱은 표 1을 통해 정의된다.
표 1.
GF
(4)에 대한 곱
다음과 같은 방식으로 짝수 크기의 기호에 대해서 동작한다:
이와 같은 기호 S에 대해, S = (S[I], S[2])이 되도록 자신의 처음 절반 그리고 그 다음 절반을 S[I] 및 S[2]로 나타낸다.
그 다음,
0 * S = 0
1 * S = S
로 정의한다.
이것이 정말 유효한 연산인지를 빨리 검증할 수 있다. 동일한 필드의 다른 연산은 2비트의 기호에 대해 정의될 수 있다. 정수 0, 1, 2, 및 3을 갖는 이런 기호들을 검증하는 경우, 필드의 곱셈표가 상기 2-비트 기호의 경우에서 정의된 연산과 동시에 수행되는 연산을 기술한다는 것을 알 수 있다.
더 일반적으로, K가 차수 d의 GF(2) 연장 필드인 경우, 필드의 연산은 크기로 d로 분할 가능한 기호에 대해 정의될 수 있다. 이와 같은 연산은 1995년 캐나다 버클리의 국제 컴퓨터 과학 연구소의 기술 보고서 제TR-95-048호에 기재된 Bloemer 등의 "An XOR-Based Erasure Resilient Coding Scheme"에 기술되어 있다. 이 방식은 2진 엔트리들을 갖는 d × d 행렬로서 필드 K의 소위 "정기적인 표시"로 불리는 것을 이용한다.
"선형 변환"의 개념은 기호에 대한 링의 연산에 대한 개념을 참조하여 정의될 수 있다. 주어진 정수 m 및 n에 대해, 연산자에 의해 유도된 선형 변환은, 지정된 링의 엔트리들을 갖는 행렬의 공간을 이용하여, n개 기호들의 벡터들을 m개 기호들의 벡터들에 맵핑한다. 링 R에 대한 행렬은, 엔트리가 R에 속하는 엔트리들의 2차원 모음이다. 행렬이 m행과 n열을 가진 경우, 이 행렬은 통상적으로 m×n 행렬로서 언급된다. 쌍(m, n)은 행렬의 "포맷"으로 칭한다. 동일한 포맷의 행렬들은, 기초를 이루는 필드 또는 링의 감산 및 가산을 이용하여, 가산 및 감산될 수 있다. 포맷 (m, n)의 행렬은, 통상적으로 알려진 바와 같이, 포맷(m, k)을 만드는 포 맷(n, k)의 행렬과 곱해질 수 있다.
B가 이와 같은 행렬을 나타내고, B[j, k]가 위치 (j, k)의 B의 엔트리를 나타내는 경우, 및 이 행렬이 벡터 (S[1], S[2], ..., S[n])를 변환하는 경우, 및 (X[I], X[2], ..., X[m])가 변환된 벡터를 나타내는 경우, 다음과 같은 관계가 유요하다:
S가 S[1], S[2], ..., S[n]을 포함하는 열 벡터를 나타내고, X가 기호 X[1], X[2], ..., X[m]을 포함하는 열 벡터를 나타내는 경우, 변환은,
로서 표현될 수 있다.
상기 공식이 다음과 같은 단계들에 의해 수행될 수 있는 "단순 변환 프로세스"로서 언급되는, 인코더 또는 디코더의 B 및 S로부터 X를 계산하기 위한 프로세스를 기술한다:
1. j를 1로 설정 및 X[j]를 0으로 설정.
3. 1만큼 j를 증분. j가 m보다 큰 경우에는 중지, 그렇지 않다면 단계 2로 진행.
이와 같은 선형 변환은 다양한 애플리케이션에서 흔한 것이다. 예를 들어, 일부 데이터, 또는 소스 블록을 인코딩하기 위해 선형 코드를 사용할 때, S는 인코딩될 소스 블록의 소스 기호일 수 있고, X는 S의 인코딩된 버전, 그리고 B는 코드에 대한 발생기 행렬일 수 있다. 다른 애플리케이션에서, 예를 들어 사용된 코드가 체계적인 경우, X는 S 인코딩의 여분 기호일 수 있지만, B는 소스 기호들에 대한 여분 기호들의 독립성을 기술하는 행렬일 수 있다. 또 다른 애플리케이션에서, S는 전송 후 수신된 한 세트의 심볼들로부터 획득된 심볼의 벡터일 수 있고, X는 완전히 또는 부분적으로는 알려지지 않는 한 세트의 기호들에 대응하며, B는 X와 S간의 관계를 기술한다. 예를 들어, 삭제 또는 에러에도 불구하고, Reed-Solomon 코드를 디코딩할 때가 이와 같은 경우이다. 후자는 Shokrollahi 등으로 발행된 미국 특허 제6,631,172호의 "Efficient List Decoding of Reed-Solomon Codes for Message Recovery in the Presence of High Noise Levels"에 기술되어 있다.
많은 애플리케이션에서, 상기 벡터 X는 S를 저장하는데 필요한 메모리보다 충분히 큰 메모리를 사용하지 않고서 S로부터 계산될 필요가 있을 수 있다. 예를 들어, 기호들이 각각 512 바이트인 경우, m = n = 1024, S 및 X 각각은 512 킬로바이트이다. 전송이 600 킬로바이트의 메모리를 가진 장치에서 구현{되는 경우, 추가 메모리를 사용하지 않고서 S 및 X 양자 모두를 동시에 저장할 메모리가 충분하지 않을 수 있다.
이와 같은 상황에서, 프로세스는 S의 전송이 인-플레이스 완성될 필요가 있다. X가 S보다 작은 경우, 이는 S의 처음 m개 엔트리들이 X로 교체되거나, 더 일반적으로는, S의 m개 위치의 규정된 세트가, X의 위치로 교체되는 것을 의미할 수 있 다. 여기서 X가 S보다 큰 경우, 인-플레이스 변환은 전송 후 X의 처음 n개 엔트리들을 포함하는 S, 더 일반적으로는, 전송 후 X의 n개 엔트리들의 규정된 세트를 포함하는 S로서 해석될 수 있고, 그 밖의 저장된 m-n 엔트리들이 남는다. X 및 S가 동일한 길이인 경우, 인-플레이스 변환은 S를 X로 교체할 수 있다. 애플리케이션에서, 프로세스는 자신의 임무를 완성하기 위해 너무 추가 메모리를 너무 많이 사용해선 안된다. 따라서, 예를 들어, X가 다른 경우로 계산되고 저장되며, S의 메모리 위치로 복사되는 해결책은 적당한 해결책이 아닐 것이다.
인-
플레이스
선형 변환
인-플레이스 선형 변환에 대한 프로세스가 지금 기술된다. B를 포맷 (m, n)을 갖는 행렬이라 하고, S를 n개 기호들의 열 벡터라고 하자. 주어진 B 및 S는 B↓S, 아래 방향으로 B만큼의 S 인-플레이스 선형 행렬 변환을 다음과 같이 정의한다:
모든 i = 1, 2, ..., m에 대해,
S[i]를B의 i번째 행과 현재 S의 내적으로 대체한다.
이 인-플레이스 연산을 계산하는 프로세스는 도 6을 참조하여 설명된다. 단계(610)에서, 정수 변수 i는 0으로 초기화된다. 단계(620)에서, i의 값은 다음(z)까지 증가하고, 여기서 다음(z)은 B의 행 다음(i)이 적어도 하나의 논제로 엔트리를 갖도록 i보다 더 큰 가장 작은 정수이며, 다음(i)은, 행 i 이상의 모든 열들이 모두 제로 엔트리를 갖는 경우 m + 1로 설정된다. 단계(630)에서, i>m인지 여부가 체크되고, i > m 이라면 단계(640)에서 처리는 중단되지만, i≤m이라면, 처리는 임시 기호 값 T가 영으로 설정되고 정수 변수 j가 0으로 설정되는 단계(650)로 진행 된다. 단계(660)에서 j값은, 다음(i, j)이 B의 열 i에서, B[i, 다음(i, j)]가 논제로 엔트리가 되도록 j보다 큰 가장 작은 정수인 다음(i, j)까지 증가하고, B[i, j] 열 i이상의 모든 엔트리들은 모두 0인 경우, 다음(i, j)은 n + 1로 설정된다. 단계(670)에서, j > n인지 여부가 체크되고, j > n이라면, 처리는, 기호 S[i]가 T로 설정되는 단계(680)로 진행된 다음, 단계(620)로 되돌아 온다. 단계(670)에서 j ≤ n이라면, 처리는 임시 기호 값 T가 로 리셋되는 단계(690)로 진행된 다음, 단계(660)로 되돌아 온다.
상술한 설명 및 도 6으로부터, B↓S를 계산하기 위해 총 필요한 저장 기호의 수가 n + 1개 기호라는 것이 명확해졌다.
B를 포맷 (m,n)을 가진 행렬이라 하고, S를 n개 기호의 열 벡터라고 하자. 주어진 B와 S는, B↑S, 위 방향으로 B만큼의 S 인-플레이스 선형 행렬 변환을 다음과 같이 정의한다:
모든 i = m, m - 1, ..., 1에 대해,
S[i]를 현재S와 B의 i번째 행의 내적으로 대체한다.
이 인-플레이스 연산을 계산하는 프로세스는 도 7을 참조하여 설명된다. 단계(710)에서, 정수 변수 i는 m + 1로 초기화된다. 단계(720)에서, i의 값은 B의 행 이전(i)이 적어도 하나의 논제로 엔트리를 갖도록 i보다 작은 가장 큰 정수인 이전(i)까지 감소하고, 이전(i)은 행 i가 모두 0 엔트리를 갖는 경우 0으로 설정된다. 단계(730)에서, i < 1 여부가 체크되고, i < 1라면, 처리는 단계(740)에서 멈추지만, i > 1이라면, 처리는 임시 기호 값 T가 0에 설정되고 정수 변수 j가 0에 설정되는 단계(750)으로 진행된다. 단계(760)에서 j값은, B의 i행이 논제로 엔트리를 갖도록 j보다 큰 가장 작은 정수인 다음(i, j)까지 증가하고, 다음(i, j)는 b[i, j] i행 이상의 모든 엔트리들이 모두 0인 경우 n + 1로 설정된다. 단계(770)에서, j > n 여부가 체크되고, j > n인 경우 처리는, 기호 S[i]가 T로 설정되는 단계(780)로 진행된 다음 처리는 단계(720)로 되돌아간다. 단계(770)에서 j≤n이라면, 처리는, 임시 기호 값 T가 TB[i, j]*S[j]로 설정되는 단계(790)로 진행된 다음 단계(760)로 되돌아간다.
상기 설명과 도 7로부터, B↑S를 계산하기 위해 총 필요한 저장 기호의 수가 n + 1개 기호라는 것이 명확해졌다.
는 B로부터 용이하게 계산될 수 있고, 따라서 B가 희소(sparse) 행렬이고 효율적으로 액세스 될 수 있는 경우, B또한 희소 행렬이고 효율적으로 액세스 될 수 있다는 것에 주목해야 한다. B의 엔트리들이 GF(2)로부터 나온 것일 경우, B = B라는 것에도 주목해야 한다.
정의된 ↑, ↓ 및 ~ 연산자는 다음과 같은 특성들을 갖는다: B가 모든 i = 1, ..., n에 대해, B[i, i]≠0이 되도록 포맷 (n, n)을 갖는 행렬이라 하고, S는 n 개 기호들의 열 벡터라고 하자. S0은 의미의 변환, 즉, 초기에 S = S0를 적용하기 전 S의 값을 가리킨다. 따라서 다음과 같다.
따라서, 예를 들어, ↓ 및 ↑ 인-플레이스 연산자들은 서로의 센스(sense) 역수 관계이다. 대칭성에 의해, 하나는, 예를 들어, 당업자들이 인식할 수 있는 바와 같이, S는 상기 정의된 것과 유사한 특성을 갖는 m개 기호들의 행 벡터인 S↓B 및 S↑ 형태의 인-플레이스 연산자도 정의할 수 있다.
몇몇 클래스의 행렬에
대한 인-플레이스
변환
특별한 특성들을 갖는 선형 변환의 인-플레이스 계산에 대한 프로세스가 기술된다. 이 선형 변환들은 더 일반적인 선형 변환들의 계산에 대한 인-플레이스 프로세스들을 구성하기 위해 구축 블록(building block)으로서 사용된다. S는 m개 기호들의 열 벡터를 가리키는 후속되는 프로세스에서, B는, 예를 들어, GF92)의 연장 필드로서 간주될 수 있는 (그러나 기술은 일반적인 K에 대해 동등하게 적용한다) 필드 K를 통해 포맷 (m, n)의 행렬을 가리키고, 마지막 프로세스에서, 기호 S의 벡터에 대한 저장은 변환 의 결과를 저장한다.
B에 필요한 저장을 최소화하기 위해 사용될 수 있고 연산을 계산하기 위해 필요한 전반적인 계산을 최소화하기 위한 많은 기술들이 존재하지만, 일반적으로 이는 변환될 데이터가 요구하는 것보다 더 작은 메모리이다. 예를 들어, B가회소 행렬 일 때, B의 희소 표시는 모든 연산들을 실행하기 위해 필요한 전반적인 계산을 최소화하는 것을 허용하는 것이 가능하다. 예를 들어, B가 희소 행렬일 때, 순차적인 찾기보다 B의 특정 행 또는 열의 다음 논제로 엔트리를 찾는 보다 효율적인 방법들이 존재한다. 이런 유형의 최적화는, 본 명세서에 설명된 기술들과 함께 적용될 수 있는 다른 최적화 방법과 함께, 본 발명을 읽은 후 당업자들에게 명백할 것이다.
2.1. 순열 행렬.
이런 경우, B는 포맷 (n, n)의 순열 행렬, 즉 각각의 행과 열에 정확히 1개의 논제로 엔트리를 갖는 행렬이고, 그 논제로 엔트리는 1이다. 이 행렬이 희소 행렬, 즉, 매우 적은 개수의 논제로 엔트리를 갖는 행렬이기 때문에, 많은 애플리케이션에서, 행렬이 아닌 목록 (또는 행렬보다 메모리를 덜 사용하는 다른 대상)으로서 나타내는 것이 바람직하다. 예를 들어, B는 목록 (B[1], ..., B[n])으로서 표시될 수 있고, 여기서 (j, B[j])는 B의 논제로 엔트리들의 위치이다.
B를 갖는 S의 변환에 대한 프로세스는 도 18을 참조하여 기술된다. 2진 벡터 ㅍ[1], ..., v[n]는 모든 구성 요소들이 원래는 0으로 초기화되도록 유지된다. 이 프로세스는 T로 표시된 추가 기호를 사용할 것이다. 처음에는, T의 값은 모두 0이다.
단계(805)에서, 변수 c는 0으로 설정된다. 이 변수는 얼마나 많은 B에 대응 하는 배열 위치들이 이미 방문 되었는지를 셈한다. 단계(810)에서, 이 변수의 값은 1만큼 증분되고, 단계(815)에서, 조건 c < n+l 및 v[c] = 1 양자 모두가 만족하는지 여부를 체크한다. 만약 만족한다면, 이것은 배열의 위치 c가 이미 방문 되었다는 것을 의미하고, 검사할 더 많은 위치들이 여전히 존재한다. 프로세스는 단계(810)로 되돌아 간다. 만약 만족하지 않는다면, c=n+l, 또는 v[c] = 0가 만족 되는지 여부가 체크된다. 이전 경우, 모든 위치들이 방문 되었고, 프로세스는 단계(825)에서 종료한다. 이 테스트는 단계(820)에서 수행된다. c가 단계(820)의 n + 1보다 여전히 작다면, 반드시 v[c] = 0, 즉, 위치 c는 아직 방문 되지 않았다. 이런 경우, 보조 변수 d는 단계(830)에서 B[c]로 설정된다. 이 값은 S[c]가 변환 후 있게 될 위치와 동일하다. 단계(835)에서, 테스트는 d가 c와 같은지 여부를 판단하기 위해 만들어진다. 만약 같다면, 추가 연산은 필요없고 처리는 단계(860)로 건너뛴다. 값 v[c]는 1로 설정되고, 카운터 c는 단계(860)에서 1만큼 증분된다. 단계(835)에서 d가 c와 같지 않다면, T 및 S[c]의 값들은 단계(840)에서 교환된다. 그 다음, T 및 S[c]의 값들은 단계(845)에서 교환되고, v[d]는 1과 같고, d는 B[d]로 설정된다. 단계(850)에서, d의 값이 c와 같은지 여부가 체크되고, 이것이 실패한다면 단계들(845 및 850)을 포함하는 루프가 다시 반복된다. d가 c와 같다면, 처리는 루프 밖으로 나오고, T 및 S[c]의 값들은 단계(855)에서 교환된다. 단계(860)에서 v[c]의 값은 1로 설정되고, 전체 프로세스는 c가 1만큼 중분되는 단계(810)로 되돌아간다. 효과 면에서, 기술된 프로세스는 사이클의 행렬 B에 의해 주어진 순열을 분해하고, 사이클을 하나씩 찾아내어 처리한다.
많은 경우, B를 갖는 S의 인-플레이스 변환을 계산하기 위해 메모리 내 주변으로 S 기호를 이동하는 대신, S의 기호의 논리적인 순서를 메모리 내에서 S의 기호들을 이동하지 않고서 메모리 내에서 S의 기호들의 실제 위치로의 맵핑을 계속한다. 예를 들어, 하나는 다음과 같은 맵핑을 유지할 수 있다: p[1], ..., p[n]을 S의 논리 기호로부터 메모리 내의 그들의 실제 위치로의 맵핑, 즉, 모든 i = 1, ..., n에 대해 p[i]는 S의 i번째 논리 기호의 메모리 내의 위치라고 하자. 이 맵핑이 사용될 때, 순열 행렬 B에 의한 S의 변환에서, 상기 기술된 프로세스는, 상술한 바와 같이 S의 메모리 맵핑에 대한 논리를 S[1], ..., S[n]에 적용하는 대신 다시 계산하기 위해 p[1] ...,p[n]에 적용될 수 있다. 따라서, 도 8의 프로세스를 기술하기 위해 사용된 변수 T는 기호 S[c] 대신 p[c] 값을 임시로 저장하기 위해 사용되고, 도 8의 기호 S[1], ..., S[n]의 벡터에 적용되는 것이라면 어떤 논리라도 벡터 p[1], ..., p[n]에 대신 적용된다. 이 표시는, CPU, 메모리 대역폭, 및 통상적으로 훨씬 더 큰 기호 엔트리 S[1], ..., S[n]보다 p[1], ..., p[n]의 통상적으로 훨씬 더 작은 엔트리들을 메모리 내 주변으로 이동시키기 위한 다른 리소스들의 관점에서 비용이 적게 들기 때문에 더 이득이다.
단항 행렬(
Monomial
Matrices
)
이런 경우, B는 모든 행과 모든 열에 정확히 하나의 논제로 엔트리를 갖는 포맷 (n ,n)의 행렬이다. 순열 행렬은 단항 행렬의 특별한 경우이다. 단항 행렬에 대한 인-플레이스 변환을 계산하기 위한 프로세스는 참 9를 참조하여 기술된다. 이와 같은 행렬은 목록 (B[1], ..., B[n]; α[1], ...,α[n])에 의해 간결하게 기술 되고, 모든 j의 관련 값에 대해, B[j]는 B의 j열 논제로 요소의 위치이고, α[j]는 그 논제로 위치의 값이다.
B에 속하는 인-플레이스 변환을 계산하기 위한 프로세스는 서브-프로세스로서 B의 순열 부분에 속하는 선형 변환을 계산하기 위하나 프로세스를 이용한다. 도 9의 단계(905)에서, 프로세스는 B의 논제로 엔트리를 1로 교체함으로써 C가 행렬 B로부터 획득된 순열 행렬인 도 8에 기술된 프로세스를 이용하여 를 계산한다. 단계(910)에서, 정수 변수 i는 0으로 초기화되고, 그 다음 단계들(920, 940, 및 950)에서, 루프는 1과 n 사이의 각 값에 대해 S[i]의 값이 그 위치에 대한 α[i]의 위치, 즉, α[i]*S[i]로 교체되는 경우에 실행된다. 루프가 완성될 때, 처리는 단계(930)에서 중단된다. 당업자들에게 명백한 바와 같이, 도 9를 참조하여 기술된 프로세스는, B가 대각선 엔트리들 α[1], ...,α[n]을 갖는 대각선 행렬과 행렬 C의 곱으로서 기술될 수 있기 때문에, 을 계산한다. 또한, 프로세스 동안에 기호를 위해 사용된 저장은 n + 1이다.
상부 삼각행렬
U를 상부이 삼각 (모든 j < i에 대해 U[i, j] ≠ 0)을 이루는 포맷 (n, n)의 행렬이라 하자. 그렇다면,
즉, 인-플레이스 연산자 U↓S는 U를 S로 곱한 결과로서 기호의 동일한 n 벡터로 귀결된다. 또한, U도 역분 가능한 경우 (모든 i에 대해 U[i, i] ≠ 0),
즉, 인-플레이스 연산자 는 U의 역수를 S로 곱한 결과로서 기호의 동일한 n 벡터로 귀결된다. 따라서, 행렬 곱 및 역행렬 곱은 상부 삼각 행렬에 대한 인-플레이스 연산자를 이용하여 달성된다.
U가 희소 행렬인 경우에서 주목할 것은, 및 양자 모두 희소 계산, 즉, U와의 곱셈 및 U의 역수와의 곱셈 양자 모두는, U- 1는 희소 행렬일 필요는 없음에도 불구하고 희소 인-플레이스 계산에 의해 달성될 수 있다는 것이다.
하부 삼각 행렬
L을 하부 삼각 (모든 j > i에 대해 L[i, j] = 0)을 이루는 포맷 (n ,n)의 행렬이라 하자. 그렇다면,
즉, 인-플레이스 연산자 L↑S는 L을 S로 곱한 결과로서 기호의 동일한 n 벡터로 귀결된다. 또한, L도 역분 가능한 경우 (모든 i에 대해 L[i, i] ≠ 0),
즉, 인-플레이스 연산자 는 L의 역수를 S로 곱한 결과로서 기호의 동일한 n 벡터로 귀결된다. 따라서, 행렬 곱 및 역행렬 곱은 하부 삼각 행렬에 대한 인-플레이스 연산자를 이용하여 달성된다.
L이 희소 행렬인 경우에서 주목할 것은, 및 양자 모두 희소 계 산, 즉, L과의 곱셈 및 L의 역수와의 곱셈 양자 모두는,L-1은 희소 행렬일 필요는 없음에도 불구하고 희소 인-플레이스 계산에 의해 달성될 수 있다는 것이다.
곱
이런 경우, B는 상술한 유형의 행렬들의 곱, 즉, B는 곱 M1·M2· ... ·Mt이고, 여기서 Mj 각각은 순열 행렬 또는 단항 행렬, 또는 상부 삼각 행렬, 또는 하부 삼각 행렬이다. 이 행렬의 변환 인-플레이스를 계산하기 위한 프로세스는 S를 Mt로 변환한 다음, 그 결과를 Mt -1등으로 변환한다.
일반적인
정사각
행렬
포맷 (n, n)의 행렬 B에 대해, B를 3개의 행렬 P, L, 및 U로 분해하는 것을 계산하는 것이 가능하고, 여기서 P는 순열행렬, L은 주 대각선을 갖는 하부 삼각행렬, 그리고 U는 상부 삼각행렬이다. 이와 같은 분해는 당업자들에게 알려진 바와 같은 다양한 프로세스들에 의해 계산될 수 있다. 이런 프로세스들 중 하나가 가우시안 소거법으로 잘 알려져 있다. B에 의한 S의 인-플레이스 변환, 즉,인-플레이스 변한을 이용하여 을 계산하는 것은 간단하게
임의의 정사각 행렬 B를 갖는 이런 인-플레이스 변환을 계산하기 위한 프로세스는 도 10을 참조하여 더 상세히 기술된다. 단계(1010)에서, B의 PLU-분해가 계산된다. 상기 언급한 바와 같이, 이와 같은 분해는 다양한 수단에 의해 계산될 수 있다. 일반적인 행렬에 대해, 한가지 가능한 방법은 가우시안 소거 알고리즘을 이용한다. 특별한 행렬, 예를 들어, 희소 행렬, 코쉬 행렬 등에 대해, 당업자들에게 알려진 바와 같이 더 효율적인 방법이 이용될 수 있다. 단계(1020)에서, 기호의 벡터 S의 인-플레이스 변환 U↓S가 도 6을 참조하여 기술된 바와 같이 계산된다. 그 다음, 단계(1030)에서, 기호 S의 변환된 세트는 다시 변환되고, 이때 도 7을 참조하여 기술된 바와 같이 인-플레이스 변환 L↑S가 계산된다. 그 다음, 단계(1040)에서, 기호 S의 새로 변환된 세트는 다시 변환되고, 도 8을 참조하여 기술된 바와 같이, 순열 행렬 P에의한 S의 인-플레이스 변환이 계산된다.
여기서 P-1은 P의 역수인 순열 행렬이다.
주목해야할 것은, 상술한 인-플레이스 변환 프로세스를 이용하여 를 계산하는데 필요한 계산의 양은 본질적으로 에 대해서와 동일하다. 또한, U와 L 양자 모두가 희소하게 표시되는 경우, 예를 들어, n개의 선형 논제로 엔트리들만을 갖는다면, 및 양자 모두는 선형에 대해 상술한 인-플레이스 변환을 이용하여 상술한 바와 같이 계산될 수 있다. 계산의 임의의 지점에서 기호들을 저장하기 위해 상술한 인-플레이스 변환의 계산 중에 사용된 메모리 또는 저장소의 양은 n + 1이다.
본 명세서에 기술된 프로세스는 매우 일반적이지만, 모든 중요한 경우에서 가장 효율적인 것은 아닐 수 있다는 것을 주목해야 한다. 인-플레이스 변환이 이 일반적인 경우의 변환보다 더 효율적으로 달성될 수 있는 다른 경우가 아래에 기술된다.
비-정사각형 행렬
포맷 (m, n)의 행렬 B가 정사각형 행렬이 아닌 경우, 상술한 방법과 유사한 방법은 메모리의 양을 최소화하는 방식으로 변환을 계산하도록 이용될 수 있다. 예를 들어, 행렬이 열보다 더 많은 행을 가질 때(즉, m이 n보다 클 때), 결과 벡터의 처음 n개 요소들을 인-플레이스 계산하는 것만이 중요하다. 이는 다음과 같이 달성될 수 있다.
B'가 B의 n개 행으로 형성된 정사각형 행렬이고, B"를 B의 마지막 m-n개 행으로 형성된 행렬이라 하자. S는 변환될 기호 값을 초기에 정하는 n개 기호의 열 벡터라 하고, S'를 추가 m-n 기호의 열 벡터라 하자. 그 다음 는 다음과 같이 인-플레이스 계산될 수 있다:
주목할 것은, 행렬 B'가 하부의 삼각 행렬인 경우, 상기 프로세스의 마지막 2 단계는 계산을 간단하게 하지만, 반면 행렬 B'가 상부 삼각 행렬인 경우, 상기 프로세스의 마지막 2 단계는 계산을 간단히 한다는 것이다.
유사하게, n이 m보다 큰 경우, 유사한 방법이 다음과 같은 벡터 S의 처음 m개 엔트리들을 교체하는 방식으로 변환을 계산하기 위해 이용될 수 있다. B'를 B의 처음 m개 열로 형성된 정사각형 행렬이고, B"를 B의 마지막 n-m개 열로 형성된 행렬이라 하자. S는 변환될 기호 값을 초기에 정하는 n개 기호의 열 벡터라 하고, S'를 마지막 n-m개 기호라 하자. 그 다음 는 다음과 같이 인-플레이스 계산될 수 있다:
주목할 것은, 행렬 B'가 하부의 삼각 행렬인 경우, 상기 프로세스의 처음 2 단계는 계산을 간단하게 하지만, 행렬 B'가 상부 삼각 행렬인 경우, 상기 프로세스의 처음 2 단계는 계산을 간단히 한다는 것이다.
대부분의 희소 행렬에 대한 효율적인 인-플레이스 선형 변환
도 11에 도시된 유형의 포맷(n, n)의 정사각 행렬이라 하자. 도 11에서, m≤ n이고, L은 포맷(m, m)의 하부 삼각 역행렬, A는 포맷(m, n-m)의 행렬, B는 포맷(n-m, m)의 행렬, C는 포맷(n-m, n-m)의 역행렬이다.
S를 n개 기호의 열 벡터라 하자. 아래에 및 를 계산하는 효율적인 인-플레이스 변환이 기술된다. 이 인-플레이스 변환들은 효율 및 인-플레이스라는 점에 대해 후에 기술되는 소정의 FEC 인코딩 및 FEC 디코딩 방법 및 프로세스에 대한 기초를 잡는다. 유형 M의 행렬이 고려되는 소정의 FEC 코드들에 대해, M은 희소행렬, 예를 들어, M의 논제로 엔트리들의 갯수는 n의 순서이고, n-m은 n과 비교하여 작고, 예를 들어, n-m은 n의 제곱근의 순서인 행렬이다. 이 예에서, 아래에 기술되는 및 를 계산하는 인-플레이스 변환을 수행하기 위해 필요한 계산은 n개 기소 연산자들의 순서이지만, 계산 중 기호를 위해 사용되는 총 공간 또는 메모리는 최대 n+1이다.
M'을 도 12에 도시된 바와 같이 M으로부터 도출된 포맷(n, n)의 정사각 행렬이라 하자. 도 12에서, L 및 B는 도 11에 도시된 행렬 L 및 B와 동일한 행렬이고, 마지막 n-m개 열 및 처음 m개 행으로 형성된 행렬의 모든 엔트리들은 0이며, 마지막 n-m개 열 및 마지막 n-m개 행에 의해 형성된 행렬은 단위행렬이다. 주목할 것은, M'은 하부 삼각 역행렬이라는 것이다. 도 12에는 M의 역행렬인, M-1의 형태를 도시하고 있다.
D를 도 13a에 도시된 포맷(n, n-m)의 행렬이라 하자. 도 13a에서, A 및 C는 도 11에 도시된 행렬 A 및 C와 동일한 행렬이다. 행렬 D는 n개 기호의 열 벡터로서 간주될 수 있고, 그 각각의 기호는 기초를 이루는 필드 K로부터의 n-m 필드 요소의 연속(concatenation)이다. 따라서, D가 단지 기술된 바와 같이 n개 기호의 열 벡터로서 간주될 때, D에 대한 포맷 (n,n)의 행렬의 연산을 정의할 수 있고, n개 기호의 벡터로서 간주되는 D에 대한 행렬 연산은, 행렬로서 간주될 때, 행렬과 D의 행렬 곱과 동일하다.
기술한 바와 같이, D를 n개 기호의 열 벡터로서 간주할 때, 인-플레이스 변환 는 도 13b에서 도시된 바와 같이 값을 갖는 D로 귀결되고, E가 포맷 (m, n-m)의 행렬로서 간주될 때, 이며, F가 포맷(n-m,n-m)의 행렬로서 간주될 때는, 이라는 것을 알 수 있다. C 및 L 양자 모두 역행렬 가능하기 때문에, F도 역행렬 가능하다는 것이 쉽게 증명된다. P, A, 및 Y를 포맷 (n-m,n-m)의 행렬이라 하자, 여기서 이고, P는 순열행렬이며, A는 하부 삼각 행렬, Y는 상부 삼각 행렬이다. 이 인수분해는, 예를 들어, 잘 알려진 가우시안 소거법 또는 그와 유사한 기법을 이용하여 획득될 수 있다.
L'을 도 14에 도시된 바와 같이 포맷(n, n)의 정사각 행렬이라 하자. 도 14에서, L은 도 11에 도시된 행렬 L과 동일한 행렬이고, 마지막 n-m개 열과 처음 m개 열에 의해 형성된 행렬의 모든 엔트리들은 0이며, 마지막 n-m개 열과 마지막 n-m개 행에 의해 형성된 행렬은 순열 행렬이다. 주목할 것은, L'은 하부 삼각 역행렬이라는 것이다. 도 14는 L'의 역행렬인 L'-1의 형태를 도시하고 있다.
도 15a, 15b, 및 15c 각각에 도시된 바와 같이, P', A', 및 Y'를 포맷 (n- m,n-m)의 행렬이라 하자, P, A, 및 Y는 이 되는 행렬이고 F는 상기 기술한 바와 같으며, P', A', 및 Y' 각각에서, 마지막 n-m개 행과 처음 m개 열에 의해 형성된 행렬의 모든 엔트리들은 0이고, 처음 m개 행과 처음 m개 열에 의해 형성된 행렬은 순열 행렬이다. 주목할 것은, P', A', 및 Y'은 역행렬이라는 것이다.
N'을 도 16에 도시된 바와 같이, 포맷(n, n)의 정사각 행렬이라 하자. 도 16에서, L 및 A는 도 11에 도시된 행렬 L 및 A과 동일한 행렬이고, 마지막 n-m개 행과 처음 m개 열에 의해 형성된 행렬의 모든 엔트리들은 0이며, 마지막 n-m개 열과 마지막 n-m개 행에 의해 형성된 행렬은 순열 행렬이다. 주목할 것은, N'은 완전한 하부 삼각행렬은 아니지만 역행렬이라는 것이고, 은 의 결과를 인-플레이스 계산한다는 것을 알 수 있다. 도 16은 N'의 역행렬인, N'-1의 형태를 도시하고 있다. 은 의 결과를 인-플레이스 계산한다.
상기 도입한 기수법에 기초하여, 입력 M 및 S에 대한 인-플레이스 변환 을 계산하는 프로세스는 도 17을 참조하여 기술된다. 단계(1710)에서, 인-플레이스 변환 이 계산된다. 단계(1720)에서, 인-플레이스 변환 이 계산되며, 여기서 D는 상기 기술한 바와 같고, 상기 기술한 바와 같이 행렬 는 변환의 결과의 마지막 n-m개 행이다. 단계(1730)에서, 행렬 F는 상기 기술한 바와 같이, P, A, 및 Y로 인수분해된다. 단계(1740)에서, 인-플레이스 변환 이 계산된다. 단계(1750)에서, 인-플레이스 변환 이 계산된다. 단계(1760)에서, 인-플레이스 변환 이 계산된다. 단계(1770)에서, 인-플레이스 변환 이 계산된다. 단계(1780)에서, 인-플레이스 변환 이 계산된다. 단계(1790)에서, 인-플레이스 변환이 완성되면서 프로세스가 중지된다.
도 17에서 기술된 프로세스 마지막에서, 벡터 S가 원본 벡터 S에 의해 곱해진 M의 결과를 저장한다는 것이 증명될 수 있다. 주목할 것은, 프로세스의 임의의 단계에서 기호를 위해 사용된 저장은 최대 n + 1이고, 모든 단계를 통해 모인 기호 연산의 갯수는 M의 논제로 엔트리들의 갯수의 합 및 (n-m)2에 선형 비례한다는 것이다..
추가 효율 및 이점들을 가져올 수 있는 도 17에 기술된 프로세스에 대해 많은 변경들이 존재한다. 예를 들어, 인-플레이스 연산중, 연산자들이 결과를 바꾸지 않기 때문에, 단위 부분행렬에 대해 연산하는 일부 연산자들이 생략될 수 있다, 즉, 를 계산할 때, 연산자들이 이 인-플레이스변환의 결과에 영향을 주지 않기 때문에 N'의 마지막 n-m개 행의 연산이 생략될 수 있다. 다른 변경에 대한 예로서, 결과에 영향을 주지 않고, 몇몇 단계들의 순서를 바꿀 수 있다. 이와 같은 변경 중 하나가 단계(1730)와 단계(1740) 사이에 단계(1770)를 수행하는 것이다. 또 다른 이와 같은 변경은, 단계(1770)와 단계(1740) 및 단계(1730)의 사이에서 수행되는 것이고, 이런 경우, 단계(1740)와 단계(1770)를 도 20에 도시한 바와 같이 하나의 인-플레이스 변환으로 결합하고, 단계(1750)와 단계(1760)를 도 21에 도시 한 바아 같이 하나의 인-플레이스 변환으로 결합하는 것이 가능하다. 변경에 대한 또 다른 예로서, 단계들(1730, 1740, 1750, 및 1760)은, S의 마지막 n-m개 기호들을 포함하고, 결과에 의해 S의 마지막 n-m개 기호를 대체하는 열 벡터로 F를 곱하는 단계와 대체될 수 있다. F에 의한 곱은, 예를 들어, 본 명세서에 기술된 바와 같은 인-플레이스 변환 또는 표준 행렬 곱과 같은 표준 기법을 이용하여 수행될 수 있다.
상기 도입한 기수법에 기초하여, 입력 M 및 S에 대한 인-플레이스 변환 을 계산하는 프로세스는 도 18을 참조하여 기술된다. 도 18을 참조하여 기술되는 인-플레이스 변환은 총 n + (n-m) + 1개 저장 기호들을 사용한다, 즉, 기호 연산자의 총 개수가 동일하다는 이점을 갖는 도 17을 참조하여 기술된 프로세스보다 n-m개 더 맣은 기호들이 의 직접적인 인-플레이스 계산에서 사용될 것이다. 따라서, M이 희소행렬일 때, 도 18을 참조하여 아래에 기술되는 프로세스는, 약간 더 많은 기호 저장 비용으로, 도 17을 참조하여 기술된 프로세스보다 더 적은 계산을 할 것이다. 후에 기술되는 FEC 코드들에 대한 애플리케이션에서, n-m은 종종 n과 비교하여 더 작으므로, 도 18을 참조하여 기술되는 프로세스를 위해 요구되는 기호 저장의 추가량이 통상적으로 도 17을 참조하여 기술된 프로세스에 의해 성취되는 기호 저장의 최소량과 비교하여 더 적다.
W를 추가 n-m 기호의 열 벡터라 하자. Q를 M의 처음 m개 행을 포함하는 포맷 (m, n)의 단위행렬이라 하고, Q'를 M의 마지막 n-m개 행을 포함하는 포맷 (n-m, n)의 단위행렬이라 하자. 도 18의 단계(1810)에서, 은 직접적인 행렬 곱을 이용하여 계산된다. 단계(1820)에서, 인-플레이서 변환 이 계산된다. 주목할 것은, Q의 처음 m개 열이 하부 삼각 행렬 L을 형성하기 때문에, 단계(1820)에서 계산된 인-플레이스 변환은 와 동일한 S의 처음 m개 엔트리들로 귀결된다는 것이다. 단계(1830)에서, W는 S의 마지막 n-m개 기호들에 카피된다. 단계(1840)에서, 인-플레이스 변환이 완성되면서 프로세스가 중단한다.
상기 도입한 기수법에 기초하여, 입력 M 및 S에 대한 인-플레이스 변환을 계산하는 프로세스는 도 19를 참조하여 기술된다. 단계(1910)에서, 인-플레이스 변환 이 계산된다. 단계(1920)에서, 인-플레이스 변환 이 계산된다. 단계(1930)에서, 인-플레이스 변환 이 계산되며, 여기서 D는 상기 기술한 바와 같고, 상기 기술한 바와 같이, 행렬는 변환의 결과의 마지막 n-m개 행이다. 단계(1940)에서, F는 상기 기술한 바와 같이, P, A, 및 Y로 인수분해된다. 단계(1750)에서, 인-플레이스 변환 이 계산된다. 단계(1960)에서, 인-플레이스 변환 이 계산된다. 단계(1970)에서, 인-플레이스 변환 이 계산된다. 단계(1980)에서, 인-플레이스 변환 이 계산된다. 단계(1990)에서, 인-플레이스 변환이 완성되면서 프로세스가 중지된다.
도 19에서 기술된 프로세스 마지막에서, 벡터 S가 원본 벡터 S에 의해 곱해진 M-1의 결과를 저장한다는 것이 증명될 수 있다. 주목할 것은, 프로세스의 임의의 단계에서 기호를 위해 사용된 저장은 최대 n + 1이고, 모든 단계를 통해 모인 기호 연산의 갯수는 M의 논제로 엔트리들의 갯수의 합 및 (n-m)2에 선형 비례한다는 것이다.
도 19를 참조하여 상기 기술된 이런 프로세스는 본질적으로 도 17을 참조하여 상기 기술된 프로세의 반대이다. 도 17을 참조하여 기술된 프로세스의 경우에서와 같이, 추가 효율 및 이점들을 가져올 수 있는, 도 19에 기술되는 프로세스에 대한 많은 변경들이 존재한다. 예를 들어, 단계들(1940, 1950, 1960, 및 1970)은 F-1을 결정한 다음 S의 마지막 n-m개 기호들을 포함하고 결과에 의해 S의 마지막 n-m개 기호들을 대체하는 열 벡터에 의해 F-1을 곱하는 단계들과 대체될 수 있다. F-1의 결정 및 F-1에 의한 곱은, 예를 들어, 본 명세서에 기술된 바와 같은 인-플레이스 변환 또는 표준 가우시안 소거법 및 행렬 곱과 같은 표준 기법을 이용하여 수행될 수 있다. 이런 단계에서 표준 행렬 곱을 이용하는 경우, 기호들을 위한 더 많은 저장소가 요구될 수 있다, 예를 들어, 특히 m이 n에 근사할 때, 인-플레이스 변환중, 기호들을 위한 최대 저장소가 2-n-m+l개 기호가 되지만, 전체 인-플레이스 변환중 기호들을 위해 사용되는 전체 저장량은 여전히 실질적으로는 표준 기법이 사용하는 2-n보다 작도록 더 많은 저장소가 요구될 수 있다.
애플리케이션
Reed
-
Solomon
코드
삭제 또는 손상에 대한 전송 보호를 위한 한 종류의 선형 코드들이 Reed-Solomon코드로서 알려져 있다. Vandermonde 행력에 기초한 코드, Cauchy 행렬에 기초한 코드 등과 같은 순환 코드를 기술하기 위한 많은 등가의 방식이 존재한다. 이런 모든 경우에서, 인코딩 프로세스는 행렬과 기호의 벡터의 곱에 의해 기술될 수 있다. 소스 기호의 숫자가 k, 출력 기호의 숫자가 n, v는 인코딩될 기호 k의 열 벡터를 가리키며, w는 v의 인코딩을 포함하는 n개 기호의 열 벡터를 가리키고, 인코딩 프로세스는,
로서 기술되고, 여기서 M은 때로는 코드를 위한 발생기 행렬로도 불리는 포맷 (n,k)의 행렬인 것으로서 기술된다. M'을 M의 처음 k개 행들을 포함하는 포맷 (k, k)의 행렬이라 하고, M"을 M의 마지막 r = n-k개 열을 포함하는 포맷 (r, k)의 행렬이라 하자. w'는 w의 처음 k개 기호라 하고, w"를 w의 마지막 r개 기호라 하자.
코드가 대칭인 경우, 즉, v와 M의 행렬 곱한 후, 결과 w'의 처음 k개 기호가 w의 엔트리들과 일치하는 경우, M'은 단위 행렬이다. 대칭 코드에서, 인코딩된 벡터 w'의 엔트리들은 소스 위치로서 언급된다. 이와 같은 경우, M"은 w"의 r개 용장 기호(redundant symbol)를 계산하기 위해 사용된다. 행렬 M은 다양한 방식으로 표현될 수 있다. 예를 들어, 비대칭 버전을 원할 경우, M은 Vandermonde 행렬이 될 수 있다. 대칭인 경우, M"은 Cauchy 행렬을 형성할 수 있다. 이런 표현은 예시의 목적으로만 언급된 것이며, 완전한 목록을 형성하려는 의도는 아니다.
Reed-Solomon 코드가 비대칭일 때, 도 20을 참조하여 기술된 프로세스는 프 로세스 진행 중 최대 n + 1개 기호들을 위한 저장소를 이용하여 인코딩을 발생시킨다. 초기에 w'는 인코딩될 k개 소스 기호들을 저장한다. 마지막 프로세스에서, w는 인코딩의 결과를 저장한다, 즉, w'는 처음 k개 인코딩 기호들을 저장하고 w"는 남아있는 발생된 r개 인코딩 기호들을 저장한다. 도 20의 단계(2010)에서, w"는 직접적인 행렬 곱, 예를 들어, 상술한 "단순 변환 프로세스"를 이용하여 로서 계산된다. 단계(2020)에서, M'은 P, L, 및 U로 인수분해되고, 여기서 이 각각의 행렬은 포맷 (k,k)이며, P는 순열행렬, L은 하부 삼각행렬, U는 상부 삼각행렬이며, 따라서 이다. 이와 같은 분해는 다양한 접근 방식, 예를 들어, 가우시안 소거 알고리즘을 이용하여 계산되거나, 또는 행렬 M'이 코시 행렬일 때, PLU-분해는 공식으로 계산될 수 있으므로, 계산의 복잡성을 줄 일 수 있다 단계(2030)에서, 인-플레이스 변환 이 계산된다. 단계(2040)에서, 인-플레이스 변환 이 계산된다. 단계(2050)에서, 인-플레이스 변환 이 계산된다. 단계(2060)에서, 인-플레이스 변환이 완성되기 때문에 프로세스가 종료된다. 인코딩 기호들이 임의의 주어진 시스템에 전송되는 순서는, 그 기호들이 저장되는 순서는 아니며, 따라서 실제로는 마지막 단계(2060)가 수행되어야 한다는 것을 주목해야 한다.
Reed-Solomon 코드가 대칭일 때, 프로세스 진행 중 최대 m + 1개 기호를 위한 기호 저장소를 이용하여 k개 소스 기호들로부터 r개 용장 기호들을 생성시키는 인-플레이스 변환이 기술되고, 여기서 m은 k 및 r의 최대값이다. 이런 경우, 초기에 w'에 저장되는 기호들은 발생된 용장 기호들에 의해 전체적으로 또는 부분적으 로 중복 기재되므로, 그 중복 기재된 소스 기호들은 일반적으로, FEC 인코드를 이용하는 애플리케이션에 의해 제어되는 다른 저장 공간에 저장되거나 또는 이미 전송되어 더 이상 저장될 필요가 없을 것이다. 용장 기호의 숫자 r은 소스 기호의 숫자 k보다 크거나 같을 때, 도 20에서 기술된 프로세스의 약간의 변경은 최대 r + 1개 저장 기호들을 이용하여 을 계산하는 인-플레이스 변환을 이용하여 용장 기호들을 발생시키기 위해 사용될 수 있다. r < k일 때, 도 21을 참조하여 기술되는 프로세스는 최대 k + 1개 저장 기호들을 사용하는 인-플레이스 변환을 이용하여 용장 기호들을 발생시키기 위해 사용될 수 있다. 초기에 w'는 인코딩될 k개 소스 기호들을 저장한다. 마지막 프로세스에서, w'의 처음 r개 엔트리들, 즉, v는 남아있는 r개 인코딩 용장 기호들을 저장한다. B를 M"의 마지막 k-r개 열과 동일한 포맷 (r, k-r)의 행렬이라 하고, B'를 M"의 마지막 k-r개 열과 동일한 포맷 (r, r-k)의 행렬이라 하자. 도 21의 단계(2110)에서, B는 P, L, 및 U로 인수분해되고, 여기서 이 각각의 행렬은 포맷 (k,k)이며, P는 순열행렬, L은 하부 삼각행렬, U는 상부 삼각행렬이고, 따라서 이다. 이와 같은 분해는 다양한 접근 방식, 예를 들어, 가우시안 소거 알고리즘을 이용하여 계산되거나, 또는 행렬 B가 코시 행렬일 때, PLU-분해는 공식으로 계산될 수 있으므로, 계산의 복잡성을 줄 일 수 있다. 단계(2120)에서, 인-플레이스 변환 이 계산된다. 단계(2130)에서, 인-플레이스 변환 이 계산된다. 단계(2140)에서, 인-플레이스 변환 이 계산된다. 단계(2150)에서, v는, 상기 "선형 연산자"로 명명된 섹션에서 기술된 "단 순 변환 프로세스"와 같은 직접적인 행렬 곱의 작은 병경을 이용하여 로 업데이트 된다. 단계(2160)에서, 인-플레이스 변환이 완성되기 때문에 프로세스가 종료된다.
전송된 기호들이 수신되기 전 삭제될 수 있는 통신 채널에서, 디코딩 문제는, 충분히 많은 디코딩된 기호에 대한 지식으로부터, 즉, 인코딩이 에 정의되는 w의 충분히 많은 엔트리들에 대한 지식들로부터 원본 소스 기호들의 벡터 v를 결정해야 하는 것이다. Reed-Solomon 코드의 경우에서, "충분히 많은 기호들"이란 의미는, 애플리케이션에 따라, 그리고 디코딩을 위해 이용 가능한 계산 및 저장 리소스들에 따라, k개 기호만큼 적거나, k개 기호들보다 많다는 의미로 해석될 수 있다.
후속되는 설명에서, 대칭 Reed-Solomon 코드의 인-플레이스 디코딩의 문제에 대한 상술한 일반적인 인-플레이스 변환 방법의 예시 애플리케이션이 기술된다. 본 발명의 방법은, 당업자들에 의해 검토된 후, Reed-Solomon 디코딩의 비대칭 버전과 같은 다른 경우들에 대해서도 용이하게 일반화될 수 있다.
대칭 Reed-Solomon 코드의 인-플레이스 디코딩 방법이 도 22 및 도 23을 참조하여 설명된다. 도 22에 도시된 예시의 프로세스에서, 단계(2205)는 행렬 M"의 열에 대해 p[1], ..., p[e]로 표시되는 삭제된 소스 기호 위치들을 다루고, 단계(2210)은 행렬 M"의 행에 관해 수신된 용장 기호들의 위치 r[l],..., r[e]를 다룬다. 도 22에 도시된 예시의 프로세스에 대해, 수신된 기호들이 k개 기호들의 열 벡터 v에 저장되고, 여기서 위치 p[1], ..., p[e]의 기호들은 수신된 용장 기호들이고, v의 다른 k-e개 위치의 기호들은 그들의 적당한 위치의 수신된 소스 기호이며, 디코더의 임무는 위치 p[1], ..., p[e]에서 v를 놓친 e개 소스 기호들로 변환하는 것이라고 가정하자. 변수 i에 대한 바깥 루프는 단계(2220) 내지 단계(2250)로 정의되고, 삭제된 소스 위치들의 숫자 e와 1 사이인 변수 i의 값을 위해 이 단계들이 효과적으로 구동된다. 이 루프를 시작하기 전, i의 값은 단계(2215)에서 1로 초기화된다. 단계(2225) 내지 단계(2240)의 루프는, p[1], ..., p[e]중 임의의 위치가 아니고, 1과 k 사이인 j값에 대해서는 그 단계들을 건너뛰고, 이와 같은 각각의 j에 대해, 그 값을 의 값에 가산함으로써 를 업데이트한다.
도 23의 프로세스에서, 에 의해 형성된 벡터를 z로 표시하고, 행렬 M"의 행 및 열 에 의해 형성된 행렬의 역행렬을 T로 표시한다. Reed-Solomon 코드의 일반적인 이론은, 당업자들에게 잘 알려진 바와 같이, 이 행렬을 항상 역행렬로 만들 수 있다는 것을 보여준다. 이 역행렬 및 그것의 PLU-분해는 단계(2305)에서 계산된다. PLU-분해는 다양한 접근 방식, 예를 들어, 가우시안 소거 알고리즘을 이용하여 계산되거나, 행렬 M"이 코시 행렬일 때, 이 PLU-분해는 공식으로 계산될 수 있으므로, 계산의 복잡성을 줄일 수 있다. 주목할 것안, T의 PLU-분해는 행렬 T를 명확하게 계산할 필요 없이 이 프로세스에 의해 바로 계산될 수 있다는 것이다. 단계(2310)에서, 도 6에 도시된 프로세스를 이용하여 인-플레이스 변환 이 계산된다. 단계(2320)에서, 도 7의 프로세스를 이용하여 이 계산된다. 단계(2330)에서, 도 8의 프로세스를 이용하여, 인-플레이스 변환 이 계산된다. 단계(2340)에서, Reed-Solomon 코드에 대한 인-플레이스 디코딩이 완성되기 때문에 프로세스는 종료된다.
도 23을 참조하여 기술된 전반적인 인-플레이스 변환은 프로세스 진행 중 최대 k+1개 기호들을 위한 저장소를 사용한다.
Reed-Solomon 코드를 위해 기술된 프로세스는 표현할 목적을 위한 것일 뿐이며, 본 발명의 범위를 한정하려는 의도는 아니다. 더 일반적으로, 매우 유사한 방법들이, Algebraic-Geometric 코드(줄여서 AG-코드), BCH, 또는 발생기 행렬이 명확하기 알려진 다른 종류의 코드들과 같은, 유사한 종류의 코드들의 인-플레이스 디코딩에 적용될 수 있다.
일반화된 반복-누적(
GRA
;
Generalized
Repeat
-
Accumulate
)코드
일반적으로, k는 소스 기호들의 수, r은 용장 기호들의 수, 따라서 인코딩의 기호의 총 수는 n = k+r인 대칭 코드들이 존재한다. 이런 경우, r개 용장 기호들의 열 벡터 z는 다음과 같이 k개 소스 기호들의 열 벡터 v로부터 구성된다: 행렬 A는 포맷 (r,k)로 선택되고, 다른 행렬 U는 희소 상부 또는 하부 삼각 행렬인 포맷 (r,r)로 선택된다. 이 예시에 대해, U는 상부 삼각 행렬로서 임의로 선택된다. 따라서 다음과 같다.
문헌에서 흔히 찾아볼 수 있는 불규칙한 반복 누적(IRA; Irregular Repeat Accumulate)코드는, A가 각각의 행과 열에 소정의 1들을 분배한 행렬의 세트로부터 임의적으로 샘플링된 2진 행렬이고, U는 주 대각선 상에 1들을 갖는 상부 삼각 행렬로서, 그 주 대각선 상에들 1을, 다른 모든 엔트리들에는 0이 배치되는 희소 행렬이라고 가정된 구성의 특별한 경우이다. 이 예에 대해 주목할 것은, 은 주 대각선의 모든 엔트리들이 1인 밀집된 상부 삼각행렬이라는 것이다. 따라서, 이 예에서, A는 각각의 행에 3개의 1을, 각각의 열에 3개의 1을 가지도록 선택된 사각 행렬이라는 것을 추측할 수 있다. 이 예에서, 계산된 용장 기호들은 기호 소스들에 대해 매우 비규칙적인 독립성을 갖는데, 예들 들어, z의 마지막 용장 기호는 v의 소스 기호의 3의 XOR이고, z의 2번째 내지 마지막 용장 기호는 v의 소스 기호의 6의 XOR인 것 등이 있다.
GRA 코드의 인-플레이스 인코딩 프로세스는 도 24를 참조하여 기술된다.이 설명을 위해, r은 최대 k, 즉, 용장 기호들의 수는 최대 소스 기호들의 수라고 가정한다. r이 k보다 큰 경우, 프로세스는, 행보다 많은 열을 갖는 행렬을 기호의 열 벡터와 곱하는 인-플레이스 프로세스 대신, 열보다 많은 행을 갖는 행렬을 기호의 열 벡터로 곱하는 인-플레이스 프로세스를 이용하여 변경될 수 있다. A'를 A의 처음 r개 열에 의해 형성된 정사각 행렬이라 하고, A"는 A의 마지막 k-r개 열에 의해 형성된 행렬이라 하자. v는 초기에 소스 기호들을 갖고 있는 k개 기호들의 열 벡터 라 하고, v'는 v의 처음 r개 기호들이며, v"는 v의 마지막 k-r개 기호들이라 하자. 도 24의 단계(2410)에서, 행렬 A'는 P, L, Y로 인수분해되고, 여기서 P는 순열행렬, L은 하부 삼각행렬, Y는 상부 삼각행렬이며, A' = P-L-Y이다. 표준 가우시안 소거법을 포함한, 다양한 방법들이 이 인수분해를 수행하기 위해 사용될 수 있다. 단계(2420)에서, 인-플레이스 이 계산된다. 단계(2430)에서, 인-플레이스 변환 이 계산되고, 단계(2440)에서, 인-플레이스 변환 이 계산된다. 단계(2450)에서, 상기 "선형 연산자"로 명명된 섹션 "단순 변환 프로세스"와 같은 직접적인 행렬 곱에 대한 약간의 변경을 이용하여, 인-플레이스 변환 이 계산된다.
도 24를 참조하여 기술된 프로세스에 대한 많은 변경들이 존재한다. 예를 들어, 단계들(2410, 2420, 2430, 및 2440)은, 행렬 A를 도 11에 도시된 것과 유사한 형태로 기술하고, 인-플레이스 변환을 이용하여 를 계산하기 위해 도 17을 참조하여 기술된 프로세스에 대한 변경을 사용하기 위해, 미국 특허 제6,856,263호 "Systems and Processes for Decoding Chain Reaction Codes Through Inactivation" (이후부터는 "Inactivation Decoder")에 개시된 것과 같은 더 복잡한 접근방식으로 대체될 수 있다. 예를 들어, A가 정사각 행렬, 즉, 각각의 행의 3개의 1과 각각의 열의 3개 1을 갖기 위해 임의로 선택된 r = k라면, 서브행렬 L의 포맷이 대략 (0.86k, 0.86k)이고, 서브행렬 C의 포맷이 대략 (0.14k, 0.14k)인 도11에 도시된 형태로 A를 만드는 것이 가능하다. 이런 경우, 도 17을 참조햐여 기술된 인-플레이스 변환 프로세스가 이용되어, 프로세스 중 저장을 위해 사용되는 기호의 갯수를 최소화할 수 있다. 다른 변경으로서, 도 18을 참조하여 기술된 인-플레이스 변환 프로세스가 를 계산하기 위해 사용될 수 있으므로, 3ㆍk개 기호 연산들을, 즉, 동일한 갯수가 기호 연산들이 직접적인 방식으로 를 계산하기 위해 이용되지만, 1.14ㆍk개 기호만을 위한 저장소가 이용된다.
연쇄 반응(
chain
reaction
) 코드의 인-
플레이스
디코딩
연쇄 반응 코드는 미국 특허 제6,307,487의 "Information Additive Code Generator and Decoder for Communications Systems" 및 미국 출원 제10/032,156의 "Multi-Stage Code Generator and Decoder for Communications Systems"에 개시된다. 이와 같은 코드를 위한 몇몇의 디코더들, 예를 들어, "Inactivation Decoder"에 개시된 디코더와 같은 디코더들이 설계되었다. 그런 디코더에서, 디코딩 프로세스는,
형태의 선형 방정식의 시스템을 해결하기 위해 감소된다. 여기서 T는 계수 n의 포맷 (s,n)의 행렬이고, n은 중간 기호들의 갯수이며, k는 용장 기호들의 갯수이므로, n = k+ r이다. 주목할 것은, 용장 기호들의 갯수 r은 연쇄 반응 코드의 몇 몇 실시예에 대해 0인 반면에, 다른 실시예에 대해서 그 용장 기호의 갯수 r은 0보다 크다는 것이다. T의 행은 능동 출력 기호 및 용장 (사전-코딩) 기호에 대응하고, x는 소스 기호들을 포함하는, 풀어야하는 알려지지 않은 초기값을 갖는 n개 기호ㄷ을의 벡터이며, z는 수신된 기호 및 사전-코드의 체크 기호들을 포함하는 알려진 값을 갖는 기호들의 벡터이다. 몇몇 애플리케이션에서, 체크 기호들은 0 값을 갖지만, 다른 애플리케이션에서, 이 값은 0과 상이할 수 있다. 체크 기호 값이 어떻게 설정되느냐가 중요한 것이 아니라, 인코더와 디코다 사이의 이전 통신을 통해, 또는 다른 단계들에 의해 디코더에게 그 값들이 알려지면 되는 것이다.
"비활성 디코더"는 행렬 T를 형태로 변환함으로써 알려지지 않은 기호 x를 풀기 위한 프로세스를 이용하는데, 여기서 Q는 포맷 (s,s)의 순열행렬, P는 포맷 (n,n)의 순열행렬, M은 포맷 (s,n)의 행렬이고, B와 C 양자가 n-m 행 대신 s-m 행을 포함하는 것만 제외하면, 도 11에 도시된 것과 유사한 형태를 갖는 계수 n의 행렬이다. 여기서, 행렬 L은 포맷 (m,m)의 하부 삼각 2진 행렬이고, A, B, 및 C는 적당한 크기의 행렬로서, 바람직한 애플리케이션에서, A와 L은 정사각 행렬, 즉, 많은 논제로 위치를 갖지 않는 행렬일 수 있다. 이 인수분해를 이용하면, 기호 z의 수신된 벡터로부터 알려지지 않은 벡터 x를 복구하는 문제는, (a) 결과값이 z에 저장되도록 를 계산, 바람직하게는 인플레이스 변환을 계산하는 문제, (b) 결과값 y가 z의 처음 n개 엔트리들에 저장되도록, 알려지지 않은 벡터 y에 대해 시스템 식 , 바람직하게는 인-플레이스 변환을 푸는 문제, (c) 결과값 x가 z의 처음 nro 엔트리들에 저장되도록, 로서의 x값, 바람직하게는 인-플레이스 변환을 계산하는 문제로 해석될 수 있다. 이 단계들은 서로 동시에 수행될 수 있다. 임무 (a) 및 (c)는 상술한 이전 섹션에서 기술되었는데, 예를 들어, 도 8을 참조하여 기술된 프로세스는 인-플레이스 변환을 이용하여 임무 (a) 및 (c)를 수행하는 하나의 방식이다.
주어진 z의 알려지지 않은 벡터 y에 대해, 를 푸는 프로세스의 실시예는 도 11, 도 12, 도 13a, 도 13b, 도 14, 도 15, 도 16, 및 도 19를 참조하여 기술되고, 여기서 S는 프로세스의 시작에서 z에 저장된 s개 기호의 벡터를 나타내고, S의 처음 n개 기호는 마지막 프로세스의 벡터 y와 같다. 도 19를 참조하여 기술된 프로세스와 현 프로세스와의 한 가지 상이한 점은, M이도 11에 도시된 n개 행 대신 s개 행을 갖는다는 것이다. 따라서, 현 실시예의 첫 단계는 계수 n의 행렬을 함께 형성하는 M의 n개 행을 결정한 다음, M을 포맷 (n, n)의 결과의 완전한 계수 정사각 행렬이 되도록 재정의한다. 현 실시예의 남아있는 단계들은, 도 11, 도 12, 도 13a, 도 13b, 도 14, 도 15, 및 도 16을 언급하는, 앞서 도 19를 참조하여 기술된 프로세스를 수행한다.
기술된 실시예에 대한 많은 변경들이 존재한다. 예를 들어, 제1 단계에서 이용하기 위한, 포맷 (s, n)의 원본 행렬 M의 n개 행들을 결정하는 대신, 서브행렬 L, A, B, 및 C는, 예컨대 "비활성 디코더"에 기술된 방법들을 이용하는 프로세스 단계로서 증가하도록 결정될 수 있다. 따라서, 도 19의 단계들(1910 및 1930)에 기 술된 프로세스의 변경은, 행렬들을 증가하도록 형성하고 도 19의 단계들(1910 및 1930)에 기술된 단계들의 등가의 단계들을 수행하기 위해 "비활성 디코더"에 기술된 방법들을 이용하여 수행될 수 있다. 이 단계들 마지막에서, 계수 n을 갖는 M의 n개 행들이 결정되고, M의 이 행들은 도 11에 도시된 형태로 논리적으로 조작된다. 도 19에 도시된 남아있는 단계들은 인-플레이스 변환 프로세스를 완성하기 위한 적당한 순서로 적용될 수 있다.
당업자들이 인식하는 바와 같이, 상기 기술된 2개의 실시예들에 대한 많은 변경이 존재한다. 예를 들어, 도 19를 참조하여 기술된 프로세스의 변경은 이 2개 실시예들에 대해서도 적용된다.
연쇄 반응 코드의 인-
플레이스
대칭 인코딩
Shokrollahi(이후부터는 "Shokrollahi I") 등에 의해 출원된 미국 출원 제10/677,624 "Systematic Encoding and Decoding of Chain Reaction Codes"에서, 연쇄 반응 코드, 특히 멀티-스테이지 연쇄 반응 코드의 대칭 인코딩에 대한 방법이 기술된다. 이 방법에서, 소스 기호들은 처음에, 선형 변환을 이용하여 한 세트의 중간 기호들로 변환된다. 이 변환은,
의 형태이고, 여기서, T는 소스 기호에 대응하고 용장 (사전-코딩) 기호에 대응하는 (n,n)의 완전한 계수 행렬이고, x는 풀어야할 알려지지 않은 초기 값을 갖는 중간 기호의 벡터이며, z는 소스 기호에 대응하고, 사전-코드의 체크 기호에 대응하는 알려진 값을 갖는 n개 기호의 벡터이다.
T가 정사각 행렬일 때, 이 등식의 시스템은 섹션 "연쇄 반응 코드의 인-플레이스 디코딩"에 기술된 보다 일반적인 경우의 특별한 경우이다. 따라서, 섹션 "연쇄 반응 코드의 인-플레이스 디코딩"에 기술된 인-플레이스 변환의 실시예들이 인-플레이스 변환을 이용하여 알려지지 않은 소스 기호들로부터 중산 기호들을 계산하기 위해 이용될 수 있다.
연쇄 반응 코드의 인-
플레이스
대칭 디코딩
Shokrollahi I에 기술된 방법은, 몇몇 소스 기호들의 임의의 조합 및 대칭 인코더에 의해 발생의 몇몇의 출력 기호들로부터 소스 기호 모두를 획득하기 위한 일련의 단계들을 수행한다. 이 방법의 바람직한 실시예에서, 몇몇의 소스 기호들 및 다른 출력 기호들을 포함하는 모든 수신된 기호들이 한 세트의 중간 기호들을 획득하기 위해 수집되어 디코딩된다. 그 다음, 그 중간 기호들은 잃어버린(missing ) 소스 기호들을 획득하기 위해 변환된다. 수신된 기호들로부터의 중간 기호들의 인-플레이스 계산은 제목 "연쇄 반응 코드의 인-플레이스 디코딩"에 기술된 바와 동일하다. 이 섹션에서, 중간 기호들로부터의 소스 기호들의 인-플레이스 계산을 기술할 것이다. Shokrollahi I로부터 명백해지고, 상술한 경우와 유사한 바와 같이, 이 문제는,
를 계산하는 문제를 감소시켜줄 수 있다. 여기서, T는 완전한 계수인 포맷 (n, n)의 행렬이고, S는 n개 중간 기호의 열 벡터이다. 행렬 T는,
로서 표현될 수 있고, P 및 Q는 포맷 (n, n)의 순열행렬이고, M은 도 11에 도시된 형태인 포맷 (n,n)의 행렬이다.
를 계산하는 인-플레이스 변환의 실시예는, 도 11, 도 12, 도 13a, 도 13b, 도 14, 도 15, 도 16, 및 도 17을 또한 언급하는, 도 17을 참조하여 기술되는 프로세스이다. 이 실시예는 프로세스 중 최대 n + 1개 기호를 위한 저장소를 사용한다. 도 17을 참조하여 기술된 프로세스의 변경은 또한 이 실시예에 적용된다.
를 계산하는 인-플레이스 변환의 제2 실시예는 도 18을 참조하여 기술되는 프로세스이다. 이 실시예는 프로세스 중 최대 n + (n-m) + l개 기호를 위한 저장소를 사용한다. 연쇄 반응 코드의 바람직한 실시예에서, n-m은 n값에 비교하여 작고, 따라서 프로세스 중 사용되는 기호 저장소의 상대적인 크기는 n보다 약간 더 크다. 도 18을 참조하여 기술되는 프로세스의 변경은 또한 이 실시예에 적용된다.
인-플레이스 변환 프로세스를 이용하여 수신된 출력 기호들로부터 중간 기호들을 계산하는 상기 기술된 실시예들 및 인-플레이스 변환 프로세스를 이용하여 복구된 입력 기호들로부터 소스 기호들을 계산하는 상기 기술한 실시예들은, 인-플레이스 변환을 이용하여 수신된 출력 기호들로부터 소스 기호들을 계산하는 전체적인 실시예들을 제공하기 위해 조합될 수 있고, 여기서 이와 같은 2개 프로세스의 조합 에 의해 사용되는 기호들을 위한 저장소는, 최대한 프로세스 각각에 의해 사용되는 기호들을 위한 저장소와 같다.
상술한 설명은 설명의 목적만을 위한 것이고, 본 발명의 범위를 한정하려는 의도는 아니다. 많은 등가의 변경들 및 방법들이 본 명세서를 읽음으로써 가능해진다. 예를 들어, 상술한 방법에서, 단계 2의 행렬 D의 LU-분해는 오프라인으로 행해질 수 있다.
기술한 바와 같이, 선형 변환 연산을 구성하기 위한 새로운 메모리-효율적인 접근 방법이 소개되었다. 본 명세서에 도시한 예들에서, 선형 변환 프로세스는, 복수의 출력 요소들을 도출하기 위해 복수의 입력 요소들에 선형 변환을 적용하는 프로세스이다. 본 명세서에 기술된 프로세스에서, 메모리는 선형 변환 프로세스가 이용할 수 있는 입력 요소들을 저장하기 위해 할당되고, 그 메모리의 적어도 일부는 도출한 출력 요소들을 저장하기 위해 재사용된다. 복수의 입력 요소들을 저장하기에 충분히 큰 메모리 및 복수의 출력 요소들을 저장하기에 충분히 큰 메모리를 요구하는 대신, 이와 같은 접근 방법을 이용하여, 그 복수의 요소들 (만약 필요하다면, 약간의 간접 사용량을 더하여)의 최대치를 저장하기에 충분한 메모리가 작동하여, 귀중한 메모리 공간을 절약할 수 있다.
본 명세서에 기술된 기법들은, FEC 인코딩 또는 디코딩, 삭제 인코딩 또는 디코딩, 에러 정정 또는 이와 유사한 것들을 위한 변환과 같은 다양한 선형 변환을 위해 사용될 수 있다. FEC 코딩은 Reed-Solomon 코드, 연쇄 반응 코드, 멀티-스테이지 연쇄 반응 코드, 또는 다른 선형 코드와 같은 코드들을 포함할 수 있다. 변환 을 수행하기 위한 로직(logic)은 출력 요소들을 발생시키고, 그 발생된 출력 요소들 (또는 이어서 사용될 수 있는 중간 요소들)을 저장하기 위한 사용된 입력 요소들을 위한 메모리를 재사용하기 위해 입력 요소들을 판독할 수 있다.
본 발명이 실시예들에 관해 기술하였지만, 당업자들은 많은 변경이 가능하다는 것을 인식할 것이다. 예를 들어, 본 명세서에 기술된 프로세스들은 하드웨어 컴포넌트, 소프트웨어 컴포넌트, 및/또는 그들의 임의의 조합을 이용하여 구현될 수 있다. 따라서, 비록 본 발명이 실시예들에 관해 기술되었지만, 본 발명은 후속되는 청구항들의 범위 내의 모든 변경 및 등가물들을 다룰 수 있도록 의도된 것이라는 것이 이해될 것이다.
Claims (36)
- 복수의 소스 기호들로서 배열된 데이터를 복수의 인코딩된 기호들로 인코딩하는 인코더에서, 상기 소스 기호들로부터 상기 인코딩된 기호들로의 변환을 수행하는 방법으로서, 소정의 갯수 k개의 상기 소스 기호들은 n개의 인코딩된 기호들로 변환되는 것인, 상기 변환을 수행하는 방법에 있어서,제1 메모리에 저장된 k개 소스 기호들을 액세스하는 단계;출력 기호들의 중간 세트를 생성하기 위해 k개 소스 기호들에 대한 행렬 연산의 연산을 계산하기 위한 제1 변환 단계를 수행하는 단계로서, 상기 중간 세트의 적어도 일부는 n개 인코딩된 기호들의 일부를 포함하는 것인, 제1 변환 단계를 수행하는 단계;제1 메모리에 상기 출력 기호들의 중간 세트를 저장하고, 상기 k개 소스 기호들의 적어도 일부를 대체하는 단계로서, 상기 중간 세트의 출력 기호의 갯수는 n개보다 작은 것인, 상기 저장단계; 및상기 제1 메모리가 적어도 n개 인코딩된 기호들로서 k개 소스 기호들보다 적은 갯수의 인코딩된 기호들을 포함할 때까지, 상기 수행 단계 및 저장 단계를 반복하는 단계를 포함하는 변환 수행 방법.
- 제1항에 있어서, 변환 프로세스를 통한 상기 제1 메모리의 기호들의 최대 갯 수는 n + 1 및 k + 1보다 크지 않은 것인, 변환 수행 방법.
- 제1항에 있어서, 변환 프로세스를 통한 상기 1제 메모리의 기호들의 최대 갯수는 k + n개보다 n + 1 및 k + 1보다 큰 수에 훨씬 더 근접한 것인, 변환 수행 방법.
- 제1항에 있어서, 상기 n은 k와 같지 않은 것인, 변환 수행 방법.
- 제1항에 있어서, 상기 n은 k와 같은 것인, 변환 수행 방법.
- 제1항에 있어서, 상기 변환은 Reed-Solomon 인코딩을 나타내는 것인, 변환 수행 방법.
- 제1항에 있어서, 상기 변환은 GRA 인코딩을 나타내는 것인, 변환 수행 방법.
- 제1항에 있어서, 상기 변환은 연쇄 반응 인코딩(chain-reaction encoding)을 나타내는 것인, 변환 수행 방법.
- 제1항에 있어서, 상기 변환은 LDPC 인코딩을 나타내는 것인, 변환 수행 방법.
- 제1항에 있어서, 상기 변환에 사용되는 기호 연산의 갯수는 행렬의 논제로(non-zero) 요소들의 갯수에 근접하게 비례하는 것인, 변환 수행 방법.
- 제1항에 있어서, 상기 변환에 사용되는 기호 연산의 갯수는 상기 행렬의 역행렬의 논제로 요소들의 갯수에 근접하게 비례하는 것인, 변환 수행 방법.
- 제1항에 있어서, 상기 행렬은 인 플레이스(in place) 인코딩을 허용하는 인코딩 행렬의 분해(decomposition)를 포함하는 것인, 변환 수행 방법.
- 제1항에 있어서, 상기 행렬은 효율적인 인 플레이스 인코딩을 허용하는 코드를 나타내는 것인, 변환 수행 방법.
- 복수의 인코딩된 소스 기호들로서 배열된 데이터를 복수의 디코딩된 기호들로 디코딩하는 디코더에서, 상기 인코딩된 기호들로부터 상기 디코딩된 기호들로의 변환을 수행하는 방법으로서, 소정의 갯수 r개의 상기 인코딩된 기호들은 d개의 디코딩된 기호들로 변환되는 것인, 상기 변환을 수행하는 방법에 있어서,제1 메모리에 저장된 k개의 인코딩된 기호들을 액세스하는 단계;인코딩 행렬의 역행렬을 만드는 행렬의 연산을 수행하기 위한 제1 변환 단계를 수행하고, 출력 기호들의 중간 세트를 생성하기 위해 상기 r개의 인코딩된 기호 들을 연산하는 단계로서, 상기 중간 세트의 적어도 일부는 상기 d개 디코딩된 기호들의 일부를 포함하는 것인, 상기 제1 변환 단계를 수행하는 단계;상기 제1 메모리에 상기 출력 기호들의 중간 세트를 저장하고, 상기 r개의 인코딩된 기호들의 적어도 일부를 대체하는 단계로서, 상기 중간 세트의 출력 기호의 갯수는 d보다 작은 것인, 상기 저장단계; 및상기 제1 메모리가 적어도 d개 인코딩된 기호들로서 상기 r개 소스 기호들보다 적은 갯수의 디코딩된 기호들을 포함할 때까지, 상기 수행 단계 및 저장 단계를 반복하는 단계를 포함하는 변환 수행 방법.
- 제14항에 있어서, 변환 프로세스를 통한 상기 제1 메모리의 기호들의 최대 갯수는 r + 1 및 d + 1보다 크지 않은 것인, 변환 수행 방법.
- 제14항에 있어서, 변환 프로세스를 통한 상기 제1 메모리의 기호들의 최대 깃수는 r + d보다 r + 1 및 d + 1보다 큰 수에 훨씬 더 근접한 것인, 변환 수행 방법.
- 제14항에 있어서, 상기 r은 d와 같지 않은 것인, 변환 수행 방법.
- 제14항에 있어서, 상기 r은 d와 같은 것인, 변환 수행 방법.
- 제14항에 있어서, 상기 변환은 Reed-Solomon 디코딩을 나타내는 것인, 변환 수행 방법.
- 제14항에 있어서, 상기 변환은 GRA 디코딩을 나타내는 것인, 변환 수행 방법.
- 제1항에 있어서, 상기 변환은 연쇄 반응 디코딩을 나타내는 것인, 변환 수행 방법.
- 제14항에 있어서, 상기 변환은 LDPC 디코딩을 나타내는 것인, 변환 수행 방법.
- 제14항에 있어서, 상기 변환에 사용되는 기호 연산의 갯수는 행렬의 논제로(non-zero) 요소들의 갯수에 근접하게 비례하는 것인, 변환 수행 방법.
- 제14항에 있어서, 상기 변환에 사용되는 기호 연산의 갯수는 상기 행렬의 역행렬의 논제로 요소들의 갯수에 근접하게 비례하는 것인, 변환 수행 방법.
- 제14항에 있어서, 상기 행렬은 인 플레이스(in place) 디코딩을 허용하는 디 코딩 행렬의 분해를 포함하는 것인, 변환 수행 방법.
- 제14항에 있어서, 상기 행렬은 효율적인 인 플레이스 디코딩을 허용하는 코드를 나타내는 것인, 변환 수행 방법.
- 복수의 k개 소스 기호들로서 배열된 데이터를 전송기에서 통신 채널을 통해 복수의 n개 인코딩된 기호들로 변환하고, 상기 전송된 인코딩된 기호들의 적어도 일부는 복수의 r개 수신된 기호들로서 수신기에서 수신되고, 상기 r개 수신된 기호들은 d가 k보다 작지 않은 경우, k개 소스 기호들을 나타내는 복수의 d개 디코딩된 기호들로 변환되는 통신 시스템에 있어서,상기 k개 소스 기호들을 위해 요구되는 메모리의 크기 및 상기 n개 인코딩된 기호들을 위해 요구되는 메모리기 크기를 합친 크기보다 작은 크기를 갖는 전송 버퍼,출력 기호들의 중간 세트를 발생시키기 위한 전송 발생 로직(logic)으로서, 상기 중간 세트의 적어도 일부는, 상기 k개 소스 기호들에 대한 인코딩 행렬 연산의 연산을 계산함으로써 상기 n개 인코딩된 기호들의 일부를 포함하는 것인, 상기 전송 발생 로직;상기 전송 버퍼에 상기 출력 기호들의 중간 세트를 저장하고, 상기 k개 소스 기호들의 적어도 일부를 대체하는 전송 저장 로직으로서, 사기 중간 세트의 출력 기호들의 갯수는 n보다 작은 것인, 전송 저장 로직;상기 전송 발생 로직이 출력 기호들의 다른 중간 세트를 발생시키고, 상기 전송 저장 로직이 그 출력 기호들의 다른 중간 세트를 저장하도록 하는 플로우(flow) 로직으로서, 상기 전송 버퍼가 상기 적어도 n개 인코딩된 기호로서, 상기 k개 소스 기호들보다 작은 개수의 기호들을 포함할 때까지, 상기 k개 소스 기호들 중 추가 기호들을 대체하는 것인, 상기 플로우 로직;상기 통신 채널을 통해 상기 n개 인코딩된 기호들을 전송하기 위한 전송 회로;상기 r개 수신된 기호들을 수신하기 위한 수신 회로로서, 상기 r개 수신된 기호들은 상기 n개 인코딩된 기호들을 전달하는 상기 통신 채널의 결과인 것인, 상기 수신 회로;상기 r개 수신된 기호들을 위해 요구되는 메모리의 크기 및 상기 d개 디코딩된 기호들을 위해 요구되는 메모리의 크기를 합친 크기보다 큰 크기를 갖는 수신 버퍼;수신 출력 기호들의 중간 세트를 발생시키기 위한 수신 발생 로직(logic)으로서, 상기 수신 출력 기호들의 중간 세트의 적어도 일부는, 상기 r개 수신된 기호들에 대한 디코딩 행렬 연산의 연산을 계산함으로써 상기 d개 디코딩된 기호들의 일부를 포함하는 것인, 상기 수신 발생 로직;상기 수신 버퍼에 상기 수신 출력 기호들의 중간 세트를 저장하고, 상기 r개 수신된 기호들의 적어도 일부를 대체하는 수신 저장 로직으로서, 상기 수신 출력 기호들의 중간 세트의 수신 출력 기호들의 갯수는 d보다 작은 것인, 수신 저장 로 직;상기 수신 발생 로직이 수신 출력 기호들의 다른 중간 세트를 발생시키고, 상기 수신 저장 로직이 그 수신 출력 기호들의 다른 중간 세트를 저장하도록 하는 플로우(flow) 로직으로서, 상기 수신 버퍼가 상기 적어도 d개 디코딩된 기호로서, 상기 r개 수신된 기호들보다 작은 개수의 기호들을 포함할 때까지 상기 r개 수신된 기호들 중 추가 기호들을 대체하는 것인, 상기 플로우 로직;을 포함하는 통신 시스템.
- 제27항에 있어서, 상기 로직은 프로그램 가능 프로세서에 의해 실행되는 프로그램 코드 명령어들을 포함하는 것인, 통신 시스템.
- 제27항에 있어서, 상기 로직은 하드웨어 회로를 포함하는 것인, 통신 시스템.
- 제27항에 있어서, 상기 로직은 일부는 프로그램 코드 명령어를, 일부는 하드웨어 회로를 포함하는 것인, 통신 시스템.
- 제27항에 있어서, 상기 디코딩 행렬은, 상기 인코딩 행렬의 일부와 곱해져 정확히 단위행렬이 되도록, 상기 수신된 기호들 중 적어도 일부에 의해 정의된 인코딩 행렬의 일부의 역행렬인 것인, 통신 시스템.
- 제27항에 있어서, 상기 수신기는 이동 전화 수신기인 것인, 통신 시스템.
- 제27항에 있어서, 상기 수신기는 자동차에서 사용되도록 적합화된 수신기인 것인, 통신 시스템.
- 제27항에 있어서, 상기 전송기는 이동 전하 전송기인 것인, 통신 시스템.
- 제27항에 있어서, 상기 전송기는 자동차에서 사용되도록 적합화된 전송기인 것인, 통신 시스템.
- 제27항에 있어서, 상기 전송기는 디지털 미디어 전송기이고, 상기 수신기는 디지털 미디어 수신기인 것인, 통신 시스템.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US68963205P | 2005-06-10 | 2005-06-10 | |
US60/689,632 | 2005-06-10 | ||
PCT/US2006/022914 WO2006135878A2 (en) | 2005-06-10 | 2006-06-12 | In-place transformations with applications to encoding and decoding various classes of codes |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20080040669A true KR20080040669A (ko) | 2008-05-08 |
KR101270815B1 KR101270815B1 (ko) | 2013-06-05 |
Family
ID=37532889
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020087000734A KR101270815B1 (ko) | 2005-06-10 | 2006-06-12 | 다양한 클래스의 코드들을 인코딩 및 디코딩하는 애플리케이션을 갖는 인-플레이스 변환 |
Country Status (6)
Country | Link |
---|---|
US (1) | US7644335B2 (ko) |
EP (1) | EP1894376A4 (ko) |
JP (2) | JP5231218B2 (ko) |
KR (1) | KR101270815B1 (ko) |
CN (1) | CN101243664B (ko) |
WO (1) | WO2006135878A2 (ko) |
Families Citing this family (54)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6307487B1 (en) | 1998-09-23 | 2001-10-23 | Digital Fountain, Inc. | Information additive code generator and decoder for communication systems |
US7068729B2 (en) * | 2001-12-21 | 2006-06-27 | Digital Fountain, Inc. | Multi-stage code generator and decoder for communication systems |
EP2278719B1 (en) * | 2002-06-11 | 2013-12-18 | Digital Fountain, Inc. | Decoding of chain reaction codes through inactivation |
US9240810B2 (en) | 2002-06-11 | 2016-01-19 | Digital Fountain, Inc. | Systems and processes for decoding chain reaction codes through inactivation |
WO2004034589A2 (en) | 2002-10-05 | 2004-04-22 | Digital Fountain, Inc. | Systematic encoding and decoding of chain reaction codes |
CN101834610B (zh) | 2003-10-06 | 2013-01-30 | 数字方敦股份有限公司 | 通过通信信道接收从源发射的数据的方法和装置 |
KR101161193B1 (ko) * | 2004-05-07 | 2012-07-02 | 디지털 파운튼, 인크. | 파일 다운로드 및 스트리밍 시스템 |
US7644335B2 (en) * | 2005-06-10 | 2010-01-05 | Qualcomm Incorporated | In-place transformations with applications to encoding and decoding various classes of codes |
JP5550834B2 (ja) | 2006-02-13 | 2014-07-16 | デジタル ファウンテン, インコーポレイテッド | 可変fecオーバヘッド及び保護期間を利用したストリーミング及びバッファリング |
US9270414B2 (en) * | 2006-02-21 | 2016-02-23 | Digital Fountain, Inc. | Multiple-field based code generator and decoder for communications systems |
WO2007134196A2 (en) | 2006-05-10 | 2007-11-22 | Digital Fountain, Inc. | Code generator and decoder using hybrid codes |
US9209934B2 (en) | 2006-06-09 | 2015-12-08 | Qualcomm Incorporated | Enhanced block-request streaming using cooperative parallel HTTP and forward error correction |
US9432433B2 (en) | 2006-06-09 | 2016-08-30 | Qualcomm Incorporated | Enhanced block-request streaming system using signaling or block creation |
US9380096B2 (en) | 2006-06-09 | 2016-06-28 | Qualcomm Incorporated | Enhanced block-request streaming system for handling low-latency streaming |
US9386064B2 (en) * | 2006-06-09 | 2016-07-05 | Qualcomm Incorporated | Enhanced block-request streaming using URL templates and construction rules |
US9178535B2 (en) * | 2006-06-09 | 2015-11-03 | Digital Fountain, Inc. | Dynamic stream interleaving and sub-stream based delivery |
US9419749B2 (en) | 2009-08-19 | 2016-08-16 | Qualcomm Incorporated | Methods and apparatus employing FEC codes with permanent inactivation of symbols for encoding and decoding processes |
US20100211690A1 (en) * | 2009-02-13 | 2010-08-19 | Digital Fountain, Inc. | Block partitioning for a data stream |
WO2008003094A2 (en) | 2006-06-29 | 2008-01-03 | Digital Fountain, Inc. | Efficient representation of symbol-based transformations with application to encoding and decoding of forward error correction codes |
DE602008003456D1 (de) * | 2007-07-02 | 2010-12-23 | Technology From Ideas Ltd | Erzeugung von paritätsprüfmatrizen |
CN100583649C (zh) * | 2007-07-23 | 2010-01-20 | 华为技术有限公司 | 矢量编/解码方法、装置及流媒体播放器 |
US9237101B2 (en) * | 2007-09-12 | 2016-01-12 | Digital Fountain, Inc. | Generating and communicating source identification information to enable reliable communications |
US9281847B2 (en) * | 2009-02-27 | 2016-03-08 | Qualcomm Incorporated | Mobile reception of digital video broadcasting—terrestrial services |
US9015564B2 (en) | 2009-08-19 | 2015-04-21 | Qualcomm Incorporated | Content delivery system with allocation of source data and repair data among HTTP servers |
US9288010B2 (en) | 2009-08-19 | 2016-03-15 | Qualcomm Incorporated | Universal file delivery methods for providing unequal error protection and bundled file delivery services |
US20110096828A1 (en) * | 2009-09-22 | 2011-04-28 | Qualcomm Incorporated | Enhanced block-request streaming using scalable encoding |
US9917874B2 (en) | 2009-09-22 | 2018-03-13 | Qualcomm Incorporated | Enhanced block-request streaming using block partitioning or request controls for improved client-side handling |
KR101615384B1 (ko) * | 2010-04-05 | 2016-04-25 | 삼성전자주식회사 | 통신 시스템에서의 채널 부호화 장치 및 방법 |
US9225961B2 (en) | 2010-05-13 | 2015-12-29 | Qualcomm Incorporated | Frame packing for asymmetric stereo video |
US9049497B2 (en) | 2010-06-29 | 2015-06-02 | Qualcomm Incorporated | Signaling random access points for streaming video data |
US8918533B2 (en) | 2010-07-13 | 2014-12-23 | Qualcomm Incorporated | Video switching for streaming video data |
US9185439B2 (en) | 2010-07-15 | 2015-11-10 | Qualcomm Incorporated | Signaling data for multiplexing video components |
US9596447B2 (en) | 2010-07-21 | 2017-03-14 | Qualcomm Incorporated | Providing frame packing type information for video coding |
US9456015B2 (en) | 2010-08-10 | 2016-09-27 | Qualcomm Incorporated | Representation groups for network streaming of coded multimedia data |
US9270299B2 (en) | 2011-02-11 | 2016-02-23 | Qualcomm Incorporated | Encoding and decoding using elastic codes with flexible source block mapping |
US8958375B2 (en) | 2011-02-11 | 2015-02-17 | Qualcomm Incorporated | Framing for an improved radio link protocol including FEC |
US9253233B2 (en) | 2011-08-31 | 2016-02-02 | Qualcomm Incorporated | Switch signaling methods providing improved switching between representations for adaptive HTTP streaming |
US9843844B2 (en) | 2011-10-05 | 2017-12-12 | Qualcomm Incorporated | Network streaming of media data |
JP5795446B2 (ja) | 2011-11-01 | 2015-10-14 | クゥアルコム・インコーポレイテッドQualcomm Incorporated | Httpサーバの間でのソースデータおよび修復データの割り当てを伴うコンテンツ配送システム |
US9294226B2 (en) | 2012-03-26 | 2016-03-22 | Qualcomm Incorporated | Universal object delivery and template-based file delivery |
KR101983032B1 (ko) | 2012-05-07 | 2019-05-30 | 삼성전자주식회사 | 방송 및 통신 시스템에서 패킷 송수신 장치 및 방법 |
US10148285B1 (en) | 2012-07-25 | 2018-12-04 | Erich Schmitt | Abstraction and de-abstraction of a digital data stream |
CN108924593B (zh) * | 2013-01-18 | 2021-07-06 | 弗劳恩霍夫应用研究促进协会 | 前向纠错数据生成器、生成方法,前向纠错解码器、解码方法,以及存储介质 |
JP6243641B2 (ja) * | 2013-07-02 | 2017-12-06 | 三菱電線工業株式会社 | ガラス構造体の製造方法 |
TWI523465B (zh) * | 2013-12-24 | 2016-02-21 | 財團法人工業技術研究院 | 檔案傳輸系統和方法 |
KR102093206B1 (ko) * | 2014-01-09 | 2020-03-26 | 삼성전자주식회사 | 데이터 인코딩 방법 및 전자장치 |
US10795858B1 (en) | 2014-02-18 | 2020-10-06 | Erich Schmitt | Universal abstraction and de-abstraction of a digital data stream |
CN106063134A (zh) * | 2014-03-11 | 2016-10-26 | 富士通株式会社 | 设计辅助方法、设计辅助程序、设计辅助装置、以及记录介质 |
US10283091B2 (en) * | 2014-10-13 | 2019-05-07 | Microsoft Technology Licensing, Llc | Buffer optimization |
JP5918884B1 (ja) * | 2015-05-12 | 2016-05-18 | 日本電信電話株式会社 | 復号装置、復号方法、およびプログラム |
US11037330B2 (en) | 2017-04-08 | 2021-06-15 | Intel Corporation | Low rank matrix compression |
EP3735746A1 (en) * | 2018-01-23 | 2020-11-11 | Huawei Technologies Co., Ltd. | Channel code construction for decoder reuse |
US10691772B2 (en) * | 2018-04-20 | 2020-06-23 | Advanced Micro Devices, Inc. | High-performance sparse triangular solve on graphics processing units |
US10866809B2 (en) * | 2018-07-05 | 2020-12-15 | Qualcomm Incorporated | Method, apparatus, and system for acceleration of inversion of injective operations |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE4316297C1 (de) * | 1993-05-14 | 1994-04-07 | Fraunhofer Ges Forschung | Frequenzanalyseverfahren |
US5517508A (en) * | 1994-01-26 | 1996-05-14 | Sony Corporation | Method and apparatus for detection and error correction of packetized digital data |
US5754563A (en) * | 1995-09-11 | 1998-05-19 | Ecc Technologies, Inc. | Byte-parallel system for implementing reed-solomon error-correcting codes |
AUPP366598A0 (en) * | 1998-05-22 | 1998-06-18 | Canon Kabushiki Kaisha | Deriving polygonal boundaries from quadtree representation |
US6466698B1 (en) | 1999-03-25 | 2002-10-15 | The United States Of America As Represented By The Secretary Of The Navy | Efficient embedded image and video compression system using lifted wavelets |
JP3256517B2 (ja) * | 1999-04-06 | 2002-02-12 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 符号化回路、回路、パリティ生成方法及び記憶媒体 |
US6694476B1 (en) * | 2000-06-02 | 2004-02-17 | Vitesse Semiconductor Corporation | Reed-solomon encoder and decoder |
US6785836B2 (en) | 2001-04-11 | 2004-08-31 | Broadcom Corporation | In-place data transformation for fault-tolerant disk storage systems |
WO2004034589A2 (en) | 2002-10-05 | 2004-04-22 | Digital Fountain, Inc. | Systematic encoding and decoding of chain reaction codes |
KR100502609B1 (ko) * | 2002-11-21 | 2005-07-20 | 한국전자통신연구원 | Ldpc 코드를 이용한 부호화기 및 부호화 방법 |
US7408486B2 (en) | 2003-04-21 | 2008-08-05 | Qbit Corporation | System and method for using a microlet-based modem |
ATE337643T1 (de) * | 2003-09-30 | 2006-09-15 | Ericsson Telefon Ab L M | In-place entschachtelung von daten |
US7219289B2 (en) * | 2005-03-15 | 2007-05-15 | Tandberg Data Corporation | Multiply redundant raid system and XOR-efficient method and apparatus for implementing the same |
US7644335B2 (en) * | 2005-06-10 | 2010-01-05 | Qualcomm Incorporated | In-place transformations with applications to encoding and decoding various classes of codes |
-
2006
- 2006-06-09 US US11/423,376 patent/US7644335B2/en not_active Expired - Fee Related
- 2006-06-12 CN CN2006800293260A patent/CN101243664B/zh not_active Expired - Fee Related
- 2006-06-12 KR KR1020087000734A patent/KR101270815B1/ko not_active IP Right Cessation
- 2006-06-12 WO PCT/US2006/022914 patent/WO2006135878A2/en active Application Filing
- 2006-06-12 JP JP2008516032A patent/JP5231218B2/ja not_active Expired - Fee Related
- 2006-06-12 EP EP06772990A patent/EP1894376A4/en not_active Withdrawn
-
2012
- 2012-07-10 JP JP2012155062A patent/JP5524287B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
KR101270815B1 (ko) | 2013-06-05 |
US7644335B2 (en) | 2010-01-05 |
JP5524287B2 (ja) | 2014-06-18 |
WO2006135878B1 (en) | 2007-05-24 |
WO2006135878A3 (en) | 2007-03-29 |
CN101243664B (zh) | 2013-06-05 |
WO2006135878A2 (en) | 2006-12-21 |
JP2008544610A (ja) | 2008-12-04 |
EP1894376A4 (en) | 2011-11-16 |
JP5231218B2 (ja) | 2013-07-10 |
CN101243664A (zh) | 2008-08-13 |
EP1894376A2 (en) | 2008-03-05 |
JP2012249305A (ja) | 2012-12-13 |
US20060280254A1 (en) | 2006-12-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101270815B1 (ko) | 다양한 클래스의 코드들을 인코딩 및 디코딩하는 애플리케이션을 갖는 인-플레이스 변환 | |
US9660763B2 (en) | Methods and apparatus employing FEC codes with permanent inactivation of symbols for encoding and decoding processes | |
Hou et al. | BASIC codes: Low-complexity regenerating codes for distributed storage systems | |
KR100502609B1 (ko) | Ldpc 코드를 이용한 부호화기 및 부호화 방법 | |
US8533555B2 (en) | Efficient encoding and decoding methods for representing schedules and processing forward error correction codes | |
US7472334B1 (en) | Efficient method for the reconstruction of digital information | |
JP5329239B2 (ja) | 通信システムのための多体ベース符号の生成器および復号化器 | |
US11108411B2 (en) | Polar coding with dynamic frozen bits | |
US20100017676A1 (en) | Decoding of linear codes with parity check matrix | |
US20050204268A1 (en) | Decoding and error correction for algebraic geometric codes | |
JP2019525638A (ja) | 2のべき乗でない長さに拡張されたポーラ符号の符号化および復号化 | |
US8359511B2 (en) | Method and system for constructing and decoding rateless codes with partial information | |
CN110073618B (zh) | 产生用于增量冗余harq通信装置的低密度奇偶校验码的设备和方法 | |
CN112889221A (zh) | 用于非二进制码的消息传递解码的校验节点处理单元中的偏移值确定 | |
CN100417031C (zh) | 宽带无线接入系统中里德索洛门卷积级联码的实现方法 | |
EP3035540B1 (en) | Maximum likelihood erasure decoding of sparse graph codes | |
WO2020139234A1 (en) | Performance enhancement of polar codes for short frame lengths considering error propagation effects | |
Dolev et al. | Multiplication free holographic coding | |
US12047171B2 (en) | Selection of pivot positions for linear network codes | |
Kumar et al. | Application of T-Direct Codes in Multiple-Rate Codes | |
Schindelhauer et al. | Cyclone codes | |
CN117155742A (zh) | 信号处理方法、装置、设备、系统及介质 | |
Nuggehalli | Information Theory and Coding |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20160330 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20170330 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20180329 Year of fee payment: 6 |
|
LAPS | Lapse due to unpaid annual fee |