KR20080027825A - 순방향 오류 보정 코딩 및 스트리밍 - Google Patents

순방향 오류 보정 코딩 및 스트리밍 Download PDF

Info

Publication number
KR20080027825A
KR20080027825A KR1020087000525A KR20087000525A KR20080027825A KR 20080027825 A KR20080027825 A KR 20080027825A KR 1020087000525 A KR1020087000525 A KR 1020087000525A KR 20087000525 A KR20087000525 A KR 20087000525A KR 20080027825 A KR20080027825 A KR 20080027825A
Authority
KR
South Korea
Prior art keywords
source
symbol
symbols
fec
recovery
Prior art date
Application number
KR1020087000525A
Other languages
English (en)
Other versions
KR101184242B1 (ko
Inventor
마이클 쥐 루비
마크 왓슨
엠 아민 쇼크롤라히
Original Assignee
디지털 파운튼, 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 디지털 파운튼, 인크. filed Critical 디지털 파운튼, 인크.
Publication of KR20080027825A publication Critical patent/KR20080027825A/ko
Application granted granted Critical
Publication of KR101184242B1 publication Critical patent/KR101184242B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/29Coding, 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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
    • H03M13/2906Coding, 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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using block codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic 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/1515Reed-Solomon codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error 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/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic 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/1575Direct decoding, e.g. by a direct determination of the error locator polynomial from syndromes and subsequent analysis or by matrix operations involving syndromes, e.g. for codes with a small minimum Hamming distance
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, 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/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3761Decoding 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0041Arrangements at the transmitter end
    • H04L1/0042Encoding specially adapted to other signal generation operation, e.g. in order to reduce transmit distortions, jitter, or to improve signal shape

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Theoretical Computer Science (AREA)
  • Probability & Statistics with Applications (AREA)
  • Pure & Applied Mathematics (AREA)
  • Algebra (AREA)
  • General Physics & Mathematics (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Error Detection And Correction (AREA)
  • Detection And Prevention Of Errors In Transmission (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

인코더로부터 채널을 통하여 수신된 수신 심벌로부터 데이터를 디코딩하는 데이터 디코더에서, 수신된 데이터는 소거를 포함할 수 있고 소스(source) 심벌과 회복(repair) 심벌을 포함하고 상기 디코더는 디코딩 시에 생성 행렬을 사용하며, 상기 디코더가 상기 소스 심벌과 회복 심벌의 도래와 동시에 디코딩 동작을 수행할 수 있도록 생성 행렬의 임의 정방 부분행렬은 가역이다. 또한, 적어도 부분적으로 상기 생성 행렬로부터 유도된 연립 방정식을 디코더 메모리에 나타내는 단계와, 모든 소스 심벌을 수신하기 전에 상기 소스 심벌이 수신됨에 따라 수신된 소스 심벌을 상기 연립 방정식으로 치환하는 단계와, 디코더 논리를 사용하여, 회복 심벌이 도래함에 따라 상기 연립 방정식을 해결하는데 사용되는 회복 방정식을 식별하는 단계와, 디코더 논리를 사용하여, 소스 심벌이 도래함에 따라 연립 방정식에 대한 벡터 값을 계산하는 단계와, 회복 심벌이 디코더에 도래함에 따라 상기 연립 방정식을 위삼각행렬식(upper triangular form)으로 변환하는 단계를 포함하는 디코딩 방법이 제공된다. 대분류의 FEC 코드에 대한 인코딩 구조를 인터리빙(interleaving) 및 구체화하고, 패킷의 송신을 스케줄링하는 등에 신규한 방법들이 이용될 수 있다.
회복 심벌, 소스 심벌, 인코딩, 디코딩, 행렬, FEC 코드, 인터리빙

Description

순방향 오류 보정 코딩 및 스트리밍{FORWARD ERROR-CORRECTING(FEC) CODING AND STREAMING}
본 발명은 대체로 순방향 오류 보정(FEC) 코딩에 관한 것이며, 특히 스트리밍 애플리케이션용 FEC 코딩에 관한 것이다.
최근, 전송 중에 스트리밍 미디어를 보호하기 위한 FEC 코드의 사용을 고려하는 것이 일반적인 관행이 되어 왔다. 예를 들면 3GPP, 3GPP2 및 DVB 등의 그룹으로 표준화된 것들과 같은 인터넷과 무선 네트워크를 포함하는 패킷 네트워크를 통하여 송신되는 경우에, 소스 스트림(source stream)은 생성되거나 이용 가능해짐에 따라 패킷에 배치되고, 따라서 이 패킷은 소스 스트림이 생성되거나 이용 가능해지는 순서로 수신기에 소스 스트림을 전달하는데 사용된다. 이러한 유형의 시나리오에 FEC 코드를 전형적으로 적용하는 경우에, FEC 코드는 소스 스트림을 포함하는 오리지널 소스 패킷에 부가적인 회복 패킷(repair packet)을 추가하는데 사용되고, 이들 회복 패킷은 소스 패킷 손실이 발생할 때 손실된 소스 패킷에 포함된 데이터를 복구하는 수신된 회복 패킷이 사용될 수 있다는 특성을 갖는다. 다른 예에서, 부분적인 패킷 손실이 발생할 가능성이 있는데, 예를 들면, 수신기는 패킷의 일부를 손실하면서 그 패킷의 다른 부분을 수신할 수 있고, 따라서 이 예에서는 전 체적 또는 부분적으로 수신된 회복 패킷이 전체적 또는 부분적으로 손실된 소스 패킷을 복구하는데 사용될 수 있다. 또 다른 예에서, 파손의 다른 유형은 송신된 데이터에 발생할 수 있는데, 즉 비트값이 플리핑(flip)될 수 있고, 따라서 회복 패킷이 이러한 파손을 보정하여 가능한 한 정밀하게 소스 패킷의 복구를 제공하는데 사용될 수 있다. 다른 예에서, 소스 스트림은 반드시 이산 패킷으로 송신될 필요는 없지만, 그 대신에 예를 들면 연속적인 비트 스트림으로서 송신될 수 있다.
소스 스트림의 보호를 제공하는데 사용될 수 있는 FEC 코드의 많은 예들이 존재한다. Reed-Solomon 코드는 통신 시스템에서 에러 및 소거 보정에 대하여 잘 알려진 코드이다. 예를 들면 패킷 데이터 네트워크 상에서의 소거 보정에 대하여, Reed-Solomon 코드의 잘 알려진 효율적인 구현은 L. Rizzo 저서 "Effective Erasure Codes for Reliable Computer Communication Protocols", Computer Communication Review, 27(2):24-36(1997년 4월)(이하, "Rizzo") 및 Bloemer 등 저서 "An XOR-Based Erasure-Resilient Coding Scheme", Technical Report TR-95-48, 캘리포니아주 버클리시 International Computer Science Institute(1995)(이하, "XOR-Reed-Solomon")에 기술된 바와 같이 Cauchy 또는 Vandermonde 매트릭스를 이용하는 것이다. FEC 코드의 다른 예는 미국 특허 제6,307,487호(이하, "Luby I") 및 미국 특허출원공개 제2003/0058958호(이하, "Shokrollahi I") 각각에 기술되어 있는 바와 같이 LDPC 코드, 연쇄 반응 코드, 및 다단계 연쇄 반응 코드를 포함하는데, 이들 특허는 본원에 실제로 반영되어 있다.
Reed-Solomon 코드의 변형에 대한 FEC 디코딩 프로세스의 예는 "Rizzo" 및 "XOR-Reed-Solomon"에 기술되어 있다. 이들 예에서, 일단 충분한 소스 및 회복 데이터 패킷이 수신되었으면 디코딩이 적용된다. 디코딩 프로세스는 계산적으로 집약적일 수 있으며, 이용 가능한 CPU 자원에 따라서, 이는 블록 내의 미디어가 차지하는 시간 길이에 대하여 완료하는데 상당한 시간이 걸릴 수 있다. 수신기는 미디어 스트림의 수신 개시와 미디어의 플레이-아웃(play-out) 사이에 요구되는 지연을 계산할 때 디코딩에 필요한 이 시간 길이를 고려해야만 한다. 디코딩으로 인한 이 지연은 특정한 미디어 스트림에 대한 요구와 재생 개시 사이의 지연으로서 사용자에 의해 감지된다. 따라서 이 지연을 감소시키는 것이 바람직하다.
많은 애플리케이션에서, 패킷은 FEC 프로세스가 적용되는 심벌로 더욱 세분된다. 심벌은 임의 사이즈를 가질 수 있지만, 종종 심벌의 사이즈는 패킷의 사이즈와 거의 동일하다. 이하, 인코딩 블록을 포함하는 심벌을 "소스 심벌(source symbol)"로, 그리고 FEC 프로세스 중에 발생되는 심벌을 "인코딩 심벌"로 부른다. 일부 FEC 코드, 특히 Reed-Solomon 코드에 대하여, 인코딩 및 디코딩 시간은 소스 블록당 인코딩 심벌의 수가 증가함에 따라 비실용적이 된다. 따라서, 실제로, 소스 블록당 발생될 수 있는 인코딩 심벌의 총수에는 종종 상한값, 예컨대 255가 존재한다. 심벌이 개별의 패킷 페이로드(packet payload)에 놓이기 때문에, 이는 소스 블록의 인코딩에 대한 최대값에 실용적인 상한값을 정하는데, 예를 들면, 패킷 페이로드가 거의 1024 바이트이면, 인코딩된 소스 블록은 거의 255 KB(킬로바이트)일 수 있고, 이는 물론 소스 블록 자체의 사이즈에 대한 상한값이기도 하다.
소스 스트리밍 속도를 따라갈 만큼 충분히 빨리 소스 블록을 디코딩할 수 있 는 것과 같이, FEC 디코딩에 의해 초래되는 디코딩 대기 시간을 최소화하고, 또한 FEC 디코딩 중의 임의 시점에 수신 장치에서 적은 부분의 이용 가능한 CPU만을 사용하는 기타 다른 관심사가 핵심이다.
따라서, 프로세스 및 장치를 향상시키는 것이 바람직하다.
본 발명의 방법의 실시예들은 FEC 인코딩된 소스 블록으로부터 패킷의 수신과 동시 발생하는 디코딩과 연관된 계산의 상당 부분을 수행한다. 따라서, 디코딩 지연, 예컨대 복구된 소스 블록이 이용 가능하기 전에 소스 블록에 대한 최종 패킷을 수신한 후의 지연은 전체 디코딩 작업 중 보통 극소수인 계산의 나머지 부분을 수행하는데 요구되는 것 만큼으로 감소된다.
일부 실시예에서, 인코더로부터 채널을 통하여 수신된 심벌로부터 데이터를 디코딩하는 데이터 디코더로서, 수신된 데이터는 소거를 포함할 수 있고 소스(source) 심벌과 회복(repair) 심벌을 포함하고, 상기 디코더는 디코딩에 생성 행렬을 사용하며, 상기 디코더가 상기 소스 심벌과 회복 심벌의 도래와 동시에 디코딩 동작을 수행할 수 상기 생성 행렬의 임의 정방 부분행렬은 가역적인 것인, 상기 디코더가 사용된다. 또한, 적어도 부분적으로 생성 행렬로부터 유도된 연립 방정식을 디코더 메모리에 나타내는 단계와, 모든 소스 심벌을 수신하기 전에 상기 소스 심벌이 수신됨에 따라 수신된 소스 심벌을 상기 연립 방정식 내에 치환하는 단계와, 디코더 논리를 사용하여, 회복 심벌이 도래함에 따라 상기 연립 방정식을 해결하는데 사용되는 회복 방정식을 식별하는 단계와, 디코더 논리를 사용하여, 소스 심벌이 도래함에 따라 연립 방정식에 대한 벡터값을 계산하는 단계와, 회복 심벌이 디코더에 도래함에 따라 상기 연립 방정식을 위삼각행렬식(upper triangular form)으로 변환하는 단계를 포함하는 디코딩 방법이 제공된다.
일부 실시예에서, 2D Reed-Solomon 코드 및 기타 다른 관련 코드를 인터리빙(interleaving)하여 이득을 얻는데 신규한 방법들이 이용된다. 일부 실시예들은 대분류의 FEC 코드에 대한 인코딩 구조를 구체화하기 위한 신규하고 일반적이며 간결한 메커니즘을 이용할 수 있다.
본 실시예들은 또한 소스 블록용 패킷의 송신을 스케줄링하는데 신규한 방법들을 제공한다. 이 방법의 이익의 일부는 FEC 종단 대 종단(end-to-end) 대기 시간의 최소화, FEC 수신기 대기 시간의 최소화, 가능한 한 원활한 속도에서의 FEC 인코딩된 스트림의 송신, 가능한 한 일정한 시간으로 소스 블록용 패킷에서 송신된 데이터의 확산, 및 FEC 수신기에서의 단순한 논리 요건을 포함한다.
본 실시예들은 또한 소스 블록을 인터리빙하는 신규한 방법들을 제공한다. 이는 인터리빙이 이용되지 않는 경우보다 더 큰 시간 주기동안 확산되는 개별 소스 블록 내에서 전송 시의 손실 또는 에러를 허용하고, 소스 데이터의 원래의 송신 순서를 유지하는 동안 수신기에 의해 감지되는 디코딩 대기 시간이 최소로 감소되도록 한다.
첨부된 도면과 함께 다음의 상세한 설명은 본 발명의 특성 및 이점을 보다 잘 이해하도록 한다.
도 1은 본 발명의 일 실시예에 따른 통신 시스템의 블록 다이어그램.
도 2는 수신기 대기 시간을 예시하는 다이어그램.
도 3A는 수신기 대기 시간의 구성요소를 예시하는 도면.
도 3B는 디코딩 중에 FEC에 대한 CPU 이용률을 예시하는 도면.
도 4는 본 발명의 일 실시예에 따른 이용 가능한 디코딩 매트릭스의 일례.
도 5는 본 발명의 일 실시예에 따른 디코딩 프로세스의 일부의 플로차트.
도 6은 본 발명의 일 실시예에 따른 디코딩 프로세스의 일부의 또 다른 플로차트.
도 7은 디코딩 스텝 중 하나의 변형예의 플로차트.
도 8A는 소스 블록의 프로세싱의 상이한 단계를 나타내는 도면.
도 8B는 연속적인 소스 블록의 프로세싱의 상이한 단계간의 관계를 나타내는 도면.
도 9는 FEC 송신기에 대한 소스 초기 프로세서(Source Initial Process)의 플로차트.
도 10은 FEC 송신기에 대한 소스 중간 프로세서(Source Mid Process)의 플로차트.
도 11은 FEC 송신기에 대한 소스 최종 프로세서(Source Final Process)의 플로차트.
도 12는 FEC 송신기에 대한 소스 회복 프로세서(Source Repair Process)의 플로차트.
도 13은 FEC 송신기에 대한 플로차트.
본원에서 설명되는 실시예들은 디코딩 지연을 감소시키기 위해 FEC 인코딩된 소스 블록으로부터 패킷의 수신과 동시 발생하는 디코딩과 같이 네트워크 등을 통하여 수신된 데이터의 디코딩을 행하는 신규한 방법을 제공한다. 이후, 데이터를 전달하는 네트워크는 본원에서 설명을 간략화하기 위해 패킷 기반인 것으로 가정하고, 본원에서 설명되는 프로세스 및 방법들이 연속한 비트-스트림 네트워크와 같은 다른 유형의 전송 네트워크에 적용될 수 있는 방법을 당업자가 쉽게 알 수 있다는 인식을 함께한다. 이후 FEC 코드는 본원에서 설명을 간략화하기 위해 패킷 내의 손실된 부분 데이터 또는 손실된 패킷에 대한 보호를 제공하는 것으로 가정하고, 본원에서 설명되는 프로세스 및 방법들이 비트-플립(bit-flip)과 같은 다른 유형의 데이터 전송 파손에 적용될 수 있는 방법을 당업자가 쉽게 알 수 있다는 인식을 함께한다.
도 1은 연쇄 반응 코드를 사용하는 통신 시스템(100)의 블록 다이어그램이다. 통신 시스템(100)에서, 입력 파일(101), 또는 입력 스트림(105)은 입력 심벌 생성기(110)에 제공된다. 입력 심벌 생성기(110)는 입력 파일 또는 스트림으로부터 하나 이상의 입력 심벌(IS(0), IS(1), IS(2), ...)의 시퀀스를 생성하고, 각 입력 심벌은 값과 위치(도 1에서 괄호안의 정수로 표시됨)를 갖는다. 입력 심벌에 대한 가능한 값, 예컨대 그 알파벳은 전형적으로 2M 심벌의 알파벳이므로, 각 입력 심벌 코드는 M 비트의 입력 파일에 해당한다. M의 값은 일반적으로 통신 시스템(100)의 사용에 의해 결정되지만, 범용 시스템은 M이 전반적인 사용에 의해 변화될 수 있도록 입력 심벌 생성기(110)에 대한 심벌 사이즈 입력을 포함할 수 있다. 입력 심벌 생성기(110)의 출력은 인코더(115)에 제공된다.
키 생성기(120)는 인코더(115)에 의해 생성되는 각 출력 심벌에 대한 키를 생성한다. 각 키는 Luby I 또는 Shokrollahi I에서 설명되는 방법, 또는 스트림 내의 동일한 입력 파일이나 데이터 블록에 대하여 생성된 큰 부분의 키가 고유하고 이들 키가 이 또는 다른 키 생성기에 의해 생성되는지를 보장하는 임의의 비교 가능한 방법 중 하나에 따라 생성될 수 있다. 예를 들면, 키 생성기(120)는 카운터(125)의 출력, 고유 스트림 식별기(130), 및/또는 각 키를 생성하기 위한 랜덤 발생기(135)의 출력의 조합을 사용할 수 있다. 다른 일례에서, 예를 들면 일부 스트리밍 애플리케이션에 대하여, 키 세트는 스트림 내의 각 데이터 블록에 대하여 고정 및 재사용될 수 있다. 전형적인 실시예에서, 생성될 수 있는 키의 개수는 입력 파일 또는 스트림의 사이즈 또는 다른 특성보다 오히려 키 생성기의 레졸루션(resolution)에 의해 결정된다. 예를 들면, 입력이 만개의 심벌 미만인 것으로 기대되면, 키 레졸루션은 40억의 고유 키까지 허용하는 32 비트일 수 있다. 이들 관련 개수의 한가지 결과는 키에 따라 인코딩하는 인코더가 만개 심벌의 입력에 대하여 40억 고유 출력 심벌을 생성할 수 있다는 것이다. 사실상, 대부분의 통신 시스템은 모두는 아니지만 400,000개 심벌 중 하나를 손실하여, 어디에서도 거의 40억 출력 심벌이 생성될 필요가 없고, 따라서 가능한 키의 개수는 효과적으로 무제 한으로 처리될 수 있고 반복될 필요가 없으며 키의 2개의 독립한 선택이 동일한 키를 가질 확률은 극히 작다. 그렇지만, 어떤 이유의 경우, 키 생성기의 레졸루션은 키의 무한 공급이 존재하는 것처럼 키를 사용하는 프로세스가 작용할 수 있도록 증가될 수 있다.
키 생성기(120)에 의해 제공된 각 키 I로부터, 인코더(115)는 입력 심벌 생성기에 의해 제공된 입력 심벌로부터 값 B(I)를 갖는 출력 심벌을 생성한다. 각 출력 심벌의 값은 키에 기초하여 그리고 본원에서 출력 심벌의 "조합된 입력 심벌" 또는 단순히 "조합"으로 칭하는 하나 이상의 입력 심벌의 일부 기능에 기초하여 생성된다. 항상은 아니지만 전형적으로, M은 입력 심벌 및 출력 심벌에 대하여 동일한데, 예를 들면 그들 모두의 코드는 동일 개수의 코드에 대응한다.
일부 실시예에서, 입력 심벌의 개수 K는 조합을 선택하도록 인코더에 의해 이용된다. K가미리 알려지면, 입력이 스트림이고 K가 스트림 내의 각 블록 사이에 변화될 수 있는 경우와 같이, K는 단지 추정값일 수 있다. 값 K는 또한 입력 심벌에 대한 저장을 할당하도록 인코더(115)에 의해 이용될 수 있다.
인코더(115)는 출력 심벌을 송신 모듈(140)에 제공한다. 송신 모듈(140)에는 또한 키 생성기(120)로부터 각각의 이러한 출력 심벌의 키가 제공된다. 송신 모듈(140)은 출력 심벌을 송신하고, 이용되는 키잉 방법에 따라서 송신 모듈(140)은 또한 채널(145)을 통해서 수신 모듈(150)에 송신된 출력 심벌의 키에 관한 일부 데이터를 송신할 수 있다. 채널(145)은 소거 채널인 것으로 추정되지만, 그것은 통신 시스템(100)의 적합한 동작에 대한 요건은 아니다. 송신 모듈(140)이 키에 관한 임의의 필요한 데이터 및 출력 심벌을 채널(145)에 전송하는데 적합하고 수신 모듈(150)이 채널(145)로부터 키에 관한 가능한 일부 데이터 및 심벌을 수신하는데 적합한 이상, 모듈(140, 145, 150)은 임의의 적절한 하드웨어 구성요소, 소프트웨어 구성요소, 물리적인 미디어, 또는 이드의 임의의 조합일 수 있다. 조합을 결정하는데 사용되지만, 값 K는 채널(145)을 통하여 송신될 수 있거나, 또는 인코더(115) 및 디코더(155)의 동의에 의해 미리 설정될 수 있다.
채널(145)은 인터넷을 통한 경로 또는 텔레비전 송신자로부터 텔레비전 수신자까지의 방송 링크 또는 한 지점으로부터 다른 지점까지의 전화 접속과 같은 실시간 채널일 수 있거나, 또는 채널(145)은 CD-ROM, 디스크 드라이브, 웹사이트 등과 같은 저장 채널일 수 있다. 채널(145)은 한 사람이 전화선을 통하여 개인용 컴퓨터로부터 인터넷 서비스 제공자(ISP)로 입력 파일을 전송할 때 형성되는 채널과 같은 실시간 채널 및 저장 채널의 조합일 수도 있고, 입력 파일은 웹서버에 저장되어 추후에 인터넷을 통하여 수신자에게 전송된다.
채널(145)이 패킷 네트워크를 포함하는 경우에, 통신 시스템(100)은 임의 2개 이상의 패킷의 관련 순서가 채널(145)을 통한 전송중 보전됨을 가정할 수 없다. 따라서, 출력 심벌의 키는 상술한 하나 이상의 키잉 스킴(keying scheme)을 이용하여 결정되고, 출력 심벌이 수신 모듈(150)을 나가는 순서에 의해 반드시 결정되는 것은 아니다.
수신 모듈(150)은 출력 심벌을 디코더(155)에 제공하고, 수신 모듈(150)이 이들 출력 심벌의 키에 관하여 수신하는 임의의 데이터는 키 재생성기(160)에 제공 된다. 키 재생성기(160)는 수신된 출력 심벌에 대한 키를 재생성하여 이들 키를 디코더(155)에 제공한다. 디코더(155)는 대응하는 출력 심벌과 함께 키 재생성기(160)에 의해 제공된 키를 사용하여, 입력 심벌(다시 IS(0), IS(1), IS(2), ...)을 복구한다. 디코더(155)는 입력 파일(101)의 사본(170) 또는 입력 스트림(105)의 사본(175)을 생성하는 입력 파일 리어셈블러(reassembler)(165)에 복구된 입력 심벌을 제공한다.
미디어 스트리밍 애플리케이션
미디어 스트리밍 애플리케이션에 사용되는 경우, 소스 미디어 스트림을 형성하는 소스 패킷은 때때로 소스 블록으로 불리는 그룹에 수집된다. 예를 들면 소스 블록은 고정된 시간 길이를 재는 소스 패킷의 그룹일 수 있고, 예를 들면 Reed-Solomon 소거 코드는 이들 소스 블록에 독립적으로 적용되어 소스 블록의 원래의 소스 패킷과 함께 수신기에 송신되는 회복 패킷을 생성할 수 있다.
송신기에서, 소스 스트림은 소스 패킷이 도래함에 따라 소스 블록으로 연속적으로 분할되고 나서, 회복 패킷이 각 소스 블록마다 생성되어 송신된다. 특히 라이브 또는 대화형 스트리밍 애플리케이션에 대하여 FEC 코드의 사용에 의해 부가되는 전체 종단 대 종단 지연을 최소화하는 것이 바람직하므로, FEC 솔루션의 전체 설계가, 소스 패킷이 송신되기 전에 송신기에서 가능한 한 적게 지연되고 소스 블록에 대한 모든 소스 및 회복 패킷이 가능한 한 적은 전체 지연으로 송신될 정도이면 바람직하다. FEC 인코딩된 스트림의 속도가 가능한 한 원활하면 또한 바람직한데, 예를 들면, FEC 인코딩된 스트림 속도에서 가능한 한 변화성이 거의 존재하지 않거나 또는 적어도 원래의 소스 스트림에 이미 존재하는 임의 변화성의 크기가 존재하지 않는데, 이는 FEC 인코딩된 스트림 대역폭 사용을 보다 예측 가능하게 하여 네트워크 상 및 다른 가능한 경쟁 스트림 상의 충격을 최소화하기 때문이다. 소스 블록에 대하여 패킷으로 송신된 데이터가 소스 블록에 대하여 패킷을 송신하는 기간 동안 가능한 한 일정하게 확산되면 또한 바람직한데, 이는 버스트 손실(burst loss)에 대하여 최상의 보호를 제공하기 때문이다. 수신기에서의 FEC 논리가 가능한 한 간단하면, 즉 다중 소스 블록으로부터 패킷의 가능한 한 많은 동시 수신을 회피하면 또한 바람직하다. 따라서, FEC 송신기가 하나의 소스 블록으로부터 모든 패킷을 가능한 한 많이 송신하고 나서 다음의 소스 블록으로부터 임의 패킷을 송신하면 바람직하다.
수신기에서, 패킷이 오류(CRC 체크 등을 사용하여 검출 및 폐기할 수 있음)로 손실되거나 수신되면, 충분한 회복 패킷이 수신되었음을 가정하여, 손실된 소스 패킷을 복구하는데 회복 패킷이 사용될 수 있다.
일부 애플리케이션에서, 패킷은 FEC 프로세스가 적용되는 심벌로 더욱 세분된다. 일부 FEC 코드, 특히 Reed-Solomon 코드에 대하여, 인코딩 및 디코딩 시간은 소스 블록당 인코딩 심벌의 수가 증가함에 따라 비실용적이 되고 종종 소스 블록당 생성될 수 있는 인코딩 심벌의 총수에는 종종 상한값이 존재한다. 심벌이 상이한 패킷 페이로드(packet payload)에 놓이기 때문에, 이는 소스 블록의 인코딩에 대한 최대값에 실용적인 상한값을 정하고 이는 물론 소스 블록 자체의 사이즈에 대한 상한값이기도 하다.
많은 애플리케이션에 대하여, 긴 시간 주기 동안 보호가 제공되는 경우 또는 미디어 스트리밍 속도가 높은 경우, 최대 소스 블록 사이즈를 초과하는 데이터에 보호를 제공하는 것이 유리할 수 있다. 이 경우에, 최대 소스 블록 사이즈보다 더 짧은 소스 블록을 사용하고 나서 상이한 소스 블록으로부터 소스 패킷을 인터리빙하면 개별의 소스 블록으로부터의 소스 패킷이 보다 큰 시간 주기동안 확산되는 솔루션을 제공한다.
그렇지만, 또 다른 관심은 소스 스트리밍 속도를 따라갈 만큼 충분히 빨리 소스 블록을 디코딩하여, FEC 디코딩에 의해 초래되는 디코딩 대기 시간을 최소화하고, 또한 FEC 디코딩 중의 임의 시점에 수신 장치에서 적은 부분의 이용 가능한 CPU만을 사용할 수 있는 것이다. 더욱이, 소스 패킷의 원래의 송신 순서를 변경하지 않는 것이 중요하다. 따라서, 소스 패킷의 원래의 송신 순서를 존중하고 각 소스 블록의 FEC 디코딩이 시간 내내 가능한 한 동일하게 확산되도록 허용하고 FEC 디코딩 대기 시간을 최소화하는 것이 바람직하다. 본원에서 설명되는 다양한 실시예들은 하나 이상의 이들 이점을 제공한다.
용어
FEC 코드
본 설명에서, 인코딩될 데이터(소스 데이터)가 임의 길이(단일 비트 아래)일 수 있는 동일한 길이 "심벌"로 분할된 것으로 가정한다. 심벌은 패킷으로 데이터 네트워크 상에서 전달될 수 있고, 심벌의 총수는 각 패킷으로 암시적으로 전달 또는 수반된다. 일부 경우에, 소스 패킷이 복수의 심벌 길이가 아닌 것이 가능하고, 어느 경우에 패킷 내의 최종 심벌은 절단될 수 있다. 이 경우, FEC 코딩을 위해, 이 최종 심벌은 고정 패턴의 비트, 예컨대 0 값의 비트로 채워넣는 것으로 암시적으로 가정함으로써, 이들 비트가 패킷으로 전달되지 않는 경우에도 수신기는 이 최종의 절단된 심벌을 완전한 심벌에서 여전히 채울 수 있다. 다른 실시예에서, 고정 패턴의 비트는 패킷에 배치될 수 있으므로, 패킷의 길이와 동일한 길이로 심벌을 효과적으로 채운다. 심벌의 사이즈는 종종 비트로 측정될 수 있고, 이 경우 심벌은 M 비트의 사이즈를 갖고 심벌은 2M 심벌의 알파벳으로부터 선택된다. 비 2진수가 또한 고려되지만, 2진수가 보다 일반적으로 사용되므로 2진수가 바람직하다.
본원에서 스트리밍하기 위해 고려하는 FEC 코드는 전형적으로 조직적 FEC 코드인데, 즉 소스 블록의 소스 심벌은 소스 블록의 인코딩의 일부로서 포함되므로 소스 심벌이 전송된다. 그리고 나서 조직적 FEC 코드는 소스 심벌의 소스 블록으로부터 일부 개수의 회복 심벌을 생성하고 나서, 소스 및 회복 심벌의 조합은 소스 블록에 대하여 송신되는 인코딩 심벌이다. FEC 코드의 일부는 필요한 만큼 많은 회복 심벌을 효율적으로 생성할 수 있는 능력을 갖고 있다. 이러한 코드는 "정보 부가 코드"로 그리고 "파운틴 코드(fountain code)"로 칭하고 이들 코드의 일례는 "연쇄 반응 코드" 및 다단계 연쇄 반응 코드"를 포함한다. Reed-Solomon 코드와 같은 다른 FEC 코드는 제한된 수의 회복 심벌만을 부분적으로 생성할 수 있다.
패킷 내에 심벌을 반송하기 위한 많은 다른 방법들이 있고, 아래의 설명이 단순화하기 위해 본 일례를 이용하지만 제한적이거나 포괄적인 것을 의미하는 것은 아니다. 아래의 설명의 문맥에서, 용어 "패킷"은 문자대로 단일 유닛의 데이터로 서 송신되는 것을 의미하는 것으로 제한되지 않는다. 대신에, 단일 유닛의 데이터로서 송신될 수도 그렇지 않을 수도 있는 부분 심벌 및 심벌의 논리 그룹화를 정의하는 보다 넓은 개념을 포함하는 것을 의미한다.
심벌, 예컨대 전송 시 값을 변경하거나 다른 방식으로 파손되는 심벌의 손실이외의 다른 데이터의 파손의 형태가 또한 존재하고, 아래에 설명되는 방법들이 이에 동일하게 적용된다. 따라서, 아래의 설명이 종종 심벌의 손실을 설명하지만, 본 방법들은 FEC 에러 보정 코드와 같은 FEC 소거 코드를 넘어 다른 유형의 FEC 코드 및 다른 유형의 파손에 동일하게 적용된다.
선형 변환
어떤 구성 및 일례를 예시하기 위해, 링(ring)의 수학적 개념을 이용한다. 당업자에게 널리 알려진 바와 같이, 링은 2개의 연산인 덧셈과 곱셈이 이들 연산이 분배 법칙을 만족시키도록 정의되는 세트이다. 또한, 덧샘만으로 고려되는 세트는 아벨군(abelian group)을 형성하는데, 즉 덧샘의 결과는 합계의 배열과 무관하고, 덧샘에 대하여 중립 원소 0이 존재하며, 각 원소에 대하여 이들 원소의 합이 0이 되도록 또 다른 원소가 존재한다. 다른 요건은 1과 임의 원소의 곱셈이 그 원소의 값을 변경시키지 않도록 곱셈이 중립 원소 1을 갖는 것이다. 일반적인 링에 대하여, 어떠한 영이 아닌 원소가 곱셈의 역수를 갖는 것을 필요로 하지 않고, 또한 곱셈이 가환적인 것을 필요로 하지 않는다. 그렇지만, 이들 모두의 조건이 만족되는 경우, 링을 "필드"라고 한다. 이 표기법은 대수학의 분야에서는 표준법이다.
매핑은 하드웨어, 소프트웨어, 데이터 저장에 구현될 수 있는 논리 구성으로 서, 동일한 사이즈의 심벌 쌍을 그 사이즈의 또 다른 심벌로 매핑한다. 이 매핑을 "
Figure 112008001568956-PCT00001
"로 나타내고, 심벌의 쌍(S,T)에 대한 이 맵의 이미지를 S
Figure 112008001568956-PCT00002
T로 나타낸다. 이러한 매핑의 일례는 비트의 배타적-OR(XOR)이다.
본원에서 이용되는 또 다른 개념은 심벌 상의 특정 유형의 "액션(action)"의 개념이다. A가 중립 원소를 갖고 원소마다 덧샘 역수를 포함하는 가환의 덧셈 연산("+")이 구비된 세트라고 가정한다. 이러한 세트는 또한 일반적으로 아벨군이라고 부른다. 심벌 세트 상의 이 군의 "액션"은 군 원소 r과 심벌 S로 이루어진 쌍을 또 다른 심벌로 매핑하는 매핑이다. 이미지를 r*S로 나타낸다. 이 매핑이 군 내에 덧셈을 중시하는 경우, 즉 군 A 내의 원소 ab의 쌍마다, (a+b)*S = a*S
Figure 112008001568956-PCT00003
b*S를 갖는다. A가 링이고 액션이 또한 A에서 곱셈을 중시하면, A 내의 곱셈 연산자가 "·", 즉 (a·b)*S = a*(b*S)인 경우, 이 액션은 "연산"으로 부른다.
심벌을 연산하는 링 또는 필드의 일례는 풍부하다. 몇가지 일례를 아래에 언급한다. 이 리스트의 일례는 예시적인 목적만을 의미하고, 완전한 리스트로 고려되지 않아야 하며, 또한 본 발명의 범위를 제한하는 것으로 해석되지 않아야 한다.
일례로써, 덧셈이 배타적-OR(XOR)이고 곱셈이 논리 연산 AND인 상태에서 0과 1로 이루어진 필드 GF(2)는 1 * S = S 및 0 * S = 0을 정의하여 심벌의 세트를 연산하고, 식 중 S는 임의 심벌을 나타내고 0은 완전히 영으로 이루어진 심벌을 나타낸다.
이 프로세스의 매트릭스 공식화 및 "선형 변환"의 개념은 심벌 상의 링의 연산의 개념을 참조하여 정의될 수 있다. 주어진 정수 kn에 대하여, 연산에 의해 유도된 선형 변환은 특정된 링 내의 엔트리를 갖는 행렬의 공간을 사용하여 k 심벌의 벡터를 n 심벌의 벡터로 매핑한다. 링 R 위의 행렬은 엔트리의 2차원 모음이고, 여기서 각 엔트리는 R에 속한다. 행렬이 n 행과 k 열을 갖으면, 일반적으로 n x k 행렬로 칭한다. 쌍(n,k)은 행렬의 "포맷"이라고 부른다. 동일한 포맷의 행렬은 아래의 필드 또는 링에서 덧셈 및 뺄셈을 이용하여 더해지고 빼질 수 있다. 포맷(n,k)의 행렬은 일반적으로 알려진 바와 같이 포맷(k,m)의 행렬과 승산될 수 있다.
연산 시, M이 이러한 n x k 행렬을 나타내고, M[i,j]이 위치(i,j)에서 M의 엔트리를 나타내면, 그리고 이 행렬이 벡터(S1, S2, ..., Sk)를 벡터(E1, E2, ..., En)으로 변환하면, 방정식 1에 나타낸 관계는 유효하다.
1부터 n까지 모든 i에 대하여,
Figure 112008001568956-PCT00004
(방정식 1)
S가 S1, S2, ..., Sk 를 포함하는 열 벡터를 나타내고 E가 심벌 E1, E2, ..., En 의 열 벡터를 나타내면, E = M*S이다.
이러한 선형 변환은 다양한 애플리케이션에서 일반적이다. 예를 들면, 선형 FEC 코드를 사용하여 소스 블록을 인코딩하는 경우, S는 인코딩될 소스 블록의 소 스 심벌일 수 있고, E는 소스 블록에 대하여 송신되도록 S로부터 생성되는 인코딩 심벌일 수 있고, M은 FEC 코드에 대한 생성 행렬일 수 있다. 다른 애플리케이션에서, 예를 들면 조직적 FEC 코드가 사용되는 경우에, ES로부터 생성되는 회복 심벌일 수 있고, M은 소스 심벌 상의 회복 심벌의 의존성을 설명하는 행렬일 수 있다. 또 다른 애플리케이션에서, S는 전송 후 수신된 인코딩 심벌의 벡터일 수 있고, E는 완전히 또는 부분적으로 알려지지 않은 한 세트의 소스 심벌에 해당할 수 있으며, MES간의 관계를 설명할 수 있다. 이들 일례는 소거에 불구하고, 또는 에러에 불구하고 Reed-Solomon 코드를 디코딩할 때의 경우를 포함한다. 후자는 Shokrollahi 등에게 허여된 "Efficient List Decoding of Reed-Solomon Codes for Message Recovery in the Presence of High Noise Levels" 제목의 미국특허 제6,631,172호에 기술되어 있다.
조직적 Reed-Solomon 코드의 매트릭스 공식화는 소스 및 회복 심벌 중에서 유지되는 한 세트의 연립 방정식을 나타낸다. 구체적으로, 각 방정식은 회복 심벌의 경우에 소스 심벌의 선형 조합으로서, 그리고 소스 심벌의 경우에 고유 방정식으로서 인코딩 심벌을 나타낸다. 그래서, 소스 및 회복 심벌이 존재하는 것과 정확히 동일한 수의 방정식이 존재한다.
본원에서 설명되는 방법 및 프로세스는 Reed-Solomon 코드나 다른 FEC 소거 코드 또는 FEC 에러 보정 코드의 다른 공식화에 동일하게 적용된다.
스트리밍
소스 스트림의 FEC 보호를 제공하기 위해, 소스 스트림은 하나 이상의 논리 스트림의 조합일 수 있고, 그 일례는 오디오 RTP 스트림과 비디오 RTP 스트림의 조합, MIKEY 스트림과 RTP 스트림의 조합, 2개 이상의 비디오 스트림의 조합, 및 제어 RTCP 트래픽과 RTP 스트림의 조합이다. 예를 들면 소스 비트 스트림, 소스 심벌 스트림, 또는 소스 패킷 스트림인 포맷으로 소스 스트림이 FEC 송신기에 도래할 때, FEC 송신기는 스트림을 소스 블록 내로 버퍼링하여 소스 블록으로부터 회복 스트림을 생성할 수 있다. FEC 송신기는 예를 들면 패킷 네트워크 상에서 송신될 패킷 내의 소스 스트림 및 회복 스트림을 스케줄링하여 송신한다. FEC 인코딩된 스트림은 조합된 소스 및 회복 스트림이다. FEC 수신기는 손실이나 비트-플립 등에 의해 파손되었을 수 있는 FEC 인코딩된 스트림을 수신한다. FEC 수신기는 소스 스트림의 원래의 소스 블록을 재구성하는 것을 시도하여 스케줄링하고 수신기에서 원래의 소스 스트림을 이용 가능하게 한다.
스트리밍 애플리케이션에는, 통상적으로 최적화에 중점을 둔 일부 키 매트릭스와 소스 스트리밍을 보호하기 위한 FEC 코드 사용법을 설계하는데 입력되는 일부 키 파라미터가 존재한다.
설계시의 두 개의 주요 입력 파라미터는 보호 기간과 보호 량이다. 소스 블록에 대한 송신기 보호 기간은 그 소스 블록으로부터 생성된 심벌이 송신되는 시간 기간이다. 소스 블록에 대한 보호 량은 소스 블록에 대하여 송신된 FEC 회복 심벌의 수이고, 소스 블록에서 소스 심벌의 수의 비율 또는 백분률로 표시된다. 예를 들면, 보호 기간이 2초이면, 보호 량은 20%이고, 소스 블록에는 10,000 소스 심벌이 존재하고, 그 다음 소스 블록에 대하여 10,000 소스 심벌과 2,000 회복 심벌이 2초 시간 창에 확산 송신된다.
소스 블록당 보호 기간과 보호 량은 하나의 소스 블록에서 다음 소스 블록으로 변경될 수 있다. 예를 들면, 소스 블록이 소스 스트림에서 임의 소스 패킷 간 틈이 없는 경우, 예를 들면 제 1 패킷이 MPEG2 비디오 스트림에서 GOP(Group of Pictures)의 마지막 패킷이고, 제 2 연속 패킷이 다음 GOP의 제 1 패킷인 경우, 소스 블록은, 이 일이 보호 기간의 종료 전에 일어난 경우에도 제 1 패킷 이후 제 2 패킷 이전에 송신되어야 한다. 이는 FEC 보호 블록이 비디오 코딩 블록과 함께 배치될 수 있어 많은 이점을 가질 수 있게 되고, 비디오 버퍼링과 FEC 버퍼링에 기인하여 수신기 대기 시간이 최소화되는 이점을 가지게 된다. 다른 애플리케이션에서는, 각 연속 소스 블록에 대하여 동일한 보호 기간 및/또는 소스 블록 크기를 항상 유지할 수 있는 이점이 있다. 보호 기간과 보호 량 모두에 대한 설명을 간략화하기 위해 각 후속 소스 블록에 대하여 동일한 것으로 가정한다. 당해 분야에서 숙련된 자는, 이에 한정되지 않는 본 개시 발명을 숙지한 후에 보호 량 또는 보호 기간 또는 모두를 하나의 소스 블록으로부터 다른 소스 블록으로 변경시키는 경우와 소스 블록 크기를 하나의 소스 블록으로부터 다음 소스 블록으로 변경시키는 경우 처리 방법을 용이하게 판정할 수 있음이 명백하다.
이하 설명을 간략화하기 위해서, 본래 스트림의 소스 심벌은 정상 속도로 FEC 인코딩을 수행하도록 FEC 송신기에 도래하면, 일단 FEC 수신기가 수신기에서 사용가능한 소스 심벌을 만들고, 그 다음 후속 심벌이 동일한 정상 속도로 FEC 수신기에서 사용가능하게 만들어지는 것으로 가정하고, 소스 심벌이 수신된 소스 블 록에서는 소스 심벌 손실이 없고, 각 후속 소스 블록에서는 인코딩 심벌 손실이 최대이어서 성공적인 디코딩을 가능하게 하는 것으로 가정한다. 이 간략화 가정은 후술하는 프로세스와 방법의 동작 또는 설계시 고유하지 않고 이들 프로세스를 임의 방식으로 이 가정에 한정시키는 것을 의도로 하지 않고, 프로세스와 방법을 적절하게 설명하기 위해 일부를 간략화하는 도구로서 소개하는 정도에 불과하다. 예를 들면, 가변 속도 스트림에 대하여, 대응하는 조건은 소스 심벌이 FEC 송신기에서 도래하는 속도와 동일한 속도로 FEC 수신기에 의해서 가변 가능하게 만들어지는 것이다.
최소화가 절실히 요구되는 것은 FEC 송신기 대기 시간이며, 이는 FEC 송신기에 의해서 유도되는 대기 시간이다. FEC 송신기 대기 시간을 최소화하는 것이 라이브 비디오 스트리밍과 같은 일부 애플리케이션 또는 비디오 컨퍼런싱과 같은 상호 작용 애플리케이션에 바람직하다. FEC 송신기 대기 시간을 최소화하는 것을 돕는 전체 설계의 일예는 FEC 송신기가 FEC 송신기에 도래한 순서로 소스 심벌을 송신하는 것이다. FEC 송신기 대기 시간을 최소화하는 다른 설계 예를 후술한다.
또한 중요한 것이 FEC 수신기 대기 시간이다. 도 2에 도신된 바와 같이, 이시간은 수신기가 스트림을 결합 또는 요구하는 때와 FEC 수신기가 먼저 스트림으로부터 사용 가능한 소스 심벌을 만들 때까지 스트림으로부터 인코딩 시벌 수신을 개시하는 때 사이의 시간이다. 통상적으로, FEC 수신기 대기 시간을 최소화하는 것이 바람직한데, 그 이유는 FEC 수신기에 의해서 디코딩되어 지나가기 전에 심벌을 저장하는 수신기에서의 메모리 요구 용량이 최소화되고, 스트림이 결합할 때와 스 트림이 예를 들면 비디오 스트림의 재생에 유용하게 되는 때 사이의 시간 량을 최소화할 수 있기 때문이다. FEC 수신기 대기 시간을 최소화하는 중요 예로는 FEC 송신기가 소스 심벌의 본래 송신 순서를 유지하는 것을 들 수 있지만, 여기서는 FEC 수신기 대기 시간에 대한 많은 중요한 설계 예를 설명한다.
FEC 수신기 대기 시간은 통상적으로 복수의 구성 요소를 포함한다. 후속 소스 블록을 구분되는 스트림에 대한 이들 구성 요소의 예가 도 3A 및 도 3B에 나타나 있다. 도 3A는 보호 기간 당 단일 소스 블록을 나타내며, 이 예는 소스 블록의 개시 시 수신기가 스트림을 결합하는 경우를 나타낸다. 이 예에서 FEC 수신기 대기 시간의 두 가지 구성 요소는 보호 기간과 디코드 대기 시간이다. 수신기 보호 기간은 FEC 수신기가 소스 블록으로부터 수신된 인코딩 심벌을 버퍼링하는 시간이다. 송신기 보호 기간 및 수신기 보호 기간은 송신기와 수신기 간 채널이 송신기로부터 수신기로 진행하는 각 비트, 바이트, 심벌 또는 패킷이 걸리는 시간의 양에 대한 어떠한 변동도 없이 동일한 것이 주목된다. 따라서, 실제로 송시기 보호 기간은 배송시 네트워크 시간 변동에 기인하여 동일한 소스 블록에 대하여 수신기 보호 기간과 상이해질 수 있다.
여기서는 설명의 간략화를 위해, 송신기 보호 기간과 수신기 보호 기간은 각 소스 블록에 대하여 동일한 것으로 가정하고, 송신기 보호 기간과 수신기 보호 기간에 대하여 동일하게 "보호 기간"를 사용하고, 네트워크 배송 시간은 모든 데이터에 대하여 동일한 것으로 가정하고, 당업자는 이 개시 발명을 숙지한 후 네트워크 전달 변동에 기인하여 송신기와 수신기 보호 기간이 상이한 것을 고려하여 여기세 개시도니 방법 및 장치를 필요에 따라 변경할 수 있음을 알 수 있다.
FEC 수신기 대기 시간의 보호 기간 성분은 필수 성분인데, 그 이유는 제 1 소스 블록에서는 어떠한 소스 심벌의 손실도 없고, 적어도 보호 기간 동안 유용한 소스 심벌 만드는 것을 지연시켜 후속 소스 블록에서 인코딩 심벌의 손실이 있는 때에 모든 후속 소스 심벌의 원활한 소스 심벌 전달을 확보할 수 있기 때문이다. 보호 기간 동안, 소스 블록의 일부, 또는 대부분, 또는 모두가 인코딩 심벌의 수신과 동시에 일어날 수 있다. 보호 기간의 종료 시, 소스 블록의 제 1 소스 심벌이이 FEC 수신기로부터 유용해지기 전에 일어나는 추가 FEC 디코딩이 이루어질 수 있고, 이 시간 주기는 도 3A에서 디코드 대기 시간으로 표기되어 있다. 또한, 제 1 소스 심벌이 유용해진 후에도, 소스 블록의 제 2 및 후속 소스 심벌이 유용해지기 전에 일어나는 추가 FEC 디코딩이 이루어질 수 있다. 간략화를 위하여, 이 추가 FEC 디코딩을 도 3A에 나타내지 않았지만, 본 예에서는 충분히 빠른 속도로 제 1 소스 심벌 이후에 모든 소스 심벌을 디코딩하는데 충분히 유용한 CPU 리소스가 존재하는 것으로 가정한다.
도 3B는 도 3A에 나타낸 예에 대응하는 두 개의 잠재 FEC 디코딩 CPU 이용 곡선을 나타낸다. 도 3B에 나타낸 두 개의 곡선 중 하나에서, FEC 디코딩에 사용되는 CPU 이용은 각 시점에서 동일한데, 즉 CPU 이용이 균일하게 분포되어 있다. 이 CPU 이용 곡선은 바람직한데, 그 이유는 각 시점에서 예측 가능하게 동일 양의 CPU 리소스를 사용하고 있다는 것과 전체 소스 블록을 디코드하는데 필요한 총 CPU 리소스가 동일하다는 가정 하에 최대 CPU 리소스를 최소화할 수 있기 때문이다. 도 3B에 나타낸 두 개의 곡선 중 다른 하나에서, FEC 디코딩에 사용되는 CPU 이용은 각 시점에서 동일하지 않고, 특히 소스 블록에 대한 인코딩 심벌의 수신의 종료를 향해서 그리고 종료 직후 CPU 이용은 다른 시점에서보다 상당히 높게 나타난다. 이 CPU 이용 곡선은 바람직하지 않은데, 그 이유는 CPU 리소스 이용은 비디오 재생기와 같은 다른 프로세스가 CPU에 요구되는 임의 시점에서 무력해지게 되고, 따라서 예를 들면 비디오 스트림의 재생에 결함을 일으키는 문제가 발생하기 때문이다. 따라서, 스트림을 보호하는 FEC 해결 방법은 FEC 디코더가 CPU를 가능한 한 시간 내내 원활하고 일정하게 사용하는 것이다. 예로써, 인코딩 심벌 손실의 최악의 경우 패턴 하의 FEC 디코딩 처리 시 임의 시점에서 최대 CPU 이용이 이루어지도록 설계 기준을 잡는 것을 들 수 있다.
수신기가 소스 블록의 중간에서 스트림에 결합될 경우 FEC 수신기 대기 시간은 FEC 송신기에 의해 유지되는 소스 패킷의 원래의 송신 순서 길이만큼의 첫 번째 소스 블록에서 소스 심벌의 손실이 없는 경우의 디코드 대기 시간과 보호 기간을 더한 만큼 작아질 수 있다. 그러므로, FEC 송신기는 소스 심벌의 원래의 송신 순서를 유지하는 것이 바람직하다.
FEC 종단 대 종단 대기 시간을 최소화하는데 FEC 스트리밍 솔루션이 이용될 수 있으며, 이는 FEC 인코딩이 적용되기 전에 소스 패킷이 송신기에서 스트리밍 준비가 될 때와 FEC 디코딩이 적용된 후에 수신기에서 재생 가능할 때 사이에 FEC 사용에 의해 도입되는 최악의 전체 대기 시간이다.
FEC가 사용될 경우 송신 레이트에서 변동을 최소화하기 위해 FEC 스트리밍 솔루션이 이용될 수 있다. 이것의 한 이점으로는, 패킷 네트워크 내에서, 변동하는 송신 레이트를 갖는 스트림은 이 스트림의 송신 레이트에서의 피크가 제한된 용량을 갖는 네트워크의 지점들에서 다른 트래픽의 피크와 일치할 경우의 폭주나 버퍼 초과로 인한 패킷 손실을 받기 더 쉽다. 최소한으로, FEC 인코딩된 스트림 레이트에서의 변동은 원래의 소스 스트림의 레이트에서의 변동보다 더 심하면 안 되고, 더 많은 FEC 보호가 원래의 소스 스트림에 적용됨에 따라 FEC 인코딩된 스트림의 레이트에서의 변동은 더 작아지는 것이 바람직하다. 특별한 경우로서, 원래의 스트림이 일정한 레이트로 송신될 경우, FEC 인코딩된 스트림은 또한 상수에 가능한 가까운 레이트로 송신될 것이다.
FEC 스트리밍 솔루션은 가능한 간단한 논리로 FEC 수신기에 제공되어야 한다. FEC 수신기는 제한된 계산, 메모리 및 그 밖의 자원 능력을 갖는 장치에 내장될 수도 있기 때문에 많은 문맥에서 중요하다. 또한, 어떤 경우에는 전송에서의 심벌의 중대한 손실이나 파손될 수도 있을 수도 있으므로, FEC 수신기는 조건이 개선될 경우 스트림 수신에서 연속하는 콘텍스트가 적거나 거의 없어 이해될 수 없는 치명적인 손실이나 파손의 시나리오로부터 복구해야할 수도 있다. 그러므로, FEC 로직이 보다 간단하고 더욱 강건할수록 FEC 수신기는 소스 스트림의 소스 심벌을 FEC 인코딩된 스트림의 수신으로부터 복구 및 재이용을 보다 빠르고 신뢰성 있게 개시할 수 있을 것이다.
FEC 스트리밍 솔루션의 전체적인 바람직한 몇몇 특성은 다음과 같이 요약될 수 있다.
1. FEC 송신기는 소스 스트림의 원래의 송신 순서를 유지해야 한다.
2. FEC 디코더는 가능한 원활하게 CPU 이용을 확장해야 한다.
3. FEC 수신기는, FEC 인코딩된 스트림의 수신 개시와 소스 스트림의 첫 번째 데이터가 FEC 디코딩 이후 이용가능하게 되는 시간 사이의 지연으로 정의되는, FEC 수신기 대기 시간을 최소화해야 한다.
4. FEC 송신기/수신기는 FEC 종단 대 종단 대기 시간, 즉, FEC를 사용함으로써 도입되는, FEC 송신기 대기 시간과 FEC 수신기 대기 시간을 포함하는 총 대기 시간을 최소화해야 한다.
5. FEC 인코딩된 스트림의 송신 레이트(스트림의 모든 송신된 데이터 포함)는 가능한 원활해야하며, 적어도 원래의 소스 스트림만큼 원활해야 한다.
다음으로, 이들 특징의 일부 또는 전부를 갖는 방법 및 장비를 설명한다.
증분 디코딩
여기서는, 소스 블록에 대하여 이 소스 블록에 대한 수신된 인코딩 심벌로부터 손실된 소스 심벌을 복구하는 증분 FEC 디코딩 프로세스를 설명한다. 이 설명에 있어서, 조직적 FEC 코드가 사용된다고 가정하고, 여기서 소스 심벌의 소스 블록으로부터 생성된 심벌은 회복 심벌로 부르고, "인코딩 심벌" 용어는 소스 심벌이나 회복 심벌 중 어느 하나의 심벌을 언급하는데 사용한다.
프로세스는 식의 개수가 수신된 인코딩 심벌의 개수인 선형 식 리스트인 인코딩 심벌의 수신과 동시적으로 갱신되고, 숫자 변수는 소스 심벌의 개수이다. 각 식은 수신된 인코딩 심벌 중 하나에 대응한다. 프로세스의 시작에서 식의 개수는 제로(zero)이고, 어떤 인코딩 심벌도 아직 수신되지 않았음을 나타낸다.
소스 및 회복 심벌의 수신과 동시적으로 디코딩 동작이 부분적으로 완성하는 기술을 설명한다. 이 기술은 반데몬드 또는 코시 행렬에 근거한 조직적 Reed-Solomon 코드에 관련된 예로 설명하지만, 행렬에 관한 임의의 선형 변형에 동일하게 적용될 수 있다.
반데몬드 또는 코시 행렬에 근거한 (n, k) Reed-Solomon 코드는 다음과 같이 연산한다.
GF(2q)에 대한 n x k 생성 행렬 M은 아래의 방정식 2를 만족하도록 세워지며, 여기서 E는 인코딩 심벌을 구성하는 크기 n의 열 벡터이고 S는 소스 심벌을 구성하는 크기 k의 열 벡터이다. 조직적 코드에 대하여, M의 첫 번째 k개의 행은 단위 행렬을 형성한다고 추가적으로 가정한다.
E = M * S (방정식 2)
기본 연산은 베이스 필드 GF(2q)의 성분에 관한 것이다. 예를 들면, q=8인 경우, 각 필드 성분은 데이터의 한 바이트로 대표될 수 있다. 많은 경우에 있어서, "리조"(Rizzo)로 나타낸 바와 같이, 그룹 필드 성분에 대해 인코딩하고 디코딩하는 것이 효과적이다. 소스 불록은 k*T 필드 성분을 포함하는 것으로 가정하며, 여기서 T는 양의 정부이다. 그런 다음, 소스 블록의 필드 성분은 T 필드 성분의 k개의 그룹으로 각각 분할될 수 있고, 각 그룹은 소스 심벌로 여겨질 수 있다. 그런 다음, 설명한 바와 같이(예를 들어, "Rizzo"에서), FEC 인코딩 동안 n 인코딩 심벌을 생성하기 위해 동일한 행렬 벡터 곱셈 연산이 소스 심벌의 각각의 T 위치에 대한 k개의 소스 심벌에 적용되고, 따라서 각각의 T 위치에 대해 일련의 연산이 적용될 때만 산출하는 것을 가능하게 된다. 마찬가지로, FEC 디코딩 동안, 원래의 k개의 소스 심벌을 복구하기 위해 인코딩 연산이 인코딩 심벌의 각각의 T 위치에 대해 수신된 인코딩 심벌에 적용될 때만 산출될 수 있다.
원래의 k개의 소스 심벌을 복구하기 위해서는 적어도 k개의 인코딩 심벌이 수신되어야 한다(심벌 크기가 동일하고 원래의 심벌에 대해 이용가능한 추가적인 정보가 없다고 가정). 행렬 M'는 디코딩에 사용될 k개의 수신된 인코딩 심벌에 대응하는 M과 디코딩에 사용될 k개의 수신된 인코딩 심벌을 포함하는 열 벡터 E'의 k개의 행으로부터 형성된다. 그러면 디코딩은 방정식 3에 의해 나타낸 바와 같이 E'와 M'에 근거한 S에 대한 해를 포함한다.
E' = M' * S (방정식 3)
Reed-Solomon 코드에 있어서, M의 구성은 M'가 항상 가역되도록 구성되고, 이는 k개의 인코딩 심벌의 수신으로부터 디코딩이 가능하게 한다(다른 FEC 코드와 선형 변형에 있어서는, S를 풀기 위해서 k개의 인코딩 심벌 이상이 수신될 필요가 있을 수 가능성이 있음). S에 대하여 방정식 3을 풀기 위한 FEC 디코딩 계산량은, 모든 수신된 소스 심벌이 E'에 포함된 k개의 인코딩 심벌 사이에 있을 경우, 최소화된다.
방정식 3에 근거한 S를 풀기 위해 요구되는 계산은 다음과 같이 대부분이 인코딩 심벌의 도착과 동시적으로 실행될 수도 있다.
m을 수신된 소스 심벌의 개수라고 가정한다. 그러면, 조직적 선형 변형을 설명하기 때문에, M'의 첫 번째 m개의 행은 각각 단일의 엔트리를 포함하게 된다. E'와 S를 교환할 수 있으며 첫 번째 m개의 행과 열이 수신된 소스 심벌에 대응하도록 M'의 행과 열을 교환할 수 있고, 그러면 M'의 좌측 상부에서 m×m 서브 행렬이 단위 행렬이고 M'의 우측 상부에서 m×(k-m) 서브 행렬은 제로 행렬이다. 그래서, M'는 도 4에 나타낸 형태를 가지며, 여기서 I m은 m×m 단위 행렬이고, O은 m×(k-m)의 모두 제로 행렬이고, A는 (k-m)×m 행렬이고 B는 (k-m)×(k-m) 행렬이다. M'의 상부 m개의 행은 I m |0으로서 기재하고 M'의 하부 (k-m) 행은 A|B로서 기재하여, 다음의 방정식 4, 방정식 5를 갖게 되며, 여기서 E1은 E의 첫 번째 m개의 엔트리(수신된 소스 심벌)이고, E2는 E의 마지막 (k-m)개의 엔트리(수신된 회복 심벌)이고, S1은 S의 첫 번째 m개의 엔트리(수신된 소스 심벌)이고, S2는 S의 마지막 (k-m)개의 엔트리(풀어야될 미지의 소스 심벌)이다.
E1 = (I m|0)*S = S1 (방정식 4)
E2 = (A|B)*S = A*S1 + B*S2 (방정식 5)
B*S2 = E2-A*E1 (방정식 6)
S2 = B -1*(E2-A*E1) (방정식 7)
동시 디코딩을 이용하는 실시예는 소스 심벌이 도래함에 따라 A*E1이 산출 될 수 있다는 사실에 따른다. 행렬 A는 삭제된 소스 심벌이 있는 수만큼의 행을 갖기 때문에, 정확히 k개의 행을 갖기 위해 행렬 M'가 선택된다.
도 5, 6 및 7에 나타내고 이하에 설명되는 디코딩 방법의 실시예의 설명에서, 소스 블록에 대한 수신될 모든 소스 심벌들은 이 소스 심벌에 대한 임의의 회복 심벌들이 수신되기 전에 수신되고, 또한 모든 인코딩 심벌은 인덱스가 증가하는 순서로 수신되고, 여기서 소스 심벌들은 1에서 k로 인덱싱되고 회복 심벌들은 k+1에서 n으로 인덱싱된다. 그러나, 인코딩 심벌의 소거 양과 패턴은 FEC 디코더에 알려지지 않으므로, A'*E1이 계산되고, 여기서 A'는 수신된 소스 심벌에 대응하는 M열과 교차하는 M의 마지막 n-k행에 대응된다.
도 5에서, 소스 심벌이 도래함에 따라 사용될 수 있는 프로세스를 나타낸다. 변수 m은 어떤 소스 심벌도 아직 도래하지 않았음을 나타내기 위해 스텝 505에서 제로로 초기화되고, n-k 심벌의 벡터 r 또한 스텝 505에서 모두 제로 심벌로 초기화된다. 스텝 510에서, 다른 소스 심벌이 존재하는지, 더 이상 소스 심벌이 존재하지 않는지 확인하기 위해 테스트가 행해지고, 그런 다음 스텝 520에서 지시한 바와 같이 도 6에 나타낸 프로세스로 소스 심벌의 수신이 진행한다. 다른 소스 심벌이 존재할 경우, 그러면 스텝 530에서 심벌 값 e와 j 인덱스가 수신된다. 스텝 540에서, 수신된 소스 심벌의 개수 m은 1씩 증분되고 벡터 COL은 m번째 수신된 소스 심벌의 인덱스의 정보를 얻기 위해 갱신된다. 스텝 550에서, 심벌의 벡터 r은 벡터 M[k+1,...,n:j]과 수신된 심벌 값 e의 곱을 더함으로써 갱신되며, 여기서 M[k+1,...,n:j]은 M의 j 열의 마지막 n-k 행에 대응한다. 그러므로, 프로세스는 결국에 도 5의 스텝 520에 도달하고, 회복 심벌 벡터 rA'*E1과 같게 된다.
도 6에서, 회복 심벌이 도래함에 따라 사용될 수 있는 프로세스를 나타낸다. 변수 r는 어떤 회복 심벌도 아직 도래하지 않았음을 나타내기 위해 스텝 605에서 제로로 초기화된다. 스텝 610에서, 도래하였던 인코딩 심벌의 총수, 즉, m개의 소스 심벌과 r개의 회복 심벌이 소스 블록의 소스 심벌의 총수와 동일한지를 확인하기 위해 체크한다. 도 6의 스텝 620에 나타낸 바와 같이, k 인코딩 심벌이 도래하였을 경우, 디코딩이 가능하고 프로세스는 도 7로 진행한다. 도래하였던 k 인코딩 심벌보다 적을 경우, 프로세스는 도 6의 스텝 630으로 진행하며, 여기서 프로세스는 다른 회복 심벌의 수신에 대해 체크한다. 스텝 640에 나타낸 바와 같이, 추가적인 회복 심벌이 존재하지 않을 경우, 디코딩은 불가능하다. 다른 회복 심벌이 존재할 경우, 심벌 값 e와 인덱스 j가 스텝 650에서 수신된다. 스텝 660에서, 수신된 회복 심벌 r의 개수는 1씩 증분되고 벡터 ROW는 r번째 수신된 회복 심벌의 인덱스의 정보를 얻기 위해 갱신된다. 스텝 670에서, 심벌 벡터 e의 r번째 엔트리는 e-r[j-k]로 설정되며, 여기서 r[j-k]는 A'*E1에서의 인덱스 j를 갖는 회복 심벌에 대응하는 심벌 값을 저장하므로, 프로세스가 결국에 도 6에서의 스텝 620에 도달할 경우 심벌 벡터 e는 E2-A*E1과 동일하게 된다.
도 7에서는, B -1*e=B -1*(E2-A*E1)을 계산하는, 즉, 수신되지 않은 소스 심 벌을 해결하는 프로세스의 최종 스텝을 나타낸다. 도 7의 스텝 705 내지 760에서, 행렬 B가 결정된다. 스텝 705에서, i, j 값과 src는 모두 제로로 초기화되며, 여기서, i는 k개의 소스 심벌을 인덱싱하는데 사용되고, j는 소실된 소스 심벌 개수의 정보를 얻기 위해 사용되고, src는 수신된 소스 심벌의 인덱스 어레이 내의 인덱스이다. 또한, COL[m+1]은 이후의 로직을 단순화하기 위해 제로로 설정하며, 여기서 COL은 도 5에서 나타낸 바와 같이 계산되는 m개의 수신된 소스 심벌의 인덱스 어레이이다. 스텝 710에서 i 값은 1씩 증분하고, 스텝 720에서, 디코딩 프로세스는 모든 소스 심벌이 고려되었거나 그렇지 않을 경우를 체크하는 단계를 포함하고, 그런 다음 i가 수신된 소스 심벌의 인덱스인지를 체크하는, 즉, i=COL[src]인지를 체크하는 스텝 730으로 계속된다. i가 수신된 소스 심벌의 인덱스일 경우, 이 소스 심벌은 스텝 750으로 건너뛰지만, i가 소실된 소스 심벌의 인덱스일 경우에는 스텝 740으로 진행하고, 이 인덱스는 소실된 소스 심벌 값의 벡터 MISS에 저장된다. 모든 k개의 소스 심벌이 소실된 것인지와 이들의 인덱스가 벡터 MISS에 적절히 추가되었는지를 확인하기 위해 체크된 후에, 스텝 760에서, 프로세스는 행렬 B를 수신된 회복 심벌의 벡터 ROW에 의해 인덱싱된 M의 r개의 행과 소실된 소스 심벌의 벡터 MISS에 의해 인덱싱된 M의 r개의 열의 교차로서 행렬 B를 형성한다. 스텝 770에서, B의 역행렬 B -1이 계산되고, 스텝 780에서 소실된 소스 심벌은 B -1*e로서 계산되며, 디코딩은 스텝 790에 지시된 바와 같이 완료된다.
상기 프로세스의 많은 변화가 있을 수 있다. 예를 들면, 본 개시를 통하여 소스와 회복 패킷이 임의의 순서로 도착하도록 프로세스를 변형할 수도 있다. 당업자는 본 개시를 통하여 여기서 교시하고 있는 방법의 많은 다양한 변화를 식별 가능할 것이다. 몇몇 추가적인 변화 및 상기 프로세스의 개선은 후술한다.
설명된 프로세스에서, 잠재적으로 n-k개의 심벌 벡터, r=A'*E1 이상을 산출하는 것이 주목된다. 소거 횟수와 수신된 회복 심벌의 위치를 일단 알게 되면, r의 성분을 A*E1으로부터 소거할 수 있다. 결과적으로, 이 접근법은 불필요한 계산의 가능성을 허용하게 된다(계산된 심벌 r이 소거될 수도 있기 때문). 그러나, 이러한 불필요한 계산은, 상기와 같지 않을 경우, FEC 계산에 의해 프로세서가 점유되지 않을 수도 있을 시간 동안 발생한다. 총 계산은 모든 프로세싱이 디코딩에 이용될 k개의 심벌의 수신 후에 초기화되는 기존 디코딩의 최악의 경우 이하를 유지할 수 있음이 분명하다.
프로세스에서 상술한 심벌 벡터 r은 심벌이 도착하면서 저장되는 것이 주목된다. 이를 위하여 회복 심벌의 전체 크기와 동일한 메모리 양이 필요하게 된다. A를 형성하게 될 A'의 행이 식별될 경우, 이 메모리를 재사용할 수 있다. 특정 회복 심벌이 수신되지 않을 것을 식별하는 것이 가능할 경우, r의 그 엔트리에 대응하는 메모리를 해제할 수 있다. 충분한 회복 심벌이 수신되자마자(즉, 많은 회복 심벌이 소실 소스 심벌의 개수와 동일), A를 형성하는 A'의 행은 식별될 수 있고 수신된 임의의 회복 심벌이 더 소거될 수 있다.
n-k개의 심벌과 동일한 메모리의 양은 r의 저장용으로 할당된다. 최악의 경 우, 소스 심벌들이 도착하는 대로 저장하기 위해 k개의 심벌에 대한 메모리의 양을 더 필요하게 되며, 즉, 총 메모리 요구는 n개의 심벌이다.
다른 변형에서, 도 7에 나타낸 바와 같이, B -1*(E2-A*E1)의 계산은 두 개의 서브 단계로 나누어질 수 있고, 첫 번째로는 회복 심벌이 도착함에 따라 실행된다. 이는 방정식 6에 따른 연산하는 것 대신에, 회복 심벌이 도착함에 따라 식 8에 따라 행마다 연산하도록 디코더의 재구성에 따른다.
B U*S2 = B L*(E2-A*E1) (방정식 8)
방정식 8에서, B U는 상부 삼각 형태로 되어 있고 B L은 하부 삼각 형태로 되어있다. 각 회복 심벌(즉, E2의 성분)이 도착하면, 이들 행렬의 각각의 추가적인 행이 B의 반전을 위한 가우시안 소거 프로세스 단계를 실행함으로써 산출될 수 있다.
또한, B L*(E2-A*E1)의 값은 회복 심벌이 도착함에 따라 산출될 수도 있다. 이 상황에서, 부하는 회복 심벌이 도착하는 시간상으로 균일하게 퍼지지 않음에 유의하는 것이 중요하며, 이는 B L*(E2-A*E1)에서의 관련 엔트리의 값을 산출하기 위해 각각의 연속하는 회복 심벌이 마지막 것보다 더 많은 작업이 필요로 하기 때문이다.
일단 충분한 회복 심벌이 도착하게 되면 실행될 남아 있는 작업은 시스템의 솔루선이며, 역대입에 의해 행해질 수 있다.
회복 패킷 우선 송신
회복 패킷이 소스 패킷에 앞서서 송신할 경우 어떤 변형들은 상기 프로세스로 이루어질 수 있다. 이 접근법은 FEC 송신기에서 추가적인 지연을 도입하는 비용이 들며, 이는 소스 패킷이 회복 패킷 후에 송신될 경우 버퍼링 되어야 하기 때문이다.
그러나 이러한 접근법에는 많은 이점이 있다. 소스 블록의 중간에에서 양호한 수신 조건으로 스트림에 결합하는 수신기는 많은 양의 소스 데이터를 수신하게 되고 따라서 FEC 수신기 대기 시간이 감소된다. 소실된 회복 패킷의 위치가 알려지므로, 이들 심벌에 대응하는 (E2-A*E1)의 성분의 산출은 회피될 수 있다. 수신된 회복 심벌의 개수는 r일 경우, 일단 k-r 개의 소스 심벌이 수신되었으면, (E2-A*E1)의 행은 소거될 수 있으며 연속적으로 수신된 소스 심벌과 관련된 산출은 감소된다. 결과적으로, 전체적으로 k개의 심벌에 대한 메모리만을 이용하여 디코딩이 완료될 수 있다.
2D 코드에 대한 개선된 인터리빙
심벌들이 2차원 그리드 내에 배열되고 각 행의 심벌과 각 열의 심벌에 독립적인 소거 보정 코드가 적용되는 것이 2차원 코드이다. 계산과 다른 이용가능한 자원에 따라서, 디코딩 절차는 반복적일 수도 있으므로, 코드의 에러 보정 능력이 잠재적으로 증가한다. 임의의 에러 보정 코드는 이와 같이 적용될 수 있으며, 예를 들어, Reed-Solomon 코드나 XOR 코드가 있다. 여기서는 소거 코드와 관련하여 이러한 코드 종류를 제시하지만, 동일한 접근법이 에러 보정 코드에 용이하게 적용될 수 있음이 에러 및 소거 보정 코드의 기술 분야의 당업자에게는 당연할 것이다.
주지된 바와 같이, 2차원 코드의 성능은 원래의 순서와는 다른 순서로 인코딩 심벌을 송신함으로써 개선될 수 있다. 그러나, 이는 FEC 코드를 지원하지 않는 수신기에 대하여 복잡성이 더해지며 송신기와 수신기 사이의 저손실의 경우에 파일 수신에 요구되는 시간을 증가시킨다. 이동 단말의 경우에, 이러한 추가적인 수신 시간은 추가적인 전력 소비를 의미하게 되고 이는 배터리 수명을 단축하게 된다.
소스 심벌의 의미 있는 순열을 2차원 코드를 적용하기 전에 원래 순서에 적용하는 대체 접근법이 있다. 그러면 소스 심벌은 원래 순서로 송신되고, FEC를 지원하지 않는 수신기에 대해 복잡성이 감소하고 저손실의 경우에 수신 시간을 단축하게 된다. 회복 심벌이 소스 심벌의 전후로 산재되어 송신되고, 또는 이들이 생성된 순서나 그 밖의 몇몇 순서로 송신된다.
이러한 접근법에서, 송신기와 수신기 양자는 적용되었던 순열을 인식하고 있다. 이는 잘 정의되고 송신기와 수신기 양자에 알려진 조직적 방식으로 순열을 추론함으로써 획득될 수 있다. 예를 들어, 송신기와 수신기 양자에 특정 의사 난수 생성 프로세스가 정의되어 순열을 생성하는데 사용될 수 있다. 다른 예로는 다음의 프로세스에 의해 순열을 정의할 수 있다.
k를 소스 심벌의 개수하고 하고 k'를 k와 같거나 이상의 최소 소수라고 가정한다. k보다 작은 두 개의 정수 a와 b를 선택한다. 그런 다음, 소스 심벌이 원래 0, ..., k-1로 번호가 매겨져 있을 경우, 다음과 같이 순서를 정의한다.
1) 모든 소스 심벌이 새로운 순서에 추가되었을 경우, 정지.
2) b<k일 경우, 심벌 b를 새로운 순서로 그 다음의 소스 심벌로 한다.
3) b = (b+a) mod k'
4) 1)로 이동
상기 방법의 단점으로는 선택된 순열에 따라서 원래의 심벌 송신 순서에 인접한 두 개의 심벌이 2차원 코드에서 동일한 행 또는 동일한 열에 나타날 가능성이 있다는 것이다. 이는 소실을 갑자기 증가시키는 취약성의 부정적인 영향이 있는데, 이는 두 개의 인접한 심벌의 손실은 단일의 행 또는 열 내에 집중되기 때문이다.
다른 변형에서, 동일한 행 또는 열 내에 인접한 심벌을 절대 매핑하지 않는 순열을 선택한다. 소스 블록이 정사각형일 경우, 예를 들어, 0, ..., k1=k2(여기서, k1와 k2는 각각 2차원 소스 블록에서의 행과 열의 개수) 개수의 두 개의 순열 σ1, σ2를 선택함으로써 이러한 순열이 정의될 수 있다. s[i, j]는 소스 블록의 위치(i, j)에서의 심벌을 표시하고 s'[i, j]는 순서가 변경된 소스 블록의 위치(i, j)에서의 심벌을 표시한다고 가정한다. 그러면, 다음의 방정식이 정의된다.
s'[i, j] = s[(σ1(j)+σ2(i))%k1,j] (방정식 9)
그리고 나서 2차원 코드는 치환된 소스 블록에 적용된다. 소스 심벌은 원래의 순서대로 송신된다. 이후에, 회복 심벌은 임의의 순서로 송신될 수 있다. 유리하게는, 동일한 행 또는 열 코드로부터의 회복 심벌은 연속적으로 송신되지 않는 다.
일반화된 코드
본 단락에서는 다차원 코드의 일반화된 등급에 대해서 소개하기로 한다. 이 일반화된 등급의 코드에 대한 인코딩 및 디코딩 프로세스는, 구현 복잡도에 있어서, 특정 경우의 2차원 코드에 대한 인코딩 및 디코딩 프로세스와 대략 동등하다. 이전에서와 마찬가지로, 본 설명은 소거 보정 코드에 관해서 제공되고 있지만, 본 명세서에서 제공되는 기법은 에러 보정 코드에 대해서도 동일하게 적용될 수 있는 것이다.
이 일반화된 등급에서의 코드는 각각의 소스 심벌에 대해서 하나의 열을 갖고 또한 각각의 회복 심벌에 대해서는 하나의 열을 갖는 이진 행렬로 정의될 수 있다. 이 행렬의 각 행은 이하에서와 같이 별개의 소거 보정 코드를 나타내고 있다. 본 명세서에서 이들 별개의 소거 코드는 성분 소거 코드로 참조되고 있으며, 또한 전체 코드는 합성 코드로 참조되고 있다. 상술한 것과 같은 2차원 코드의 경우에, 성분 소거 코드는 개별적 행 및 열 코드이며, 또한 합성 코드는 상기 성분 코드의 조합으로부터 형성된 2차원 코드이다. 일반화된 경우에 대해서, 각각의 행에 대해서, 두 개의 조건이 존재하는 경우에 성분 소거 보정 코드가 생성된다.
첫번째 조건은 성분 코드에 대한 소스 심벌이 특정 행에서의 열이 "1"을 갖는 합성 코드 소스 심벌을 포함하고 있는 동시에 특정 행에서의 열이 "1"을 갖는 합성 코드의 회복 심벌을 포함하고 있으며, 이 때 합성 코드 회복 심벌의 열이 행렬 내의 하위 인덱스의 행에 "1"을 갖는다는 조건이다. 이들 심벌을 "성분 코드 소스 심벌"(component code source symbol)로 칭하여 전체로서의 합성 코드에 대한 소스 심벌과 구별하기로 한다.
두번째 조건은 성분 코드 회복 심벌이 특정 행에서의 열이 "1"을 갖고 또한 하위 인덱스의 행에서의 열이 어떠한 "1"도 갖지 않는 합성 코드 회복 심벌을 포함한다는 조건이다. 이들 심벌을 "성분 코드 회복 심벌"(component code repair symbol)로 칭하여 전체로서의 합성 코드에 대한 회복 심벌과 구별하기로 한다.
따라서, 주어진 합성 코드 회복 심벌의 값은 제 1 행에 대응하는 성분 소거 코드와 상기 회복 심벌에 대응하는 열 내의 "1"에 의해서 결정된다. 이후에, 이 회복 심벌은 행렬 내의 후속하는 행 내에서 성분 코드 소스 심벌로서 나타날 수도 있다.
본 명세서에서 제공되는 일반화에 있어서, 2D Reed-Solomon code는 k 1 + k 2 행과 (k 1 * k 2) + k 1 * (n 2 - k 2) + k 2 * (n1 - k 1) 열을 갖는 행렬로 기술된다. 첫번째의 k 1 행은 통상의 2차원 표현에서의 행에 걸친 Reed-Solomon 코드에 대응하고 있다. 나머지 k 2 행은 통상의 2차원 표현에서의 열에 걸친 Reed-Solomon 코드에 대응하고 있다. 여기에서, (n 1 - k 1)은 2D Reed-Solomon 코드의 각 열에 대해서 생성된 회복 심벌의 개수이고, (n 2 - k 2)는 2D Reed-Solomon 코드의 각 행에 대해서 생성된 회복 심벌의 개수이다.
명백하게도, 어떠한 다차원 Reed-Solomon 코드도 이와 같은 형식으로 표현될 수 있다.
부가 코드는 다른 행렬 구조를 사용하여 구축될 수 있다. 예를 들면, 저밀도 패리티 체크(Low Density Parity Check, LDPC) 코드의 일반 등급은 XOR 소거 코드에 기초하여 이 등급 내에서의 코드의 일례를 제공한다. 본 명세서에서 제공되는 일반화는 이들 코드를 정의하고 있는 행렬이 다른 소거 코드, 예를 들면 Reed-Solomon 코드를 사용하여 적용될 수 있도록 한다. 이 일반화에 있어서, XOR 연산 대신에 Reed-Solomon 코드가 사용되고 있기 때문에, 이후에 행렬의 각 행에 대해서 복수의 회복 심벌이 생성된다.
최종적으로, 이 일반화에 연쇄 반응 코드(예를 들면, Luby I 및 기타에서 설명된 것들)용 및 다단 연쇄 반응 코드(예를 들면, Shokrollahi I 및 기타에서 설명된 것들)에 대한 행렬을 적용하여 파운틴 코드(fountain code)의 특성을 갖는 신규 코드를 생성할 수도 있다.
이 일반화를 적용하기 위해서는, 코드를 기술하고 있는 행렬이 FEC 인코더 및 FEC 디코더의 양쪽에 알려져 있어야 하며, 특정 코드의 경우에 있어서, FEC 인코더 및 FEC 디코더의 양쪽에 미리 행렬의 구조가 제공될 수 있으며, 따라서 정확한 코드를 기술하고 있는 특정 파라미터만이 통신 채널을 통해서 공급된다.
본 명세서에서 기술된 등급의 코드는 2차원 코드용으로 사용되고 있는 알고리듬의 일반화인 공통 디코딩 알고리듬(common decoding algorithm)에 의해서 디코딩될 수 있다. 수신기는 통신 채널로부터 가능한 한 많은 소스 및 회복 심벌을 수집하며, 이후에 다음의 프로세스를 반복한다.
a) 각 행렬의 행에 대해서, 해당 행에 대해서 미지인 채로 남아있는 (성분 코드 소스 및 성분 코드 회복) 심벌의 개수를 계산한다.
b) 각각의 행에 대해서, 미지의 심벌의 개수가 성분 코드 회복 심벌(즉, 해당 행에 대해서 성분 코드에 의해서 최초에 생성된 회복 심벌)의 개수 이하 또는 동등한 경우에는, 미지의 성분 코드 소스 심벌의 값을 결정하기 위해서 행 디코딩 연산을 시도한다. 이 디코딩 연산이 성공적이고, 또한 임의의 성분 코드 회복 심벌이 미지인 채로 남아 있다면, 미지의 성분 코드 회복 심벌의 값을 결정하기 위해서 인코딩 연산을 수행한다.
c) 스텝 (b)에서 임의의 연산이 수행되었고, 또한 일부 소스 심벌이 미지인 채로 남아 있다면, 스텝 (a)로 귀환한다. 이외에는 정지한다.
상술한 프로세스는 단지 일례로써 기술된 것이다. 예를 들면, 추가적인 디코딩 연산에서 사용될 기회가 없는 성분 코드 회복 심벌의 계산을 회피하기 위해서 추가적인 최적화가 적용될 수 있다. 이 연산은 하드웨어나 소프트웨어 등에 의해서 구현된 수신기의 디코더부에 의해서 수행될 수 있다.
최종적으로, 상술한 바와 같이, 상술한 일반화된 코드 구조는 Reed-Solomon 코드로 제한되지 않으며, 각각의 행에 대해서 임의의 소거 코드를 적용하여 행 회복 심벌을 구축할 수 있다. 명백하게도, XOR 연산이 사용되는 경우라면, 그 결과는, 이상에서 참조한 코드를 포함하는, 공지의 LDPC 코드 등급이 된다.
FEC 송신
본 절에서는 FEC 송신기에 대해서 패킷(소스 및 회복 패킷의 양쪽 모두)의 송신에 걸리는 시간을 재기 위한 방법 및 프로세스를 설명하기로 한다. 본 발명은 단일 소스 블록에 대한 패킷의 송신에 대해서만 집중하기로 하며, 이들 프로세스 및 방법은 소스 블록으로 분할된 소스 스트림에 빈틈없이 적용되도록 설계된 점에 주목해야 한다.
k를 소스 블록 내의 소스 심벌의 개수로 하고, T를 소스 블록 내의 보호 기간으로 하고, p를 분수로 표현되는 보호량으로 하면, p·k 개의 회복 심벌이 소스 블록용으로 송신된다. k, Tp의 값은 각각의 소스 블록이 형성됨에 따라서 FEC 송신기에 의해서 동적으로 결정될 수 있으며, 따라서 해당 소스 블록에 대한 소스 심벌의 거의 대부분 또는 전체가 FEC 송신기에 도래하였을 때 FEC 송신기에만 소스 블록에 대한 kT의 값이 알려질 수 있으며, 또한 p의 값은 소스 블록에 대한 소스 심벌의 전체가 FEC 송신기에 도래한 이후에 결정될 수 있다. 또한, FEC 송신기는 서로 다른 소스 블록용으로 심벌 사이즈를 변경할 수 있다. 따라서, 특정 소스 블록에 대한 이들 파라미터의 대부분 또는 전부는 해당 소스 블록에 대한 데이터를 수신하기 전에 FEC 송신기에 알려져 있을 수 있다.
FEC 종단 대 종단의 대기 시간과 관련하여 전혀 문제가 없다면, 대부분 다음의 FEC 기본 송신기가 적합하다.
FEC 기본 송신기: 소스 블록에 대한 소스 심벌이 도래함에 따라서, 이를테면 T 초의 기간 내내 이들을 버퍼링한다. 이후에, 소스 블록에 대한 p·k 개의 회복 심벌을, 이를테면 T 초의 기간 내내 생성한다. 이후에, 이 소스 및 회복 심벌을, 후속하는 T 초 동안 일정하게 확산시킨다.
FEC 기본 송신기는 다음의 특성을 갖는다.
1. 보호 기간은 FEC 송신기에서 소스 심벌을 수신하는데 필요한 시간과 동일한 시간인 T이다.
2. 소스 블록용으로 송신된 심벌은 시간 내내 일정하게 확산된다. 이는 정해진 지속 기간의 버스트 중지(burst outage)가 있는 경우의 손실에 대비한 보호 레벨이 심벌의 전송 중에 상기 중지가 발생하는 경우에 종속되지 않는다는 것을 의미하며, 이것은 바람직한 특성이다.
3. FEC 송신기는 심벌의 전체 송신율에 변동이 동반되지 않는다. 구체적으로, 소스 심벌의 원래의 전송율이 일정하다면, 전체 심벌의 전송율도 여전히 일정하게 되며, 또한 FEC 송신기에서의 소스 심벌의 원래의 도래율이 변동되더라도, 적어도 소스 블록당 심벌의 일정한 송신율이 변동을 감쇠시킨다. 이는 바람직한 특성이다.
4. FEC 수신기의 대기 시간은 T만큼이나 작아질 수 있다. 이는 (1 + pk 개의 심벌(모든 소스 블록이 k 개의 소스 심벌을 포함하고 있다고 가정함)의 최소 버퍼링을 의미하고, 이것은 최소 가능(minimal possible)이며, 따라서 바람직하다.
5. 소스 블록에 대한 심벌은 인터리빙되어 있지 않다. 이는 FEC 수신기의 논리가 단순해지도록 하며, 따라서 바람직하다.
FEC 기본 송신기가 가지고 있는 바람직하지 않은 하나의 특성은 FEC 종단 대 종단의 대기 시간이 2·T + T'라는 것이며, 이는 문제가 될 수 있다. 대화형 또는 라이브(live) 애플리케이션에 대해서, FEC 종단 대 종단의 대기 시간을 최소화하는 것이 매우 바람직하며, 따라서 이들 애플리케이션용으로 이하의 FEC 송신기를 설명하고, 이들을 고려해 보기로 한다.
FEC 송신기 A: 소스 심벌이 도래함에 따라서, 이를테면 R 초의 기간 내내 이들을 송신한다. 다음 소스 블록용으로 소스 심벌의 수신 및 송신에 걸쳐서 동등하게 확산시킨 회복 심벌을 송신한다.
FEC 송신기 A는 다음의 특성을 갖는다.
1. 보호 기간 T는 2·R(다음 소스 블록 또한 R 초의 기간 내내 수신된 소스 심벌을 포함하고 있다고 가정함)이다.
2. 소스 심벌의 도래가 시간 내내 일정하게 확산되었다고 할지라도, 소스 블록용으로 송신된 심벌은 시간 내내 일정하게 확산되어 있지 않다. 이는 후속하는 소스 심벌의 송신 사이의 평균 시간이 k / R이며, 반면에 후속하는 회복 심벌의 송신 사이의 평균 시간은 p·k / R이기 때문이다. 이는 정해진 지속 기간의 버스트 중지가 있는 경우의 손실에 대비한 보호 레벨이 심벌의 전송 중에 상기 중지가 발생하는 경우에 종속된다는 것을 의미한다. 이는 상기 중지가 발생하는 것과는 무관하게 소정의 중지 지속 기간을 견뎌 내도록 하기 위한 보호량을 설계하는 경우에, 반드시 소스 심벌의 전송률 또는 회복 심벌의 전송률 중에서 어느 쪽이든 더 큰 쪽의 전송률에 기초하여 비최적화된 보호량을 제공해야만 한다는 것을 의미한다. 이는 특정 애플리케이션에 있어서 바람직하지 않은 특성이다.
3. 전체 소스 스트림에 대한 전체 송신율은 소스 심벌의 송신율로부터 현저하게 변동되지 않는다. 구체적으로, 소스 심벌의 원래의 송신율이 일정하다면, 전 체 심벌의 전송율도 여전히 일정하게 되며, 또한 소스 심벌의 원래의 송신율이 변동되더라도, 송신되는 회복 패킷이 일정하게 확산되기 때문에, 원래의 소스 스트림의 변동성은 어느 정도 감쇠된다. 이는 바람직한 특성이다.
4. FEC 수신기의 대기 시간은 적어도 T = 2·R이 되며, 이는, 예를 들면, 대화형 애플리케이션에 있어서, 원래의 소스 블록의 지속 기간이 단지 R이기 때문에 일부 애플리케이션에서 바람직하지 않게 된다. 이는 적어도 (2 + pk 개의 심벌(모든 소스 블록이 k 개의 소스 심벌을 포함하고 있다고 가정함)의 버퍼링이 필요하다는 것을 의미한다. 이는 최소 가능인 (1 + pk보다 상당히 크며, 따라서 이는 일부 애플리케이션에서 바람직하지 않다.
5. 하나의 소스 블록에 대한 회복 심벌은 다음 소스 블록으로부터 소스 심벌과 함께 인터리빙되어 있다. 이는 하나 이상의 소스 블록에 대해서 동시적으로 심벌을 추적하고 저장을 유지해야 할 필요가 있기 때문에 FEC 수신기의 논리가 잠재적으로 필요로 하는 것보다 더 복잡해지도록 하며, 또한 주어진 소스 블록으로부터 더 이상의 추가적인 심벌이 언제 도래하지 않게 될지 및 해당 소스 블록을 디코딩하려는 시도를 언제 포기해야 할지를 결정하는 것을 어느 정도는 곤란하게 만들게 된다.
따라서, 전체 FEC 송신기 A의 품질은 뒤죽박죽이며, 특정 애플리케이션에서는 바람직하지 않을 수도 있다.
FEC 송신기 B: 소스 심벌이 도래함에 따라서, 이를테면 R 초의 기간 내내 이들을 송신한다. 소스 심벌의 평균 도래율로 일정하게 확산시킨 회복 심벌을 송신 하며, 따라서 이 회복 심벌은 p·R 초 내내 동등하게 확산된다.
FEC 송신기 B는 다음의 특성을 갖는다.
1. 보호 기간 T는 (1 + pR이다.
2. 소스 심벌의 도래가 시간 내내 일정하게 확산되는 경우에, 소스 블록용으로 송신된 심벌은 시간 내내 일정하게 확산된다. 이는 정해진 지속 기간의 버스트 중지가 있는 경우의 손실에 대비한 보호 레벨이 심벌의 전송 중에 상기 중지가 발생하는 경우에 종속되지 않는다는 것을 의미하며, 이것은 바람직한 특성이다.
3. 전체 소스 스트림에 대한 심벌의 전체 송신율에 변동이 동반된다. 구체적으로, 회복 심벌의 전송만이 후속하는 소스 블록(들)에 대한 심벌의 송신과 부분적으로 중첩되기 때문에 소스 심벌의 원래의 전송율이 일정하였다고 하더라도, 심벌의 전체 전송률이 상당히 변동하게 되며 또한 일관성이 없게 된다. 이는 특정 애플리케이션에서 바람직하지 않은 특성이다.
4. FEC 수신기의 대기 시간은 적어도 T = (1 + pR이며, 이는 원래의 소스 블록의 지속 기간이 단지 R이기 때문에 일부 애플리케이션에서 바람직하지 않다. 이는 적어도 (1 + 2·pk 개의 심벌(모든 소스 블록이 k 개의 소스 심벌을 포함하고 있다고 가정함)을 필요로 한다는 것을 의미한다. 이는 최소 가능인 (1 + pk보다 크다.
5. 하나의 소스 블록에 대한 회복 심벌은 다음 소스 블록(또한 어쩌면 p의 값에 따라서 후속하는 소스 블록)으로부터 소스 심벌과 함께 인터리빙되어 있다. 이는 하나 이상의 소스 블록에 대해서 동시적으로 심벌을 추적하고 저장을 유지해 야 할 필요가 있기 때문에 FEC 수신기의 논리가 잠재적으로 필요로 하는 것보다 더 복잡해지도록 하며, 또한 주어진 소스 블록으로부터 더 이상의 추가적인 심벌이 언제 도래하지 않게 될지 및 해당 소스 블록을 디코딩하려는 시도를 언제 포기해야 할지를 결정하는 것을 어느 정도는 곤란하게 만들게 된다.
따라서, 전체 FEC 송신기 B의 품질은 뒤죽박죽이며, 특정 애플리케이션에서는 바람직하지 않을 수도 있다. 설계 A 및 B는, 적어도 소스 심벌이 수신된 이후에 FEC 인코더가 회복 심벌을 생성하기 위해서 상당한 양의 시간을 필요로 할 수도 있다는 점을 고려하고 있지 않으며, 또한 실용적인 FEC 송신기에 있어서, 이는 반드시 고려해야 하는 것이라는 점에 주목해야 한다. 그러나, 이들 설계를 변경하여 FEC 인코딩 시간을 고려하도록 하는 것은 이들의 바람직하지 않는 특성을 전혀 개선하지 못한다는 점에 더욱 주목해야 한다.
일부 조건에서의 바람직한 실시예는 다음에서 기술하는 FEC 송신기 C일 수 있다.
FEC 송신기 C: 소스 블록을 형성하는 소스 심벌은 R = T 초의 기간 동안 도래하며, 여기에서 T는 보호 기간이다. u = p / (1 + p)로 하고, 또한 T'u·T로 하며, 여기에서 T' - u·T는 소스 블록에 대한 제 1 회복 심벌을 생성하고 또한 계속하여 이하에서 규정하는 송신율로 소스 블록에 대한 후속하는 회복 심벌을 생성하도록 FEC 인코더에 대한 소스 블록에 대한 최종 소스 심벌의 수신 이후의 충분한 시간이다. t는 FEC 송신기에서의 현재 시간으로 한다.
1. 소스 블록이 FEC 송신기에 의해서 초기화될 때, tt = 0으로 초기화된 다.
2. 현재 시간 t가 0 ≤ tT의 간격 내에 있는 동안에, 현재 시간 t에서 소스 심벌이 수신될 때마다, T' + t / (1 + p)의 시간에 송신되도록 스케줄링된다.
3. 소스 블록이 시간 T에 완료되었을 때 k 개의 소스 심벌이 수신되었다고 가정한다. 소스 블록에 대한 p·k 개의 회복 심벌은 T' + T / (1 + p)로부터 T' + T까지의 (길이 u·T의 간격인) 간격 내내 일정하게 전송되도록 스케줄링된다.
FEC 송신기 C는 다음의 특성을 갖는다.
1. 보호 기간 T는 소스 심벌이 소스 블록에 도래하는 동안의 기간과 동일한 지속 기간이다.
2. 소스 심벌의 전체 송신율에서의 변동은 1 / (1 + p)의 인자에 의해서 시간상 압축되지만, 동일한 크기를 유지하고 있다. 이는 보호량이 증가함에 따라서 FEC 인코딩된 스트림에 의해서 사용되는 대역폭의 양이 증가되기 때문에 일부 애플리케이션에서 전혀 바람직하지 않을 수 있으며, 따라서 더 많은 대역폭을 사용할 때 스트리밍 속도에서의 변동의 크기를 감소시키도록 것이 더욱 바람직하다. 이는 또한 정해진 지속 기간의 버스트 손상에 대비한 보호 레벨이 손상이 발생한 경우에 종속될 수 있음을 의미하여, 이는 바람직하지 않다. 그러나, 특별한 경우로서, 소스 심벌의 원래의 송신율이 일정하다면, FEC 인코딩된 스트림의 송신율도 마찬가지로 일정하게 되며, 따라서 정해진 지속 기간의 버스트 손상에 대비한 보호 레벨 또한 손실이 발생하는 경우에도 종속되지 않는다.
3. FEC 인코딩 및 FEC 디코딩의 대기 시간이 영(0)에 접근함에 따라서, FEC 종단 대 종단의 대기 시간은 T + u·T 만큼이나 작아질 수 있다.
4. FEC 수신기의 대기 시간은 FEC 디코딩의 대기 시간이 영에 접근함에 따라서 T 만큼이나 작아질 수 있다. 이는 (1 + pk 개의 심벌(모든 소스 블록이 k 개의 소스 심벌을 포함하고 있다고 가정함)만의 버퍼링이 필요하다는 것을 의미한다. 이는 최소량의 가능이며, 따라서 바람직하다.
5. 하나의 소스 블록에 대한 회복 심벌은 다음 소스 블록으로부터 소스 심벌과 함께 인터리빙되어 있지 않는, 즉 후속하는 소스 블록에 대한 임의의 심벌이 송신되기 전에 하나의 소스 블록에 대한 모든 심벌이 송신된다.
6. FEC 송신기는 최종 소스 심벌의 도래와 최초의 회복 심벌의 송신 사이에는 T' - u·T의 시간 지연이 있기 때문에, 최종 소스 심벌이 수신된 이후에 FEC 인코더가 회복 심벌을 생성하기 위해 상당한 양의 시간을 필요로 할 수 있음을 고려하고 있으며, 여기에서 T는 FEC 인코더의 성능에 기초하여 적절하게 조절될 수 있는 파라미터이다.
따라서, 전체적인 FEC 송신기 C는, 상술한 목록에서의 특성 2에 기술된 바와 같이, FEC 송신기 C가 소스 심벌의 송신율에서의 변동의 원래 크기를 유지하고 있다는 점만 제외하면, 기술된 각각의 방식에서 바람직하다.
다음에서 기술하는 FEC 송신기 D는 FEC 송신기 C에 대해서 상술한 목록에서의 모든 바람직한 특성을 유지하고 있을 뿐만 아니라, 소스 심벌의 송신율에서의 변동의 강도를 감쇠하는 유익한 효과도 유지하고 있다. 따라서, FEC 송신기 D는 몇 가지 장점을 가지고 있으며 또한 일부 경우에서 바람직한 실시예일 수 있다.
FEC 송신기 D: 소스 블록을 형성하는 소스 심벌이 T 초의 기간 내내 도래하며, 여기에서 T는 보호 기간이다. u = p / (1 + p)로 하고, 또한 T'u·T로 하며, 여기에서 T' - u·T는 소스 블록에 대한 제 1 회복 심벌을 생성하고 또한 계속하여 이하에서 규정하는 송신율로 소스 블록에 대한 후속하는 회복 심벌을 생성하도록 FEC 인코더에 대한 소스 블록에 대한 최종 소스 심벌의 수신 이후의 충분한 시간이다. t는 FEC 송신기에서의 현재 시간으로 한다. 프로세스 내의 각 시점에서, B는 소스 블록용으로 수신된 소스 심벌의 개수로 하고, S는 FEC 송신기에 의해서 현재까지 송신된 이들 소스 심벌의 개수로 한다.
프로세스는 소스 블록이 FEC 송신기에 의해서 개시될 때 시작되며, 또한 프로세스는 t = 0 및 B = S = O으로 초기화한다. 이후에, 현재 시간 t가 간격 0 ≤ tT' 내에 있는 동안, 소스 심벌이 수신될 때마다, BB + 1로 설정되고 또한 현재 시간 t가 간격 T' < tT 내에 있는 동안, 소스 심벌이 수신될 때마다, BB + 1로 설정되며 또한, 시간 t에서, 방정식 9에 따라서 y t 를 정의하며, 여기에서 현재 시간 t 이전의 시간 x에서의 각 시점에서, B x S x 는 시간 x에서의 BS의 각각의 값이다. 시간 t에서 y t ≥ l이면, 프로세스는 다음에 수신되었지만, 아직은 송신되지 않은 소스 심벌을 송신하고 또한 S = S + 1로 설정한다.
Figure 112008001568956-PCT00005
(방정식 9)
이들 스텝에 이어서, 시간 T에 의해서 모든 소스 심벌이 수신되며, 따라서 소스 블록 내에는 k = B T 개의 소스 심벌이 존재한다. 이 시점에서, 프로세스는 현재 시간 tT < tT' + T / (1 + p)의 시간 간격 내에 있는 동안 상기 시간 간격 내내 일정하게 확산된, 남아 있는 B T - S T 개의 미송신 소스 심벌을 송신한다. 다음으로, 프로세스는 현재 시간 tT / (1 + p) < tT' + T의 시간 간격 내에 있는 동안 상기 시간 간격 내내 일정하게 확산된 p·k 개의 회복 심벌을 송신한다.
FEC 송신기 D는 FEC 송신기 C의 바람직한 특성을 가지고 있으며, 또한 FEC 송신기 C의 특성 2에 부가하여 전체 소스 스트림에 대해서 심벌의 전체 송신율에서의 변동이 감쇠된다고 하는 점에서 다음의 FEC 송신기 D용으로 개선되어 있다. 구체적으로, 소스 스트림에서의 변동은 T가 증가함에 따라서 더욱 극적으로 감쇠되며, 또한 일반적으로 보호량이 증가하게 되면 T가 증가하게 된다.
이는 바람직한데, 그 이유는 보호량이 증가하게 되면 FEC 인코딩된 스트림에 의해서 사용되는 대역폭의 양이 증가하게 되고, 따라서 스트리밍 속도에서의 변동을 감소시키기 위해 더 많은 대역폭을 사용하려는 경우에 더욱 더 바람직하게 되기 때문이다. 이는 또한 바람직한데, 그 이유는 변동이 감쇠됨에 따라서 보호 레벨이 정해진 지속 기간의 버스트 중지가 있는 경우의 손실에 대비한 보호 레벨이 중지가 발생한 경우에 더욱 약하게 종속되기 때문이며, 이것은 바람직한 특성이다. 특별한 경우로서, 원래의 소스 스트림이 일정한 속도인 경우라면, FEC 인코딩된 스트림 또한 일정한 속도가 된다. 따라서, 전체 FEC 송신기 D는 다른 송신기들에 비해서 더욱 바람직하게 되며, 따라서 많은 조건에서 선호된다.
FEC 송신기 D의 많은 가능한 변형이 있는데, 그 중의 일부는 본 명세서에서 기술되어 있으며, 다른 것들은 본 발명의 개시를 읽은 후에 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 명백하게 될 것이다.
예를 들면, 스텝 3b에서 y t 의 계산이 있는데, 이 계산을 수행하기 위해서는, 정확한 계산 대신에 유사한 결과를 산출하는 간단한 근사를 포함하는 수많은 가능한 방법들이 있다. 다른 일례로서, 스텝 3c에서 조건 y t ≥ 1에 기초하여 언제 다른 소스 심벌을 송신할지를 결정하는 것은 변경될 수 있는데, 예를 들면, 어떤 상수 α에 대해서 조건 y t ≥ 0 또는 y t ≥ α의 조건으로 교체될 수 있다. 이와 같은 변경은 유사한 결과를 산출하게 된다. 변형의 다른 일례로서, 다음 소스 또는 회복 심벌을 개별적으로 송신하는 대신에, 각각의 패킷 내에서 함께 심벌 그룹을 수신하거나 송신할 수 있으며, 또한 각 패킷 내에서의 수신된 또는 송신된 그룹의 사이즈는 패킷 별로 다를 수 있다. 이 경우에, 수신된 심벌을 고려하기 위한 절차, 및 다음 소스 또는 회복 심벌을 언제 송신할 지의 절차는 간단한 방식으로 용이하게 변경될 수 있다.
다른 변형례의 일례로서, 심벌 대신에 비트(bit)를 송신하고 수신하는, 즉 한번에 전체 심벌 대신에 심벌의 잠재적인 일부분을 송수신하는 경우가 될 수 있으며, 심벌을 송신하고 수신하는 절차는 심벌 대신에 데이터, 예를 들면 비트 단위 또는 다양한 사이즈의 패킷 단위로 송신 및 수신하도록 용이하게 변경될 수 있다.
FEC 송신기 D의 한 가지 가능한 변형은 이하에서 설명하고 또한 도 8A, 8B, 9, 10, 11, 12 및 13에 나타낸 FEC 송신기 E이다. FEC 송신기 E는 FEC 송신기 D와 유사하며, 구체적으로 T는 보호 기간의 지속 기간이며, 소스 블록의 지속 기간, u = p / (1 + p) 및 Tu·T는 송신기가 현재의 소스 블록에 대한 소스 심벌을 수신하기 시작할 때와 송신기가 현재의 소스 블록에 대한 소스 심벌을 송신하기 시작할 때 사이의 지속 기간이다. FEC 송신기 E는 현재의 소스 블록의 프로세싱을, 도 8A에 나타낸 바와 같이, 소스 초기 프로세스(Source Initial Process), 소스 중간 프로세스(Source Mid Process), 소스 최종 프로세스(Source Final Process), 및 회복 송신 프로세스(Repair Send Process)의 네 개의 프로세스로 분할한다. 이들 네 개의 프로세스의 각각의 상대 시간 간격 및 상대 지속 기간은 도 8A에서, 각각, "시간 간격"(Time interval)으로 명명된 열 및 "지속 기간"(Duration)으로 명명된 열에 나타내어져 있다. 시간 간격은 현재의 소스 블록이 시작되었을 때의 시간에 대해서 상대적으로 표현되어 있으며, 따라서 시간 t = 0은 현재의 소스 블록이 시작되었을 때의 시간에 대응한다. 따라서, 도 8A에 나타낸 바와 같이, 소스 초기 프로세스는 시간 t = 0에서 시작하여 시간 t = T'에서 종료하고, 따라서 지속 기간은 T'이다. 유사하게, 소스 중간 프로세스는 시간 t = T'에서 시작하여 시간 t = T에서 종료하고, 따라서 지속 기간은 T - T'이며; 소스 최종 프로세스는 시간 t = T에서 시작하여 시간 t = T' + T / (1 + p)에서 종료하고, 따라서 지속 기간은 T' - u·T이며; 회복 송신 프로세스는 시간 t = T' + T / (1 + p)에서 시작하여 시간 t = T' + T에서 종료하고, 따라서 지속 기간은 u·T이다.
도 8B에 나타낸 바와 같이, 서로 다른 소스 블록에 대해서 네 개의 프로세스 가 중첩되어 있다는 사실에 주목해야 한다. 예를 들면, 현재의 소스 블록에 대한 소스 초기 프로세스는 먼저 이전 소스 블록의 소스 초기 프로세스와 동시적이며, 또한 이후에 이전 소스 블록의 소스 최종 프로세스와 동시적이다. 다른 일례로서, 현재의 소스 블록의 소스 최종 프로세스 및 이후의 현재의 소스 블록의 회복 송신 프로세스는 다음 소스 블록의 소스 초기 프로세스와 동시적이다.
도 8B에 나타낸 바와 같이, 각 시점에서, 소스 심벌은 정확하게 하나의 소스 블록을 수신하고 또한 인코딩 심벌은 정확하게 하나의 소스 블록을 전송하고 있다. 예를 들면, 현재의 소스 블록의 소스 초기 프로세스 중에, 인코딩 심벌은 이전의 소스 블록용으로 송신되고 또한 소스 심벌은 현재의 소스 블록용으로 수신된다. 다른 일례로서, 현재의 소스 블록의 소스 중간 프로세스 중에, 소스 심벌은 현재의 소스 블록용으로 수신되고 또한 인코딩 심벌은 현재의 소스 블록용으로 송신된다.
FEC 송신기 E는 다음의 특성을 갖는다. (a) 소스 심벌은 T 초 동안 각각의 소스 블록용으로 수신된다; (b) 인코딩 심벌은 T 초 동안 각각의 소스 블록용으로 수신된다; (c) 소스 블록에 대한 소스 심벌의 수신 시작과 소스 블록에 대한 소스 심벌의 송신 시작 사이의 T 시간의 지속 기간이 있다; (d) 현재의 소스 블록에 대한 모든 소스 심벌은 다음 소스 볼록에 대한 임의의 소스 심벌이 수신되기 전에 수신된다; (e) 현재의 소스 블록에 대한 모든 인코딩 심벌은 다음 소스 볼록에 대한 임의의 인코딩 심벌이 송신되기 전에 송신된다. 따라서, FEC 송신기 E는 소스 블록의 인터리빙은 전혀 가지고 있지 않다.
도 9는 FEC 송신기 E에 대한 소스 초기 프로세스를 예시하고 있다. 도 9의 스텝 905에서, 현재의 소스 블록이 시작되고, 따라서 현재의 소스 블록용으로 수신된 소스 심벌의 개수 B 및 송신된 소스 심벌의 개수 S는 양쪽 모두 영(0)으로 초기화되고, 현재의 시간 t는 영으로 초기화되며, 현재의 소스 블록용으로 사용되는 버퍼 소스 심벌에 대한 버퍼 소스 심벌에 사용되는 BUFFER는 빈(empty) 것으로 초기화된다. 스텝 910에서, 현재 시간 tT' 이상인지를 알기 위해 체크되며, 그렇다면 프로세싱은 스텝 920에서 도 10의 소스 중간 프로세스로 전달된다. 스텝 910에서의 테스트의 구현은 대략적으로 이 테스트가 참일 때 tT'에 매우 근접하기에 충분하도록 빈번하게 발생된다는 것을 의미하고 있다는 점에 주목해야 한다. 이와 동일한 설명은 FEC 송신기 E의 모든 프로세스에서 두 개의 시간 사이에서 부등 비교가 행해지는 이하에서 설명하는 모든 부가 스텝에도 적용된다. 스텝 910에서 tT' 미만인 경우라면, 스텝 930에서 다음 소스 심벌이 도래하였는지를 알기 위해 체크된다. 다음 소스 심벌이 도래하지 않았다면, 프로세싱은 스텝 910으로 루프백되지만, 다음 소스 심벌이 도래하였다면, 스텝 940에서, 수신된 소스 심벌의 개수 B를 증가시키고 또한 프로세싱을 스텝 910으로 루프백시키기 전에, 수신된 소스 심벌을 BUFFER에 추가한다.
도 10은 FEC 송신기 E에 대한 소스 중간 프로세스를 예시하고 있다. 도 10의 스텝 1005에서, TLAST의 값은, 현재 시간 t(T' 이상이지만 도 9의 스텝 910에서의 테스트의 정밀도에 따라서 T'에 매우 근접한다)로 초기화되며, TNEXTTLAST + T' / ((1 + pB)로 초기화된다. TNEXT는 다음 소스 심벌이 송신되도록 스케줄링되는 시간이다. 스텝 1010에서, 현재 시간 tT 이상인지를 알기 위해 체크되며, 그렇다면 프로세싱은 스텝 1020으로 진행하는데, 이는 현재의 소스 블록에 대한 소스 심벌의 수신이 완료되었음을 의미하며, 따라서 BUFFER는 소스 블록에 대한 모든 소스 심벌을 포함하고 있으며 프로세싱은 스텝 1020에서 도 11에 나타낸 소스 최종 프로세스로 전달된다. 스텝 1010에서 tT 미만인 경우라면, 스텝 1040에서 tTNEXT 이상인지를 알기 위해 체크된다. 스텝 1040에서 이 테스트가 참이라면, 다음 소스 심벌을 전송할 때가 된 것이며, 따라서 프로세싱은 스텝 1080으로 전달된다. 스텝 1080에서, 아직 송신되지 않은 제일 먼저 수신된 소스 심벌을 송신하고, 송신된 소스 심벌의 개수 S를 하나씩 증가시키고, TLAST는 현재 시간으로 갱신되고 또한 TNEXTTLAST + (T' - u·TLAST) / (B - S)로 갱신되며, 이후에 프로세싱은 스텝 1010으로 루프백한다. 스텝 1040에서, 테스트가 거짓이라면, 스텝 1050에서 소스 심벌이 도래하였는지를 알기 위해 체크된다. 소스 심벌이 전혀 도래하지 않았다면, 프로세싱은 스텝 1010으로 루프백하지만, 소스 심벌이 도래하였다면, 프로세싱은 스텝 1060으로 계속된다. 스텝 1060에서, 도래한 소스 심벌은 BUFFER의 마지막에 첨부되고, B의 값을 하나씩 증가시키고, 또한 TNEXT는 소스 심벌의 수신에 기초하여 TLAST + (T' - u·TLAST) / (B - S)로 갱신되고 또한 이후에 프로세싱은 곧바로 스텝 1010으로 루프백한다.
도 11은 FEC 송신기 E에 대한 소스 최종 프로세스를 예시하고 있다. 도 11의 스텝 1105에서, TLAST의 값은 현재 시간 t(T 이상이지만 도 10의 스텝 1010에서의 테스트의 정밀도에 따라서 T에 매우 근접한다)로 초기화되며, TNEXTTLAST + (T' - u·T) / (B - S)로 초기화된다. TNEXT는 다음 소스 심벌이 송신되도록 스케 줄링되는 시간이다. 스텝 1110에서, 현재 시간 tT' + T / (1 + p)와 동일한지를 알기 위해 체크되며, 그렇다면 프로세싱은 스텝 1120으로 진행하는데, 이는 현재의 소스 블록에 대한 소스 심벌의 송신이 완료되었음을 의미하며, 프로세싱은 스텝 1120에서 도 12에 나타낸 소스 회복 프로세스로 전달된다. 스텝 1110에서 tT' + T / (1 + p)와 동일하지 않다면, 스텝 1130에서 tTNEXT와 동일한지를 알기 위해 체크된다. 스텝 1130에서 이 테스트가 참이라면, 다음 소스 심벌을 전송할 때가 된 것이며, 따라서 프로세싱은 스텝 1140으로 전달된다. 스텝 1140에서, 프로세싱이 스텝 1110으로 루프백되기 전에, 아직 송신되지 않은 제일 먼저 수신된 소스 심벌을 송신하고, 송신된 소스 심벌의 개수 S를 하나씩 증가시키고, TLAST는 현재 시간 t로 갱신되고 또한 TNEXTTLAST + (T' + T / (1 + p) - TLAST) / (B - S)로 갱신된다. 스텝 1130에서 테스트가 거짓이라면, 프로세싱은 곧바로 스텝 1110으로 루프백한다.
도 12는 FEC 송신기 E에 대한 회복 송신 프로세스를 예시하고 있다. 도 12의 스텝 1205에서, TLAST의 값은, 현재 시간 t(T' + T / (1 + p) 이상이지만 도 11의 스텝 1110에서의 테스트의 정밀도에 따라서 T' + T / (1 + p)에 매우 근접한다)로 초기화되고, TDELTAT / ((1 + pB)로 설정되며 또한 TNEXTTLAST + TDELTA로 초기화되며, 여기에서 TDELTA는 각각의 회복 심벌 사이의 시간 증분이고, TNEXT는 다음 회복 심벌이 송신되도록 스케줄링되는 시간이다. 스텝 1210에서, 현재 시간 tT' + T 이상인지를 알기 위해 체크되며, 그렇다면 프로세싱은 스텝 1220으로 진행하는데, 이는 현재의 소스 블록에 대한 회복 심벌의 송신이 완료되었 음을 의미하며, 따라서 현재의 소스 블록의 송신이 완료되었으며, 따라서 BUFFER는 후속하는 소스 블록용으로 재사용할 수 있게 된다. 스텝 1210에서 tT' + T 미만인 경우라면, 스텝 1230에서 tTNEXT 이상인지를 알기 위해 체크된다. 스텝 1230에서 이 테스트가 참이라면, 다음 회복 심벌을 전송할 때가 된 것이며, 따라서 프로세싱은 스텝 1240으로 전달된다. 스텝 1240에서, 프로세싱이 스텝 1210으로 루프백되기 전에, 신규 회복 심벌이 생성되고 또한 BUFFER 내에 저장된 소스 블록에 의거하여 소스 블록용으로 송신되며, 또한 TLASTTNEXT로 갱신되고 또한 TNEXTTLAST + TDELTA로 갱신된다. 스텝 1230에서, 테스트가 거짓이라면, 프로세싱은 곧바로 스텝 1210으로 루프백한다.
FEC 송신기 E에 대해서 기술한 프로세스와 함께 동시적으로 발생하는 다른 프로세스 및 계산이 있을 수 있다. 예를 들면, 회복 심벌의 생성을 준비하는 네 개의 프로세스 중의 하나 이상의 프로세스와 동시적으로 발생하는 BUFFER의 사전 처리가 있을 수 있으며, 또한 이 사전 처리된 BUFFER는 회복 프로세스의 스텝 1240에서의 회복 심벌을 생성하기 위한 근거로서 사용될 수 있다. 또한, 동일하거나 유사한 결과를 달성하기 위한 다른 동등한 프로세스, 예를 들면, 스텝 1240의 회복 프로세스에서 기술된 바와 같이, 회복 심벌을 송신하기 바로 직전에 생성하는 대신에 이들 회복 심벌을 송신할 때 미리 생성하는 프로세스가 있을 수 있다.
소스 블록 인터리빙
일부 FEC 코드는 임의의 실제 사이즈의 소스 블록에 대해서 효과적으로 코딩할 수 있으며, 또한 임의 사이즈의 심벌과 함께 효과적으로 동작할 수 있다. 그러 나, 다른 FEC 코드는 더 큰 소스 블록과 효과적으로 동작하도록 하는 것을 곤란하게 하는 실제적인 제한이 있다. 이는 특히 스트리밍 속도가 더 높은 경우 및/또는 심벌이 (예를 들면, 심벌을 반송하는 짧은 패킷의 사용으로 인해) 반드시 더 짧아야 하는 경우 및/또는 더 큰 보호 기간이 사용되는 경우에 문제가 된다.
일례로서, Reed-Solomon 코드는 256개 이상의 요소를 갖는 유한 장(finite field)에서 동작할 때 비실용적으로 될 수 있으며, 또한 256개의 유한 장에서 동작하면 소스 블록당의 인코딩 심벌의 개수가 257개로 제한된다. 이 경우에, 이 문제에 대한 하나의 해결책은 소스 블록을 인터리빙하는, 즉 혼합된 순서대로 서로 다른 소스 블록으로부터 심벌을 송신하는 것이다. 따라서, 전체적으로는, 상술한 절(節)에서 기술한 바와 같이, 소스 블록 사이에서 어떠한 인터리빙도 존재하지 않는 것이 바람직하지만, 일부 FEC 코드에 대해서, 소스 블록을 사용하기 위해서 및 소스 블록당 심벌의 개수가 FEC 코드용으로 실용적으로 되도록 하고, 이와 동시에 소스 블록에 대한 보호 기간이 해당 소스 블록에 대한 원래의 스트리밍 시간보다 더 길도록 하기 위해서는 인터리빙을 허용하는 것이 유용하다. 본 절에서는 소스 블록을 인터리빙하는 FEC 송신기의 몇 가지 바람직한 실시예를 제공한다.
일부 경우에 있어서, FEC 송신기가 서로 다른 소스 블록으로부터의 심벌의 송신을 인터리빙하여 각각의 소스 블록에 대한 심벌이 소스 블록에 대한 스트리밍 시간보다 더 긴 보호 기간에 걸쳐서 확산되도록 허용하면 장점이 있을 수 있다. 이렇게 하는 한 가지 이유는 시간 종속적인 손실(예를 들면, 버스트 손실)에 대해서 더욱 양호한 보호가 제공되는, 즉 소스 블록에 대한 보호 기간으로서 고정된 지 속 기간의 버스트 손실에 대한 보호를 제공하기 위해서 더 적은 보호량이 필요하기 때문이다. 소스 블록에 대한 원래의 스트리밍 시간이 t 초일 수 있으나, 소스 블록에 대한 바람직한 보호 기간은 p 초일 수 있으며, 여기에서 p > t이다. 인터리빙을 사용하는 FEC 송신기의 다른 바람직한 특성에는 (1) 소스 패킷이 원래의 순서대로 송신된다는 점, 및 (2) 각각의 후속하는 소스 블록용으로 최후의 인코딩 심벌이 수신되었을 때의 시간이 가능한 한 시간 내내 일정하게 확산된다는 점이 있다.
제 1 인터리빙 특성(소스 패킷이 원래의 순서대로 송신된다)은 각 종류의 수신기에 대해서 FEC 송신기에서 동반되는 대기 시간을 최소화시키며, 또한 FEC의 사용이 비(非)FEC 수신기에 대해서 대기 시간을 현저하게 추가하지도 않는다. 이는 또한 수신기가 스트림에 동조하였을 때의 FEC 수신기에 동반되는 대기 시간을 최소화, 즉 FEC 수신기가 먼저 패킷을 수신하기 시작할 때부터 이 FEC 수신기가 이용 가능한 패킷을 수신할 때까지 사이의 지연을 최소화한다.
제 2 인터리빙 특성(각각의 이어지는 소스 블록에 대한 최종 인코딩 심벌이 수신되는 시간이 시간 내내 가능한 한 일정하게 확산됨)은 CPU의 좀더 원활한 사용을 제공한다. 소스 블록에 대한 최종 인코딩 심벌이 수신되는 시간은 소스 블록을 디코딩하는 모든 정보가 FEC 디코더에 이용 가능한 시간이며, 전형적으로 이는 최악의 경우의 손실 조건에서 FEC 디코더가 규정된 디코딩 대기 시간 예산 내에서 디코딩을 종료하는데 가장 힘들게 작업해야 하는 시간이다. 따라서, 소스 블록에 대한 최종 인코딩 심벌의 수신을 일정하게 확산하는 것은 FEC 디코딩을 위해 CPU의 보다 원활한 사용을 허용한다.
본 설명에서, 많은 일례들은 FEC 송신기가 패킷으로 심벌을 전송하는 것으로 가정하며, 여기서 각 패킷은 상이한 수의 심벌을 포함할 수 있다. 아래의 설명을 간략화하기 위해서, 원래의 소스 스트림 내의 소스 패킷 순서가 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 등이고, 값은 패킷의 인덱스를 표시한다고 가정한다.
임의 시점에서 활성화된 s 소스 블록 및 소스 블록당 k 소스 패킷이 존재한다고 가정한다(간략화된 본 설명에서 모든 소스 패킷을 동일한 길이로 가정함). 아래의 FEC 송신기는 소스 블록이 소스 패킷으로부터 형성되는 방법과 소스 패킷이 송신되는 순서를 설명한다. 소스 블록에 대한 회복 패킷은 전후에 송신되거나 또는 소스 블록에 대한 소스 패킷과 서로 혼합될 수 있고, 본원에서 설명되는 바와 같이 상이한 전략에 대한 이점이 있다.
FEC 송신기 F: 송신 패턴은 각각의 n = s·k 패킷을 반복하는데, 식 중 n은 보호 기간 내의 소스 패킷의 수이다. 따라서, 이는 k 소스 패킷 각각의 s 소스 블록으로 분할된 보호 기간 내의 n 소스 패킷으로서 생각될 수 있다. 소스 패킷에 대한 송신 순서는 원래의 송신 순서이다. i=0, ..., s-1에 대하여, i번째 소스 블록은 소스 패킷 i, s+1, 2s+i, ..., (k-1)·s+i를 포함한다. 각 소스 블록에 대한 회복 패킷은 소스 패킷과 동일한 순서로 인터리빙되는데, 즉, 각 소스 블록에 대한 제 1 회복 패킷은 각 소스 블록에 대한 제 2 회복 패킷이 송신되기 전에 송신된다. 각각 6 소스 패킷의 3 소스 블록을 갖는 일례(따라서 보호 기간은 지속기간 중 18 소스 패킷임)는 다음과 같다:
소스 블록 0은 소스 패킷 0, 3, 6, 9, 12, 15를 포함하고
소스 블록 1은 소스 패킷 1, 4, 7, 10, 13, 16을 포함하고
소스 블록 2는 소스 패킷 2, 5, 8, 11, 14, 17을 포함한다.
FEC 송신기 F는 제 1 인터리빙 특성을 만족시키지만 제 2 인터리빙 특성을 만족시키지 않는다. 제 1 인터리빙 특성은 소스 패킷의 송신 순서가 원래의 송신 순서이기 때문에 간단히 만족된다. FEX 송신기 F가 제 2 인터리빙 특성을 만족시키는 이유를 알기 위해서, 연속 소스 패킷 0, 1, 2는 각각 소스 블록 0, 1, 2으로부터 나오고, 따라서 3개의 소스 블록에 대한 디코딩 시간은 연속 패킷을 초과하는데, 즉 소스 블록의 이 인터리빙에 대한 디코딩 시간은 반복 패턴인 것이 주목된다: "1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...". 이 패턴에서, 각 엔트리는 패킷의 수신을 표시하고, 1은 이것이 소스 블록 중 하나에 대한 디코드 시간임을 표시한다. 이 패턴으로부터 알 수 있는 바와 같이, 디코드 시간은 산발적이며 일정하게 확산되지 않고, 따라서 이 일례로부터 FEC 송신기 F가 위의 제 2 인터리빙 특성을 만족시키지 않는다는 것을 알 수 있다.
FEC 송신기 G: 송신 패턴은 각각의 n = s·k 패킷을 반복하는데, 식 중 n은 보호 기간 내의 소스 패킷의 수이다. 따라서, 이는 k 소스 패킷 각각의 s 소스 블록으로 분할된 보호 기간 내의 n 소스 패킷으로서 생각될 수 있다. 소스 패킷에 대한 송신 순서는 0, k, 2k, ..., (s-1)·k, 1, k+1, 2k+1, ..., (s-1)·k+1, ..., k-1, 2k-1, 3k-1, ..., s·k-1이다. i=0,...,s-1에 대하여, i번째 소스 블록은 소 스 패킷 k·i, k·i+1, k·i+2, ..., k·i+k-1을 포함한다. 각 소스 블록에 대한 회복 패킷은 소스 패킷과 동일한 순서로 인터리빙되는데, 즉, 각 소스 블록에 대한 제 1 회복 패킷은 각 소스 블록에 대한 제 2 회복 패킷이 송신되기 전에 송신된다. 각각 6 소스 패킷의 3 소스 블록을 갖는 일례(따라서 보호 기간은 지속기간 중 18 소스 패킷임)는 다음과 같다:
소스 블록 0은 소스 패킷 0, 1, 2, 3, 4, 5를 포함하고
소스 블록 1은 소스 패킷 6, 7, 8, 9, 10, 11을 포함하고
소스 블록 2는 소스 패킷 12, 13, 14, 15, 16, 17을 포함한다.
소스 패킷의 송신 순서는 다음과 같다: 0, 6, 12, 1, 7, 13, 2, 8, 14, 3, 9, 15, 4, 10, 16, 5, 11, 17.
FEC 송신기 G는 제 1 인터리빙 특성을 만족시키지 않지만 제 2 인터리빙 특성을 만족시킨다. 제 1 인터리빙 특성은 소스 패킷의 송신 순서가 원래의 송신 순서가 아니기 때문에 단순히 만족되지 않는다. FEX 송신기 G가 제 2 인터리빙 특성을 만족시키는 이유를 알기 위해서, 3개의 소스 블록에 대한 디코드 시간은 패킷에 대하여 일정하게 확산되는데, 즉 소스 블록의 이 인터리빙에 대한 디코딩 시간은 반복 패턴인 것이 주목된다: 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0.... 이 패턴에서, 각 엔트리는 패킷의 수신을 표시하고, 1은 이것이 소스 블록 중 하나에 대한 디코드 시간임을 표시한다. 이 패턴으로부터 알 수 있는 바와 같이, 디코드 시간은 일정하게 확산되고, 따라서 이 일례로부터 FEC 송신기 G가 위의 제 2 인터리빙 특성을 만족시킨다는 것을 알 수 있다.
제 1 인터리빙 특성과 제 2 인터리빙 특성 모두를 동시에 만족시키는 인터리빙된 FEC 송신기의 다음의 실시예에 대하여, 각각의 소스 블록마다 앞선 단락에서 설명된 단일 소스 블록 FEC 송신기의 바람직한 실시예가 각 소스 블록에 대한 심벌을 송신하는 시기를 결정하는데 사용된다고 가정한다.
FEC 송신기 H: 소스 패킷에 대한 송신 순서는 원래의 송신 순서이다. 이 FEC 송신기를 설명하기 위해, 소스 패킷은 s 열을 갖는 행렬의 행에 순차 개념적으로 배치하고 나서, i=0,...,s-1에 대하여, 열 in을 법으로 한(modulo) i, s+1, 2s+i,...,(k-1)·s+i 중 어느 것에 부합되는 인덱스를 갖는 소스 패킷을 포함한다.
소스 블록은 열 내의 소스 패킷의 연속 시퀀스로부터 형성된다. 열 i의 제 1 소스 블록은 인덱스 i를 갖는 소스 패킷으로부터 개시한다. 열 i 내의 각각의 이어지는 소스 블록은 항상 인덱스 플로 (k·i/ss+i mod n을 갖는 소스 패킷으로부터 개시하고, 따라서 열 i 내의 제 1 소스 블록을 제외한 모두는 k 소스 패킷을 포함한다. 각 소스 블록에 대한 회복 패킷은 소스 패킷과 동일한 순서로 인터리빙되는데, 즉 열 i 내의 주어진 소스 블록에 대한 모든 회복 패킷은 열 i 내의 이어지는 소스 블록에 대한 임의의 회복 패킷 전에 송신된다. 각각 6 소스 패킷의 3 소스 블록을 갖는 일례(따라서 보호 기간은 지속기간 중 18 소스 패킷임)는 다음과 같다:
위에서 설명한 행렬은 아래와 같다:
Figure 112008001568956-PCT00006
따라서, 열 0의 제 1 소스 블록은 소스 패킷 0, 3, 6, 9, 12, 15를 포함하고, 열 1의 제 1 소스 블록은 소스 패킷 1, 4를 포함하고, 열 1의 제 2 소스 블록은 소스 패킷 7, 10, 13, 16, 19, 22를 포함하고, 열 2의 제 1 소스 블록은 2, 5, 8, 11을 포함하고, 열 2의 제 2 소스 블록은 소스 패킷 14, 17, 20, 23, 26, 29를 포함한다.
FEC 송신기 H는 제 1 인터리빙 특성과 제 2 인터리빙 특성 모두를 만족시킨다. 제 1 인터리빙 특성은 소스 패킷의 송신 순서가 원래의 송신 순서이기 때문에 간단히 만족된다. FEX 송신기 H가 제 2 인터리빙 특성을 만족시키는 이유를 알기 위해서, 소스 블록의 이 인터리빙에 대한 디코딩 시간이 반복 패턴인 것이 주목된다: "1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0". 이 패턴에서, 각 엔트리는 소스 패킷의 수신을 표시하고, 1은 이것이 소스 블록 중 하나에 대한 디코드 시간임을 표시한다. 이 패턴으로부터 알 수 있는 바와 같이, 디코드 시간은 가능한 한 일정하게 확산되고, 따라서 이 일례로부터 FEC 송신기 F가 위의 제 2 인터리빙 특성을 만족시킨다는 것을 알 수 있다.
위의 특성 (1) 및 (2)를 만족시키고 본 개시내용을 독해한 후 찾을 수 있는 FEC 송신기 H의 많은 변형들이 존재한다. 예를 들면, 상술한 FEC 송신기 H는 스트림 내의 모든 소스 패킷이 동일한 사이즈인 경우와 소스 패킷의 스트리밍 속도가 일정한 경우에 양호하게 작동한다. 아래에 설명되는 FEC 송신기 I는 소스 패킷이 가변 길이이고 또는 소스 패킷의 스트리밍 속도가 일정하지 않은 경우에 양호하게 작동하는 FEC 송신기 H의 변형이다.
FEC 송신기 I: 소기의 보호 기간이 t초이고, 임의의 시점에서 s 활성 소스 블록이 존재한다고 가정한다. 도 13을 참조하여 프로세스를 설명한다. 도 13의 스텝 1305에서, z = t/s는 한 소스 블록의 종료와 또 다른 블록의 개시 사이의 초의 시간 증가이도록 설정되고 바이트 카운터(B0, B1, ..., Bs-1)는 모두 0으로 초기화된다. 스텝 1310에서 변수 i는 0으로 초기화되고 현재 시간은 0으로 초기화되며, 여기서 i는 소스 블록이 다음 것을 종료하는 트랙을 유지하는데 이용되고 현재 시간은 소스 블록을 종료하는 시기의 트랙을 유지하는데 이용된다. 스텝 1314에서 현재 시간은 FEC 송신기에서 클록을 사용하여 갱신되고, 스텝 1310에서 원래 0으로 설정된 시간으로부터 경과된 시간량에 따라 증가된다. 스텝 1318에서 현재 시간이 z보다 작은지를 알기 위해 체크되고, 이것이 사실이면, 프로세싱은 다음의 소스 패킷이 이용 가능한지를 알기 위해 스텝 1320으로 계속된다. 이용 가능한 소스 패킷이 존재하지 않으면 프로세싱은 스텝 1314로 귀환하지만, 이용 가능한 다음의 소스 패킷이 존재하면 스텝 1330에서 다음의 소스 패킷은 허용되고 X는 바이트의 사이즈이다. 스텝 1340에서 인덱스 j는 Bj가 최소이도록 계산된다. 스텝 1350에서 막 허 용된 소스 패킷은 소스 블록 j에 부가되고, 스텝 1360에서 값 Bj는 이 소스 패킷의 사이즈 X만큼 증가되고, 프로세싱은 스텝 1314로 귀환한다. 대신에 스텝 1318에서 현재 시간이 적어도 z이면 스텝 1370에서 값 z는 t/s만큼 증가되고 스텝 1380에서 값 i는 활성 소스 블록의 수 s를 법으로 한(modulo) 1 만큼 증가되고, 스텝 1390에서 인덱스 i를 갖는 현재 소스 블록은 종료되고 인덱스 i를 갖는 새로운 소스 블록이 개시되고 나서, 프로세싱은 스텝 1314로 귀환한다.
이 프로세스가 작용하는 방법의 일례로써, t=6 및 s=3이면, t/s=2이다. 첫번째 2초 내에 수신된 소스 패킷이 다음과 같으면,
크기가 500 바이트인 소스 패킷 0.
크기가 750 바이트인 소스 패킷 1.
크기가 400 바이트인 소스 패킷 2.
크기가 490 바이트인 소스 패킷 3.
크기가 700 바이트인 소스 패킷 4.
또한 동일한 최소값을 갖는 바이트 카운터가 한개보다 많이 존재하면 가장 작은 인덱스를 갖는 바이트 카운터는 가장 작은 것으로 고려된다. 그러면, 소스 패킷 0은 소스 블록 0 및 B0=500에 부가되고, 소스 패킷 1은 소스 블록 1 및 B1=750에 부가되고, 소스 패킷 2는 소스 블록 2 및 B2=400에 부가되고, 소스 패킷 3은 소스 블록 2 및 B2=890에 부가되고, 소스 패킷 4는 소스 블록 0 및 B0=1200에 부가된다.
동일한 일례에서 시작하여, 현재 시간이 2초에 도달하면 소스 블록 1은 종료되고 사이즈 750 바이트의 소스 패킷 1만을 포함하며, 새로운 소스 블록 1이 개시된다. 다음은 이어지는 2초간 송신기에의 소스 패킷 도래의 시퀀스를 설명하는 것이라고 가정한다.
크기가 500 바이트인 소스 패킷 5.
크기가 380 바이트인 소스 패킷 6.
크기가 400 바이트인 소스 패킷 7.
크기가 600 바이트인 소스 패킷 8.
크기가 700 바이트인 소스 패킷 9.
크기가 400 바이트인 소스 패킷 10.
크기가 350 바이트인 소스 패킷 11.
크기가 800 바이트인 소스 패킷 12.
크기가 200 바이트인 소스 패킷 13.
크기가 500 바이트인 소스 패킷 14.
이 시점에서, 소스 블록 2는 종료되고 총 2770 바이트의 소스 패킷, 즉 소스 패킷 2, 3, 6, 9, 12에 포함되고, 새로운 소스 블록 2가 개시된다.
소스 패킷의 다음 시퀀스가 이어지는 2초간 송신기에 도래한다고 가정한다.
크기가 350 바이트인 소스 패킷 15.
크기가 500 바이트인 소스 패킷 16.
크기가 450 바이트인 소스 패킷 17.
크기가 800 바이트인 소스 패킷 18.
크기가 650 바이트인 소스 패킷 19.
크기가 400 바이트인 소스 패킷 20.
크기가 600 바이트인 소스 패킷 21.
크기가 350 바이트인 소스 패킷 22.
크기가 200 바이트인 소스 패킷 23.
크기가 600 바이트인 소스 패킷 24.
이 시점에서, 소스 블록 0은 종료되고 총 4150 바이트의 소스 패킷, 즉 소스 패킷 0, 4, 7, 10, 13, 14, 17, 20 및 21에 포함되고, 새로운 소스 블록 0이 개시된다.
FEC 송신기 I는 각 열에 할당된 소스 패킷의 바이트 총수가 각 시점에서 가능한 한 동일하고, 소스 블록에 대한 디코드 시간이 z=t/s의 간격에서 시간 내내 동일하게 확산되는 특성을 갖는다. 소스 패킷 속도가 일정하고 소스 패킷 사이즈가 모두 동일하면 FEC 송신기 I이 FEC 송신기 H와 동일한 솔루션을 필수적으로 제공하는 것이 주목된다. 예를 들면, 위의 일례에서 2초마다 6개의 소스 패킷이 존재하고 모든 소스 패킷의 사이즈가 1,000 바이트이면 FEC 송신기 I은 다음의 행렬을 산출한다:
Figure 112008001568956-PCT00007
본 일례에서 각 소스 블록 내의 소스 패킷의 수가 6이고, 인터리빙 패턴이 위의 FEC 송신기 H에 대한 인터리빙 일례의 단순한 시프트인 것이 주목된다.
본 발명이 예시적인 실시예들에 관하여 설명했지만, 당업자는 수많은 변형이 가능하다는 것을 알 것이다. 예를 들면, 본원에서 설명되는 프로세스는 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 이들의 임의 조합을 사용하여 구현될 수 있다. 따라서, 본 발명이 예시적인 실시예들에 관하여 설명되었지만, 본 발명이 다음의 청구범위 내에서 모든 변형 및 동등물을 포함하는 것으로 의도됨을 이해할 것이다.

Claims (17)

  1. 인코더로부터 채널을 통하여 수신된 수신 심벌로부터 데이터를 디코딩하는 데이터 디코더에서, 수신된 데이터는 소거를 포함할 수 있고 소스(source) 심벌과 회복(repair) 심벌을 포함하며, 상기 디코더는 디코딩 시에 생성 행렬을 사용하고, 상기 디코더가 상기 소스 심벌과 회복 심벌의 도래와 동시에 디코딩 동작을 수행할 수 있도록, 상기 생성 행렬의 임의의 정방 부분행렬은 가역인 것인, 상기 디코더에서의 디코딩 방법에 있어서,
    적어도 부분적으로 상기 생성 행렬로부터 유도된 연립 방정식을 디코더 메모리에 나타내는 단계와,
    모든 소스 심벌을 수신하기 전에 상기 소스 심벌이 수신됨에 따라 수신된 소스 심벌을 상기 연립 방정식 내에 치환하는 단계와,
    디코더 논리를 사용하여, 회복 심벌이 도래함에 따라 상기 연립 방정식을 해결하는데 사용되는 회복 방정식을 식별하는 단계와,
    디코더 논리를 사용하여, 소스 심벌이 도래함에 따라 연립 방정식에 대한 벡터 값을 계산하는 단계와,
    회복 심벌이 디코더에 도래함에 따라 상기 연립 방정식을 위삼각행렬식(upper triangular form)으로 변환하는 단계
    를 포함하는 디코딩 방법.
  2. 제 1 항에 있어서, 상기 소스 심벌과 디코딩 동작이 적절히 수행되기 전에 상기 디코더에서 코드의 상기 회복 심벌이 수신되는 것인, 디코딩 방법.
  3. 제 1 항에 있어서, 2차원 Reed-Solomon 코드가 적용되기 전에 인코더에서 소스 심벌에 순열(permutation)이 적용되는 것인, 디코딩 방법.
  4. 제 3 항에 있어서, 상기 순열은 랜덤 또는 의사 랜덤인 것인, 디코딩 방법.
  5. 제 3 항에 있어서, 상기 순열은 원래 배열 내의 2개의 인접한 심벌이 상기 코드의 동일한 행 또는 열에 나타나지 않는 것인, 디코딩 방법.
  6. 제 5 항에 있어서, 상기 순열이 2개의 순열 σ1, σ2로부터 유도되어 소스 블록 내의 위치(i,j)의 심벌 s[i,j]은 2개의 순열을 통해서 매핑되고 치환된 소스 블록 내의 위치(i,j)에서의 심벌 s'[i,j]은 s'[i,j] = s[(σ1(j) + σ2(j)) % k,j]를 만족시키며, 식 중 k는 상기 코드의 행 또는 열의 개수인 것인, 디코딩 방법.
  7. 제 1 항에 있어서, 상기 생성 행렬은 생성 행렬의 행마다 생성되는 하나 이상의 회복 심벌로 증대된 코드에 대한 생성 행렬인 것인, 디코딩 방법.
  8. 제 1 항에 있어서, 상기 생성 행렬은 그룹 정규 LDGM, 비정규 LDGM, 정규 LDGM 계단, 비정규 LDGM 계단, 정규 LDGM 삼각형, 비정규 LDGM 삼각형, 정규 Copper, 비정규 Copper의 코드, 또는 파운틴 코드(fountain code)에 대한 생성 행렬인 것인, 디코딩 방법.
  9. 제 1 항에 있어서, 상기 생성 행렬은 에러 보정 코드에 대한 생성 행렬인 것인, 디코딩 방법.
  10. 제 1 항에 있어서, 상기 생성 행렬은 에러 보정 코드 및 소거 코드에 대한 생성 행렬인 것인, 디코딩 방법.
  11. 채널을 통해서 송신될 데이터를 인코딩하는 데이터 인코더에서, 소스 심벌 및 회복 심벌을 포함하는 인코딩된 데이터를 생성하는 방법으로서, 상기 소스 심벌은 인코딩되는 데이터를 나타내고 상기 회복 심벌은 소스 심벌 손실에 관한 정보를 복구하는데 사용할 수 있으며, 상기 소스 심벌은 정렬된 복수의 소스 심벌로서 인코딩될 데이터를 나타내는 것인, 상기 인코딩된 데이터를 생성하는 방법에 있어서,
    생성 행렬이 나타내는 코드에 대한 생성 행렬을 획득하여 상시 소스 심벌로부터 상기 회복 심벌을 인코딩하는 단계와,
    적어도 일부의 상기 소스 심벌을 판독하는 단계와,
    정렬된 복수의 소스 심벌 내의 소스 심벌의 순서에 대응하는 인코딩된 세트 의 순서로 인코딩된 세트 내의 인코딩된 심벌로서 상기 적어도 일부의 소스 심벌을 포함하는 단계와,
    하나 이상의 재정렬 규칙의 세트에 따라 상기 소스 심벌을 재정렬하여 재정렬된 세트의 소스 심벌들을 형성하는 단계와,
    상기 생성 행렬을 상기 재정렬된 세트의 소스 심벌들에 적용하여 회복 심벌의 세트를 형성하는 단계와,
    상기 인코딩된 세트를 상기 인코딩된 데이터 및 상기 회복 심벌의 세트로서 출력하는 단계
    를 포함하는 인코딩된 데이터의 생성 방법.
  12. 제 11 항에 있어서, 상기 출력 단계는 상기 판독, 재정렬, 및 적용 단계를 완료한 후에만 발생하는 것인, 인코딩 데이터의 생성 방법.
  13. 제 11 항에 있어서, 상기 인코딩된 세트를 출력하는 단계는 상기 적용 단계를 완료하기 이전에 발생하는 것인, 인코딩 데이터의 생성 방법.
  14. 제 11 항에 있어서, 상기 재정렬 규칙은, 상기 데이터 인코더에 알려져 있고 데이터 인코더에서 결정할 수 있는 의사 랜덤 시퀀스에 따른 재정렬을 포함하는 것인, 인코딩 데이터의 생성 방법.
  15. 제 11 항에 있어서, 상기 재정렬된 세트의 소스 심벌들은 물리적으로 재정렬된 세트의 심벌인 것인, 인코딩 데이터의 생성 방법.
  16. 제 11 항에 있어서, 상기 재정렬된 세트의 소스 심벌은, 재정렬 이전에 메모리에 저장된 심벌들이 변경된 메모리 위치로 이동 또는 복사될 필요가 없도록, 논리적으로 재정렬된 세트의 심벌들인 것인, 인코딩 데이터의 생성 방법.
  17. 제 11 항에 있어서, 상기 생성 행렬을 적용하는 단계는 상기 소스 심벌이 원래의 순서와는 상이한 순서를 취하도록 이루어진다는 점에서, 상기 재정렬된 세트의 소스 심벌들이 재정렬되는 것인, 인코딩 데이터의 생성 방법.
KR1020087000525A 2005-06-10 2006-06-12 순방향 오류 정정 코딩 및 스트리밍 KR101184242B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US68933305P 2005-06-10 2005-06-10
US60/689,333 2005-06-10
PCT/US2006/022913 WO2006135877A2 (en) 2005-06-10 2006-06-12 Forward error-correcting (fec) coding and streaming

Publications (2)

Publication Number Publication Date
KR20080027825A true KR20080027825A (ko) 2008-03-28
KR101184242B1 KR101184242B1 (ko) 2012-09-21

Family

ID=37532888

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087000525A KR101184242B1 (ko) 2005-06-10 2006-06-12 순방향 오류 정정 코딩 및 스트리밍

Country Status (6)

Country Link
US (1) US7676735B2 (ko)
EP (1) EP1908171A4 (ko)
JP (3) JP5123174B2 (ko)
KR (1) KR101184242B1 (ko)
CN (1) CN101432969B (ko)
WO (1) WO2006135877A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102009014910A1 (de) 2008-03-26 2009-10-08 Lg Electronics Inc. Leder-/Textilwaren-Behandlungsmaschine

Families Citing this family (88)

* Cited by examiner, † Cited by third party
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
US9240810B2 (en) 2002-06-11 2016-01-19 Digital Fountain, Inc. Systems and processes for decoding chain reaction codes through inactivation
EP2357732B1 (en) 2002-10-05 2022-04-06 QUALCOMM Incorporated Systematic encoding and decoding of chain reaction codes
KR101170629B1 (ko) 2003-10-06 2012-08-02 디지털 파운튼, 인크. 단일 송신기 또는 다중 송신기를 갖는 통신 시스템의 에러 정정 다중-스테이지 코드 생성기 및 디코더
EP1743431A4 (en) 2004-05-07 2007-05-02 Digital Fountain Inc SYSTEM FOR DOWNLOADING AND RECORDING AND CONTINUOUS READING OF FILES
US8140699B2 (en) * 2005-02-23 2012-03-20 Cisco Technology, Inc. Switching a client from unicasting to multicasting by simultaneously providing unicast and multicast streams to the client
WO2006091736A2 (en) * 2005-02-23 2006-08-31 Arroyo Video Solutions, Inc. Fast channel change with conditional return to multicasting
US8713195B2 (en) 2006-02-10 2014-04-29 Cisco Technology, Inc. Method and system for streaming digital video content to a client in a digital video network
US9136983B2 (en) 2006-02-13 2015-09-15 Digital Fountain, Inc. Streaming and buffering using variable FEC overhead and protection periods
US9270414B2 (en) 2006-02-21 2016-02-23 Digital Fountain, Inc. Multiple-field based code generator and decoder for communications systems
US7965771B2 (en) * 2006-02-27 2011-06-21 Cisco Technology, Inc. Method and apparatus for immediate display of multicast IPTV over a bandwidth constrained network
US8218654B2 (en) 2006-03-08 2012-07-10 Cisco Technology, Inc. Method for reducing channel change startup delays for multicast digital video streams
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
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
US9380096B2 (en) 2006-06-09 2016-06-28 Qualcomm Incorporated Enhanced block-request streaming system for handling low-latency streaming
US9178535B2 (en) * 2006-06-09 2015-11-03 Digital Fountain, Inc. Dynamic stream interleaving and sub-stream based delivery
US20100211690A1 (en) * 2009-02-13 2010-08-19 Digital Fountain, Inc. Block partitioning for a data stream
US9386064B2 (en) 2006-06-09 2016-07-05 Qualcomm Incorporated Enhanced block-request streaming using URL templates and construction rules
US9432433B2 (en) 2006-06-09 2016-08-30 Qualcomm Incorporated Enhanced block-request streaming system using signaling or block creation
US8006160B2 (en) 2006-06-29 2011-08-23 Digital Fountain, Inc. Efficient encoding and decoding methods for representing schedules and processing forward error correction codes
KR101154995B1 (ko) * 2006-07-14 2012-06-15 엘지전자 주식회사 Ldpc 부호화를 수행하는 방법
US8031701B2 (en) 2006-09-11 2011-10-04 Cisco Technology, Inc. Retransmission-based stream repair and stream join
US7937531B2 (en) * 2007-02-01 2011-05-03 Cisco Technology, Inc. Regularly occurring write back scheme for cache soft error reduction
US8769591B2 (en) 2007-02-12 2014-07-01 Cisco Technology, Inc. Fast channel change on a bandwidth constrained network
US7940644B2 (en) * 2007-03-14 2011-05-10 Cisco Technology, Inc. Unified transmission scheme for media stream redundancy
US20080253369A1 (en) 2007-04-16 2008-10-16 Cisco Technology, Inc. Monitoring and correcting upstream packet loss
US8407552B2 (en) * 2007-06-19 2013-03-26 France Telecom Method based on error corrector codes, applicable to a variable rate multimedia datastream
US9564988B2 (en) * 2007-07-26 2017-02-07 The Directv Group, Inc. Method and system for forming a formatted content stream and using a cyclic redundancy check
JP5075536B2 (ja) 2007-09-03 2012-11-21 株式会社東芝 Fec送信処理装置、ならびにfec送信処理のための方法およびプログラム
AU2008298602A1 (en) 2007-09-12 2009-03-19 Digital Fountain, Inc. Generating and communicating source identification information to enable reliable communications
CN101868785B (zh) * 2007-09-21 2014-09-24 惠普开发有限公司 生成数据存储系统的并行恢复策略
EP2088708A1 (en) * 2008-02-08 2009-08-12 Thomson Licensing Method for transmitting data packets with forward error correction
US8787153B2 (en) * 2008-02-10 2014-07-22 Cisco Technology, Inc. Forward error correction based data recovery with path diversity
US8477830B2 (en) 2008-03-18 2013-07-02 On-Ramp Wireless, Inc. Light monitoring system using a random phase multiple access system
US8520721B2 (en) 2008-03-18 2013-08-27 On-Ramp Wireless, Inc. RSSI measurement mechanism in the presence of pulsed jammers
US8958460B2 (en) * 2008-03-18 2015-02-17 On-Ramp Wireless, Inc. Forward error correction media access control system
US8327216B2 (en) * 2008-10-22 2012-12-04 Samsung Electronics Co., Ltd. Single-stage decoder for raptor codes
WO2010047462A1 (ko) * 2008-10-22 2010-04-29 삼성전자 주식회사 랩터 코드를 위한 싱글 스테이지 디코더와 이를 이용한 심볼 복원 방법 및 무선 통신 장치
US9281847B2 (en) * 2009-02-27 2016-03-08 Qualcomm Incorporated Mobile reception of digital video broadcasting—terrestrial services
US8363699B2 (en) 2009-03-20 2013-01-29 On-Ramp Wireless, Inc. Random timing offset determination
US8504847B2 (en) * 2009-04-20 2013-08-06 Cleversafe, Inc. Securing data in a dispersed storage network using shared secret slices
US9288010B2 (en) 2009-08-19 2016-03-15 Qualcomm Incorporated Universal file delivery methods for providing unequal error protection and bundled file delivery services
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
US20110096828A1 (en) * 2009-09-22 2011-04-28 Qualcomm Incorporated Enhanced block-request streaming using scalable encoding
US9136981B2 (en) * 2010-03-03 2015-09-15 Qualcomm Incorporated Block aggregation of objects in a communication system
US20110280311A1 (en) 2010-05-13 2011-11-17 Qualcomm Incorporated One-stream coding for asymmetric stereo video
US9485546B2 (en) 2010-06-29 2016-11-01 Qualcomm Incorporated Signaling video samples for trick mode video representations
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
US20120208580A1 (en) * 2011-02-11 2012-08-16 Qualcomm Incorporated Forward error correction scheduling for an improved radio link protocol
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
KR102028948B1 (ko) * 2011-11-08 2019-10-17 삼성전자주식회사 멀티미디어 통신 시스템에서 어플리케이션 계층-순방향 오류 정정 패킷 송/수신 장치 및 방법
CN108600786A (zh) * 2011-11-30 2018-09-28 三星电子株式会社 用于发送/接收广播数据的装置和方法
US8914706B2 (en) 2011-12-30 2014-12-16 Streamscale, Inc. Using parity data for concurrent data authentication, correction, compression, and encryption
US8683296B2 (en) 2011-12-30 2014-03-25 Streamscale, Inc. Accelerated erasure coding system and method
KR102027916B1 (ko) 2012-02-27 2019-10-02 삼성전자주식회사 순방향 오류정정스킴을 사용하는 패킷 송수신 장치 및 방법
US8972815B1 (en) * 2012-03-20 2015-03-03 Xilinx, Inc. Recovery of media datagrams
US9294226B2 (en) 2012-03-26 2016-03-22 Qualcomm Incorporated Universal object delivery and template-based file delivery
KR101961736B1 (ko) * 2012-04-23 2019-03-25 삼성전자 주식회사 통신 시스템에서 패킷 송수신 장치 및 방법
KR20130126876A (ko) * 2012-04-30 2013-11-21 삼성전자주식회사 통신 시스템에서 패킷 송수신 방법 및 장치
US10148285B1 (en) 2012-07-25 2018-12-04 Erich Schmitt Abstraction and de-abstraction of a digital data stream
JP2014093584A (ja) * 2012-11-01 2014-05-19 Sony Corp 送信装置、送信方法、受信装置、受信方法およびコンピュータプログラム
EP2920963A4 (en) * 2012-11-14 2016-07-06 California Inst Of Techn CODING FOR REAL-TIME STREAMING UNDER PACKAGE DELETIONS
KR101710025B1 (ko) * 2013-01-24 2017-02-24 캘리포니아 인스티튜트 오브 테크놀로지 재기록 불능 메모리에서의 결합 재기록 및 에러 정정
JP6294346B2 (ja) * 2013-11-15 2018-03-14 株式会社日立製作所 通信装置及びシステム及び方法
JP5671124B1 (ja) * 2013-12-11 2015-02-18 日本電信電話株式会社 前方誤り訂正情報生成装置、前方誤り訂正情報生成方法、および前方誤り訂正情報生成プログラム
TWI523465B (zh) * 2013-12-24 2016-02-21 財團法人工業技術研究院 檔案傳輸系統和方法
CN103793197B (zh) * 2013-12-27 2017-02-08 天津航天中为数据系统科技有限公司 一种喷泉码编译码方法及装置
US10795858B1 (en) 2014-02-18 2020-10-06 Erich Schmitt Universal abstraction and de-abstraction of a digital data stream
GB201404535D0 (en) * 2014-03-14 2014-04-30 Nat Univ Ireland Low-delay packet erasure coding
KR102127641B1 (ko) * 2014-06-20 2020-06-30 삼성전자주식회사 응용 계층 순방향 오류 정정 방식을 사용하여 제공되는 방송 서비스의 수신을 제어하는 방법 및 장치
WO2017061891A1 (en) * 2015-10-09 2017-04-13 Huawei Technologies Co., Ltd. Coding for distributed storage system
US10142049B2 (en) 2015-10-10 2018-11-27 Dolby Laboratories Licensing Corporation Near optimal forward error correction system and method
US10164738B2 (en) * 2015-12-16 2018-12-25 Qualcomm Incorporated Interlacing method for high throughput forward error correction
US10110256B2 (en) * 2016-09-16 2018-10-23 Micron Technology, Inc. Apparatuses and methods for staircase code encoding and decoding for storage devices
CN108667557B (zh) * 2017-03-29 2021-04-02 上海交通大学 一种基于媒体内容的自适应fec编码矩阵设计方法
WO2018187902A1 (en) * 2017-04-10 2018-10-18 Qualcomm Incorporated An efficient interleaver design for polar codes
US10594661B1 (en) * 2017-06-13 2020-03-17 Parallels International Gmbh System and method for recovery of data packets transmitted over an unreliable network
EP3457601B1 (en) * 2017-09-13 2019-12-25 Siemens Aktiengesellschaft A method for sending digital data over a number of channels
KR101870750B1 (ko) * 2017-12-28 2018-06-26 오픈스택 주식회사 패킷 전송 순서 재배열을 이용한 영상 인코딩 장치 및 그 동작 방법
CN111858128B (zh) * 2019-04-26 2023-12-29 深信服科技股份有限公司 一种纠删码数据修复方法、装置、设备及存储介质

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5136592A (en) * 1989-06-28 1992-08-04 Digital Equipment Corporation Error detection and correction system for long burst errors
EP0543070A1 (en) * 1991-11-21 1993-05-26 International Business Machines Corporation Coding system and method using quaternary codes
JP2576776B2 (ja) * 1993-11-10 1997-01-29 日本電気株式会社 パケット伝送方法・パケット伝送装置
JP3614907B2 (ja) * 1994-12-28 2005-01-26 株式会社東芝 データ再送制御方法及びデータ再送制御システム
US5983383A (en) * 1997-01-17 1999-11-09 Qualcom Incorporated Method and apparatus for transmitting and receiving concatenated code data
EP0903955A1 (en) * 1997-09-04 1999-03-24 STMicroelectronics S.r.l. Modular architecture PET decoder for ATM networks
US7068729B2 (en) * 2001-12-21 2006-06-27 Digital Fountain, Inc. Multi-stage code generator and decoder for communication systems
US6307487B1 (en) * 1998-09-23 2001-10-23 Digital Fountain, Inc. Information additive code generator and decoder for communication systems
IT1303735B1 (it) 1998-11-11 2001-02-23 Falorni Italia Farmaceutici S Acidi ialuronici reticolati e loro usi medici.
US6631172B1 (en) * 2000-05-01 2003-10-07 Lucent Technologies Inc. Efficient list decoding of Reed-Solomon codes for message recovery in the presence of high noise levels
US6738942B1 (en) * 2000-06-02 2004-05-18 Vitesse Semiconductor Corporation Product code based forward error correction system
US6694476B1 (en) * 2000-06-02 2004-02-17 Vitesse Semiconductor Corporation Reed-solomon encoder and decoder
KR100464360B1 (ko) * 2001-03-30 2005-01-03 삼성전자주식회사 고속 패킷 데이터 전송 이동통신시스템에서 패킷 데이터채널에 대한 효율적인 에너지 분배 장치 및 방법
US6745364B2 (en) * 2001-06-28 2004-06-01 Microsoft Corporation Negotiated/dynamic error correction for streamed media
US6718503B1 (en) * 2002-01-04 2004-04-06 Itran Communications Ltd. Reduced latency interleaver utilizing shortened first codeword
WO2004030273A1 (ja) * 2002-09-27 2004-04-08 Fujitsu Limited データ配信方法、システム、伝送方法及びプログラム
JP2004165922A (ja) * 2002-11-12 2004-06-10 Sony Corp 情報処理装置および方法、並びにプログラム
JP2004215224A (ja) * 2002-12-20 2004-07-29 Nippon Telegr & Teleph Corp <Ntt> 符号誤り訂正方法、符号誤り訂正システム、プログラム及びそのプログラムを記録した記録媒体
JP2005136546A (ja) * 2003-10-29 2005-05-26 Sony Corp 送信装置および方法、記録媒体、並びにプログラム
FR2869744A1 (fr) * 2004-04-29 2005-11-04 Thomson Licensing Sa Methode de transmission de paquets de donnees numeriques et appareil implementant la methode
US8826093B2 (en) * 2005-01-19 2014-09-02 Qualcomm Incorporated Power saving method for coded transmission

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102009014910A1 (de) 2008-03-26 2009-10-08 Lg Electronics Inc. Leder-/Textilwaren-Behandlungsmaschine

Also Published As

Publication number Publication date
KR101184242B1 (ko) 2012-09-21
US20060279437A1 (en) 2006-12-14
JP2008546361A (ja) 2008-12-18
CN101432969B (zh) 2012-07-18
EP1908171A2 (en) 2008-04-09
JP2016040926A (ja) 2016-03-24
JP2012249303A (ja) 2012-12-13
JP5123174B2 (ja) 2013-01-16
WO2006135877A3 (en) 2008-09-04
US7676735B2 (en) 2010-03-09
WO2006135877A2 (en) 2006-12-21
EP1908171A4 (en) 2011-12-14
CN101432969A (zh) 2009-05-13

Similar Documents

Publication Publication Date Title
KR101184242B1 (ko) 순방향 오류 정정 코딩 및 스트리밍
EP2290826B1 (en) Lost packet recovery method for packet transmission protocols
US9876607B2 (en) Methods and apparatus employing FEC codes with permanent inactivation of symbols for encoding and decoding processes
EP1214793B9 (en) Group chain reaction encoder with variable number of associated input data for each output group code
KR100924295B1 (ko) 통신 시스템의 다단계 코드 발생기 및 디코더
JP5485302B2 (ja) ファイルダウンロードおよびストリーミングのシステム
US10454613B2 (en) Transmitting apparatus with erasure correction coding, receiving apparatus with erasure correction decoding, transmitting method with erasure correction coding, and receiving method with erasure correction decoding
JP5329239B2 (ja) 通信システムのための多体ベース符号の生成器および復号化器
US20060064626A1 (en) System, method and apparatus for FEC encoding and decoding
US20120042227A1 (en) Fec streaming with aggregation of concurrent streams for fec computation
KR101451985B1 (ko) 서브 블록별 순차적 업데이트 방식을 이용한 저지연 파운틴코딩 방법
JP2007274309A (ja) 送信装置
CN116195195A (zh) 用于线性网络码的主元位置的选择

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160629

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20170629

Year of fee payment: 6

LAPS Lapse due to unpaid annual fee