KR101090001B1 - 복호 장치 및 복호 방법, 및 기록 매체 - Google Patents

복호 장치 및 복호 방법, 및 기록 매체 Download PDF

Info

Publication number
KR101090001B1
KR101090001B1 KR1020057000601A KR20057000601A KR101090001B1 KR 101090001 B1 KR101090001 B1 KR 101090001B1 KR 1020057000601 A KR1020057000601 A KR 1020057000601A KR 20057000601 A KR20057000601 A KR 20057000601A KR 101090001 B1 KR101090001 B1 KR 101090001B1
Authority
KR
South Korea
Prior art keywords
decoding
matrix
result
during
supplied
Prior art date
Application number
KR1020057000601A
Other languages
English (en)
Other versions
KR20060007362A (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 KR20060007362A publication Critical patent/KR20060007362A/ko
Application granted granted Critical
Publication of KR101090001B1 publication Critical patent/KR101090001B1/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/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/11Error 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/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1148Structural properties of the code parity-check or generator matrix
    • H03M13/116Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices
    • H03M13/1168Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices wherein the sub-matrices have column and row weights greater than one, e.g. multi-diagonal sub-matrices
    • 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/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
    • 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/11Error 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
    • 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/11Error 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/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • H03M13/1111Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms
    • H03M13/1114Merged schedule message passing algorithm with storage of sums of check-to-bit node messages or sums of bit-to-check node messages, e.g. in order to increase the memory efficiency
    • 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/11Error 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/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • H03M13/1131Scheduling of bit node or check node processing
    • H03M13/1134Full parallel processing, i.e. all bit nodes or check nodes are processed in parallel
    • 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/11Error 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/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • H03M13/1131Scheduling of bit node or check node processing
    • H03M13/1137Partly parallel processing, i.e. sub-blocks or sub-groups of nodes being processed in parallel
    • 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/11Error 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/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • H03M13/1145Pipelined decoding at code word level, e.g. multiple code words being decoded simultaneously
    • 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/11Error 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/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1148Structural properties of the code parity-check or generator matrix
    • H03M13/118Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure
    • H03M13/1185Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure wherein the parity-check matrix comprises a part with a double-diagonal
    • H03M13/1188Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure wherein the parity-check matrix comprises a part with a double-diagonal wherein in the part with the double-diagonal at least one column has an odd column weight equal or greater than three
    • 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/19Single error correction without using particular properties of the cyclic codes, e.g. Hamming codes, extended or generalised Hamming 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/65Purpose and implementation aspects
    • H03M13/6502Reduction of hardware complexity or efficient processing
    • H03M13/6505Memory efficient implementations
    • 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/65Purpose and implementation aspects
    • H03M13/6566Implementations concerning memory access contentions
    • 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/65Purpose and implementation aspects
    • H03M13/6577Representation or format of variables, register sizes or word-lengths and quantization

Landscapes

  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Error Detection And Correction (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

본 발명은, 회로 규모를 억제하면서, 동작 주파수도 충분히 실현 가능한 범위로 억제하며, 메모리 액세스의 제어도 용이하게 행할 수 있는 LDPC 부호의 복호를 실현하는 복호 장치 및 복호 방법, 및 프로그램에 관한 것이다. LDPC 부호의 검사 행렬은, P×P의 단위 행렬, 그 단위 행렬의 1 중의 1개 이상이 0으로 된 행렬, 이들의 사이클릭 시프트, 이들의 복수의 합, P×P의 0행렬의 조합으로 구성된다. 체크 노드 계산부(313)는, 체크 노드의 연산을, P개 동시에 행하고, 배리어블 노드 계산부(319)는, 배리어블 노드의 연산을, P개 동시에 행한다.
Figure R1020057000601
LDPC 부호, 검사 행렬, 배리어블 노드, 체크 노드, RAM, 브랜치

Description

복호 장치 및 복호 방법, 및 기록 매체{DECODING DEVICE, DECODING METHOD, AND RECORDING MEDIUM}
본 발명은, 복호 장치 및 복호 방법, 및 프로그램에 관한 것으로, 특히, 저밀도 패리티 검사 부호(LDPC 부호)에 의한 부호화가 실시된 부호의 복호를 행하는 복호 장치 및 복호 방법, 및 프로그램에 관한 것이다.
최근, 예를 들면, 이동체 통신이나 심우주 통신 등의 통신 분야, 및 지상파 또는 위성 디지털 방송 등의 방송 분야의 연구가 현저하게 진행되고 있지만, 그에 수반하여, 오류 정정 부호화 및 복호의 효율화를 목적으로 하여 부호 이론에 관한 연구도 한창 행해지고 있다.
부호 성능의 이론적 한계로서는, 소위 샤논(C. E. Shannon)의 통신로 부호화 정리에 의해 제공되는 샤논 한계가 알려져 있다. 부호 이론에 관한 연구는, 이 샤논 한계에 가까운 성능을 나타내는 부호를 개발하는 것을 목적으로 하여 행해지고 있다. 최근에는, 샤논 한계에 가까운 성능을 나타내는 부호화 방법으로서, 예를 들면, 병렬 연접 컨볼루션 부호(PCCC(Parallel Concatenated Convolutional Codes))나, 종렬 연접 컨볼루션 부호(SCCC(Serially Concatenated Convolutional Codes)) 등, 소위 터보 부호화(Turbo coding)로 불리는 방법이 개발되어 있다. 또 한, 이들 터보 부호가 개발되는 한편, 종래부터 알려진 부호화 방법인 저밀도 패리티 검사 부호(Low Density Parity Check codes)(이하, LDPC 부호라고 함)가 각광을 받고 있다.
LDPC 부호는, R. G. Gallager에 의한 「R. G. Gallager, "Low Density Parity Check Codes", Cambridge, Massachusetts: M. I. T. Press, 1963」에서 최초로 제안된 것이고, 그 후, 「D. J. C. MacKay, "Good error correcting codes based on very sparse matrices", Submitted to IEEE Trans. Inf. Theory, IT-45, pp. 399-431, 1999」나, 「M. G. Luby, M. Mitzenmacher, M. A. Shokrollahi and D. A. Spielman, "Analysis of low density codes and improved designs using irregular graphs", in Proceedings of ACM Symposium on Theory of Computing, pp. 249-258, 1998」 등에서 재차 주목받았던 것이다.
LDPC 부호는, 최근의 연구에 의해, 터보 부호 등과 마찬가지로, 부호 길이를 길게 해 감에 따라, 샤논 한계에 가까운 성능이 얻어지는 것을 알 수 있다. 또한, LDPC 부호는, 최소 거리가 부호 길이에 비례한다고 하는 성질이 있기 때문에, 그 특징으로서, 블록 오류 확률 특성이 좋고, 또한, 터보 부호 등의 복호 특성에서 관측되는, 소위 에러플로어 현상이 거의 발생하지 않는 것도 이점으로서 들 수 있다.
이하, 이러한 LDPC 부호에 대하여 구체적으로 설명한다. 또한, LDPC 부호는, 선형 부호로서, 반드시 2원일 필요는 없지만, 여기서는, 2원인 것으로서 설명한다.
LDPC 부호는, 그 LDPC 부호를 정의하는 검사 행렬(parity check matrix)이 소(疎)한 것을 최대의 특징으로 하는 것이다. 여기서, 소한 행렬이란, 행렬의 콤포넌트의 "1"의 개수가 매우 적게 구성되는 것으로, 소한 검사 행렬을 H로 나타내는 것으로 하면, 그와 같은 검사 행렬로서는, 예를 들면, 도 1에 도시한 바와 같이, 각 열의 허밍 웨이트("1"의 수)(weight)가 "3"이고, 또한, 각 행의 허밍 웨이트가 "6"인 것 등이 있다.
이와 같이, 각 행 및 각 열의 허밍 웨이트가 일정한 검사 행렬 H에 의해 정의되는 LDPC 부호는, 레귤러 LDPC 부호로 불리운다. 한편, 각 행 및 각 열의 허밍 웨이트가 일정하지 않은 검사 행렬 H에 의해 정의되는 LDPC 부호는, 이레귤러 LDPC 부호로 불리운다.
이러한 LDPC 부호에 의한 부호화는, 검사 행렬 H에 기초하여 생성 행렬 G를 생성하고, 이 생성 행렬 G를 2원의 정보 메시지에 대하여 승산하는 것에 의해 부호어를 생성함으로써 실현된다. 구체적으로는, LDPC 부호에 의한 부호화를 행하는 부호화 장치는, 우선, 검사 행렬 H의 전치 행렬 HT와의 사이에, 식 GHT=0이 성립하는 생성 행렬 G를 산출한다. 여기서, 생성 행렬 G가, k×n 행렬인 경우에는, 부호화 장치는, 생성 행렬 G에 대하여 k비트로 이루어지는 정보 메시지(벡터 u)를 승산하여, n비트로 이루어지는 부호어 c(=uG)를 생성한다. 이 부호화 장치에 의해 생성된 부호어는, 값이 "0"인 부호 비트가 "+1"로, 값이 "1"인 부호 비트가 "-1"로 되도록 맵핑되어 송신되며, 소정의 통신로를 통해 수신측에서 수신되게 된다.
한편, LDPC 부호의 복호는, Gallager가 확률 복호(Probabilistic Decoding) 로 칭하여 제안한 알고리즘으로서, 배리어블 노드(variable node(메시지 노드(message node)라고도 함))와, 체크 노드(check node)로 이루어지는, 소위 태너 그래프(Tanner graph) 상에서의 확률 전파(belief propagation)에 의한 메시지 패싱 알고리즘에 의해 행하는 것이 가능하다. 여기서, 이하, 적절하게, 배리어블 노드와 체크 노드를, 간단하게, 노드라고도 한다.
그러나, 확률 복호에서는, 각 노드간에서 교환되는 메시지가 실수값이기 때문에, 해석적으로 풀기 위해서는, 연속한 값을 취하는 메시지의 확률 분포 그 자체를 추적할 필요가 있어, 매우 곤란을 수반하는 해석을 필요로 하게 된다. 따라서, Gallager는, LDPC 부호의 복호 알고리즘으로서, 알고리즘 A 또는 알고리즘 B를 제안하고 있다.
LDPC 부호의 복호는, 일반적으로는, 도 2에 도시한 바와 같은 수순에 따라 행해진다. 또한, 여기서는, 수신값을 U0(u0i)로 하고, 체크 노드로부터 출력되는 메시지를 uj로 하며, 배리어블 노드로부터 출력되는 메시지를 vi로 한다. 또한, 여기서는, 메시지란, 값이 "0"인 것 같은 것을, 소위 대수 우도비(log likelihood ratio)로 표현한 실수값이다.
우선, LDPC 부호의 복호에서는, 도 2에 도시한 바와 같이, 단계 S11에서, 수신값 U0(uoi)이 수신되어, 메시지 uj가 "0"으로 초기화됨과 함께, 반복 처리의 카운터로서의 정수를 취하는 변수 k가 "0"으로 초기화되며, 단계 S12로 진행한다. 단계 S12에서, 수신값 U0(u0i)에 기초하여, 수학식 1에 나타내는 연산을 행함으로써 메시지 vi 구해지고, 또한, 이 메시지 vi에 기초하여, 수학식 2에 나타내는 연산을 행함으로써 메시지 uj가 구해진다.
Figure 112005001740696-pct00001
Figure 112005001740696-pct00002
여기서, 수학식 1과 수학식 2에서의 dv와 dc는, 각각, 검사 행렬 H의 세로 방향(행 방향)과 가로 방향(열 방향)의 "1"의 개수를 나타내는 임의로 선택 가능하게 되는 파라미터로서, 예를 들면, (3, 6) 부호의 경우에는, dv=3, dc=6으로 된다.
또한, 수학식 1 또는 수학식 2의 연산에서는, 각각, 메시지를 출력하고자 하는 브랜치(edge)로부터 입력된 메시지를, 합 또는 곱 연산의 파라미터로서는 이용하지 않기 때문에, 합 또는 곱 연산의 범위가, 1 내지 dv-1 또는 1 내지 dc-1로 되어 있다. 또한, 수학식 2로 나타내는 연산은, 실제로는, 2입력 v1, v2에 대한 1출력으로 정의되는 수학식 3에 나타내는 함수 R(v1, v2)의 테이블을 사전에 작성해 놓고, 이것을 수학식 4에 나타낸 바와 같이 연속적(재귀적)으로 이용함으로써 행해진다.
Figure 112005001740696-pct00003
Figure 112005001740696-pct00004
단계 S12에서는, 또한, 변수 k가 "1"만큼 인크리먼트되며, 단계 S13으로 진행한다. 단계 S13에서는, 변수 k가 소정의 반복 복호 횟수 N 이상인지의 여부가 판정된다. 단계 S13에서, 변수 k가 N 이상이 아닌 것으로 판정된 경우, 단계 S12로 되돌아가, 이하, 마찬가지의 처리가 반복된다.
또한, 단계 S13에서, 변수 k가 N 이상인 것으로 판정된 경우, 단계 S14로 진행하여, 수학식 5에 나타내는 연산을 행함으로써 최종적으로 출력하는 복호 결과로서의 메시지 v가 구해져 출력되고, LDPC 부호의 복호 처리가 종료된다.
Figure 112005001740696-pct00005
여기서, 수학식 5의 연산은, 수학식 1의 연산과는 달리, 배리어블 노드에 접속되어 있는 모든 브랜치로부터의 입력 메시지를 이용하여 행해진다.
이러한 LDPC 부호의 복호는, 예를 들면 (3, 6) 부호의 경우에는, 도 3에 도시한 바와 같이, 각 노드간에서 메시지의 수수가 행해진다. 또한, 도 3에서의 "="로 나타내는 노드(배리어블 노드)에서는, 수학식 1에 나타낸 연산이 행해지고, "+" 나타내는 노드(체크 노드)에서는, 수학식 2에 나타낸 연산이 행해진다. 특히, 알 고리즘 A에서는, 메시지를 2원화하고, "+"로 나타내는 노드로써, dc-1개의 입력 메시지의 배타적 논리합 연산을 행하며, "="으로 나타내는 노드로써, 수신값 R에 대하여, dv-1개의 입력 메시지가 모두 서로 다른 비트값이었던 경우에는, 부호를 반전하여 출력한다.
또한, 한편, 최근, LDPC 부호의 복호의 실장법에 관한 연구도 행해지고 있다. 실장 방법에 대하여 설명하기 전에, 우선, LDPC 부호의 복호를 모식화하여 설명한다.
도 4는, (3, 6) LDPC 부호(부호화율 1/2, 부호 길이 12)의 검사 행렬(parity check matrix)의 예이다. LDPC 부호의 검사 행렬은, 도 5와 같이, 태너 그래프를 이용하여 나타낼 수 있다. 여기서, 도 5에서, "+"로 표현되는 것이 체크 노드이고, "="로 표현되는 것이 배리어블 노드이다. 체크 노드와 배리어블 노드는, 각각, 검사 행렬의 행과 열에 대응한다. 체크 노드와 배리어블 노드 사이의 결선은, 브랜치(edge)이고, 검사 행렬의 "1"에 상당한다. 즉, 검사 행렬의 제j 행 제i 열의 콤포넌트가 1인 경우에는, 도 5에서, 위로부터 i번째의 배리어블 노드("="의 노드)와, 위로부터 j번째의 체크 노드("+"의 노드)가, 브랜치에 의해 접속된다. 브랜치는, 배리어블 노드에 대응하는 부호 비트가, 체크 노드에 대응하는 구속 조건을 갖는 것을 나타낸다. 또한, 도 5는, 도 4의 검사 행렬의 태너 그래프로 되어 있다.
LDPC 부호의 복호 방법인 섬 프로덕트 알고리즘(Sum Product Algorithm)은, 배리어블 노드의 연산과 체크 노드의 연산을 반복하여 행한다.
배리어블 노드에서는, 도 6과 같이, 수학식 1의 연산을 행한다. 즉, 도 6에서, 계산하고자 하는 브랜치에 대응하는 메시지 vi는, 배리어블 노드에 연결되어 있는 나머지의 브랜치로부터의 메시지 u1 및 u2와, 수신 정보 u0i를 이용하여 계산된다. 다른 브랜치에 대응하는 메시지도 마찬가지로 계산된다.
체크 노드의 연산에 대하여 설명하기 전에, 수학식 2를, 수학식 6의 a×b=exp{ln(|a|)+ln(|b|}×sign(a)×sign(b)의 관계를 이용하여, 수학식 6과 같이 재기입한다. 단, sign(x)은, x≥0일 때 1이고, x<0일 때 -1이다.
Figure 112005001740696-pct00006
또한, x≥0에서, φ(x)=ln(tanh(x/2))로 정의하면, φ-1(x)=2tanh-1(e-x)이기 때문에, 수학식 6은 수학식 7과 같이 쓸 수 있다.
Figure 112005001740696-pct00007
체크 노드에서는, 도 7과 같이, 수학식 7의 연산을 행한다. 즉, 도 7에서, 계산하고자 하는 브랜치에 대응하는 메시지 uj는, 체크 노드에 연결되어 있는 나머지의 브랜치로부터의 메시지 v1, v2, v3, v4, v5를 이용하여 계산된다. 다른 브랜치에 대응하는 메시지도 마찬가지로 계산된다.
또한, 함수 φ(x)는, φ(x)=ln((ex+1)/(ex-1))로도 표현할 수 있으며, x>0에서, φ(x)=φ-1(x)이다. 함수 φ(x) 및 φ-1(x)를 하드웨어에 실장할 때에는, LUT(Look Up Table)를 이용하여 실장되는 경우가 있지만, 양자 모두 동일한 LUT로 된다.
섬 프로덕트 알고리즘을 하드웨어에 실장하는 경우, 수학식 1로 나타내어지는 배리어블 노드 연산 및 수학식 7로 나타내어지는 체크 노드 연산을, 적절한 회로 규모와 동작 주파수로 반복하여 행하는 것이 필요하다.
복호 장치의 실장의 예로서, 우선, 단순하게 각 노드의 연산을 하나씩 순차적으로 행함으로써 복호를 행하는 경우(full serial decoding)의 실장법에 대하여 설명한다.
또한, 여기서는, 예를 들면, 도 8의, 30(행)×90(열)의 검사 행렬로 표현되는 부호(부호화율 2/3, 부호 길이 90)를 복호하는 것으로 한다. 도 8의 검사 행렬의 1의 수는 269이고, 따라서, 그 태너 그래프에서는, 브랜치의 수는 269개로 된다. 여기서, 도 8의 검사 행렬에서는, 0을, "."로 표현하고 있다.
도 9는 LDPC 부호의 1회 복호를 행하는 복호 장치의 구성예를 도시하고 있 다.
도 9의 복호 장치에서는, 그 동작하는 1클럭(clock)마다, 하나의 브랜치에 대응하는 메시지가 계산된다.
즉, 도 9의 복호 장치는, 2개의 브랜치용 메모리(100, 102), 하나의 체크 노드 계산기(101), 1개의 배리어블 노드 계산기(103), 1개의 수신용 메모리(104), 1개의 제어부(105)로 이루어진다.
도 9의 복호 장치에서는, 브랜치용 메모리(100 또는 102)로부터 메시지 데이터가 1개씩 판독되며, 그 메시지 데이터를 이용하여, 원하는 브랜치에 대응하는 메시지 데이터가 계산된다. 그리고, 그 계산에 의해 구해진 메시지 데이터가 1개씩 후단의 브랜치용 메모리(102 또는 100)에 저장되어 간다. 반복 복호를 행할 때에는, 이 1회 복호를 행하는 도 9의 복호 장치를 복수개 종렬로 연접하거나, 혹은 도 9의 복호 장치를 반복하여 이용함으로써, 반복 복호를 실현한다. 또한, 여기서는, 예를 들면, 도 9의 복호 장치가 복수개 접속되어 있는 것으로 한다.
브랜치용 메모리(100)는, 전단의 복호 장치(도시 생략)의 배리어블 노드 계산기(103)로부터 공급되는 메시지 D100을, 후단의 체크 노드 계산기(101)가 판독하는 순서로 저장한다. 그리고, 브랜치용 메모리(100)는, 체크 노드 계산의 페이즈에서는, 메시지 D100을, 저장되어 있는 순서대로, 메시지 D101로서, 체크 노드 계산기(101)에 공급한다.
체크 노드 계산기(101)는, 제어부(105)로부터 공급되는 제어 신호 D106에 기초하여, 브랜치용 메모리(100)로부터 공급되는 메시지 D101을 이용하여, 수학식 7 에 따라 연산을 행하고, 그 연산에 의해 구해진 메시지 D102를, 후단의 브랜치용 메모리(102)에 공급한다.
브랜치용 메모리(102)는, 전단의 체크 노드 계산기(101)로부터 공급되는 메시지 D102를, 후단의 배리어블 노드 계산기(103)가 판독하는 순서로 저장해 간다. 그리고, 브랜치용 메모리(102)는, 배리어블 노드 계산의 페이즈에서는, 메시지 D102를, 저장되어 있는 순서대로, 메시지 D103로서, 배리어블 노드 계산기(103)에 공급한다.
또한, 배리어블 노드 계산기(103)에는, 제어부(105)로부터 제어 신호 D107이 공급됨과 함께, 수신용 메모리(104)로부터 수신 데이터 D104가 공급된다. 배리어블 노드 계산기(103)는, 제어 신호 D107에 기초하여, 브랜치용 메모리(100)로부터 공급되는 메시지 D103과 수신용 메모리(100)로부터 공급되는 수신 데이터 D104를 이용하여, 수학식 1에 따라 연산을 행하고, 그 연산의 결과 얻어지는 메시지 D105를, 도시하지 않은 후단의 복호 장치의 브랜치용 메모리(100)에 공급한다.
수신용 메모리(104)에는, LDPC 부호화된 수신 데이터(LDPC 부호)가 저장된다. 제어부(105)는, 배리어블 노드 연산을 제어하는 제어 신호 D106과, 체크 노드 연산을 제어하는 제어 신호 D107을, 각각 체크 노드 계산기(101)와 배리어블 노드 계산기(103)에 공급한다. 제어부(105)는, 브랜치용 메모리(100)에 모든 브랜치의 메시지가 저장되었을 때, 체크 노드 계산기(101)에 제어 신호 D106을 공급하고, 브랜치용 메모리(102)에 모든 브랜치의 메시지가 저장되었을 때, 배리어블 노드 계산기(103)에 제어 신호 D107을 공급한다.
도 10은 체크 노드 연산을 1개씩 행하는 도 9의 체크 노드 계산기(101)의 구성예를 도시하고 있다.
또한, 도 10에서는, 각 메시지가 부호 비트를 합쳐 합계 6비트(bit)로 양자화되어 있는 것으로 하여, 체크 노드 계산기(101)를 나타내고 있다. 또한, 도 10에서는, 도 8의 검사 행렬로 나타내어지는 LDPC 부호의 체크 노드 연산이 행해진다. 또한, 도 10의 체크 노드 연산기(101)에는, 클럭 ck가 공급되며, 이 클럭 ck는, 필요한 블록에 공급되도록 되어 있다. 그리고, 각 블록은, 클럭 ck에 동기하여 처리를 행한다.
도 10의 체크 노드 계산기(101)는, 제어부(105)로부터 공급되는, 예를 들면, 1비트의 제어 신호 D106에 기초하여, 브랜치용 메모리(100)로부터 1개씩 판독되는 메시지 D101을 이용하여, 수학식 7에 따라 연산을 행한다.
즉, 체크 노드 계산기(101)에서는, 검사 행렬의 각 열에 대응하는 배리어블 노드로부터의 6비트의 메시지 D101(메시지 vi)이 1개씩 판독되고, 그 하위 비트인 절대값 D122(|vi|)가 LUT(121)에, 그 최상위 비트인 부호 비트 D121이 EXOR 회로(129)와 FIFO(First In First Out) 메모리(133)에 각각 공급된다. 또한, 체크 노드 계산기(101)에는, 제어부(105)로부터 제어 신호 D106이 공급되며, 그 제어 신호 D106은, 셀렉터(124)와 셀렉터(131)에 공급된다.
LUT(121)는, 절대값 D122(|vi|)에 대하여, 수학식 7에서의 φ(|vi|)의 연산을 행한 5비트의 연산 결과 D123(φ(|vi|))을 판독하여, 가산기(122)와 FIFO 메모리(127)에 공급한다.
가산기(122)는, 연산 결과 D123(φ(|vi|))과 레지스터(123)에 저장되어 있는 9비트의 값 D124를 가산함으로써, 연산 결과 D123을 적산하고, 그 결과 얻어지는 9비트의 적산값을 레지스터(123)에 재저장한다. 또한, 검사 행렬의 1행에 걸치는 모든 브랜치로부터의 메시지 D101의 절대값 D122(|vi|)에 대한 연산 결과가 적산된 경우, 레지스터(123)는 리세트된다.
검사 행렬의 1행에 걸치는 메시지 D101이 1개씩 판독되며, 레지스터(123)에 1행분의 연산 결과 D123이 적산된 적산값이 저장된 경우, 제어부(105)로부터 공급되는 제어 신호 D106은, 0으로부터 1로 변화된다. 예를 들면, 행의 웨이트(row weigbt)가 「9」인 경우, 제어 신호 D106은, 1부터 8클럭째까지는, 「0」으로 되고, 9클럭째에서는 「1」로 된다.
제어 신호 D106이 「1」인 경우, 셀렉터(124)는, 레지스터(123)에 저장되어 있는 값, 즉, 검사 행렬의 1행에 걸치는 모든 브랜치로부터의 메시지 D101(메시지 vi)로부터 구해진 φ(|vi|)가 적산된 9비트의 값 D124(i=1부터 i=dc까지의 Σφ(|vi|))를 선택하고, 값 D125로서, 레지스터(125)에 출력하여 저장시킨다. 레지스터(125)는, 저장하고 있는 값 D125를, 9비트의 값 D126로서, 셀렉터(124)와 가산기(126)에 공급한다. 제어 신호 D106이 「0」인 경우, 셀렉터(124)는, 레지스터(125)로부터 공급된 값 D126을 선택하여, 레지스터(125)에 출력하여 재저장시킨다. 즉, 검사 행렬의 1행에 걸치는 모든 브랜치로부터의 메시지 D101(메시지 vi)로부터 구해진 φ(|vi|)가 적산될 때까지, 레지스터(125)는, 전회 적산된 φ(|vi|)를, 셀렉터(124)와 가산기(126)에 공급한다.
한편, FIFO 메모리(127)는, 레지스터(125)로부터 새로운 값 D126(i=1부터 i=dc까지의 Σφ(|vi|))이 출력되기까지의 동안, LUT(121)가 출력한 연산 결과 D123(φ(|vi|))을 지연하고, 5비트의 값 D127로서 감산기(126)에 공급한다. 감산기(126)는, 레지스터(125)로부터 공급된 값 D126으로부터, FIFO 메모리(127)로부터 공급된 값 D127를 감산하고, 그 감산 결과를, 5비트의 감산값 D128로서 LUT(128)에 공급한다. 즉, 감산기(126)는, 검사 행렬의 1행에 걸치는 모든 브랜치로부터의 메시지 D101(메시지 vi)로부터 구해진 φ(|vi|)의 적산값으로부터, 구하고자 하는 브랜치로부터의 메시지 D101(메시지 vi)로부터 구해진 φ(|vi|)를 감산하고, 그 감산값(i=1부터 i=dc-1까지의 Σφ(|vi|))을 감산값 D128로서 LUT(128)에 공급한다.
LUT(128)는, 감산값 D128(i=1부터 i=dc-1까지의 Σφ(|vi|))에 대하여, 수학식 7에서의 φ-1(Σφ(|vi|))의 연산을 행한 5비트의 연산 결과 D129(φ-1 (Σφ(|vi|)))를 출력한다.
이상의 처리와 병행하여, EXOR 회로(129)는, 레지스터(130)에 저장되어 있는 1비트의 값 D131과 부호 비트 D121과의 배타적 논리합을 연산함으로써, 부호 비트끼리의 승산을 행하고, 1비트의 승산 결과 D130을 레지스터(130)에 재저장한다. 또한, 검사 행렬의 1행에 걸치는 모든 브랜치로부터의 메시지 D101의 부호 비트 D121이 승산된 경우, 레지스터(130)는 리세트된다.
검사 행렬의 1행에 걸치는 모든 브랜치로부터의 메시지 D101의 부호 비트 D121이 승산된 승산 결과 D130(i=1부터 dc까지의 Πsign(vi))이 레지스터(130)에 저장된 경우, 제어부(105)로부터 공급되는 제어 신호 D106은, 「0」으로부터 「1」로 변화된다.
제어 신호 D106이 「1」인 경우, 셀렉터(131)는, 레지스터(130)에 저장되어 있는 값, 즉, 검사 행렬의 1행에 걸치는 모든 브랜치로부터의 메시지 D101의 부호 비트 D121이 승산된 값 D131(i=1부터 i=dc까지의 Πsign(vi))을 선택하고, 1비트의 값 D132로서 레지스터(132)에 출력하여 저장시킨다. 레지스터(132)는, 저장하고 있는 값 D132을, 1비트의 값 D133으로서 셀렉터(131)와 EXOR 회로(134)에 공급한다. 제어 신호 D106이 「0」인 경우, 셀렉터(131)는, 레지스터(132)로부터 공급된 값 D133을 선택하여, 레지스터(132)에 출력하여 재저장시킨다. 즉, 검사 행렬의 1행에 걸치는 모든 브랜치로부터의 메시지 D101(메시지 vi)의 부호 비트 D121이 승산될 때까지, 레지스터(132)는, 전회 저장한 값을, 셀렉터(131)와 EXOR 회로(134)에 공급한다.
한편, FIFO 메모리(133)는, 레지스터(132)로부터 새로운 값 D133(i=1부터 i=dc까지의 Πsign(vi))이 EXOR 회로(134)에 공급되기까지의 동안, 부호 비트 D121을 지연하고, 1비트의 값 D134로서 EXOR 회로(134)에 공급한다. EXOR 회로(134)는, 레지스터(132)로부터 공급된 값 D133과, FIFO 메모리(133)로부터 공급된 값 D134의 배타적 논리합을 연산함으로써, 값 D133을, 값 D134로 제산하고, 1비트의 제산 결과를 제산값 D135로서 출력한다. 즉, EXOR 회로(134)는, 검사 행렬의 1행에 걸치는 모든 브랜치로부터의 메시지 D101의 부호 비트 D121(sign(|vi|))의 승산값을, 구하고자 하는 브랜치로부터의 메시지 D101의 부호 비트 D121(sign(|vi|))로 제산하고, 그 제산값(i=1부터 i=dc-1까지의 Πsign(|vi|))을 제산값 D135로서 출력한다.
체크 노드 계산기(101)에서는, LUT(128)로부터 출력된 5비트의 연산 결과 D129를 하위 5비트로 함과 함께, EXOR 회로(134)로부터 출력된 1비트의 제산값 D135를 최상위 비트로 하는 합계 6비트가 메시지 D102(메시지 uj)로서 출력된다.
이상과 같이, 체크 노드 계산기(101)에서는, 수학식 7의 연산이 행해져, 메시지 uj가 구해진다.
또한, 도 8의 검사 행렬의 행의 웨이트의 최대는 9이기 때문에, 즉, 체크 노드에 공급되는 메시지의 최대 수는 9이기 때문에, 체크 노드 계산기(101)는, 9개의 메시지(φ(|vi|))를 지연시키는 FIFO 메모리(127)와 FIFO 메모리(133)를 갖고 있다. 행의 웨이트가 9 미만인 행의 메시지를 계산할 때에는, FIFO 메모리(127)와 FIFO 메모리(133)에서의 지연량이, 그 행의 웨이트의 값으로 줄어든다.
도 11은 배리어블 노드 연산을 1개씩 행하는 도 9의 배리어블 노드 계산기(103)의 구성예를 도시하고 있다.
또한, 도 11에서는, 각 메시지가 부호 비트를 합쳐 합계 6비트(bit)로 양자화되어 있는 것으로 하여, 배리어블 노드 계산기(103)를 나타내고 있다. 또한, 도 11에서는, 도 8의 검사 행렬로 나타내어지는 LDPC 부호의 배리어블 노드 연산이 행해진다. 또한, 도 11의 배리어블 노드 계산기(103)에는, 클럭 ck가 공급되며, 클럭 ck는, 필요한 블록에 공급되도록 되어 있다. 그리고, 각 블록은, 클럭 ck에 동기하여 처리를 행한다.
도 11의 배리어블 노드 계산기(103)는, 제어부(105)로부터 공급되는, 예를 들면, 1비트의 제어 신호 D107에 기초하여, 브랜치용 메모리(102)로부터 1개씩 판독되는 메시지 D103과, 수신용 메모리(104)로부터 판독되는 수신 데이터 D104를 이용하여, 수학식 1에 따라 연산을 행한다.
즉, 배리어블 노드 계산기(103)에서는, 검사 행렬의 각 행에 대응하는 체크 노드로부터의 6비트의 메시지 D103(메시지 uj)이 1개씩 판독되고, 그 메시지 D103이, 가산기(151)와 FIFO 메모리(155)에 공급된다. 또한, 배리어블 노드 계산기(103)에서는, 수신용 메모리(104)로부터 6비트의 수신 데이터 D104가 1개씩 판독되어, 가산기(156)에 공급된다. 또한, 배리어블 노드 계산기(103)에는, 제어부(105)로부터 제어 신호 D107이 공급되며, 그 제어 신호 D107은 셀렉터(153)에 공급된다.
가산기(151)는, 메시지 D103(메시지 uj)과 레지스터(152)에 저장되어 있는 9비트의 값 D151을 가산함으로써, 메시지 D103을 적산하고, 그 결과 얻어지는 9비트의 적산값을, 레지스터(152)에 재저장한다. 또한, 검사 행렬의 1열에 걸치는 모든 브랜치로부터의 메시지 D103이 적산된 경우, 레지스터(152)는 리세트된다.
검사 행렬의 1열에 걸치는 메시지 D103이 1개씩 판독되고, 레지스터(152)에 1열분의 메시지 D103이 적산된 값이 저장된 경우, 제어부(105)로부터 공급되는 제어 신호 D107은, 「0」으로부터 「1」로 변화된다. 예를 들면, 열의 웨이트가 「5」인 경우, 제어 신호 D107은, 1부터 4클럭째까지는 「0」으로 되고, 5클럭째에서는 「1」로 된다.
제어 신호 D107이 「1」인 경우, 셀렉터(153)는, 레지스터(152)에 저장되어 있는 값, 즉, 검사 행렬의 1열에 걸치는 모든 브랜치로부터의 메시지 D103(메시지 uj)이 적산된 9비트의 값 D151(j=1부터 dv까지의 Σuj)을 선택하고, 레지스터(154)에 출력하여 저장시킨다. 레지스터(154)는, 저장하고 있는 값 D151을, 9비트의 값 D152로서, 셀렉터(153)와 가감산기(156)에 공급한다. 제어 신호 D107이 「0」인 경우, 셀렉터(153)는, 레지스터(154)로부터 공급된 값 D152를 선택하여, 레지스터(154)에 출력하여 재저장시킨다. 즉, 검사 행렬의 1열에 걸치는 모든 브랜치로부터의 메시지 D103(메시지 uj)이 적산될 때까지, 레지스터(154)는, 전회 적산된 값을, 셀렉터(153)와 가감산기(156)에 공급한다.
한편, FIFO 메모리(155)는, 레지스터(154)로부터 새로운 값 D152(j=1부터 dv 까지, Σuj)가 출력되기까지의 동안, 체크 노드로부터의 메시지 D103을 지연하고, 6비트의 값 D153으로서 가감산기(156)에 공급한다. 가감산기(156)는, 레지스터(154)로부터 공급된 값 D152로부터, FIFO 메모리(155)로부터 공급된 값 D153을 감산한다. 즉, 가감산기(156)는, 검사 행렬의 1열에 걸치는 모든 브랜치로부터의 메시지 D103(메시지 uj)의 적산값으로부터, 구하고자 하는 브랜치로부터의 메시지 uj를 감산하여, 그 감산값(j=1부터 dv-1까지의 Σuj)을 구한다. 또한, 가감산기(156)에는, 그 감산값(j=1부터 dv-1까지의 Σuj)에, 수신용 메모리(104)로부터 공급된 수신 데이터 D104를 가산하여, 그 결과 얻어지는 6비트의 값을 메시지 D105(메시지 vi)로서 출력한다.
이상과 같이, 배리어블 노드 계산기(103)에서는, 수학식 1의 연산이 행해져, 메시지 vi가 구해진다.
또한, 도 8의 검사 행렬의 열의 웨이트의 최대는 5이기 때문에, 즉, 배리어블 노드에 공급되는 메시지의 최대 수는 5이기 때문에, 배리어블 노드 계산기(103)는, 5개의 메시지(uj)를 지연시키는 FIFO 메모리(155)를 갖고 있다. 열의 웨이트가 5 미만인 열의 메시지를 계산할 때에는, FIFO 메모리(155)에서의 지연량이, 그 열의 웨이트의 값으로 줄어든다.
도 9의 복호 장치에서는, 검사 행렬의 웨이트에 따라, 제어부(105)로부터 제어 신호가 공급된다. 그리고, 도 9의 복호 장치에 따르면, 브랜치용 메모리(100, 102), 및 체크 노드 계산기(101) 및 배리어블 노드 계산기(103)의 FIFO 메모리(127, 133, 155)의 용량만 만족되면, 제어 신호만을 변화시킴으로써 다양한 검사 행렬의 LDPC 부호를 복호할 수 있다.
또한, 도시하지 않지만, 도 9의 복호 장치에서, 복호의 최종 단에서는, 수학식 1의 배리어블 노드 연산 대신에, 수학식 5의 연산이 행해지고, 그 연산 결과가, 최종적인 복호 결과로서 출력된다.
도 9의 복호 장치를 반복하여 이용하여, LDPC 부호를 복호하는 경우에는, 체크 노드 연산과 배리어블 노드 연산이 교대로 행해진다. 즉, 도 9의 복호 장치에서는, 체크 노드 계산기(101)에 의한 체크 노드 연산의 결과를 이용하여, 배리어블 노드 계산기(103)에 의해 배리어블 노드 연산이 행해지고, 배리어블 노드 계산기(103)에 의한 배리어블 노드 연산의 결과를 이용하여, 체크 노드 계산기(101)에 의해 체크 노드 연산이 행해진다.
따라서, 269의 브랜치를 갖는 도 8의 검사 행렬을 이용한 1회의 복호에, 269×2=538클럭(clock)을 필요로 한다. 예를 들면, 50회의 반복 복호를 행하기 위해서는, 부호 길이인 90개의 부호(수신 데이터)를 1프레임으로 하고, 그 1프레임을 수신하는 동안에, 538×50=26900클럭 동작하는 것이 필요하며, 수신 주파수의 약 300(≒26900/90)배의 고속 동작이 필요로 된다. 수신 주파수가 수십㎒인 것으로 하면, ㎓ 이상의 속도로의 동작이 요구된다.
또한, 도 9의 복호 장치를, 예를 들면, 50대 연접하여, LDPC 부호를 복호하는 경우에는, 1프레임(frame)째의 배리어블 노드 연산을 행하고 있는 동안에, 2프 레임째의 체크 노드 연산을 행하고, 3프레임째의 배리어블 노드 연산을 행하는 것과 같이, 복수의 배리어블 노드 연산과 체크 노드 연산을 동시에 행할 수 있다. 이 경우, 90개의 부호를 수신하는 동안에, 269개의 브랜치를 계산하면 되기 때문에, 복호 장치는, 수신 주파수의 약 3(≒269/90)배의 주파수로 동작하면 되게 되어, 충분히 실현 가능하다. 그러나, 이 경우, 회로 규모가, 단순하게는, 도 9의 복호 장치의 50배로 된다.
다음으로, 모든 노드의 연산을 동시에 행함으로써 복호를 행하는 경우(full parallel decoding)의 복호 장치의 실장법에 대하여 설명한다.
이 실장법에 대해서는, 예를 들면, C. Howland and A. Blanksby, "Parallel Decoding Architectures for Low Density Parity Check Codes", Symposium on Circuits and Systems, 2001에 기재되어 있다.
도 12A 내지 도 12C는, 도 8의 검사 행렬로 표현되는 부호(부호화율 2/3, 부호 길이 90)를 복호하는 복호 장치의 일례의 구성을 도시하고 있다. 또한, 도 12A는, 복호 장치 전체의 구성을 도시하고 있다. 또한, 도 12B는, 도 12A의 복호 장치의 점선 B로 둘러싸인 도면에서의 상부의 상세 구성을 도시하고, 도 12C는 도 12A의 복호 장치의 점선 C로 둘러싸인 도면에서의 하부의 상세 구성을 나타내고 있다.
도 12A 내지 도 12C의 복호 장치는, 1개의 수신용 메모리(205), 2개의 브랜치 교체 장치(200, 203), 2개의 브랜치용 메모리(202, 206), 30개의 체크 노드 계 산기(2011 내지 20130)로 구성되는 체크 노드 계산기(201), 90개의 배리어블 노드 계산기(2041 내지 20490)로 구성되는 배리어블 노드 계산기(204)로 이루어진다.
도 12A 내지 도 12C의 복호 장치에서는, 브랜치용 메모리(202 또는 206)로부터, 269개 있는 브랜치에 대응하는 메시지 데이터를 모두 동시에 판독하고, 그 메시지 데이터를 이용하여, 269개의 브랜치에 대응하는 새로운 메시지 데이터를 연산한다. 또한, 그 연산의 결과 구해진 새로운 메시지 데이터가 모두 동시에 후단의 브랜치용 메모리(206 또는 202)에 저장되어 간다. 그리고, 도 12A 내지 도 12C의 복호 장치를 반복하여 이용함으로써 반복 복호가 실현된다. 이하, 각 부에 대하여 상세히 설명한다.
브랜치용 메모리(206)는, 전단의 배리어블 노드 계산기(2041 내지 20490)로부터의 메시지 D2061 내지 D20690을 모두 동시에 저장하고, 다음 시각(다음 클럭의 타이밍)에, 메시지 D2061 내지 D20690을, 메시지 D2071 내지 D20790 으로서 판독하고, 다음단의 브랜치 교체 장치(200)에, 메시지 D200(D2001 내지 D20090)으로서 공급한다. 브랜치 교체 장치(200)는, 브랜치용 메모리(206)로부터 공급된 메시지 D2001 내지 D20090의 순서를, 도 8의 검사 행렬에 따라 재배열하고(교체하고), 체크 노드 계산기(2011 내지 20130)에, 메시지 D2011 내지 D20130으로서 공급한다.
체크 노드 계산기(2011 내지 20130)는, 브랜치 교체 장치(200)로부터 공급되 는 메시지 D2011 내지 D20130을 이용하여 수학식 7에 따라 연산을 행하고, 그 연산의 결과 얻어지는 메시지 D2021 내지 D20230을, 브랜치용 메모리(202)에 공급한다.
브랜치용 메모리(202)는, 전단의 체크 노드 계산기(2011 내지 20130)로부터 공급되는 메시지 D2021 내지 D20230을 모두 동시에 저장하고, 다음 시각에, 그 모든 메시지 D2021 내지 D20230을, 메시지 D2031 내지 D20330으로서, 다음단의 브랜치 교체 장치(203)에 공급한다.
브랜치 교체 장치(203)는, 브랜치용 메모리(202)로부터 공급된 메시지 D2031 내지 D20330의 순서를 도 8의 검사 행렬에 따라 재배열하여, 배리어블 노드 계산기2041 내지 20490에, 메시지 D2041 내지 D20490으로서 공급한다.
배리어블 노드 계산기(2041 내지 20490)는, 브랜치 교체 장치(203)로부터 공급되는 메시지 D2041 내지 D20490과, 수신용 메모리(205)로부터 공급되는 수신 데이터 D2051 내지 D20590을 이용하여 수학식 1에 따라 연산을 행하고, 그 연산의 결과 얻어지는 메시지 D2061 내지 D20690을, 다음단의 브랜치용 메모리(206)에 공급한다.
도 13은, 체크 노드 연산을 동시에 행하는 도 12A 내지 도 12C의 체크 노드 계산기(201m)(m=1, 2, …, 30)의 구성예를 도시하고 있다.
도 13의 체크 노드 계산기(201m)에서는, 도 10의 체크 노드 계산기(101)와 마찬가지로 하여, 수학식 7의 체크 노드 연산이 행해지지만, 그 체크 노드 연산이, 모든 브랜치에 대하여 동시에 행해진다.
즉, 도 13의 체크 노드 계산기(201m)에서는, 브랜치 교체 장치(200)로부터 공급되는 도 8의 검사 행렬의 각 열에 대응하는 배리어블 노드로부터의 메시지 D2211 내지 D2219(vi)가 모두 동시에 판독되어, 각각의 하위 5비트인 절대값 D2221 내지 D2229(|vi|)가 LUT(2211 내지 2219)에 각각 공급된다. 또한, 메시지 D2211 내지 D2219(vi)의 최상위 비트인 1비트의 부호 비트 D2231 내지 D2239 가, EXOR 회로(2261 내지 2669)에 각각 공급됨과 함께, EXOR 회로(225)에 공급된다.
LUT(2211 내지 2219)는, 절대값 D2221 내지 D2229(|vi |)에 대하여, 수학식 7에서의 φ(|vi|)의 연산을 행한 5비트의 연산 결과 D2241 내지 D2249(φ(|v i|))를 각각 판독하고, 각각을 감산기(2231 내지 2239)에 공급한다. 또한, LUT(2211 내지 2219)는, 연산 결과 D2241 내지 D2249(φ(|vi|)를 가산기(222)에 공급한다.
가산기(222)는, 연산 결과 D2241 내지 D2249(φ(|vi|))의 값의 총합(1행분의 연산 결과의 총합)을 연산하고, 9비트의 연산 결과 D225(i=1부터 9의 Σφ(|vi|))를, 감산기(2231 내지 2239)에 공급한다. 감산기(2231 내지 2239)는, 연산 결과 D225로부터, 연산 결과 D2241 내지 D2249(φ(|vi|))를 각각 감산하고, 5비트의 감 산값 D2271 내지 D2279를, LUT(2241 내지 2249)에 공급한다. 즉, 감산기(2231 내지 2239)는, 모든 브랜치로부터의 메시지 vi로부터 구해진 φ(|vi|)의 적산값으로부터, 구하고자 하는 브랜치로부터의 메시지 vi로부터 구해진 φ(|vi|)를 감산하고, 그 감산값 D2271 내지 D2279(i=1부터 8까지의 Σφ(|vi|))를 LUT(224 1 내지 2249)에 각각 공급한다. LUT(2241 내지 2249)는, 감산값 D2271 내지 D2279 에 대하여, 수학식 7에서의 φ-1(Σφ(|vi|))의 연산을 행한 5비트의 연산 결과 D2281 내지 D2289를 판독하여 출력한다.
한편, EXOR 회로(225)는, 모든 부호 비트 D2231 내지 D2239의 배타적 논리합을 연산함으로써, 부호 비트 D2231 내지 D2239의 승산을 행하여, 1비트의 승산값 D226(1행분의 부호 비트의 승산값(i=1부터 9까지의 Πsign(vi)))을 EXOR 회로(2661 내지 2669)에 각각 공급한다. EXOR 회로(2661 내지 2669)는, 승산값 D226과 부호 비트 D2231 내지 D2239의 각각과의 배타적 논리를 연산함으로써, 승산값 D226을, 부호 비트 D2231 내지 D2239 각각으로 제산한 1비트의 제산값 D2291 내지 D2299(i=1부터 8까지의 Πsign(vi))를 구하여 출력한다.
체크 노드 계산기(201m)에서는, LUT(2241 내지 2249)로부터 출력된 5비트의 연산 결과 D2281 내지 D2289 각각을 하위 5비트로 함과 함께, EXOR 회로(2261 내지 2269)로부터 출력된 제산값 D2291 내지 D2299 각각을 최상위 비트로 하는 합계 6비트가, 체크 노드 연산의 결과 얻어지는 메시지 D2301 내지 D2309로서 출력된다.
이상과 같이, 체크 노드 계산기(201m)에서는, 수학식 7의 연산이 행해져, 메시지 uj가 구해진다.
또한, 도 13에서는, 각 메시지가 부호 비트를 합쳐 합계 6비트로 양자화되어 있는 것으로 하여, 체크 노드 계산기(201m)를 나타내고 있다. 또한, 도 13의 회로는 1개의 체크 노드에 상당한다. 여기서 처리의 대상으로 하고 있는 도 8의 검사 행렬에 대해서는, 그 행 수인 30행의 체크 노드가 존재하기 때문에, 도 12A 내지 도 12C의 복호 장치는, 도 13에 도시한 바와 같은 체크 노드 계산기(201m)를 30개 갖고 있다.
여기서, 도 13의 체크 노드 계산기(201m)에서는, 9개의 메시지를 동시에 계산할 수 있다. 그리고, 여기서 처리의 대상으로 하고 있는 도 8의 검사 행렬의 행의 웨이트는, 제1 행이 8이고, 제2 내지 제30 행이 9이기 때문에, 즉, 체크 노드에 공급되는 메시지의 수가, 8인 케이스가 1개와, 9인 케이스가 29 있기 때문에, 체크 노드 계산기(2011)는, 도 13의 회로와 마찬가지의 8개의 메시지를 동시에 계산할 수 있는 회로 구성으로 되어 있고, 나머지의 체크 노드 계산기(2012 내지 20130)는, 도 13의 회로와 동일 구성으로 되어 있다.
도 14는, 배리어블 노드 연산을 동시에 행하는 도 12A 내지 도 12C의 배리어블 노드 계산기(204p)(p=1, 2, …, 90)의 구성예를 도시하고 있다.
도 14의 배리어블 노드 계산기(204p)에서는, 도 11의 배리어블 노드 계산기(103)와 마찬가지로 하여, 수학식 1의 배리어블 노드 연산이 행해지지만, 그 배리어블 노드 연산이, 모든 브랜치에 대하여 동시에 행해진다.
즉, 도 14의 배리어블 노드 계산기(204p)에서는, 브랜치 교체 장치(203)로부터 공급되는, 검사 행렬의 각 행에 대응하는 체크 노드로부터의 6비트의 메시지 D2511 내지 D2515(메시지 uj)가 모두 동시에 판독되어, 각각 가산기(252 1 내지 2525)에 공급됨과 함께, 가산기(251)에 공급된다. 또한, 배리어블 노드 계산기(204p)에는, 수신용 메모리(205)로부터 수신 데이터 D271가 공급되며, 그 수신 데이터 D271은, 가감산기(2521 내지 2525)에 공급된다.
가산기(251)는, 모든 메시지 D2511 내지 D2515(메시지 uj)를 적산하고, 9비트의 적산값 D252(1열분의 메시지의 총합값(j=1부터 5까지의 Σuj))를 가감산기(2521 내지 2525)에 공급한다. 가감산기(2521 내지 2525)는, 가산값 D252로부터, 메시지 D2511 내지 D2515(메시지 uj)를 각각 감산한다. 즉, 가감산기(2521 내지 2525)는, 모든 브랜치로부터의 메시지 uj의 적산값 D252로부터, 구하고자 하는 브랜치로부터 의 메시지 D2511 내지 D2515(메시지 uj)를 각각 감산하여, 그 감산값(j=1부터 4까지의 Σuj)을 구한다.
또한, 가감산기(2521 내지 2525)는, 감산값(j=1부터 4까지의 Σuj)에, 수신 데이터 D271(u0i)를 가산하여, 6비트의 가산값 D2531 내지 D2535를, 배리어블 노드 연산의 결과로 출력한다.
이상과 같이, 배리어블 노드 계산기(204p)에서는, 수학식 1의 연산이 행해져, 메시지 vi가 구해진다.
또한, 도 14에서는, 각 메시지가 부호 비트를 합쳐 합계 6비트로 양자화되어 있는 것으로 하여, 배리어블 노드 계산기(204p)를 나타내고 있다. 또한, 도 14의 회로는 1개의 배리어블 노드에 상당한다. 여기서 처리의 대상으로 하고 있는 도 8의 검사 행렬에 대해서는, 그 열 수인 90열의 배리어블 노드가 존재하므로, 도 12A 내지 도 12C의 복호 장치는, 도 14에 도시한 바와 같은 회로를 90개 갖고 있다.
여기서, 도 14의 배리어블 노드 계산기(204p)에서는, 5개의 메시지를 동시에 계산할 수 있다. 그리고, 여기서 처리의 대상으로 하고 있는 도 8의 검사 행렬은, 웨이트가 5, 3, 2, 1인 열이, 각각, 15열, 45열, 29열, 1열 있기 때문에, 배리어블 노드 계산기(2041 내지 20490) 중의 15개는, 도 14의 회로와 동일 구성으로 되어 있고, 나머지 45개, 29개, 1개는, 도 14의 회로와 마찬가지의 3, 2, 1개의 메시지를 각각 동시에 계산할 수 있는 회로 구성으로 되어 있다.
또한, 도시하지 않지만, 도 12A 내지 도 12C의 복호 장치에서도, 도 9에 있어서의 경우와 마찬가지로, 복호의 최종 단에서는, 수학식 1의 배리어블 노드 연산 대신에, 수학식 5의 연산이 행해지고, 그 연산 결과가 최종적인 복호 결과로서 출력된다.
도 12A 내지 도 12C의 복호 장치에 따르면, 269개 있는 브랜치에 대응하는 메시지 모두를 1클럭에서 동시에 계산할 수 있다.
도 12A 내지 도 12C의 복호 장치를 반복 이용하여 복호하는 경우에는, 체크 노드 연산과 배리어블 노드 연산을 교대로 행하여, 1회의 복호를 2클럭에서 행할 수 있다. 따라서, 예를 들면, 50회의 복호를 행하기 위해서는, 부호 길이가 90개인 부호를 1프레임으로 하는 수신 데이터를 수신하는 동안에 2×50=100클럭 동작하면 되므로, 거의 수신 주파수와 동일한 동작 주파수이면 된다. 일반적으로, LDPC 부호는, 부호 길이가 수천 내지 수만으로 크기 때문에, 도 12A 내지 도 12C의 복호 장치를 이용하면, 복호 횟수를 매우 많게 할 수 있어, 오류 정정 성능의 향상을 기대할 수 있다.
그러나, 도 12A 내지 도 12C의 복호 장치는, 태너 그래프의 모든 브랜치에 대응하는 메시지의 연산을, 병렬로 행하기 때문에, 회로 규모가, 부호 길이에 비례하여 커진다. 또한, 도 12A 내지 도 12C의 복호 장치를, 임의의 부호 길이의, 임의의 부호화율의, 임의의 검사 행렬을 갖는 LDPC 부호의 복호를 행하는 장치로서 구성한 경우, 그 복호 장치에서, 다른 부호 길이나, 다른 부호화율, 다른 검사 행 렬을 갖는 LDPC 부호의 복호를 행하는 것은 곤란하게 된다. 즉, 도 12A 내지 도 12C의 복호 장치는, 도 9의 복호 장치와 같이, 제어 신호를 변화시키는 것만으로는, 다양한 부호를 복호하는 것에 대처하는 것이 곤란하여, 부호 의존성이 높다.
도 9 및 도 12A 내지 도 12C의 복호 장치 외에, 한개나 전부가 아니라, 4개씩의 메시지의 계산을 동시에 행하는 실장법에 대하여, 예를 들면, E. Yeo, P. Pakzad, B. Nikolic and V. Anantharam, "VLSI Architectures for iterative Decoders in Magnetic Recording Channels", IEEE Transactions on Magnetics, Vol. 37, No. 2, March 2001에 기술되어 있지만, 이 경우, 메모리가 서로 다른 어드레스로부터의 동시 판독, 혹은 동시 기입을 피하는 것이 일반적으로는 용이하지 않아, 메모리 액세스 제어가 곤란하다고 하는 문제가 있다.
또한, 섬 프로덕트 알고리즘을 근사하여 실장하는 방법 등도 제안되어 있지만, 이 방법에서는, 성능의 열화를 초래하게 된다. 섬 프로덕트 알고리즘을 하드웨어에 실장하는 경우에는, 상술한 바와 같이, 브랜치에 대응하는 메시지의 연산(체크 노드 연산과 비트 노드(bit node) 계산)을, 1개씩 시리얼(serial)로 행하는 방법, 모두 병렬(풀 패러럴(ful1 parallel))로 행하는 방법, 몇개씩 병렬(패러럴(parallel))로 행하는 방법이 있다.
그러나, 브랜치에 대응하는 메시지의 연산을 1개씩 행하는 방법에서는, 높은 동작 주파수가 필요로 된다. 따라서, 처리량(throughput)을 올리는 방법으로서, 장치를, 파이프라인(pipeline)화하는 방법이 있지만, 이 경우, 회로 규모, 특히 메모리(의 용량)이 커지게 된다.
또한, 메시지의 연산을 모두 병렬로 행하는 방법에서는, 로직(logic)의 회로 규모가 커짐과 함께, 부호 의존성이 높아진다.
또한, 메시지의 연산을, 몇개씩 병렬로 행하는 방법에서는, 메모리 액세스의 제어가 어려워진다.
<발명의 개시>
본 발명은, 이러한 상황을 감안하여 이루어진 것으로, 로직, 메모리 모두 회로 규모를 억제하면서, 동작 주파수도 충분히 실현 가능한 범위로 억제하여, 메모리 액세스의 제어도 용이하게 행할 수 있도록 하는 것이다.
본 발명의 복호 장치는, P×P의 단위 행렬, 그 단위 행렬의 콤포넌트인 1 중의 1개 이상이 0으로 된 행렬인 준단위 행렬, 단위 행렬 혹은 준단위 행렬을 사이클릭 시프트한 행렬인 시프트 행렬, 단위 행렬, 준단위 행렬, 혹은 시프트 행렬 중의 복수의 합인 합 행렬, 또는 P×P의 0행렬을 구성 행렬로 하여, LDPC 부호의 검사 행렬이, 복수의 구성 행렬의 조합으로 표시되는 경우에 있어서, LDPC 부호의 복호를 위한 P개의 체크 노드의 연산을 동시에 행하는 제1 연산 수단과, LDPC 부호의 복호를 위한 P개의 배리어블 노드의 연산을 동시에 행하는 제2 연산 수단을 포함하는 것을 특징으로 한다.
제1 연산 수단은, 체크 노드의 연산을 행하는 P개의 체크 노드 계산기를 갖고, 제2 연산 수단은, 배리어블 노드의 연산을 행하는 P개의 배리어블 노드 계산기를 갖도록 할 수 있다.
P개의 체크 노드의 연산, 또는 P개의 배리어블 노드의 연산의 결과 얻어지는 P개의 브랜치에 대응하는 메시지 데이터를 동시에 기입 및 판독하는 메시지 기억 수단을 더 구비하도록 할 수 있다.
메시지 기억 수단은, 체크 노드의 연산 시에 판독되는 브랜치에 대응하는 메시지 데이터를, 검사 행렬의 1을 행 방향으로 채우도록 저장하도록 할 수 있다.
메시지 기억 수단은, 배리어블 노드 연산 시에 판독되는 브랜치에 대응하는 메시지 데이터를, 검사 행렬의 1을 열 방향으로 채우도록 저장하도록 할 수 있다.
메시지 기억 수단은, 검사 행렬을 나타내는 구성 행렬 중의, 웨이트가 2 이상인 구성 행렬에 대하여, 그 구성 행렬을, 웨이트가 1인 단위 행렬, 준단위 행렬, 또는 시프트 행렬의 합의 형태로 표현하였을 때의, 그 웨이트가 1인 단위 행렬, 준단위 행렬, 또는 시프트 행렬에 속하는 P개의 브랜치에 대응하는 메시지를, 동일한 어드레스에 저장하도록 할 수 있다.
메시지 기억 수단은, 행 수/P개의 FIFO와, 열 수/P개의 FIFO로 구성되며, 행 수/P개의 FIFO와 열 수/P개의 FIFO는, 각각, 검사 행렬의 행과 열의 웨이트에 대응하는 워드 수를 갖도록 할 수 있다.
메시지 기억 수단은, RAM(Random Access Memory)으로 구성되며, RAM은, 메시지 데이터를, 판독되는 순서로 채워 저장하고, 저장 위치순으로 판독하도록 할 수 있다.
LDPC 부호의 수신 정보를 저장함과 함께, P개의 수신 정보를 동시에 판독하는 수신 정보 기억 수단을 더 구비하도록 할 수 있다.
수신 정보 기억 수단은, 수신 정보를, 배리어블 노드의 연산에 필요로 되는 순서로 판독할 수 있도록 저장하도록 할 수 있다.
P개의 체크 노드의 연산, 또는 P개의 배리어블 노드의 연산의 결과 얻어지는 메시지를 재배열하는 재배열 수단을 더 구비하도록 할 수 있다.
재배열 수단은, 배럴 시프터로 구성되도록 할 수 있다.
제1 연산 수단과 제2 연산 수단은, P개의 브랜치에 대응하는 메시지를 구하도록 할 수 있다.
제1 연산 수단은, P개의 체크 노드의 연산과 P개의 배리어블 노드의 연산의 일부를 행하고, 제2 연산 수단은, P개의 배리어블 노드의 연산의 다른 일부를 행하도록 할 수 있다.
제1 연산 수단은, P개의 체크 노드의 연산과 P개의 배리어블 노드의 연산의 일부를 행하는 P개의 계산기를 갖고, 제2 연산 수단은, P개의 배리어블 노드의 연산의 다른 일부를 행하는 P개의 계산기를 갖도록 할 수 있다.
제1 연산 수단이 P개의 체크 노드의 연산과 P개의 배리어블 노드의 연산의 일부를 행함으로써 얻어지는 P개의 브랜치에 대응하는 제1 복호 도중 결과를 동시에 기입 및 판독하는 제1 복호 도중 결과 기억 수단을 더 구비하도록 할 수 있다.
제1 복호 도중 기억 수단은, P개의 배리어블 노드의 연산의 다른 일부를 행할 때에 판독되는 브랜치에 대응하는 제1 복호 도중 결과를, 검사 행렬의 1을 행 방향으로 채우도록 저장하도록 할 수 있다.
제1 복호 도중 결과 기억 수단은, 2개의 싱글 포트 RAM(Random Access Memory)이도록 할 수 있다.
2개의 싱글 포트 RAM은, 제1 복호 도중 결과를 P개씩 교대로 저장하도록 할 수 있다.
2개의 싱글 포트 RAM(Random Access Memory)은, 각각 동일한 어드레스에 저장되어 있는 제1 복호 도중 결과를 판독하도록 할 수 있다.
제1 복호 도중 결과 기억 수단은, 검사 행렬을 나타내는 구성 행렬 중의, 웨이트가 2 이상인 구성 행렬에 대하여, 그 구성 행렬을, 웨이트가 1인 단위 행렬, 준단위 행렬, 또는 시프트 행렬의 합의 형태로 표현하였을 때의, 그 웨이트가 1인 단위 행렬, 준단위 행렬, 또는 시프트 행렬에 속하는 P개의 브랜치에 대응하는 제1 복호 도중 결과를, 동일한 어드레스에 저장하도록 할 수 있다.
제2 연산 수단이 P개의 배리어블 노드의 연산의 다른 일부를 행함으로써 얻어지는 P개의 브랜치에 대응하는 제2 복호 도중 결과를 동시에 기입 및 판독하는 제2 복호 도중 결과 기억 수단을 더 구비하도록 할 수 있다.
LDPC 부호의 수신 정보를 저장함과 함께, P개의 수신 정보를 동시에 판독하는 수신 정보 기억 수단을 더 구비하도록 할 수 있다.
수신 정보 기억 수단은, 수신 정보를, P개의 배리어블 노드의 연산의 다른 일부의 연산에 필요로 되는 순서로 판독할 수 있도록 저장하도록 할 수 있다.
제1 연산 수단이 P개의 체크 노드의 연산과 P개의 배리어블 노드의 연산의 일부를 행함으로써 얻어지는 제1 복호 도중 결과, 또는 제2 연산 수단이 P개의 배리어블 노드의 연산의 다른 일부를 행함으로써 얻어지는 제2 복호 도중 결과를 재배열하는 재배열 수단을 더 구비하도록 할 수 있다.
재배열 수단은, 배럴 시프터로 구성되도록 할 수 있다.
제1 연산 수단은, P개의 체크 노드의 연산의 일부를 행하고, 제2 연산 수단은, P개의 체크 노드의 연산의 다른 일부와, P개의 배리어블 노드의 연산을 행하도록 할 수 있다.
제1 연산 수단은, P개의 체크 노드의 연산의 일부를 행하는 P개의 계산기를 갖고, 제2 연산 수단은, P개의 체크 노드의 연산의 다른 일부와, P개의 배리어블 노드의 연산을 행하는 P개의 계산기를 가질 수 있다.
제1 연산 수단이 P개의 체크 노드의 연산의 일부를 행함으로써 얻어지는 P개의 브랜치에 대응하는 제1 복호 도중 결과를 동시에 기입 및 판독하는 제1 복호 도중 결과 기억 수단을 더 구비하도록 할 수 있다.
제2 연산 수단이 P개의 체크 노드의 연산의 다른 일부와, P개의 배리어블 노드의 연산을 행함으로써 얻어지는 P개의 브랜치에 대응하는 제2 복호 도중 결과를 동시에 기입 및 판독하는 제2 복호 도중 결과 기억 수단을 더 구비하도록 할 수 있다.
제2 복호 도중 결과 기억 수단은, P개의 체크 노드의 연산의 다른 일부와, P개의 배리어블 노드의 연산을 행할 때에 판독되는 브랜치에 대응하는 제2 복호 도중 결과를, 검사 행렬의 1을 열 방향으로 채우도록 저장하도록 할 수 있다.
제2 복호 도중 결과 기억 수단은, 2개의 싱글 포트 RAM(Random Access Memory)이도록 할 수 있다.
2개의 싱글 포트 RAM은, 제2 복호 도중 결과를 P개씩 교대로 저장하도록 할 수 있다.
2개의 싱글 포트 RAM(Random Access Memory)는, 각각 동일한 어드레스에 저장되어 있는 제2 복호 도중 결과를 판독하도록 할 수 있다.
제2 복호 도중 결과 기억 수단은, 검사 행렬을 나타내는 구성 행렬 중의, 웨이트가 2 이상인 구성 행렬에 대하여, 그 구성 행렬을, 웨이트가 1인 단위 행렬, 준단위 행렬, 또는 시프트 행렬의 합의 형태로 표현하였을 때의, 그 웨이트가 1인 단위 행렬, 준단위 행렬, 또는 시프트 행렬에 속하는 P개의 브랜치에 대응하는 제2 복호 도중 결과를, 동일한 어드레스에 저장하도록 할 수 있다.
LDPC 부호의 수신 정보를 저장함과 함께, P개의 수신 정보를 동시에 판독하는 수신 정보 기억 수단을 더 구비하도록 할 수 있다.
청구 범위 제36항에 기재된 복호 장치로서, 수신 정보 기억 수단은, 수신 정보를, P개의 체크 노드의 연산의 다른 일부와, P개의 배리어블 노드의 연산에 필요로 되는 순서로 판독할 수 있도록 저장하도록 할 수 있다.
제1 연산 수단이 P개의 체크 노드의 연산의 일부를 행함으로써 얻어지는 제1 복호 도중 결과, 또는 제2 연산이 P개의 체크 노드의 연산의 다른 일부와, P개의 배리어블 노드의 연산을 행함으로써 얻어지는 제2 복호 도중 결과를 재배열하는 재배열 수단을 더 구비하도록 할 수 있다.
재배열 수단은, 배럴 시프터로 구성되도록 할 수 있다.
본 발명의 복호 방법은, P×P의 단위 행렬, 그 단위 행렬의 콤포넌트인 1 중의 1개 이상이 0으로 된 행렬인 준단위 행렬, 단위 행렬 혹은 준단위 행렬을 사이 클릭 시프트한 행렬인 시프트 행렬, 단위 행렬, 준단위 행렬, 혹은 시프트 행렬 중의 복수의 합인 합 행렬, 또는 P×P의 0행렬을 구성 행렬로 하여, LDPC 부호의 검사 행렬이, 복수의 구성 행렬의 조합으로 표시되는 경우에 있어서, LDPC 부호의 복호를 위한 P개의 체크 노드의 연산을 동시에 행하는 제1 연산 단계와, LDPC 부호의 복호를 위한 P개의 배리어블 노드의 연산을 동시에 행하는 제2 연산 단계를 포함하는 것을 특징으로 한다.
본 발명의 프로그램은, LDPC 부호의 복호를 위한 P개의 체크 노드의 연산을 동시에 행하는 제1 연산 단계와, LDPC 부호의 복호를 위한 P개의 배리어블 노드의 연산을 동시에 행하는 제2 연산 단계를 포함하는 것을 특징으로 한다.
본 발명에서는, P×P의 단위 행렬, 그 단위 행렬의 콤포넌트인 1 중의 1개 이상이 0으로 된 행렬인 준단위 행렬, 단위 행렬 혹은 준단위 행렬을 사이클릭 시프트한 행렬인 시프트 행렬, 단위 행렬, 준단위 행렬, 혹은 시프트 행렬 중의 복수의 합인 합 행렬, 또는 P×P의 0행렬을 구성 행렬로 하여, LDPC 부호의 검사 행렬이, 복수의 구성 행렬의 조합으로 표시되는 경우에 있어서, LDPC 부호의 복호를 위한 P개의 체크 노드의 연산이 동시에 행해져, LDPC 부호의 복호를 위한 P개의 배리어블 노드의 연산이 동시에 행해진다.
도 1은 LDPC 부호의 검사 행렬 H를 설명하는 도면.
도 2는 LDPC 부호의 복호 수순을 설명하는 흐름도.
도 3은 메시지의 흐름을 설명하는 도면.
도 4는 LDPC 부호의 검사 행렬의 예를 도시하는 도면.
도 5는 검사 행렬의 태너 그래프를 도시하는 도면.
도 6은 배리어블 노드를 도시하는 도면.
도 7은 체크 노드를 도시하는 도면.
도 8은 LDPC 부호의 검사 행렬의 예를 도시하는 도면.
도 9는 노드 연산을 하나씩 행하는 LDPC 부호의 복호 장치의 구성예를 도시하는 블록도.
도 10은 메시지를 하나씩 계산하는 체크 노드 계산기의 구성예를 도시하는 블록도.
도 11은 메시지를 하나씩 계산하는 배리어블 노드 계산기의 구성예를 도시하는 블록도.
도 12A는 노드 연산을 모두 동시에 행하는 LDPC 부호의 복호 장치의 구성예를 도시하는 블록도.
도 12B는 노드 연산을 모두 동시에 행하는 LDPC 부호의 복호 장치의 구성예를 도시하는 블록도.
도 12C는 노드 연산을 모두 동시에 행하는 LDPC 부호의 복호 장치의 구성예를 도시하는 블록도.
도 13은 메시지를 동시에 계산하는 체크 노드 계산기의 구성예를 도시하는 블록도.
도 14는 메시지를 동시에 계산하는 배리어블 노드 계산기의 구성예를 도시하 는 블록도.
도 15는 5×5 단위로 분할한 검사 행렬을 도시하는 도면.
도 16A는 본 발명을 적용한 복호 장치의 일 실시 형태의 구성예를 도시하는 블록도.
도 16B는 본 발명을 적용한 복호 장치의 일 실시 형태의 구성예를 도시하는 블록도.
도 16C는 본 발명을 적용한 복호 장치의 일 실시 형태의 구성예를 도시하는 블록도.
도 17은 도 16A 내지 도 16C의 복호 장치의 복호 처리를 설명하는 흐름도.
도 18은 본 발명을 적용한 복호 장치의 일 실시 형태의 구성예를 도시하는 블록도.
도 19는 체크 노드 계산기의 구성예를 도시하는 블록도.
도 20은 배리어블 노드 계산기의 구성예를 도시하는 블록도.
도 21은 도 18의 계산기의 구성예를 도시하는 블록도.
도 22는 도 18의 계산기의 구성예를 도시하는 블록도.
도 23은 도 18의 복호 도중 결과 저장용 메모리의 구성예를 도시하는 블록도.
도 24는 도 18의 복호 도중 결과 저장용 RAM의 동작을 설명하는 타이밍차트.
도 25는 도 18의 복호 장치의 복호 처리를 설명하는 흐름도.
도 26은 본 발명을 적용한 복호 장치의 일 실시 형태의 구성예를 도시하는 블록도.
도 27은 체크 노드 계산기의 구성예를 도시하는 블록도.
도 28은 배리어블 노드 계산기의 구성예를 도시하는 블록도.
도 29는 도 26의 계산기의 구성예를 도시하는 블록도.
도 30은 도 26의 계산기의 구성예를 도시하는 블록도.
도 31은 도 26의 복호 도중 결과 저장용 메모리의 구성예를 도시하는 블록도.
도 32는 도 31의 복호 도중 결과 저장용 RAM의 동작을 설명하는 타이밍차트.
도 33은 도 26의 복호 장치의 복호 처리를 설명하는 흐름도.
도 34는 본 발명을 적용한 컴퓨터의 일 실시 형태의 구성예를 도시하는 블록도.
<발명을 실시하기 위한 최량의 형태>
이하, 본 발명을 적용한 구체적인 실시 형태에 대하여, 도면을 참조하면서 상세히 설명한다.
도 15는 5×5의 행렬의 단위로 간격을 둔 30×90의 검사 행렬의 예를 도시하고 있다. 또한, 도 15의 검사 행렬 자체는, 도 8에 도시한 검사 행렬과 동일하다.
도 15에서는, 검사 행렬은, 5×5의 단위 행렬, 그 단위 행렬의 1 중 1개 이상이 0으로 된 행렬(이하, 적절하게, 준단위 행렬이라고 함), 단위 행렬 또는 준단위 행렬을 사이클릭 시프트(cyclic shift)한 행렬(이하, 적절하게, 시프트 행렬이라고 함), 단위 행렬, 준단위 행렬, 또는 시프트 행렬 중의 2 이상(복수)의 합(이 하, 적절하게, 합 행렬이라고 함), 5×5의 0행렬의 조합으로 표현되어 있다. 또한, 도 15의 검사 행렬로 표현되는 LDPC 부호는, 부호화율 2/3, 부호 길이 90이다.
도 15의 검사 행렬은, 5×5의 단위 행렬, 준단위 행렬, 시프트 행렬, 합 행렬, 0행렬로 구성되어 있다고 할 수 있다. 따라서, 검사 행렬을 구성하는, 이들의 5×5의 행렬을, 이하, 적절하게, 구성 행렬이라고 한다.
도 16A 내지 도 16C는, 도 15의 검사 행렬로 표현되는 LDPC 부호를 복호하는 복호 장치의 일 실시 형태의 구성예를 도시하고 있다. 또한, 도 16A는, 복호 장치의 전체의 구성을 도시하고 있다. 또한, 도 16B는, 도 16A의 복호 장치의 점선 B로 둘러싸인 도면에서의 좌측부의 상세 구성을 도시하고, 도 16C는, 도 16A의 복호 장치의 점선 C로 둘러싸인 도면에서의 우측부의 상세 구성을 도시하고 있다.
도 16A 내지 도 16C의 복호 장치(300)는, 스위치(310, 315), 6개의 FIFO(3111 내지 3116)로 이루어지는 브랜치 데이터 저장 메모리(311), 셀렉터(312), 5개의 체크 노드 계산기(3131 내지 3135)로 이루어지는 체크 노드 계산부(313), 2개의 사이클릭 시프트 회로(314, 320), 18개의 FIFO(3161 내지 31618)로 이루어지는 브랜치 데이터 저장 메모리(316), 셀렉터(317), 수신 정보를 저장하는 수신 데이터용 메모리(318), 배리어블 노드 계산부(319), 제어부(321)로 구성된다.
이 복호 장치(300)의 각 부에 대하여 상세히 설명하기 전에, 우선, 브랜치 데이터 저장 메모리(311와 316)에의 데이터의 저장 방법에 대하여 설명한다.
브랜치 데이터 저장 메모리(311)는, 검사 행렬의 행 수 30을 구성 행렬의 행 수 5로 제산한 수인 6개의 FIFO(3111 내지 3116)로 구성되어 있다. FIFO(311y)(y=1, 2, …, 6)는, 구성 행렬의 행 수 및 열 수인 5개의 브랜치에 대응하는 메시지를 동시에 판독하거나 혹은 기입할 수 있도록 되어 있고, 그 길이(단수)는, 검사 행렬의 행 방향의 1의 수(허밍 웨이트)의 최대 수인 9로 되어 있다.
FIFO(3111)에는, 도 15의 검사 행렬의 제1행째부터 제5행째까지의 1의 위치에 대응하는 데이터가, 각 행 모두 가로 방향(열 방향)으로 채운 형태로(0을 무시한 형태로) 저장된다. 즉, 제j 행 제i 열을, (j, i)로 나타내는 것으로 하면, FIFO(3111)의 제1 요소(제1 단)에는, 검사 행렬의 (1, 1)부터 (5, 5)의 5×5의 단위 행렬의 1의 위치에 대응하는 데이터가 저장된다. 제2 요소에는, 검사 행렬의 구성 행렬인 (1, 21)부터 (5, 25)의 시프트 행렬(5×5의 단위 행렬을 우측 방향으로 3개만큼 사이클릭 시프트한 시프트 행렬)의 1의 위치에 대응하는 데이터가 저장된다. 제3부터 제8 요소도 마찬가지로 검사 행렬의 구성 행렬과 대응지어 데이터가 저장된다. 그리고, 제9 요소에는, 검사 행렬의 (1, 86)부터 (5, 90)의 시프트 행렬(5×5의 단위 행렬 중의 1행째의 1을 0으로 치환하여 1개만큼 좌측으로 사이클릭 시프트한 시프트 행렬)의 1의 위치에 대응하는 데이터가 저장된다. 여기서, 검사 행렬의 (1, 86)부터 (5, 90)의 시프트 행렬에서는, 1행째에 1이 없기 때문에, FIFO(3111)의 1행째만 요소 수는 8, 나머지의 행은 요소 수가 9로 된다.
FIFO(3112)에는, 도 15의 검사 행렬의 제6행째부터 제10행째까지의 1의 위치 에 대응하는 데이터가 저장된다. 즉, FIFO(3112)의 제1 요소에는, 검사 행렬의 (6, 1)부터 (10, 5)의 합 행렬(5×5의 단위 행렬을 우측으로 1개만큼 사이클릭 시프트한 제1 시프트 행렬과, 우측으로 2개만큼 사이클릭 시프트한 제2 시프트 행렬의 합인 합 행렬)을 구성하는 제1 시프트 행렬의 1의 위치에 대응하는 데이터가 저장된다. 또한, 제2 요소에는, 검사 행렬의 (6, 1)부터 (10, 5)의 합 행렬을 구성하는 제2 시프트 행렬의 1의 위치에 대응하는 데이터가 저장된다.
즉, 웨이트가 2 이상인 구성 행렬에 대해서는, 그 구성 행렬을, 웨이트가 1인 P×P의 단위 행렬, 그 콤포넌트인 1 중 1개 이상이 0으로 된 준단위 행렬, 또는 단위 행렬 혹은 준단위 행렬을 사이클릭 시프트한 시프트 행렬 중의 복수의 합의 형태로 표현하였을 때의, 그 웨이트가 1인 단위 행렬, 준단위 행렬, 또는 시프트 행렬의 1의 위치에 대응하는 데이터(단위 행렬, 준단위 행렬, 또는 시프트 행렬에 속하는 브랜치에 대응하는 메시지)는, 동일 어드레스(FIFO(3111 내지 3116) 중의 동일한 FIFO)에 저장된다.
이하, 제3부터 제9 요소에 대해서도, 검사 행렬에 대응지어 데이터가 저장된다. FIFO(3112)는 전체 행 모두 요소 수는 9로 된다.
FIFO(3113 내지 3116)도 마찬가지로 검사 행렬에 대응지어 데이터를 저장하고, 각 FIFO(3113 내지 3116) 각각의 길이는 9이다.
브랜치 데이터 저장 메모리(316)는, 검사 행렬의 열 수 90을, 구성 행렬의 열 수인 5로 나눈 18개의 FIFO(3161 내지 31618)로 구성되어 있다. FIFO(316x )(x=1, 2, …, 18)는, 구성 행렬의 행 수 및 열 수인 5개의 브랜치에 대응하는 메시지를 동시에 판독하거나 혹은 기입할 수 있도록 되어 있다.
FIFO(3161)에는, 도 15의 검사 행렬의 제1열째부터 제5열째까지의 1의 위치에 대응하는 데이터가, 각 열 모두 세로 방향(행 방향)으로 채운 형태로(0을 무시한 형태로) 저장된다. 즉, FIFO(3161)의 제1 요소(제1 단)에는, 검사 행렬의 (1, 1)부터 (5, 5)의 5×5의 단위 행렬의 1의 위치에 대응하는 데이터가 저장된다. 제2 요소에는, 검사 행렬의 (6, 1)부터 (10, 5)의 합 행렬(5×5의 단위 행렬을 우측으로 1개만큼 사이클릭 시프트한 제1 시프트 행렬과, 우측으로 2개만큼 사이클릭 시프트한 제2 시프트 행렬과의 합인 합 행렬)을 구성하는 제1 시프트 행렬의 1의 위치에 대응하는 데이터가 저장된다. 또한, 제3 요소에는, 검사 행렬의 (6, 1)부터 (10, 5)의 합 행렬을 구성하는 제2 시프트 행렬의 1의 위치에 대응하는 데이터가 저장된다.
즉, 웨이트가 2 이상인 구성 행렬에 대해서는, 그 구성 행렬을, 웨이트가 1인 P×P의 단위 행렬, 그 콤포넌트인 1 중 1개 이상이 0으로 된 준단위 행렬, 또는 단위 행렬 혹은 준단위 행렬을 사이클릭 시프트한 시프트 행렬 중의 복수의 합의 형태로 표현하였을 때의, 그 웨이트가 1인 단위 행렬, 준단위 행렬, 또는 시프트 행렬의 1의 위치에 대응하는 데이터(단위 행렬, 준단위 행렬, 또는 시프트 행렬에 속하는 브랜치에 대응하는 메시지)는, 동일 어드레스(FIFO(3161 내지 31618) 중의 동일한 FIFO)에 저장된다.
이하, 제4 및 제5 요소에 대해서도, 검사 행렬에 대응지어, 데이터가 저장된다. 이 FIFO(3161)의 요소 수(단 수)는, 검사 행렬의 제1 열부터 제5 열에서의 행 방향의 1의 수(허밍 웨이트)의 최대 수인 5로 되어 있다.
FIFO(3162와 3163)도 마찬가지로 검사 행렬에 대응지어 데이터를 저장하고, 각각의 길이(단 수)는 5이다. FIFO(3164 내지 31612)도 마찬가지로 검사 행렬에 대응지어 데이터를 저장하고, 각각의 길이는 3이다. FIFO(31613 내지 31618)도 마찬가지로 검사 행렬에 대응지어 데이터를 저장하고, 각각의 길이는 2이다. 단, FIFO(31618)의 제1 요소는, 검사 행렬의 (1, 86)부터 (5, 90)에 상당하고, 제5열째(검사 행렬의 (1, 90)부터 (5, 90))에 1이 없기 때문에, 데이터는 저장되지 않는다.
이하, 도 16A 내지 도 16C의 복호 장치(300)의 각 부의 동작에 대하여 상세히 설명한다. 스위치(310)에는, 사이클릭 시프트 회로(320)로부터 5개의 메시지(데이터) D319가 공급됨과 함께, 제어부(321)로부터 검사 행렬의 어떤 행에 속하는지의 정보(Matrix 데이터)를 나타내는 제어 신호 D320이 공급된다. 제어 신호 D320에 따라, 5개의 메시지(데이터) D319를 저장하는 FIFO를, FIFO(3111 내지 3116) 중에서 선택하고, 선택한 FIFO에 5개의 메시지 데이터 D319를 통합하여 순서대로 공급해 간다.
브랜치 데이터 저장 메모리(311)는, 6개의 FIFO(3111 내지 3116)로 이루어진 다. 브랜치 데이터 저장 메모리(311)의 FIFO(3111 내지 3116)에는, 스위치(310)로부터, 5개의 메시지 D319가 통합되어 순서대로 공급되며, FIFO(3111 내지 3116)는, 5개의 메시지 D319를 통합하여 순서대로(동시에) 저장해 간다. 또한, 브랜치 데이터 저장 메모리(311)는, 데이터를 판독할 때에는, FIFO(3111)로부터 5개의 메시지(데이터) D3111을 순서대로 판독하고, 다음단의 셀렉터(312)에 공급한다. 브랜치 데이터 저장 메모리(311)는, FIFO(3111)로부터의 메시지 D3111의 판독 종료 후, FIFO(3112 내지 3116)로부터도, 순서대로, 메시지 D3111 내지 D3116 을 각각 판독하여, 셀렉터(312)에 공급한다.
셀렉터(312)에는, 제어부(321)로부터, FIFO(3111 내지 3116) 중, 메시지 데이터를 판독하는 FIFO(현재 데이터가 판독되고 있는 FIFO)의 선택을 나타내는 선택 신호 D321이 공급됨과 함께, 브랜치 데이터 저장 메모리(311)로부터 5개의 메시지(데이터) D3111 내지 D3116이 공급된다. 셀렉터(312)는, 선택 신호 D321에 따라, FIFO(3111 내지 3116) 중의, 현재 데이터가 판독되고 있는 FIFO를 선택하고, 그 선택한 FIFO로부터 공급된 5개의 메시지 데이터를, 메시지 D312로서, 체크 노드 계산부(313)에 공급한다.
체크 노드 계산부(313)는, 5개의 체크 노드 계산기(3131 내지 3135)로 이루어진다. 체크 노드 계산부(313)에는, 셀렉터(312)를 통해 5개의 메시지 D312가 공 급되며, 그 메시지 D312가, 체크 노드 계산기(3131 내지 3135)의 각각에 1개씩 공급된다. 또한, 체크 노드 계산부(313)에는, 제어부(321)로부터 제어 신호 D322가 공급되며, 그 제어 신호 D322가, 체크 노드 계산기(3131 내지 3135)에 공급된다. 체크 노드 계산기(3131 내지 3135)는, 메시지 D312를 이용하여, 수학식 7에 따라 동시에 연산을 행하고, 그 연산의 결과, 5개의 브랜치에 대응하는 메시지 D313을 구한다. 체크 노드 계산부(313)는, 체크 노드 계산기(3131 내지 3135)에 의한 연산의 결과 얻어지는 5개의 메시지 D313을 사이클릭 시프트 회로(314)에 공급한다.
여기서, 제어부(321)로부터 체크 노드 계산부(313)에 공급되는 제어 신호 D322는, 도 10의 제어 신호 D106에 대응하는 것이고, 체크 노드 계산부(3131 내지 3135) 각각은, 도 10에 도시한 체크 노드 계산기(101)와 마찬가지로 구성된다.
사이클릭 시프트 회로(314)에는, 체크 노드 계산부(313)에서 계산된 5개의 메시지 D313이 공급됨과 함께, 제어부(321)로부터, 그 메시지 D313에 대응하는 브랜치가 검사 행렬에서 기초가 되는 단위 행렬 등을 몇개 사이클릭 시프트한 것인지의 정보(Matrix 데이터)를 나타내는 제어 신호 D323이 공급된다. 사이클릭 시프트 회로(314)는, 제어 신호 D323에 기초하여, 5개의 메시지 D313을 재배열하는 사이클릭 시프트를 행하고, 그 결과를 메시지 D314로서, 스위치(315)에 공급한다.
스위치(315)에는, 사이클릭 시프트 회로(314)로부터 공급되는 5개의 메시지(데이터) D314가 검사 행렬의 어떤 열에 속하는지의 정보를 나타내는 제어 신호 D324가 공급됨과 함께, 사이클릭 시프트 회로(314)로부터, 메시지 D314가 공급된다. 스위치(315)는, 제어 신호 D324에 따라, 메시지 D314를 저장하는 FIFO를, FIFO(3161 내지 31618) 중에서 선택하고, 선택한 FIFO에 5개의 메시지 D314를 통합하여 순서대로 공급해 간다.
브랜치 데이터 저장 메모리(316)는, 18개의 FIFO(3161 내지 31618)로 이루어진다. 브랜치 데이터 저장 메모리(316)의 FIFO(3161 내지 31618)에는, 스위치(315)로부터 5개의 메시지 D314가 통합되어 순서대로(동시에) 공급되며, FIFO(3161 내지 31618)는, 그 5개의 메시지 D314를 통합하여 순서대로 저장해 간다. 또한, 브랜치 데이터 저장 메모리(316)는, 데이터를 판독할 때에는, FIFO(3161)로부터 5개의 메시지 D3151을 순서대로 판독하여, 다음단의 셀렉터(317)에 공급한다. 브랜치 데이터 저장 메모리(316)는, FIFO(3161)로부터의 데이터의 판독의 종료 후, FIFO(3162 내지 31618)로부터도, 순서대로, 메시지 D3152 내지 D31318을 판독하여, 셀렉터(317)에 공급한다.
셀렉터(317)에는, 제어부(321)로부터 FIFO(3161 내지 31618) 중, 메시지 데이터를 판독하는 FIFO(현재 데이터가 판독되고 있는 FIFO)의 선택을 나타내는 선택 신호 D325가 공급됨과 함께, 브랜치 데이터 저장 메모리(316)로부터 메시지 데이터 D3151 내지 D31318이 공급된다. 셀렉터(317)는, 선택 신호 D325에 따라, FIFO(316 1 내지 31618) 중의, 현재 데이터가 판독되고 있는 FIFO를 선택하고, 그 선택한 FIFO로부터 공급되는 5개의 메시지 데이터를, 메시지 D316으로서, 배리어블 노드 계산부(319)와 상술한 수학식 5의 연산을 행하는 도시하지 않은 블록에 공급한다.
한편, 수신 데이터용 메모리(318)는, 통신로를 통해 수신한 수신 신호로부터, 수신 LLR(대수 우도비)을 계산하고 있으며, 그 계산한 수신 LLR을 5개 통합하여(동시에) 수신 데이터 D317(LDPC 부호)로서 배리어블 노드 계산부(319)와, 수학식 5의 연산을 행하는 도시하지 않은 블록에 공급한다. 또한, 수신 데이터용 메모리(318)는, 배리어블 노드 계산부(319)의 배리어블 노드 연산에 필요로 되는 순서대로, 수신 데이터 D317을 판독한다.
배리어블 노드 계산부(319)는, 5개의 배리어블 노드 계산기(3191 내지 3195)로 이루어진다. 배리어블 노드 계산부(319)에는, 셀렉터(317)를 통해 5개의 메시지 D316이 공급되며, 그 메시지 D316이, 배리어블 노드 계산기(3191 내지 3195)의 각각에 1개씩 공급된다. 또한, 배리어블 노드 계산부(319)에는, 수신 데이터용 메모리(318)로부터 5개의 수신 데이터 D317이 공급되며, 그 수신 데이터 D317이, 배리어블 노드 계산기(3191 내지 3195)의 각각에 1개씩 공급된다. 또한, 배리어블 노드 계산부(319)에는, 제어부(321)로부터 제어 신호 D326이 공급되며, 그 제어 신호 D326이 배리어블 노드 계산기(3191 내지 3195)에 공급된다.
배리어블 노드 계산기(3191 내지 3195)는, 메시지 D316과, 수신 데이터 D317 을 이용하여, 수학식 1에 따라 동시에 연산을 행하고, 그 연산의 결과, 5개의 브랜치에 대응하는 메시지 D318을 구한다. 배리어블 노드 계산부(319)는, 배리어블 노드 계산기(3191 내지 3195)의 결과 얻어지는 5개의 메시지 D318을, 사이클릭 시프트 회로(320)에 공급한다.
여기서, 제어부(521)로부터 배리어블 노드 계산부(319)에 공급되는 제어 신호 D326은, 도 11의 제어 신호 D107에 대응하는 것이고, 배리어블 노드 계산기(3191 내지 3195) 각각은, 도 11의 배리어블 노드 계산기(103)와 마찬가지로 구성된다.
사이클릭 시프트 회로(320)에는, 배리어블 노드 계산부(319)로부터 5개의 메시지 D318이 공급됨과 함께, 제어부(321)로부터, 그 메시지 D318에 대응하는 브랜치가 검사 행렬에서 기초가 되는 단위 행렬 등을 몇개 사이클릭 시프트한 것인지의 정보를 나타내는 제어 신호 D327이 공급된다. 사이클릭 시프트 회로(320)는, 제어 신호 D327에 기초하여, 메시지 D327을 재배열하는 사이클릭 시프트를 행하고, 그 결과를 메시지 D319로서, 스위치(310)에 공급한다.
또한, 제어부(321)는, 제어 신호 D320을 스위치(310)에, 선택 신호 D321을 셀렉터(312)에 공급함으로써, 각각을 제어한다. 또한 제어부(321)는, 제어 신호 D322를 체크 노드 계산부(313)에, 제어 신호 D323을 사이클릭 시프트 회로(314)에, 제어 신호 D324를 스위치(315)에 공급함으로써, 각각을 제어한다. 또한, 제어부(321)는, 선택 신호 D325를 셀렉터(317), 제어 신호 D326을 배리어블 노드 계산부(319)에, 제어 신호 D327을 사이클릭 시프트 회로(320)에 공급함으로써, 각각을 제 어한다.
이상의 동작을 1순환함으로써, LDPC 부호의 1회의 복호를 행할 수 있다. 도 16A 내지 도 16C의 복호 장치(300)는, 소정의 횟수만큼 LDPC 부호를 복호한 후, 도시하지 않지만, 수학식 5에 따라 최종적인 복호 결과를 구하여 출력한다.
또한, 브랜치 데이터(브랜치에 대응하는 메시지)가 부족한 개소에 관해서는, 메모리 저장 시(브랜치 데이터 저장 메모리(311와 316)에의 데이터 저장 시)에는, 어떤 메시지도 저장시키지 않고, 또한, 노드 연산 시(체크 노드 계산부(313)에서의 체크 노드 연산 시와 배리어블 노드 계산부(319)에서의 배리어블 노드 연산 시)에도 어떤 연산도 행하지 않는다.
도 17은, 도 16A 내지 도 16C의 복호 장치(300)의 복호 처리를 설명하는 흐름도이다. 이 처리는, 예를 들면, 수신 데이터용 메모리(318)에 복호해야 할 수신 데이터가 저장되었을 때, 개시된다.
단계 S31에서, 배리어블 노드 계산부(319)는, 배리어블 노드 연산을 행한다.
구체적으로는, 배리어블 노드 계산부(319)에는, 셀렉터(317)를 통해, 5개의 메시지 D316(메시지 uj)이 공급된다. 즉, 브랜치 데이터 저장 메모리(316)는, 후술하는 단계 S39에서 저장된 FIFO(3161)로부터 5개의 메시지 D3161을 순서대로 판독하고, 그 후, FIFO(3162 내지 31618)로부터도, 순서대로, 메시지 D3162 내지 D31618을 판독하여, 셀렉터(317)에 공급한다.
셀렉터(317)에는, 제어부(321)로부터 FIFO(3161 내지 31618) 중, 메시지(데이 터)를 판독하는 FIFO(현재 데이터가 판독되고 있는 FIFO)의 선택을 나타내는 선택 신호 D307이 공급됨과 함께, 브랜치 데이터 저장 메모리(316)로부터 메시지 데이터 D3161 내지 D31618이 공급된다. 셀렉터(317)는, 선택 신호 D307에 따라, FIFO(316 1 내지 31618) 중의, 현재 데이터가 판독되고 있는 FIFO를 선택하고, 그 선택한 FIFO로부터 공급되는 5개의 메시지 데이터를, 메시지 D316으로서, 배리어블 노드 계산부(319)에 공급한다.
또한, 수신 데이터용 메모리(306)로부터 공급된 수신 데이터 D309에 대하여, 아직 체크 노드 연산이 행해지지 않고, 브랜치 데이터 저장 메모리(316)에 메시지 D304가 저장되어 있지 않은 경우, 배리어블 노드 계산부(319)는, 배리어블 노드 연산에 이용하는 메시지 uj를 초기 값으로 설정한다.
또한, 배리어블 노드 계산부(319)에는, 수신 데이터용 메모리(318)로부터 5개의 수신 데이터 D309(수신값 u0i)가 공급되며, 그 수신 데이터 D309가, 배리어블 노드 계산기(3191 내지 3195)의 각각에 1개씩 공급된다. 또한, 배리어블 노드 계산부(319)에는, 제어부(321)로부터 제어 신호 D315가 공급되며, 그 제어 신호 D315가 배리어블 노드 계산기(3191 내지 3195)에 공급된다.
배리어블 노드 계산기(3191 내지 3195)는, 메시지 D316과, 수신 데이터 D309를 이용하여, 제어 신호 D315에 기초하여, 수학식 1에 따라 동시에 연산을 행하고, 그 연산의 결과 5개의 메시지 D319를 구한다.
즉, 제어부(321)가 배리어블 노드 계산부(319)에 공급하는 제어 신호 D315는, 상술한 도 11에서 설명한 제어 신호 D107에 대응하는 것이고, 배리어블 노드 계산기(3191 내지 3195)는, 제어 신호 D309에 따라, 셀렉터(317)를 통해, 브랜치 데이터 저장 메모리(316)로부터 필요한 메시지 D314(D316)를, 각각 1개씩 판독함과 함께, 수신 데이터용 메모리(318)로부터 공급된 5개의 수신 데이터 D309를, 각각 1개씩 판독하여, 배리어블 노드 연산을 행하고, 그 연산의 결과 5개의 메시지 D319를 동시에 구한다.
단계 S31의 처리 후에는, 단계 S32로 진행하여, 배리어블 노드 계산부(319)는, 배리어블 노드 계산기(3191 내지 3195)의 배리어블 노드 연산의 결과 얻어지는 5개의 메시지 D319(메시지 vi)를 사이클릭 시프트 회로(320)에 공급하고, 단계 S33으로 진행한다.
단계 S33에서, 사이클릭 시프트 회로(320)는, 배리어블 노드 계산부(319)로부터 공급된 5개의 메시지 D318을, 사이클릭 시프트한다(재배열한다).
구체적으로는, 사이클릭 시프트 회로(320)에는, 배리어블 노드 계산부(319)로부터 메시지 D318이 공급됨과 함께, 제어부(321)로부터, 그 메시지 D318에 대응하는 브랜치가 검사 행렬에서 기초가 되는 단위 행렬 등을 몇개 사이클릭 시프트한 것인지의 정보(Matrix 데이터)를 나타내는 제어 신호 D327이 공급된다. 사이클릭 시프트 회로(320)는, 제어 신호 D327에 기초하여, 5개의 메시지 D327을 사이클릭 시프트하고, 그 결과를 메시지 D319로서, 스위치(310)에 공급한다.
단계 S33의 처리 후에는, 단계 S34로 진행하여, 스위치(310)는, 사이클릭 시프트 회로(320)로부터 공급되는 5개의 메시지 D319를 브랜치 데이터 저장 메모리(311)에 공급한다.
구체적으로는, 스위치(310)에는, 사이클릭 시프트 회로(320)로부터 메시지(데이터) D304가 공급됨과 함께, 그 메시지 D304가 검사 행렬의 어떤 행에 속하는지의 정보를 나타내는 제어 신호 D312가 공급된다. 스위치(310)는, 제어 신호 D312에 따라, 메시지 D304를 저장하는 FIFO를, 브랜치 데이터 저장 메모리(311)의 FIFO(3001 내지 3006) 중에서 선택하고, 선택한 FIFO에 5개의 메시지 데이터 D304를 통합하여 순서대로 공급해 간다.
그리고, 브랜치 데이터 저장 메모리(311)의 FIFO(3001 내지 30018)는, 스위치(310)로부터 공급된 5개의 메시지 데이터 D304를 통합하여 순서대로 저장해 간다.
단계 S34의 처리 후에는, 단계 S35로 진행하여, 제어부(321)는, 배리어블 노드 계산부(319)에 의해, 모든 브랜치 수의 메시지가 연산되었는지의 여부를 판정하고, 모든 브랜치 수의 메시지가 연산되어 있지 않다고 판정한 경우, 단계 S31로 되돌아가, 상술한 처리를 반복한다.
한편, 단계 S35에서, 배리어블 노드 계산부(319)는, 모든 브랜치 수의 메시지가 연산되었다고 판정한 경우, 단계 S36으로 진행하고, 체크 노드 계산부(313)는, 체크 노드 연산을 행한다.
구체적으로는, 체크 노드 계산부(313)에는, 셀렉터(312)를 통해, 5개의 메시 지 D302가 공급된다. 즉, 브랜치 데이터 저장 메모리(311)는, 단계 S34에서 저장된 FIFO(3111)로부터 5개의 메시지 D3111(메시지 vi)을 순서대로 판독하고, 그 후, FIFO(3111 내지 3116)로부터도, 순서대로, 메시지 데이터 D3112 내지 D311 6을 판독하여, 셀렉터(312)에 공급한다.
셀렉터(312)에는, 제어부(321)로부터 FIFO(3111 내지 3116) 중, 메시지 데이터를 판독하는 FIFO(현재 데이터가 판독되고 있는 FIFO)의 선택을 나타내는 선택 신호 D321이 공급됨과 함께, 브랜치 데이터 저장 메모리(311)로부터 메시지 데이터 D3111 내지 D3116이 공급된다. 셀렉터(301)는, 선택 신호 D321에 따라, FIFO(311 1 내지 3116) 중의, 현재 데이터가 판독되고 있는 FIFO를 선택하고, 그 선택한 FIFO로부터 공급되는 5개의 메시지 데이터를, 메시지 D311로서, 체크 노드 계산부(313)에 공급한다.
또한, 체크 노드 계산부(313)에는, 제어부(321)로부터 제어 신호 D322가 공급된다. 체크 노드 계산부(313)의 체크 노드 계산기(3131 내지 3135)는, 제어 신호 D322에 기초하여, 메시지 D302를 이용하여, 상술한 수학식 7에 따라 동시에 체크 노드 연산을 행하고, 그 연산 결과인 5개의 메시지 D303(메시지 uj)을 구한다.
즉, 제어부(321)가 체크 노드 계산부(313)에 공급하는 제어 신호 D322는, 상술한 도 10에서 설명한 제어 신호 D106에 대응하는 것이고, 체크 노드 계산기(3131 내지 3135)는, 제어 신호 D322에 따라, 셀렉터(312)를 통해, 브랜치 데이터 저장 메모리(311)로부터 필요한 메시지 D311(D312)을, 각각 1개씩 판독하면서, 체크 노드 연산을 행하고, 그 연산의 결과 5개의 메시지 D313을 동시에 구한다.
단계 S37의 처리 후에는, 단계 S38로 진행하여, 체크 노드 계산부(313)는, 체크 노드의 연산의 결과 얻어지는 5개의 메시지 D313을 사이클릭 시프트 회로(314)에 출력하고, 단계 S38로 진행한다.
단계 S38에서, 사이클릭 시프트 회로(314)는, 체크 노드 계산부(313)로부터 공급된 5개의 메시지 D313을, 사이클릭 시프트한다.
구체적으로는, 사이클릭 시프트 회로(314)에는, 체크 노드 계산부(313)로부터 메시지 D313이 공급됨과 함께, 제어부(321)로부터, 그 메시지 D313에 대응하는 브랜치가 검사 행렬에서 기초가 되는 단위 행렬 등을 몇개 사이클릭 시프트한 것인지의 정보(Matrix 데이터)를 나타내는 제어 신호 D314가 공급된다. 사이클릭 시프트 회로(314)는, 제어 신호 D314에 기초하여, 5개의 메시지 D313을 사이클릭 시프트하고, 그 결과를 메시지 D304로서, 스위치(315)에 공급한다.
단계 S38의 처리 후에는, 단계 S39로 진행하여, 스위치(315)는, 사이클릭 시프트 회로(314)로부터 공급되는 5개의 메시지 D304를 브랜치 데이터 저장 메모리(316)에 저장한다.
구체적으로는, 스위치(316)에는, 사이클릭 시프트 회로(314)로부터, 5개의 메시지(데이터) D304가 공급됨과 함께, 그 메시지(데이터) D304가 검사 행렬의 어 떤 열에 속하는지의 정보를 나타내는 제어 신호 D324가 공급된다. 스위치(316)는, 제어 신호 D324에 따라, 메시지 D304를 저장하는 FIFO를, 브랜치 데이터 저장 메모리(316)의 FIFO(3161 내지 31618) 중에서 선택하고, 선택한 FIFO에 5개의 메시지 데이터 D304를 통합하여 순서대로 공급해 간다.
그리고, 브랜치 데이터 저장 메모리(316)의 FIFO(3161 내지 31618)는, 스위치(316)로부터 공급된 5개의 메시지 데이터 D304를 통합하여 순서대로 저장해 간다.
단계 S39의 처리 후에는, 단계 S40로 진행하여, 제어부(321)는, 체크 노드 계산부(313)에 의해, 모든 브랜치 수의 메시지가 연산되었는지의 여부를 판정하고, 모든 브랜치 수의 메시지가 연산되어 있지 않다고 판정한 경우, 단계 S36으로 되돌아가, 상술한 처리를 반복한다.
한편, 단계 S40에서, 제어부(321)는, 체크 노드 계산부(313)에 의해, 모든 브랜치 수의 메시지가 연산되었다고 판정한 경우, 처리를 종료한다.
또한, 복호 장치(300)는, 복호 횟수만큼 도 17의 복호 처리를 반복하여 행하고, 체크 노드 계산부(313)가, 최후의 체크 노드 연산을 행한 경우, 체크 노드 연산의 결과 얻어지는 메시지 D304가, 브랜치 데이터 저장 메모리(316)로부터, 셀렉터(317)를 통해, 상술한 수학식 5의 연산을 행하는 도시하지 않은 블록에 공급된다. 도시하지 않은 블록에는, 또한 수신 데이터용 메모리(306)로부터 수신 데이터 D309가 공급되며, 도시하지 않은 블록은, 메시지 D304와 수신 데이터 D309를 이용하여, 수학식 5의 연산을 행하고, 그 연산 결과를 최종적인 복호 결과로서 출력한 다.
상기 설명에는, 브랜치 데이터 저장에 FIFO를 이용하였지만(브랜치 데이터 저장 메모리(311과 316)를 FIFO로 구성하도록 하였지만), FIFO 대신에 RAM을 이용해도 상관없다. 그 경우, RAM에는, P개의 브랜치 정보(브랜치에 대응하는 메시지)를 동시에 판독할 수 있는 비트 폭과, 브랜치 총수/P의 워드(word) 수가 필요로 된다. 또한, RAM에의 기입은, 검사 행렬의 정보로부터, 기입하자고 하는 데이터가 다음에 판독될 때에 몇번째로 판독되는지를 구하고, 그 위치에 기입한다. 또한, RAM으로부터의 판독 시에는, 어드레스의 선두로부터 순차적으로 데이터를 판독한다. 즉, RAM은, 메시지 데이터를 판독되는 순서대로 채워 저장하고, 저장 위치순으로 판독한다. FIFO 대신에 RAM을 이용하면, 셀렉터(312, 317)는 불필요하게 된다.
또한, FIFO나 RAM의 물리적인 비트 폭이 부족한 경우에는, 복수의 RAM을 이용하여 동일한 제어 신호를 제공함으로써, 논리적으로 1개의 RAM으로 간주할 수 있다.
그런데, 도 16A 내지 도 16C의 복호 장치(300)에서는, 체크 노드 연산의 결과 얻어지는 메시지 uj를 이용하여, 배리어블 노드 연산이 행해지고, 그 연산의 결과 얻어지는 메시지 vi를 이용하여, 체크 노드 연산이 행해지기 때문에, 체크 노드 연산의 결과 얻어지는 브랜치에 대응하는 메시지 uj와 배리어블 노드 연산의 결과 얻어지는 브랜치에 대응하는 메시지 vi를 모두 저장하는 브랜치 데이터 저장 메모리 (311)와 브랜치 데이터 저장 메모리(316)가 필요하다. 즉, 복호 장치에서는, 검사 행렬 H의 "1"의 수의 2배의 메시지를 저장하기 위해 필요한 용량의 메모리가 필요하다.
따라서, 복호 장치의 회로 규모를 더욱 작게 하기 위해, 도 16A 내지 도 16C의 복호 장치(300)에 비해, 메모리의 용량을 더욱 줄인 복호 장치를 이하에 도시한다.
도 18은 본 발명을 적용한 도 15의 검사 행렬로 표현되는 LDPC 부호를 복호하는 복호 장치의 다른 일 실시 형태의 구성예를 도시하는 블록도이다.
도 18의 복호 장치(400)에서는, 도 16A와 도 16B의 브랜치 데이터 저장 메모리(311)가, 브랜치 데이터 저장 메모리(311)에 비해 용량이 작은 복호 도중 결과 저장용 메모리(410)로 되어 있다.
복호 장치(400)는, 복호 도중 결과 저장용 메모리(410), 사이클릭 시프트 회로(411), 5개의 계산기(4121) 내지 계산기(4125)로 이루어지는 계산부(412), 복호 도중 결과 저장용 메모리(413), 사이클릭 시프트 회로(414), 5개의 계산기(4151) 내지 계산기(4155)로 이루어지는 계산부(415), 수신용 메모리(416), 및 제어부(417)로 구성된다.
여기서, 도 19 내지 도 22를 이용하여, 도 18의 계산부(412)의 계산기(4121) 내지 계산기(4125), 및 계산부(415)의 계산기(4151) 내지 계산기(4155)와 도 10의 체크 노드 계산기(101)와 도 11의 배리어블 노드 계산기(103)와의 관계에 대하여 설명한다.
도 19와 도 20은, 상술한 도 10의 체크 노드 계산기(101)와 도 11의 배리어블 노드 계산기(103)와 각각 동일한 도면이다. 또한, 도 21은, 계산부(412k)(k=1, 2, …, 5)의 구성예를 도시하고 있고, 도 22는 계산부(415k)(k=1, 2, …, 5)의 구성예를 도시하고 있다.
도 18의 복호 장치(400)에서는, 계산기(412k)가 체크 노드 연산을 행하고, 계산부(415k)가, 배리어블 노드 연산을 행하는 것이 아니라, 계산기(412k)가 체크 노드 연산과 배리어블 노드 연산의 일부를, 계산기(415k)가 배리어블 노드 연산의 다른 일부를 행한다.
즉, 도 21의 계산기(412k)는, 블록 A'과 블록 B'로 구성되어 있다. 블록 A'는, 도 19의 체크 노드 계산기(101)의 체크 노드 연산을 행하는 블록 A와 마찬가지로 구성되어 있다. 또한, 블록 B'는, 도 20의 배리어블 노드 계산기(103)의 일부인, 검사 행렬의 각 열의 모든 브랜치에 대응하는 메시지 uj의 적산값으로부터, 구하고자 하는 브랜치에 대응하는 메시지 uj를 감산하는 블록 B와 마찬가지로 구성되어 있다. 한편, 도 22의 계산기(415k)는, 블록 C'로 구성되어 있다. 블록 C'는, 도 20의 배리어블 노드 계산기(103)의 다른 일부인, 검사 행렬의 각 열의 브랜치에 대응하는 메시지 uj를 적산하고, 그 적산값에 수신값 u0i를 가산하는 블록 C와 마찬가지로 구성되어 있다.
그리고, 도 21의 계산기(412k)는, 블록 A와 블록 B에 의한 연산의 결과, 즉, 체크 노드 연산과 배리어블 노드 연산의 일부를 행한 복호 도중 결과 uj를 복호 도중 결과 저장용 메모리(413)에 공급하고, 도 22의 계산기(415k)는, 배리어블 노드 연산의 다른 일부를 행한 복호 도중 결과 v를 복호 도중 결과 저장용 메모리(410)에 공급한다.
따라서, 도 18의 복호 장치(400)는, 계산기(412k)의 연산과 계산기(415k)의 연산을 교대로 행함으로써, 체크 노드 연산과 배리어블 노드 연산을 행하여, 복호를 행할 수 있다.
또한, 도 22의 계산기(412k)에서는, 복호 도중 결과 저장용 메모리(413)에 저장되어 있는 구하고자 하는 브랜치에 대응하는 복호 도중 결과 uj를 이용하여, 블록 B에서, 계산기(415k)의 연산의 결과 얻어지는 복호 도중 결과 v로부터, 구하고자 하는 브랜치에 대응하는 복호 도중 결과 uj를 감산하기 때문에, 도 20의 FIFO 메모리(155)가 필요하지 않다.
다음으로, 계산기(412k)에서 행해지는 연산과, 계산기(415k)에서 행해지는 연산에 대하여, 식을 이용하여 설명한다.
구체적으로는, 계산부(412)는, 상술한 수학식 7과, 이하에 나타내는 수학식 8에 따르는 제1 연산을 행하고, 그 제1 연산의 결과인 복호 도중 결과 uj를 복호 도중 결과 저장용 메모리(410)에 공급하여 저장시킨다. 계산부(415)는, 상술한 수학식 5에 따르는 제2 연산을 행하고, 그 제2 연산의 결과인 복호 도중 결과 v를 복호 도중 결과 저장용 메모리(410)에 공급하여 저장시킨다.
Figure 112005001740696-pct00008
또한, 수학식 8의 udv는, 검사 행렬 H의 i열의 메시지를 구하고자 하는 브랜치로부터의 체크 노드 연산의 도중 결과(여기서는, 체크 노드 연산 결과 그 자체)를 나타내고 있다. 즉, udv는, 구하고자 하는 브랜치에 대응하는 복호 도중 결과이다.
즉, 상술한 수학식 5에 따르는 제2 연산의 결과 얻어지는 복호 도중 결과 v는, 수신값 u0i와 검사 행렬 H의 i열의 각 행의 1에 대응하는 모든 브랜치로부터의 체크 노드 연산의 복호 도중 결과 uj를 가산한 것이기 때문에, 상술한 수학식 7에 이용되는 값 vi는, 수학식 5에 따르는 제2 연산의 결과 얻어지는 복호 도중 결과 v로부터, 검사 행렬 H의 i열의, 각 행의 1에 대응하는 브랜치로부터의 체크 노드 연산의 복호 도중 결과 uj 중, 메시지를 구하고자 하는 브랜치로부터의 체크 노드 연산의 복호 도중 결과 udv를 뺀 값으로 된다. 즉, 수학식 7의 연산에 이용되는 값 vi를 구하는 수학식 1의 연산은, 상술한 수학식 5와 수학식 8을 조합한 연산이다.
따라서, 복호 장치(400)에서는, 계산부(412)에 의한 수학식 7 및 수학식 8에 따르는 제1 연산과, 계산부(415)에 의한 수학식 5에 따르는 제2 연산이 교대로 행해지고, 계산부(415)가, 최후의 제2 연산의 결과를 복호 결과로서 출력함으로써, LDPC 부호의 반복 복호를 행할 수 있다.
또한, 여기서는, 수학식 7과 수학식 8에 따르는 제1 연산 결과를, 복호 도중 결과 uj를 복호 도중 결과 uj로 기재하는데, 이 복호 도중 결과 uj는, 수학식 7의 체크 노드 연산 결과 uj와 같다.
또한, 제2 연산에 의해 구해지는 수학식 5의 v는, 수학식 1의 배리어블 노드 연산 결과 vi에 대하여, 메시지를 구하고자 하는 브랜치로부터의 체크 노드 연산 결과 uj를 가산한 것이기 때문에, 검사 행렬 H의 1열(1개의 배리어블 노드)에 대하여, 1개만 구해진다.
복호 장치(400)에서는, 계산부(412)가, 계산부(415)에 의한 제2 연산의 결과인 검사 행렬 H의 열에 대응하는 복호 도중 결과 v(제2 복호 도중 결과)를 이용하여, 제1 연산을 행하고, 그 연산의 결과 얻어지는 검사 행렬 H의 i열의, 각 행의 1에 대응하는 브랜치의 메시지(각 체크 노드가 각 브랜치에 출력하는 메시지)의 브랜치로부터의 체크 노드 연산의 복호 도중 결과 uj(제1 복호 도중 결과)를 복호 도중 결과 저장용 메모리(413)에 저장한다. 따라서, 복호 도중 결과 저장용 메모리 (413)의 용량은, 체크 노드 연산의 결과를 저장하는 도 16A와 도 16C의 브랜치 데이터 저장 메모리(316)와 마찬가지로, 검사 행렬의 1의 수(모든 브랜치 수)와 메시지의 양자화 비트 수를 승산한 값으로 된다. 한편, 계산부(415)는, 계산부(412)에 의한 제1 연산의 결과인 검사 행렬 H의 i열의, 각 행의 "1"에 대응하는 복호 도중 결과 uj와 수신값 u0i를 이용하여, 제2 연산을 행하고, 그 연산의 결과 얻어지는 i열에 대응하는 복호 도중 결과 v를 복호 도중 결과 저장용 메모리(410)에 저장한다. 따라서, 복호 도중 결과 저장용 메모리(410)에 필요한 용량은, 검사 행렬의 "1"의 수보다 적은 검사 행렬의 열 수, 즉, LDPC 부호의 부호 길이와 복호 도중 결과 v의 양자화 비트 수를 승산한 값으로 된다.
따라서, 검사 행렬 H에서의 1이 소한 LDPC 부호를 복호하는 복호 장치(400) 에서는, 도 16A와 도 16B의 브랜치 데이터 저장 메모리(311)에 비해, 복호 도중 결과 저장용 메모리(410)의 메모리의 용량을 삭감할 수 있으며, 이에 의해, 복호 장치(400)의 회로 규모를 작게 할 수 있다.
또한, 복호 장치(400)에서는, 계산부(415)가, 수학식 5에 따르는 제2 연산을 행하기 때문에, 복호 장치(400)는, 도 16A 내지 도 16C의 복호 장치(300)에서 최종적인 복호 결과를 연산하는 수학식 5의 연산을 행하는 도시하지 않은 블록을 가질 필요가 없어, 도 16A 내지 도 16C의 복호 장치(300)에 비해, 도 18의 복호 장치의 회로 규모를 작게 할 수 있다.
이하, 도 18의 복호 장치(400)의 각 부의 동작에 대하여 상세히 설명한다.
복호 도중 결과 저장용 메모리(410)에는, 계산부(415)로부터, 계산부(415)에 의한 제2 연산의 결과인 검사 행렬의 5개의 열에 대응하는 5개의 복호 도중 결과 D415가 공급되며, 복호 도중 결과 저장용 메모리(410)는, 계산부(415)로부터 공급된 5개의 복호 도중 결과 D415를, 제1 어드레스로부터 순서대로 저장(기억)한다.
즉, 복호 도중 결과 저장용 메모리(410)의 제1 어드레스에는, 검사 행렬의 열에 대응하는 복호 도중 결과 중, 제1열째부터 제5열째의 복호 도중 결과 v가 저장된다. 그리고, 마찬가지로, 제2 어드레스에는, 제6열째부터 제10열째의 복호 도중 결과 v가 저장되며, 제3 어드레스에는, 제11열째부터 제15열째의 복호 도중 결과가 저장된다. 이후, 마찬가지로, 제16열째부터 제90열째까지의 복호 도중 결과 v가, 5개씩, 제4 어드레스로부터 제18 어드레스까지 저장되며, 합계 90개의 복호 도중 결과 v가 복호 도중 결과 저장용 메모리(410)에 저장된다. 따라서, 복호 도중 결과 저장용 메모리(410)의 워드(word) 수는, 도 15의 검사 행렬 H의 열 수(LDPC 부호의 부호 길이)인 90을, 동시에 기입 및 판독하는 복호 도중 결과의 수인 5로 나눈 18로 된다.
또한, 복호 도중 결과 저장용 메모리(410)는, 이미 저장되어 있는 복호 도중 결과 D415로부터, 후단의 계산부(412)가 구하고자 하는 복호 도중 결과 uj의 대응하는 검사 행렬 H의 행에서 "1"로 되어 있는 복호 도중 결과 v를 5개 동시에 판독하여, 복호 도중 결과 D410으로서, 사이클릭 시프트 회로(411)에 공급한다.
또한, 복호 도중 결과 저장용 메모리(410)는, 예를 들면, 5개의 복호 도중 결과를 동시에 기입 및 판독 가능한 싱글 포트 RAM으로 구성된다. 또한, 복호 도중 결과 저장용 메모리(410)에는, 계산부(415)의 제2 연산에 의해 연산된 열에 대응하는 복호 도중 결과 v가 저장되기 때문에, 복호 도중 결과 저장용 메모리(410)에 저장되는 데이터량, 즉, 복호 도중 결과 저장용 메모리(410)에 필요로 되는 기억 용량은, 복호 도중 결과의 양자화 비트 수와, 검사 행렬 H의 열 수(LDPC 부호의 부호 길이)와의 승산값이다.
사이클릭 시프트 회로(411)에는, 복호 도중 결과 저장용 메모리(410)로부터 5개의 복호 도중 결과 D410이 공급됨과 함께, 제어부(417)로부터, 그 복호 도중 결과 D410에 대응하는 검사 행렬의 1이, 검사 행렬에서 기초로 되는 단위 행렬 등을 몇개 사이클릭 시프트한 것인지의 정보(Matrix 데이터)를 나타내는 제어 신호 D619가 공급된다. 사이클릭 시프트 회로(611)는, 제어 신호 D619에 기초하여, 5개의 복호 결과 D410을 재배열하는 사이클릭 시프트를 행하고, 그 결과를 복호 도중 결과 D411로서, 계산부(412)에 공급한다.
계산부(412)는, 5개의 계산기(4121 내지 4125)로 이루어진다. 계산부(412)에는, 사이클릭 시프트 회로(411)로부터, 계산부(415)에 의한 제2 연산의 결과 얻어진 5개의 복호 도중 결과 D411(제2 복호 도중 결과) v가 공급됨과 함께, 복호 도중 결과 저장용 메모리(413)로부터, 전회, 계산기(4121 내지 4125)에 의한 제1 연산의 결과 얻어진 5개의 복호 도중 결과 D413(제1 복호 도중 결과) uj가 공급되며, 그 5개의 복호 도중 결과 D411과 5개의 복호 도중 결과 D413이, 계산기(4121 내지 4125)에 각각 공급된다. 또한, 계산부(412)에는, 제어부(417)로부터 제어 신호 D419가 공급되며, 그 제어 신호 D419가, 계산기(4121 내지 4125)에 공급된다. 또한, 제어 신호 D419는, 5개의 계산기(4121 내지 4125)에 공통의 신호이다.
계산기(4121 내지 4125)는, 각각 복호 도중 결과 D411과 복호 도중 결과 D413을 이용하여, 수학식 7과 수학식 8에 따라 제1 연산을 행하여, 복호 도중 결과 D412(vi)를 구한다. 계산부(412)는, 계산기(4121 내지 4125)에 의한 연산의 결과 얻어지는 검사 행렬의 5개의 1에 대응하는 5개의 복호 도중 결과 D412를 복호 도중 결과 저장용 메모리(413)에 공급한다.
복호 도중 결과 저장용 메모리(413)는, 예를 들면, 5개의 복호 도중 결과를 동시에 기입 및 판독 가능한, 2개의 싱글 포트 RAM으로 구성된다. 복호 도중 결과 저장용 메모리(413)에는, 계산부(412)로부터 5개의 복호 도중 결과 D412가 공급됨과 함께, 제어부(417)로부터 복호 도중 결과(413)의 기입 및 판독을 제어하는 제어 신호 D420이 공급된다.
복호 도중 결과 저장용 메모리(413)는, 제어 신호 D420에 기초하여, 계산부(412)로부터 공급되는 5개의 복호 도중 결과 D412를 통합하여 저장함과 함께, 이미 저장되어 있는 5개의 복호 도중 결과 D412를 판독하여, 복호 도중 결과 D413으로서, 계산부(412)와 사이클릭 시프트 회로(414)에 공급한다. 즉, 복호 도중 결과 저장용 메모리(413)는, 계산부(412)와 사이클릭 시프트 회로(414)에 공급하는 복호 도중 결과 D413의 판독과, 계산부(412)로부터 공급되는 복호 도중 결과 D412의 기입을, 동시에 행한다.
또한, 복호 도중 결과 저장용 메모리(413)에는, 계산부(412)의 제1 연산에 의해 연산된 검사 행렬 H의 i열의, 각 행의 1에 대응하는 브랜치로부터의 체크 노드 연산의 복호 도중 결과 uj가 저장되기 때문에, 복호 도중 결과 저장용 메모리(413)에 저장되는 데이터량, 즉, 복호 도중 결과 저장용 메모리(413)에 필요로 되는 기억 용량은, 복호 도중 결과의 양자화 비트 수와, 검사 행렬의 1의 수와의 승산값으로 된다.
사이클릭 시프트 회로(414)에는, 복호 도중 결과 저장용 메모리(413)로부터 5개의 복호 도중 결과 D413(복호 도중 결과 uj)이 공급됨과 함께, 제어부(417)로부터, 그 복호 도중 결과 D413에 대응하는 검사 행렬의 1이 검사 행렬에서 기초로 되는 단위 행렬 등을 몇개 사이클릭 시프트한 것인지의 정보(Matrix 데이터)를 나타내는 제어 신호 D421이 공급된다. 사이클릭 시프트 회로(414)는, 제어 신호 D421에 기초하여, 5개의 복호 도중 결과 D413을 재배열하는 사이클릭 시프트를 행하고, 그 결과를 복호 도중 결과 D414로서, 계산부(415)에 공급한다.
계산부(415)는, 5개의 계산기(4151 내지 4155)로 이루어진다. 계산부(415)에는, 사이클릭 시프트 회로(414)로부터 5개의 복호 도중 결과 D414가 공급되며, 그 복호 도중 결과 D414가, 계산기(4151 내지 4155)의 각각에 공급된다. 또한, 계산부(415)에는, 수신용 메모리(417)로부터 5개의 수신 데이터 D417(LDPC 부호)이 공급되며, 그 수신 데이터 D417이, 계산기(4151 내지 4155)의 각각에 공급된다. 또한, 계산부(417)에는, 제어부(417)로부터 제어 신호 D422가 공급되며, 그 제어 신호 D422가 계산기(4151 내지 4155)에 공급된다. 또한, 제어 신호 D422는, 5개의 계산기(4171 내지 4175)에 공통의 신호이다.
계산기(4151 내지 4155)는, 각각 복호 도중 결과 D414와 수신 데이터 D417을 이용하여, 수학식 5에 따라, 각각 제2 연산을 행하여, 복호 도중 결과 D415를 구한다. 계산부(415)는, 계산기(4151 내지 4155)의 제2 연산의 결과 얻어지는 5개의 복호 도중 결과 D415(v)를, 복호 도중 결과 저장용 메모리(410)에 공급한다. 또한, 계산부(415)는, 지금 행하는 연산이 최후의 제2 연산인 경우, 그 연산의 결과 얻어지는 5개의 복호 도중 결과 D415를, 최종적인 복호 결과로서 출력한다.
수신용 메모리(416)는, 통신로를 통해 수신한 수신값(부호 비트) D416으로부터 계산한 부호 비트가 0인 것 같은 값인 수신 LLR(대수 우도비)을, 수신 데이터 D417로서 저장한다.
즉, 수신용 메모리(416)의 제1 어드레스에는, 검사 행렬의 열에 대응하는 수신 데이터 D417 중, 검사 행렬의 제1열째부터 제5열째까지 대응하는 수신 데이터 D417이 저장된다. 그리고, 제2 어드레스에는, 검사 행렬의 제6열째부터 제10열째까지 대응하는 수신 데이터 D417이 저장되며, 제3 어드레스에는, 검사 행렬의 제11열째부터 제16열째까지 대응하는 수신 데이터 D417이 저장된다. 이후, 마찬가지 로, 제4 어드레스로부터 제18 어드레스까지, 검사 행렬의 제17열째부터 제90열째까지 대응하는 수신 데이터 D417이, 5개씩 저장된다.
그리고, 수신용 메모리(616)는, 이미 저장되어 있는 수신 데이터 D417을, 배리어블 노드 연산에 필요로 되는 순서대로 5개씩 판독하여, 계산부(415)에 공급한다.
또한, 수신용 메모리(416)는, 예를 들면, 5개의 수신 데이터를 동시에 기입 및 판독 가능한 싱글 포트 RAM으로 구성된다. 또한, 수신용 메모리(416)에 저장되는 데이터량, 즉, 수신용 메모리(315)에 필요로 되는 기억 용량은, LDPC 부호의 부호 길이와, 수신 데이터의 양자화 비트 수와의 승산값이다. 또한, 수신용 메모리(416)의 워드(word) 수는, LDPC 부호의 부호 길이, 즉, 검사 행렬의 열 수인 90을, 동시에 판독하는 수신 데이터 D417의 수인 5로 나누어 계산한 값인 18이다.
제어부(417)는, 제어 신호 D418을 사이클릭 시프트 회로(411)에, 제어 신호 D419를 계산부(412)에 공급함으로써, 각각을 제어한다. 또한, 제어부(417)는 제어 신호 D420을 복호 도중 결과 저장용 메모리(413)에, 제어 신호 D421을 사이클릭 시프트 회로(414)에, 제어 신호 D421을 계산부(415)에 각각 공급함으로써, 각각을 제어한다.
복호 도중 결과 저장용 메모리(410), 사이클릭 시프트 회로(411), 계산부(412), 복호 도중 결과 저장용 메모리(413), 사이클릭 시프트 회로(414), 계산부(415)의 순으로, 데이터가 일주함으로써, 복호 장치(400)는, 1회의 복호를 행할 수 있다. 복호 장치(400)에서는, 소정의 횟수만큼 반복하여 복호가 행해진 후, 계산 부(415)에 의한 제2 연산의 결과인 복호 도중 결과 D415가, 최종적인 복호 결과로서 출력된다.
도 21은 도 18의 계산부(412)의 계산기(4121)의 구성예를 도시하는 블록도이다.
또한, 도 21에서는, 계산기(4121)에 대하여 설명하지만, 계산기(4122) 내지 계산기(4125)도 마찬가지로 구성된다.
또한, 도 21에서는, 전회의 계산부(412)에 의한 제1 연산의 결과 얻어지는 각 복호 도중 결과(udv)가 부호 비트를 합쳐 합계 6비트(bit)로 양자화되며, 계산기(415)에 의한 제2 연산의 결과 얻어지는 각 복호 도중 결과(v)가 9비트로 양자화되어 있는 것으로 하여, 계산기(4121)를 나타내고 있다. 또한, 도 21의 계산기(4121)에는, 클럭 ck가 공급되며, 이 클럭 ck는, 필요한 블록에 공급되도록 되어 있다. 그리고, 각 블록은, 클럭 ck에 동기하여 처리를 행한다.
도 21의 계산기(4121)는, 제어부(417)로부터 공급되는 제어 신호 D419에 기초하여, 복호 도중 결과 저장용 메모리(413)로부터 1개씩 판독되는, 전회의 계산부(412)에 의한 제1 연산의 결과 얻어진 복호 도중 결과 D413(udv)과, 사이클릭 시프트 회로(411)로부터 1개씩 판독되는 복호 도중 결과 D411(v)을 이용하여, 수학식 7과 수학식 8에 따르는 제1 연산을 행한다.
즉, 계산기(4121)에는, 사이클릭 시프트 회로(411)로부터 공급되는 5개의 9 비트의 복호 도중 결과 D411(v) 중의, 1개의 복호 도중 결과 D411이 공급됨과 함께, 복호 도중 결과 저장용 메모리(413)로부터 공급되는, 전회의 계산부(412)에 의한 연산의 결과인 5개의 6비트의 복호 도중 결과 D413(uj) 중의, 전회의 계산부(412)에 의한 연산의 결과인 1개의 복호 도중 결과 D413이 공급되며, 그 9비트의 복호 도중 결과 D411(v)과 6비트의 복호 도중 결과 D413(udv)이, 감산기(431)에 공급된다. 또한, 계산기(4121)에는, 제어부(417)로부터 제어 신호 D419가 공급되며, 그 제어 신호 D419가 셀렉터(435)와 셀렉터(442)에 공급된다.
감산기(431)는, 9비트의 복호 도중 결과 D411(v)로부터 6비트의 복호 도중 결과 D413(uj)을 감산하여, 그 6비트의 감산값 D431을 출력한다. 즉, 감산기(431)는, 수학식 8에 따라 연산을 행하고, 그 연산의 결과인 감산값 D431(vi)을 출력한다.
감산기(431)에 의해 출력된 6비트의 감산값 D431 중, 최상위 비트의 정부를 나타내는 부호 비트 D432(sign(vi))가 EXOR 회로(440)에 공급되며, 하위 5비트의 절대값 D433(|vi|)이 LUT(432)에 공급된다.
LUT(432)는, 절대값 D433(|vi|)에 대하여, 수학식 7에서의 φ(|vi|)의 연산을 행한 5비트의 연산 결과 D434(φ(|vi|))를 판독하여, 가산기(433)와 FIFO 메모리(438)에 공급한다.
가산기(433)는, 연산 결과 D434(φ(|vi|))와 레지스터(434)에 저장되어 있는 9비트의 값 D435를 가산함으로써, 연산 결과 D434를 적산하고, 그 결과 얻어지는 9비트의 적산값을 레지스터(434)에 재저장한다. 또한, 검사 행렬의 1행에 걸치는 모든 1에 대응하는 복호 도중 결과 D411로부터 구해진 절대값 D433(|vi|)에 대한 연산 결과가 적산된 경우, 레지스터(434)는 리세트된다.
검사 행렬의 1행에 걸치는 복호 도중 결과 D411이 1개씩 판독되어, 레지스터(434)에 1행분의 연산 결과 D434가 적산된 적산값이 저장된 경우, 제어부(417)로부터 공급되는 제어 신호 D419는, 0으로부터 1로 변화된다. 예를 들면, 행의 웨이트(row weight)가 「9」인 경우, 제어 신호 D419는, 1부터 8클럭째까지는 「0」으로 되고, 9클럭째에서는 「1」로 된다.
제어 신호 D419가 「1」인 경우, 셀렉터(435)는, 레지스터(434)에 저장되어 있는 값, 즉, 검사 행렬의 1행에 걸치는 모든 1에 대응하는 복호 도중 결과 D411(복호 도중 결과 v)로부터 구해진 φ(|vi|)가 적산된 9비트의 값 D435(i=1부터 i=dc까지의 Σφ(|vi|))를 선택하고, 값 D436으로서, 레지스터(436)에 출력하여 저장시킨다. 레지스터(436)는, 저장하고 있는 값 D436을, 9비트의 값 D437로서, 셀렉터(435)와 가산기(437)에 공급한다. 제어 신호 D419가 「0」인 경우, 셀렉터(435)는, 레지스터(436)로부터 공급된 값 D437을 선택하여, 레지스터(436)에 출력하여 재저장시킨다. 즉, 검사 행렬의 1행에 걸치는 모든 1에 대응하는 복호 도중 결과 D411(복호 도중 결과 v)로부터 구해진 φ(|vi|)가 적산될 때까지, 레지스터(436)는, 전회 적산된 φ(|vi|)을, 셀렉터(435)와 가산기(437)에 공급한다.
한편, FIFO 메모리(438)는, 레지스터(436)로부터 새로운 값 D437(i=1부터 i=dc까지의 Σφ(|vi|))이 출력되기까지의 동안, LUT(432)가 출력한 연산 결과 D434(φ(|vi|))를 지연하고, 5비트의 값 D438로서 감산기(437)에 공급한다. 감산기(437)는, 레지스터(436)로부터 공급된 값 D437로부터, FIFO 메모리(438)로부터 공급된 값 D438을 감산하고, 그 감산 결과를, 5비트의 감산값 D439로서 LUT(439)에 공급한다. 즉, 감산기(437)는, 검사 행렬의 1행에 걸치는 모든 1에 대응하는 복호 도중 결과 D411(복호 도중 결과 v)로부터 구해진 φ(|vi|)의 적산값으로부터, 구하고자 하는 브랜치에 대응하는 복호 도중 결과, 즉, 검사 행렬의 소정의 1에 대응하는 복호 도중 결과 D411(복호 도중 결과 v)로부터 구해진 φ(|vi|)를 감산하여, 그 감산값(i=1부터 i=dc-1까지의 Σφ(|vi|))을 감산값 D439로서 LUT(439)에 공급한다.
LUT(439)는, 감산값 D439(i=1부터 i=dc-1까지의 Σφ(|vi|))에 대하여, 수학식 7에서의 φ-1(Σφ(|vi|))의 연산을 행한 5비트의 연산 결과 D440(φ-1 (Σφ(|vi|)))를 출력한다.
이상의 처리와 병행하여, EXOR 회로(440)는, 레지스터(441)에 저장되어 있는 1비트의 값 D442와 부호 비트 D432와의 배타적 논리합을 연산함으로써, 부호 비트끼리의 승산을 행하여, 1비트의 승산 결과 D441을 레지스터(441)에 재저장한다. 또한, 검사 행렬의 1행에 걸치는 모든 1에 대응하는 복호 도중 결과 D411로부터 구해진 부호 비트 D432가 승산된 경우, 레지스터(441)는 리세트된다.
검사 행렬의 1행에 걸치는 모든 1에 대응하는 복호 도중 결과 D411로부터 구해진 부호 비트 D432가 승산된 승산 결과 D441(i=1부터 dc까지의 Πsign(vi))이 레지스터(441)에 저장된 경우, 제어부(417)로부터 공급되는 제어 신호 D419는, 「0」으로부터 「1」로 변화된다.
제어 신호 D419가 「1」인 경우, 셀렉터(442)는, 레지스터(441)에 저장되어 있는 값, 즉, 검사 행렬의 1행에 걸치는 모든 1에 대응하는 복호 도중 결과 D411로부터 구해진 부호 비트 D432가 승산된 값 D442(i=1부터 i=dc까지의 Πsign(vi))를 선택하고, 1비트의 값 D443으로서 레지스터(443)에 출력하여 저장시킨다. 레지스터(443)는, 저장하고 있는 값 D443을, 1비트의 값 D444로서 셀렉터(442)와 EXOR 회로(445)에 공급한다. 제어 신호 D419가 「0」인 경우, 셀렉터(442)는, 레지스터(443)로부터 공급된 값 D444를 선택하고, 레지스터(443)에 출력하여 재저장시킨다. 즉, 검사 행렬의 1행에 걸치는 모든 1에 대응하는 복호 도중 결과 D411(복호 도중 결과 v)로부터 구해진 부호 비트 D432가 승산될 때까지, 레지스터(443)는, 전회 저장한 값을, 셀렉터(442)와 EXOR 회로(445)에 공급한다.
한편, FIFO 메모리(444)는, 레지스터(443)로부터 새로운 값 D444(i=1부터 i=dc까지의 Πsign(v))가 EXOR 회로(445)에 공급되기까지의 동안, 부호 비트 D432를 지연하고, 1비트의 값 D445로서 EXOR 회로(445)에 공급한다. EXOR 회로(445)는, 레지스터(443)로부터 공급된 값 D444와, FIFO 메모리(444)로부터 공급된 값 D445와의 배타적 논리합을 연산함으로써, 값 D444를, 값 D445로 제산하여, 1비트의 제산 결과를 제산값 D446으로서 출력한다. 즉, EXOR 회로(445)는, 검사 행렬의 1행에 걸치는 모든 1에 대응하는 복호 도중 결과 D411로부터 구해진 부호 비트 D432(sign(vi))의 승산값을, 검사 행렬의 소정의 1에 대응하는 복호 도중 결과 D411로부터 구해진 부호 비트 D432(sign(vi))로 제산하고, 그 제산값(i=1부터 i=dc-1까지의 Πsign(vi))을 제산값 D446으로서 출력한다.
계산기(4121)에서는, LUT(439)로부터 출력된 5비트의 연산 결과 D440을 하위 5비트로 함과 함께, EXOR 회로(445)로부터 출력된 1비트의 제산값 D446을 최상위 비트로 하는 합계 6비트가 복호 도중 결과 D412(복호 도중 결과 uj)로서 출력된다.
이상과 같이, 계산기(4121)에서는, 수학식 7과 수학식 8의 연산이 행해져, 복호 도중 결과 uj가 구해진다.
또한, 도 15의 검사 행렬의 행의 웨이트의 최대는 9이기 때문에, 즉, 계산기(4121)에 공급되는 복호 도중 결과 D411(v)과 복호 도중 결과 D413(udv)의 최대 수는 9이기 때문에, 계산기(4121)는, 9개의 복호 도중 결과 D411로부터 구해지는 9개 의 연산 결과 D434(φ(|vi|))를 지연시키는 FIFO 메모리(438)와, 9개의 부호 비트 D432를 지연시키는 FIFO 메모리(444)를 갖고 있다. 행의 웨이트가 9 미만인 행의 메시지를 계산할 때에는, FIFO 메모리(438)와 FIFO 메모리(444)에서의 지연량이, 그 행의 웨이트의 값으로 줄어든다.
도 22는 도 18의 계산부(415)의 계산기(4151)의 구성예를 도시하는 블록도이다.
또한, 도 22에서는, 계산기(4151)에 대하여 설명하지만, 계산기(4152) 내지 계산기(4155)도 마찬가지로 구성된다.
또한, 도 22에서는, 계산기(412)에 의한 제1 연산의 결과 얻어지는 각 복호 도중 결과(uj)가 부호 비트를 합쳐 합계 6비트로 양자화되어 있는 것으로 하여, 계산기(4151)를 나타내고 있다. 또한, 도 22의 계산기(4151)에는, 클럭 ck가 공급되며, 이 클럭 ck는, 필요한 블록에 공급되도록 되어 있다. 그리고, 각 블록은, 클럭 ck에 동기하여 처리를 행한다.
도 22의 계산기(4151)는, 제어부(417)로부터 공급되는 제어 신호 D422에 기초하여, 수신용 메모리(416)로부터 1개씩 판독되는 수신 데이터 D417(수신값 u0i)과, 사이클릭 시프트 회로(414)로부터 1개씩 판독되는 복호 도중 결과 D414(uj)를 이용하여, 수학식 5에 따르는 제2 연산을 행한다.
즉, 계산기(4151)에서는, 사이클릭 시프트 회로(414)로부터, 검사 행렬의 각 행의 1에 대응하는 6비트의 복호 도중 결과 D414(복호 도중 결과 uj)가 1개씩 판독되고, 그 복호 도중 결과 D414가, 가산기(471)에 공급된다. 또한, 계산기(4151)에서는, 수신용 메모리(416)로부터 6비트의 수신 데이터 D417이 1개씩 판독되어, 가산기(475)에 공급된다. 또한, 계산기(4151)에는, 제어부(417)로부터 제어 신호 D422가 공급되며, 그 제어 신호 D422는 셀렉터(473)에 공급된다.
가산기(471)는, 복호 도중 결과 D414(복호 도중 결과 uj)와 레지스터(472)에 저장되어 있는 9비트의 값 D471을 가산함으로써, 복호 도중 결과 D414를 적산하고, 그 결과 얻어지는 9비트의 적산값을, 레지스터(472)에 재저장한다. 또한, 검사 행렬의 1열에 걸치는 모든 1에 대응하는 복호 도중 결과 D414가 적산된 경우, 레지스터(472)는 리세트된다.
검사 행렬의 1열에 걸치는 복호 도중 결과 D414가 한개씩 판독되어, 레지스터(472)에 1열분의 복호 도중 결과 D414가 적산된 값이 저장된 경우, 제어부(417)로부터 공급되는 제어 신호 D422는, 「0」으로부터 「1」로 변화된다. 예를 들면, 열의 웨이트가 「5」인 경우, 제어 신호 D422는, 1부터 4클럭째까지는 「0」으로 되고, 5클럭째에서는 「1」로 된다.
제어 신호 D422가 「1」인 경우, 셀렉터(473)는, 레지스터(472)에 저장되어 있는 값, 즉, 검사 행렬의 1열에 걸치는 모든 브랜치로부터의 복호 도중 결과 D414(복호 도중 결과 uj)가 적산된 9비트의 값 D471(j=1부터 dv까지의 Σuj)을 선택하여, 레지스터(474)에 출력하여 저장시킨다. 레지스터(474)는, 저장하고 있는 값 D471을, 9비트의 값 D472로서, 셀렉터(471)와 가산기(475)에 공급한다. 제어 신호 D422가 「0」인 경우, 셀렉터(473)는, 레지스터(474)로부터 공급된 값 D472를 선택하여, 레지스터(474)에 출력하여 재저장시킨다. 즉, 검사 행렬의 1열에 걸치는 모든 브랜치로부터의 복호 도중 결과 D414(복호 도중 결과 uj)가 적산될 때까지, 레지스터(474)는, 전회 적산된 값을, 셀렉터(473)와 가산기(475)에 공급한다.
가산기(475)는, 9비트의 값 D472와, 수신용 메모리(416)로부터 공급된 6비트의 수신 데이터 D417을 가산하여, 그 결과 얻어지는 6비트의 값을 복호 도중 결과 D415(복호 도중 결과 v)로서 출력한다.
이상과 같이, 계산기(4151)에서는, 수학식 5의 연산이 행해져, 복호 도중 결과 v가 구해진다.
또한, 도 8의 검사 행렬의 열의 웨이트의 최대는 5이기 때문에, 즉, 계산기(4151)에 공급되는 복호 도중 결과 uj의 최대 수는 5이기 때문에, 계산기(4151 )는, 6비트의 복호 도중 결과 uj를 최대 5개 가산한다. 따라서, 계산기(4151)의 출력은, 9비트의 값으로 되어 있다.
도 23은 도 18의 복호 도중 결과 저장용 메모리(413)의 구성예를 도시하는 블록도이다.
복호 도중 결과 저장용 메모리(413)는, 스위치(501과 504), 및 2개의 싱글 포트 RAM인 복호 도중 결과 저장용 RAM(502와 503)으로 구성된다.
이 복호 도중 결과 저장용 메모리(413)의 각 부에 대하여 상세히 설명하기 전에, 우선, 복호 도중 결과 저장용 RAM(502와 503)에의 데이터의 저장 방법에 대하여 설명한다.
복호 도중 결과 저장용 RAM(502와 503)은, 계산부(412)에 의한 제1 연산의 결과 얻어져, 스위치(501)를 통해 공급된 복호 도중 결과 D412를 저장한다.
구체적으로는, 복호 도중 결과 저장용 RAM(502)의 제1 어드레스로부터 제9 어드레스에는, 도 15의 검사 행렬 H의 제1행째부터 제5행째까지의 1에 대응하는 복호 도중 결과 D412(D501)가, 각 행 모두 가로 방향(열 방향)으로 채운 형태로(0을 무시한 형태로) 저장된다.
즉, 제j 행 제i 열을, (j, i)로 나타내는 것으로 하면, 복호 도중 결과 저장용 RAM(502)의 제1 어드레스에는, 도 15의 검사 행렬의 구성 행렬인 (1, 1)부터 (5, 5)의 5×5의 단위 행렬의 1에 대응하는 데이터가, 제2 어드레스에는, 도 15의 검사 행렬의 구성 행렬인 (1, 21)부터 (5, 25)의 시프트 행렬(5×5의 단위 행렬을 우측 방향으로 3개만큼 사이클릭 시프트한 시프트 행렬)의 1에 대응하는 데이터가 저장된다. 제3 어드레스부터 제8 어드레스도 마찬가지로 도 15의 검사 행렬의 구성 행렬과 대응지어 데이터가 저장된다. 그리고, 제9 어드레스에는, 검사 행렬의 (1, 86)부터(5, 90)의 시프트 행렬(5×5의 단위 행렬 중의 1행째의 1을 0으로 치환하여 1개만큼 좌측으로 사이클릭 시프트한 시프트 행렬)의 1에 대응하는 데이터가 저장된다. 여기서, 도 15의 검사 행렬의 (1, 86)부터 (5, 90)의 시프트 행렬에서는, 1행째에 1이 없기 때문에, 제9 어드레스에는 데이터가 저장되지 않는다.
복호 도중 저장용 RAM(502)의 제10 어드레스부터 제18 어드레스에는, 도 15의 검사 행렬의 제11행째부터 제15행째까지의 1에 대응하는 데이터가 저장된다. 즉, 제10 어드레스에는, 검사 행렬의 (11, 6)부터 (15, 10)의 5×5의 단위 행렬을 우측으로 3개만큼 사이클릭 시프트한 행렬의 1에 대응하는 데이터가 저장되며, 제11 어드레스에는, 검사 행렬의 (11, 11)부터 (15, 15)의 합 행렬(5×5의 단위 행렬과, 5×5의 단위 행렬을 우측으로 3개만큼 사이클릭 시프트한 시프트 행렬과의 합인 합 행렬)을 구성하는 시프트 행렬의 1에 대응하는 데이터가 저장된다. 또한, 제12 어드레스에는, 검사 행렬의 (11, 6)부터 (15, 10)의 합 행렬을 구성하는 단위 행렬의 1에 대응하는 데이터가 저장된다. 이하, 제13 어드레스부터 제18 어드레스에 대해서도, 검사 행렬에 대응지어 데이터가 저장된다.
즉, 웨이트가 2 이상인 구성 행렬에 대해서는, 그 구성 행렬을, 웨이트가 1인 P×P의 단위 행렬, 그 콤포넌트인 1 중 1개 이상이 0으로 된 준단위 행렬, 또는 단위 행렬 혹은 준단위 행렬을 사이클릭 시프트한 시프트 행렬 중의 복수의 합의 형태로 표현하였을 때의, 그 웨이트가 1인 단위 행렬, 준단위 행렬, 또는 시프트 행렬의 1의 위치에 대응하는 데이터(단위 행렬, 준단위 행렬, 또는 시프트 행렬에 속하는 브랜치에 대응하는 메시지의 복호 도중 결과)는, 동일 어드레스에 저장된다.
마찬가지로, 복호 도중 저장용 RAM(502)의 제19 어드레스부터 제27 어드레스 에는, 도 15의 검사 행렬에 대응지어, 제21행째부터 제25행째까지의 1에 대응하는 데이터가 저장된다. 즉, 복호 도중 결과 저장용 RAM(502)의 워드 수는 27이다.
복호 도중 결과 저장용 RAM(503)의 제1 어드레스부터 제9 어드레스에는, 도 15의 검사 행렬 H의 제6행째부터 제10행째까지의 1에 대응하는 복호 도중 결과 D412(D502)가, 각 행 모두 가로 방향(열 방향)으로 채운 형태로(0을 무시한 형태로) 저장된다.
즉, 복호 도중 결과 저장용 RAM(503)의 제1 어드레스에는, 검사 행렬의 구성 행렬인 (6, 1)부터 (10, 5)의 합 행렬(5×5의 단위 행렬을 우측으로 1개만큼 사이클릭 시프트한 제1 시프트 행렬과, 우측으로 2개만큼 사이클릭 시프트한 제2 시프트 행렬의 합인 합행렬)을 구성하는 제1 시프트 행렬의 1에 대응하는 데이터가, 제2 어드레스에는, 검사 행렬의 구성 행렬인 (6, 1)부터 (10, 5)의 합 행렬을 구성하는 제2 시프트 행렬의 1에 대응하는 데이터가 저장된다. 이하, 제3 어드레스부터 제9 어드레스도 마찬가지로 검사 행렬의 구성 행렬과 대응지어 데이터가 저장된다.
마찬가지로, 복호 도중 저장용 RAM(503)의 제10 어드레스부터 제18 어드레스에는, 도 15의 검사 행렬의 제16행째부터 제20행째까지의 1에 대응하는 데이터가, 제19 어드레스부터 제27 어드레스에는, 검사 행렬의 제26행째부터 제30행째까지의 1에 대응하는 데이터가, 도 15의 검사 행렬에 대응지어 저장된다. 즉, 복호 도중 결과 저장용 RAM(503)의 워드 수는 27이다.
상술한 바와 같이, 복호 도중 결과 저장용 RAM(502와 503)의 워드(word) 수는 27이다. 즉, 워드 수는, 검사 행렬의 행의 웨이트(row weight)인 9와 행 수인 30을 승산하고, 그 승산 결과(검사 행렬의 1의 수)를, 동시에 판독하는 복호 도중 결과 D501의 수인 5로 제산하며, 또한, 복호 도중 결과 저장용 메모리(413)가 갖는 복호 도중 결과 저장용 RAM의 개수인 2로 제산한 값으로 된다.
이하, 도 23의 복호 도중 결과 저장용 메모리(413)의 각 부의 동작에 대하여 상세히 설명한다.
복호 도중 결과 저장용 메모리(413)에는, 계산부(412)에 의해 제1 연산이 행해지는 경우, 계산부(412)로부터 제1 연산의 결과 얻어지는 복호 도중 결과 D412(uj)가 공급되며, 그 복호 도중 결과 D412가 복호 도중 결과 저장용 RAM(502) 또는 복호 도중 결과 저장용 RAM(503) 중의 한쪽의 소정의 어드레스에 기입됨과 동시에, 다른쪽으로부터, 전회의 계산부(412)에 의한 제1 연산의 결과 얻어진 복호 도중 결과 D412(uj)가 판독되어, 계산부(412)에 출력된다. 한편, 계산부(415)에 의해 제2 연산이 행해지는 경우, 복호 도중 결과 저장용 메모리(413)는, 복호 도중 결과 저장용 RAM(502) 또는 복호 도중 결과 저장용 RAM(503)에 기입을 행하지 않고, 어느 한쪽의 RAM의 소정의 어드레스로부터 복호 도중 결과를 판독하여, 사이클릭 시프트 회로(414)에 공급한다.
스위치(501)에는, 계산부(412)로부터 5개의 복호 도중 결과 D412가 공급됨과 함께, 그 복호 도중 결과 D412를 기입하는 메모리로서, 복호 도중 결과 저장용 RAM(502) 또는 복호 도중 결과 저장용 RAM(503)의 한쪽의 선택을 나타내는 제어 신호 D4201이 제어부(417)로부터 공급된다. 스위치(501)는, 제어 신호 D4201에 기초 하여, 복호 도중 결과 저장용 RAM(502) 또는 복호 도중 결과 저장용 RAM(503)의 한쪽을 선택하고, 그 선택한 한쪽에, 5개의 복호 도중 결과 D412를 공급한다.
복호 도중 결과 저장용 RAM(502)에는, 스위치(501)로부터 5개의 복호 도중 결과 D412가, 복호 도중 결과 D501로서 공급됨과 함께, 제어부(417)로부터 어드레스를 나타내는 제어 신호 D4202가 공급된다. 복호 도중 결과 저장용 RAM(502)은, 제어 신호 D4022가 나타내는 어드레스에 이미 저장되어 있는 전회의 계산부(412)에 의한 제1 연산의 결과 얻어진 5개의 복호 도중 결과 D501을 판독하여, 복호 도중 결과 D503으로서 스위치(504)에 공급한다. 또한, 복호 도중 결과 저장용 RAM(502)은, 제어 신호 D4022가 나타내는 어드레스에, 스위치(501)로부터 공급된 5개의 복호 도중 결과 D501을 저장한다(기입한다).
복호 도중 결과 저장용 RAM(503)에는, 스위치(501)로부터 5개의 복호 도중 결과 D412가, 복호 도중 결과 D502로서 공급됨과 함께, 제어부(417)로부터 어드레스를 나타내는 제어 신호 D4203이 공급된다. 복호 도중 결과 저장용 RAM(503)은, 제어 신호 D4203이 나타내는 어드레스에 이미 저장되어 있는 전회의 계산부(412)에 의한 제1 연산의 결과 얻어진 5개의 복호 도중 결과 D502를 판독하여, 복호 도중 결과 D504로서 스위치(504)에 공급한다. 또한, 복호 도중 결과 저장용 RAM(502)은, 제어 신호 D4203이 나타내는 어드레스에, 스위치(501)로부터 공급된 5개의 복호 도중 결과 D502를 저장한다(기입한다).
스위치(504)에는, 복호 도중 결과 저장용 RAM(502)으로부터 복호 도중 결과 D503이 공급되거나, 혹은 복호 도중 결과 저장용 RAM(503)으로부터 복호 도중 결과 D504가 공급된다. 또한, 제어부(417)로부터, 복호 도중 결과 저장용 RAM(502) 또는 복호 도중 결과 저장용 RAM(503)의 한쪽의 선택을 나타내는 제어 신호 D4204가 공급된다. 스위치(504)는, 제어 신호 D4201에 기초하여, 복호 도중 결과 저장용 RAM(502) 또는 복호 도중 결과 저장용 RAM(503)의 한쪽을 선택하고, 그 선택한 한쪽으로부터 공급된 5개의 복호 도중 결과를, 5개의 복호 도중 결과 D413으로서 계산부(412)와 사이클릭 시프트 회로(414)에 공급한다.
도 24는, 복호 도중 결과 저장용 메모리(413)의 복호 도중 결과 저장용 RAM(502)과 복호 도중 결과 저장용 RAM(503)의 판독과 기입의 동작을 설명하는 타이밍차트이다.
또한, 도 24에서, 횡축은 시간(t)을 나타내고 있다.
복호 도중 결과 저장용 메모리(413)에서는, 계산부(412)에 의해 제1 연산이 행해지는 경우, 복호 도중 결과 저장용 RAM(502)이, 제어 신호 D4202에 기초하여, 이미 저장하고 있는, 전회의 계산부(412)의 제1 연산의 결과 얻어진 복호 도중 결과 D501 중, 동일 어드레스에 저장하고 있는 검사 행렬의 제1행째부터 제5행째까지의 1에 대응하는 복호 도중 결과 D501을, 5개 단위로 9회 판독하여, 스위치(504)를 통해, 계산부(412)에 공급한다. 즉, 도 15의 검사 행렬 H의 행 웨이트는 9이기 때문에, 검사 행렬 H의 각 행의 1에 대응하는 복호 도중 결과는 9개 있고, 복호 도중 결과 저장용 RAM(502)은, 제1행째부터 제5행째까지의 1에 대응하는 5개의 복호 도중 결과 D501을, 5개 단위로 9회 판독한다.
다음으로, 복호 도중 결과 저장용 RAM(503)은, 제어 신호 D4203에 기초하여, 이미 저장하고 있는, 전회의 계산부(412)에 의한 제1 연산의 결과 얻어진 복호 도중 결과 D502 중, 동일 어드레스에 저장하고 있는 검사 행렬의 제6행째부터 제10행째까지의 1에 대응하는 복호 도중 결과 D502를, 5개 단위로 9회 계속하여 판독하여, 스위치(504)를 통해, 계산부(412)에 공급한다. 그것과 동시에, 복호 도중 결과 저장용 RAM(502)에는, 계산부(412)에 의해, 지금 행해지고 있는 제1 연산의 결과 얻어지는 검사 행렬의 제1행째부터 제5행째까지의 1에 대응하는 5개의 복호 도중 결과 D412가 스위치(501)를 통해, 복호 도중 결과 D501로서 공급되며, 복호 도중 결과 저장용 RAM(502)은, 그 복호 도중 결과 D501을, 제어 신호 D4202에 기초하여, 이미 판독된 복호 도중 결과 D503이 저장되어 있엇던 어드레스에 9회 계속하여 저장한다.
그 후, 복호 도중 결과 저장용 RAM(502)은, 제어 신호 D4202에 기초하여, 이미 저장하고 있는, 전회의 계산부(412)에 의한 제1 연산의 결과 얻어진 복호 도중 결과 D501 중, 동일 어드레스에 저장하고 있는 검사 행렬의 제11행째부터 제15행째까지의 1에 대응하는 복호 도중 결과 D501을, 5개 단위로 9회 계속하여 판독하여, 스위치(504)를 통해, 계산부(412)에 공급한다. 그것과 동시에, 복호 도중 결과 저장용 RAM(503)에는, 계산부(412)에 의해, 지금 행해지고 있는 제1 연산의 결과 얻 어지는 검사 행렬의 제6행째부터 제10행째까지의 1에 대응하는 5개의 복호 도중 결과 D412가 스위치(501)를 통해, 복호 도중 결과 D502로서 공급되며, 복호 도중 결과 저장용 RAM(503)은, 그 복호 도중 결과 D502를, 제어 신호 D4203에 기초하여, 이미 판독된 복호 도중 결과 D504가 저장되어 있었던 어드레스에 9회 계속하여 저장한다.
이후, 마찬가지로, 계산부(412)에 의한 제1 연산의 결과 얻어지는 검사 행렬의 모든 1에 대응하는 복호 도중 결과가, 복호 도중 결과 저장용 RAM(502) 또는 복호 도중 결과 저장용 RAM(503)에 저장될 때까지, 복호 도중 결과 저장용 RAM(502)과 복호 도중 결과 저장용 RAM(503)은, 9회씩의 판독 또는 기입을 교대로 행한다.
복호 도중 결과 저장용 메모리(413)에서는, 계산부(415)에 의한 제2 연산이 행해지는 경우, 제어 신호 D4202에 기초하여, 복호 도중 결과 저장용 RAM(502)으로부터 이미 저장되어 있는 제1 연산의 결과 얻어지는 복호 도중 결과 D503을 판독하거나, 혹은 제어 신호 D4203에 기초하여, 복호 도중 결과 저장용 RAM(503)으로부터, 이미 저장되어 있는 제1 연산의 결과 얻어지는 복호 도중 결과 D504를 판독하고, 그 판독한 복호 도중 결과를 스위치(504)를 통해, 사이클릭 시프트 회로(414)에 공급한다.
도 25는 도 18의 복호 장치(400)의 복호 처리를 설명하는 흐름도이다. 이 처리는, 예를 들면, 수신용 메모리(416)에 복호해야 할 수신 데이터가 저장되었을 때, 개시된다.
단계 S50에서, 사이클릭 시프트 회로(414)는, 복호 도중 결과 저장용 메모리(413)로부터 공급된 후술하는 단계 S56에서 저장되는 5개의 복호 도중 결과 D413을, 사이클릭 시프트하여, 계산부(415)에 공급한다.
구체적으로는, 사이클릭 시프트 회로(414)에는, 복호 도중 결과 저장용 메모리(413)로부터 5개의 복호 도중 결과 D413이 공급됨과 함께, 제어부(417)로부터, 그 복호 도중 결과 D413에 대응하는 검사 행렬의 1이 검사 행렬에서 기초로 되는 단위 행렬 등을 몇개 사이클릭 시프트한 것인지의 정보(Matrix 데이터)를 나타내는 제어 신호 D421이 공급된다. 사이클릭 시프트 회로(414)는, 제어 신호 D421에 기초하여, 5개의 복호 도중 결과 D413을 사이클릭 시프트하고(재배열하고), 그 결과를 복호 도중 결과 D414로서, 계산부(415)에 공급한다.
또한, 수신용 메모리(416)로부터 공급된 수신 데이터 D417에 대하여, 아직 제1 연산이 행해지지 않아, 복호 도중 결과 저장용 메모리(413)에 복호 도중 결과 D413이 저장되어 있지 않은 경우, 계산부(415)는, 복호 도중 결과 uj를 초기 값으로 설정한다.
단계 S51에서, 계산부(415)는, 제2 연산을 행하고, 그 연산의 결과인 복호 도중 결과 D415를 복호 도중 결과 저장용 메모리(410)에 공급한다.
구체적으로는, 계산부(415)에는, 단계 S50에서 사이클릭 시프트 회로(414)로부터 5개의 복호 도중 결과 D414가 공급됨과 함께, 수신 데이터용 메모리(416)로부터 5개의 수신 데이터 D417이 공급되며, 복호 도중 결과 D415와 수신 데이터 D417 이, 계산부(415)의 계산기(4151 내지 4155) 각각에 1개씩 공급된다. 또한, 계산부(415)에는, 제어부(417)로부터 제어 신호 D422가 공급되며, 그 제어 신호 D422가 계산기(4151 내지 4155)에 공급된다.
계산기(4151 내지 4155)는, 복호 도중 결과 D414와 수신 데이터 D417을 이용하여, 제어 신호 D422에 기초하여, 수학식 5에 따라, 각각 연산을 행하고, 그 연산의 결과 얻어지는 검사 행렬의 열에 대응하는 복호 도중 결과 D415(v)를 복호 도중 결과 저장용 메모리(410)에 공급한다.
단계 S51의 처리 후에는, 단계 S52로 진행하여, 복호 도중 결과 저장용 메모리(410)는, 단계 S51에서 계산부(415)로부터 공급된 복호 도중 결과 D415를, 동일 어드레스에 저장하고, 단계 S53으로 진행한다.
단계 S53에서, 제어부(417)는, 계산부(415)에 의해, 검사 행렬의 열에 대응하는 모든 복호 도중 결과 D415가 연산되었는지의 여부를 판정하고, 모든 복호 도중 결과 D415가 연산되어 있지 않다고 판정한 경우, 단계 S50으로 되돌아가, 상술한 처리를 반복한다.
한편, 단계 S53에서, 제어부(417)는, 계산부(415)에 의해, 검사 행렬의 열에 대응하는 모든 복호 도중 결과 D415가 연산되었다고 판정한 경우, 단계 S54로 진행하여, 사이클릭 시프트 회로(411)는, 복호 도중 결과 저장용 메모리(410)로부터 공급되는 복호 도중 결과 D410(v)을 사이클릭 시프트한다.
구체적으로는, 사이클릭 시프트 회로(411)에는, 복호 도중 결과 저장용 메모 리(410)로부터 5개의 복호 도중 결과 D410이 공급됨과 함께, 제어부(417)로부터, 그 복호 도중 결과 D410에 대응하는 검사 행렬의 1이 검사 행렬에서 기초로되는 단위 행렬 등을 몇개 사이클릭 시프트한 것인지의 정보(Matrix 데이터)를 나타내는 제어 신호 D418이 공급된다. 사이클릭 시프트 회로(411)는, 제어 신호 D418에 기초하여, 5개의 복호 도중 결과 D410을 사이클릭 시프트하고(재배열하고), 그 결과를 복호 도중 결과 D411로서, 계산부(412)에 공급한다.
단계 S54의 처리 후에는, 단계 S55로 진행하여, 계산부(412)는, 제1 연산을 행하고, 그 연산 결과인 복호 도중 결과 D412를 사이클릭 시프트 회로(414)에 공급한다.
구체적으로는, 계산부(412)에는, 단계 S54에서 사이클릭 시프트 회로(411)로부터 5개의 복호 도중 결과 D411(v)이 공급됨과 함께, 후술하는 단계 S56에서 이미 저장된 전회의 계산부(412)에 의한 제1 연산의 결과 얻어진 5개의 복호 도중 결과 D412(D413)(uj)가 공급되며, 그 복호 도중 결과 D411과 복호 도중 결과 D413이, 계산부(412)의 계산기(4121 내지 4125)의 각각에 1개씩 공급된다. 또한, 계산부(412)에는, 제어부(417)로부터 제어 신호 D419가 공급되며, 그 제어 신호 D419가 계산기(4121 내지 4125)에 공급된다.
계산기(4121 내지 4125)는, 각각 복호 도중 결과 D411과 복호 도중 결과 D413을 이용하여, 제어 신호 D419에 기초하여, 수학식 7과 수학식 8에 따라, 각각 연산을 행하고, 그 연산의 결과 얻어지는 복호 도중 결과 D412(uj)를 복호 도중 결과 저장용 메모리(413)에 공급한다.
단계 S55의 처리 후에는, 단계 S56으로 진행하여, 복호 도중 결과 저장용 메모리(413)는, 단계 S55에서 계산부(412)로부터 공급된 5개의 복호 도중 결과 D412를, 동일한 어드레스에 저장하고, 단계 S57로 진행한다.
단계 S57에서, 제어부(417)는, 계산부(412)에 의해, 검사 행렬의 모든 1에 대응하는 복호 도중 결과 D412가 연산되었는지의 여부를 판정하고, 모든 복호 도중 결과가 연산되어 있지 않다고 판정한 경우, 단계 S54로 되돌아가, 상술한 처리를 반복한다.
한편, 단계 S57에서, 제어부(417)는, 계산부(412)에 의해, 모든 1에 대응하는 복호 도중 결과 D412가 연산되었다고 판정한 경우, 처리를 종료한다.
또한, 복호 장치(400)는, 복호 횟수만큼 도 25의 복호 처리를 반복하여 행하고, 최후의 제2 연산의 결과 얻어지는 메시지 D415가, 최종적인 복호 결과로서 출력된다.
상술한 설명에서는, 복호 도중 결과 저장용 메모리(413)는, 2개의 싱글 포트 RAM으로 구성하였지만, 1개의 RAM에 대하여 판독과 기입이 동시에 발생하지 않도록 하면, 3개 이상의 RAM으로 구성해도 된다. 예를 들면, RAM의 물리적인 비트가 부족한 경우에는, 복수의 RAM을 이용하여 동일한 제어 신호를 제공함으로써, 논리적으로 1개의 RAM으로 간주할 수 있다.
또한, 브랜치 데이터(브랜치에 대응하는 메시지)가 부족한 개소에 대해서는, 메모리 저장 시(복호 도중 결과 저장용 메모리(410과 413)에의 데이터 저장 시)에는, 어떤 메시지도 저장시키지 않고, 또한, 연산 시(계산부(412)에서의 제1 연산 시와 계산부(415)에서의 제2 연산 시)에도 어떤 연산도 행하지 않는다.
도 26은, 본 발명을 적용한 도 15의 검사 행렬로 표현되는 LDPC 부호를 복호하는 복호 장치의 다른 일 실시 형태의 구성예를 도시하는 블록도이다.
도 26의 복호 장치(600)에서는, 도 16A와 도 16C의 브랜치 데이터 저장 메모리(316)가, 브랜치 데이터 저장 메모리(316)에 비해 용량이 작은 복호 도중 결과 저장용 메모리(613)로 되어 있다.
복호 장치(600)는, 복호 도중 결과 저장용 메모리(610), 사이클릭 시프트 회로(611), 5개의 계산기(6121) 내지 계산기(6125)로 이루어지는 계산부(612), 복호 도중 결과 저장용 메모리(613), 사이클릭 시프트 회로(614), 5개의 계산기(6151) 내지 계산기(6155)로 이루어지는 계산부(615), 수신용 메모리(616), 및 제어부(617)로 구성된다.
여기서, 도 27 내지 도 30을 이용하여, 도 26의 계산부(612)의 계산기(6121) 내지 계산기(6125), 및 도 30의 계산부(615)의 계산기(6151) 내지 계산기(6155 )와, 도 10의 체크 노드 계산기(101) 및 도 11의 배리어블 노드 계산기(103)와의 관계에 대하여 설명한다.
도 27과 도 28은, 상술한 도 10의 체크 노드 계산기(101)와 도 11의 배리어블 노드 계산기(103)와 각각 동일한 도면이다. 또한, 도 29는 계산기(612k)(k=1, 2, …, 5)의 구성예를 도시하고 있고, 도 30은 계산기(615k)(k=1, 2, …, 5)의 구성예를 도시하고 있다.
도 26의 복호 장치(600)에서는, 계산기(612k)가 체크 노드 연산을 행하고, 계산부(615k)가, 배리어블 노드 연산을 행하는 것이 아니라, 계산기(612k)가 체크 노드 연산의 일부를, 계산기(615k)가 체크 노드 연산의 다른 일부와 배리어블 노드 연산을 행한다.
즉, 도 29의 계산기(612k)는, 블록 D'와 E'로 구성된다. 블록 D'는, 도 27의 체크 노드 계산기(101)의 일부인, 검사 행렬의 각 열의 모든 브랜치에 대응하는 메시지 vi의 절대값에 대하여 φ의 연산을 행한 값을 적산하는 블록 D와 마찬가지로 구성되어 있다. 또한, 블록 E'는, 검사 행렬의 각 열의 모든 브랜치에 대응하는 메시지 vi의 부호 비트를 승산하는 블록 E와 마찬가지로 구성되어 있다.
한편, 도 30의 계산기(615k)는, 블록 F', G', H'로 구성된다. 블록 F'는, 도 19의 체크 노드 계산기(101)의 다른 일부인, 검사 행렬의 각 열의 모든 브랜치에 대응하는 메시지 vi의 부호 비트의 승산값으로부터, 구하고자 하는 브랜치에 대응하는 메시지 vi의 부호 비트를 제산함과 함께, 검사 행렬의 각 열의 모든 브랜치 에 대응하는 메시지 vi의 절대값에 대한 φ의 연산을 행한 값의 적산값으로부터, 구하고자 하는 브랜치에 대응하는 메시지 vi의 절대값에 대하여 φ의 연산을 행한 값을 감산한 값에 대하여, φ-1의 연산을 행하는 블록 F와 마찬가지로 구성되어 있다. 또한, 블록 G'는, 메시지 vi의 절대값에 대하여 φ의 연산을 행하는 블록 G와 마찬가지로 구성되며, 블록 H'는, 도 20의 배리어블 노드 계산기(103)의 배리어블 노드 연산을 행하는 블록 H와 마찬가지로 구성되어 있다.
그리고, 도 29의 계산기(612k)는, 블록 A와 블록 B에 의한 연산의 결과, 즉, 체크 노드 연산의 일부를 행한 복호 도중 결과 w를 복호 도중 결과 저장용 메모리(613)에 공급하고, 도 30의 계산기(615k)는, 체크 노드 연산의 다른 일부와 배리어블 노드 연산을 행한 복호 도중 결과 vi'를 복호 도중 결과 저장용 메모리(610)에 공급한다.
따라서, 도 26의 복호 장치(600)는, 계산기(612k)의 연산과 계산기(615k)의 연산을 교대로 행함으로써, 체크 노드 연산과 배리어블 노드 연산을 행하여, 복호를 행할 수 있다.
또한, 도 30의 계산기(615k)에서는, 복호 도중 결과 저장용 메모리(610)에 저장되어 있는 구하고자 하는 브랜치에 대응하는 복호 도중 결과 vi'를 이용하여, 블록 C에서, 계산기(612k)의 연산의 결과 얻어지는 복호 도중 결과 w의 절대값으로 부터, 구하고자 하는 브랜치에 대응하는 복호 도중 결과 vi'를 감산함과 함께, 복호 도중 결과 w의 부호 비트와, 구하고자 하는 브랜치에 대응하는 복호 도중 결과 vi'의 부호 비트를 승산하기 때문에, 도 27의 FIFO 메모리(127)와 FIFO 메모리(133)가 필요하지 않다.
다음으로, 계산부(612)의 계산기(6121) 내지 계산기(6125)에서 행해지는 연산과, 계산부(615)의 계산기(6151) 내지 계산기(6155)에서 행해지는 연산에 대하여, 식을 이용하여 설명한다.
계산부(612)는, 이하의 수학식 9에 따르는 제1 연산을 행하고, 그 제1 연산의 결과인 복호 도중 결과 w를 복호 도중 결과 저장용 메모리(613)에 공급하여 저장시킨다. 계산부(615)는, 상술한 수학식 1과, 이하의 수학식 10과 수학식 11에 따르는 제2 연산을 행하고, 그 제2 연산의 결과인 복호 도중 결과 vi'를 복호 도중 결과 저장용 메모리(610)에 공급하여 저장시킨다.
Figure 112005001740696-pct00009
Figure 112005001740696-pct00010
Figure 112005001740696-pct00011
즉, 수학식 9에 따르는 제1 연산의 결과 얻어지는 복호 도중 결과 w는, 수학식 1, 수학식 10, 수학식 11에 따르는 제2 연산의 결과 얻어지는 검사 행렬 H의 j 행의 모든 1에 대응하는 체크 노드 연산의 복호 도중 결과 vi'의 절대값 |vi'|의 총합과 부호 비트 sign(vi')의 승산값을 승산한 것이기 때문에, 상술한 수학식 7에 따르는 체크 노드 연산에 의해 구해지는 uj는, 수학식 10에 나타낸 바와 같이, 수학식 9에 따르는 제1 연산의 결과 얻어지는 복호 도중 결과 w의 절대값 |w|로부터, 검사 행렬 H의 j행의, 각 열의 "1"(브랜치)에 대응하는 (복수의) 복호 도중 결과 vi' 중, 메시지를 구하고자 하는 브랜치에 대응하는 복호 도중 결과 vi'의 절대값 |vi'|을 뺀 값을 이용하여 나타낼 수 있다.
복호 장치(600)에서는, 계산부(612)에 의한 수학식 9에 따르는 제1 연산과, 계산부(615)에 의한 수학식 1, 수학식 10, 수학식 11에 따르는 제2 연산이 교대로 행해지며, 계산부(615)가, 최후의 제1 연산의 결과를 이용하여, 수학식 5에 따르는 연산을 행하고, 그 연산 결과를 복호 결과로서 출력함으로써, LDPC 부호의 반복 복호를 행한다.
즉, 복호 장치(600)에서는, 계산부(612)가, 계산부(615)에 의한 제2 연산의 결과인 검사 행렬 H의 j행의 모든 1에 대응하는 복호 도중 결과 vi'를 이용하여, 제1 연산을 행하고, 그 연산의 결과 얻어지는 검사 행렬의 각 행에 대응하는 복호 도중 결과 w를 복호 도중 결과 저장용 메모리(613)에 저장한다. 따라서, 복호 도중 결과 저장용 메모리(613)의 용량은, 검사 행렬의 "1"의 수보다 적은 검사 행렬의 행 수와 복호 도중 결과 w의 양자화 비트 수를 승산한 값으로 된다. 또한, 계산부(615)는, 계산부(612)에 의한 제1 연산의 결과인 검사 행렬 H의 i열의 각 행에 대응하는 복호 도중 결과 w와 수신값 u0i를 이용하여, 제2 연산을 행하고, 그 연산의 결과 얻어지는 검사 행렬의 i열의 1(브랜치)에 대응하는 체크 노드 연산의 복호 도중 결과 vi'를 복호 도중 결과 저장용 메모리(610)에 저장한다. 따라서, 복호 도중 결과 저장용 메모리(610)에 필요한 용량은, 배리어블 노드 연산의 결과를 저장하는 도 16A와 도 16B의 브랜치 데이터 저장 메모리(311)와 마찬가지로, 검사 행렬의 1의 수와 복호 도중 결과 vi'의 양자화 비트 수를 승산한 값으로 된다.
따라서, 복호 장치(600)에서는, 도 16A와 도 16B의 브랜치 데이터 저장 메모리(311)에 비해, 복호 도중 결과 저장용 메모리(610)의 메모리의 용량을 삭감할 수 있으며, 이에 의해, 복호 장치(600)의 회로 규모를 작게 할 수 있다.
이하, 도 26의 복호 장치(600)의 각 부의 동작에 대하여 상세히 설명한다.
복호 도중 결과 저장용 메모리(610)는, 제어 신호 D618에 기초하여, 계산부(615)로부터 공급되는 5개의 복호 도중 결과 D615를 통합하여 저장함과 함께, 이미 저장되어 있는 5개의 복호 도중 결과 D615를 판독하여, 복호 도중 결과 D610으로서, 사이클릭 시프트 회로(611)와 계산부(615)에 공급한다. 즉, 복호 도중 결과 저장용 메모리(610)는, 사이클릭 시프트 회로(611)에 공급하는 복호 도중 결과 D610의 판독과, 계산부(615)로부터 공급되는 복호 도중 결과 D615의 기입을, 동시 에 행한다.
또한, 복호 도중 결과 저장용 메모리(610)에는, 계산부(615)의 제2 연산에 의해 연산된 검사 행렬의 1(브랜치)에 대응하는 복호 도중 결과 vi'(제2 복호 도중 결과)가 저장되기 때문에, 복호 도중 결과 저장용 메모리(610)에 저장되는 데이터량, 즉, 복호 도중 결과 저장용 메모리(610)에 필요로 되는 기억 용량은, 복호 도중 결과의 양자화 비트 수와, 검사 행렬의 1의 수(모든 브랜치 수)와의 승산값으로 된다.
복호 도중 결과 저장용 메모리(610)는, 예를 들면, 5개의 복호 도중 결과를 동시에 기입 및 판독 가능한, 2개의 싱글 포트 RAM으로 구성된다. 복호 도중 결과 저장용 메모리(610)에는, 계산부(615)로부터 5개의 복호 도중 결과 D615가 공급됨과 함께, 제어부(617)로부터 복호 도중 결과 D615의 기입 및 판독을 제어하는 제어 신호 D618이 공급된다.
사이클릭 시프트 회로(611)에는, 복호 도중 결과 저장용 메모리(610)로부터 5개의 복호 도중 결과 D610이 공급됨과 함께, 제어부(617)로부터, 그 복호 도중 결과 D610에 대응하는 검사 행렬의 1이, 검사 행렬에서 기초가 되는 단위 행렬 등을 몇개 사이클릭 시프트한 것인지의 정보(Matrix 데이터)를 나타내는 제어 정보 D619가 공급된다. 사이클릭 시프트 회로(611)는, 제어 신호 D619에 기초하여, 5개의 복호 결과 D610을 재배열하는 사이클릭 시프트를 행하고, 그 결과를 복호 도중 결과 D611로서, 계산부(612)에 공급한다.
계산부(612)는, 5개의 계산기(6121 내지 6125)로 이루어진다. 계산부(612)에는, 사이클릭 시프트 회로(611)로부터 5개의 복호 도중 결과 D611(제2 복호 도중 결과)(vi')이 공급되며, 그 5개의 복호 도중 결과 D611(제1 복호 도중 결과)(w)이, 계산기(6121 내지 6125)의 각각에 공급된다. 또한, 계산부(612)에는, 제어부(617)로부터 제어 신호 D620이 공급되며, 그 제어 신호 D620이, 계산기(6121 내지 6125)에 공급된다. 또한, 제어 신호 D620은, 5개의 계산기(6121 내지 6125)에 공통의 신호이다.
계산기(6121 내지 6125)는, 각각 복호 도중 결과 D611을 이용하여, 수학식 9에 따라 제1 연산을 행하여, 복호 도중 결과 D612(w)를 구한다. 계산부(612)는, 계산기(6121 내지 6125)에 의한 연산의 결과 얻어지는 5개의 복호 도중 결과 D612를 복호 도중 결과 저장용 메모리(613)에 공급한다.
복호 도중 결과 저장용 메모리(613)에는, 계산부(612)로부터, 계산부(612)에 의한 제1 연산의 결과인 검사 행렬의 행에 대응하는 5개의 복호 도중 결과 D612가 공급되며, 복호 도중 결과 저장용 메모리(613)는, 계산부(612)로부터 공급된 5개의 복호 도중 결과 D612를, 제1 어드레스로부터 순서대로 저장(기억)한다.
즉, 복호 도중 결과 저장용 메모리(613)의 제1 어드레스에는, 검사 행렬의 행에 대응하는 복호 도중 결과 중, 제1행째부터 제5행째의 복호 도중 결과 w가 저장된다. 그리고, 마찬가지로, 제2 어드레스에는, 제6행째부터 제10행째의 복호 도 중 결과 w가 저장되며, 제3 어드레스에는, 제11행째부터 제15행째의 복호 도중 결과 w가 저장된다. 이후, 마찬가지로, 제16행째부터 제30행째까지의 복호 도중 결과 w가, 5개씩, 제4 어드레스로부터 제6 어드레스까지 저장되어, 합계 60개의 복호 도중 결과 w가 복호 도중 결과 저장용 메모리(613)에 저장된다. 따라서, 복호 도중 결과 저장용 메모리(610)의 워드(word) 수는, 도 15의 검사 행렬 H의 행 수인 30을, 동시에 기입 및 판독하는 복호 도중 결과의 수인 5로 나누어 계산한 6으로 된다.
또한, 복호 도중 결과 저장용 메모리(613)는, 이미 저장되어 있는 5개의 복호 도중 결과 D613으로부터, 계산부(615)가 구하고자 하는 복호 도중 결과 vi'의 대응하는 검사 행렬 H의 열에서 "1"로 되어 있는 복호 도중 결과 w를 5개 동시에 판독하여, 복호 도중 결과 D613으로서, 사이클릭 시프트 회로(614)에 공급한다.
또한, 복호 도중 결과 저장용 메모리(613)는, 예를 들면, 5개의 복호 도중 결과를 동시에 기입 및 판독 가능한, 싱글 포트 RAM으로 구성된다. 또한, 복호 도중 결과 저장용 메모리(613)에는, 계산부(612)의 제1 연산에 의해 연산된 행에 대응하는 복호 도중 결과 w가 저장되기 때문에, 복호 도중 결과 저장용 메모리(613)에 저장되는 데이터량, 즉, 복호 도중 결과 저장용 메모리(613)에 필요로 되는 기억 용량은, 복호 도중 결과의 양자화 비트 수와, 검사 행렬 H의 행 수와의 승산값이다.
사이클릭 시프트 회로(614)에는, 복호 도중 결과 저장용 메모리(613)로부터 5개의 복호 도중 결과 D613(복호 도중 결과 w)이 공급됨과 함께, 제어부(617)로부터, 그 복호 도중 결과 D613에 대응하는 검사 행렬의 1이 검사 행렬에서 기초가 되는 단위 행렬 등을 몇개 사이클릭 시프트한 것인지의 정보(Matrix 데이터)를 나타내는 제어 신호 D621이 공급된다. 사이클릭 시프트 회로(614)는, 제어 신호 D621에 기초하여, 5개의 복호 도중 결과 D613을 재배열하는 사이클릭 시프트를 행하고, 그 결과를 복호 도중 결과 D614로서, 계산부(615)에 공급한다.
계산부(615)는, 5개의 계산기(6151 내지 6155)로 이루어진다. 배리어블 노드 계산부(615)에는, 사이클릭 시프트 회로(614)로부터 5개의 복호 도중 결과 D614(w)가 공급됨과 함께, 복호 도중 결과 저장용 메모리(610)로부터 5개의 복호 도중 결과 D610(vi')이 공급되며, 그 복호 도중 결과 D614와 복호 도중 결과 D610이, 계산기(6151 내지 6155)의 각각에 공급된다. 또한, 계산부(615)에는, 수신용 메모리(617)로부터 5개의 수신 데이터 D617이 공급되며, 그 수신 데이터 D617이, 계산기(6151 내지 6155)의 각각에 공급된다. 또한, 계산부(617)에는, 제어부(617)로부터 제어 신호 D622가 공급되며, 그 제어 신호 D622가 계산기(6151 내지 6155)에 공급된다. 또한, 제어 신호 D622는, 5개의 계산기(6171 내지 6175)에 공통의 신호이다.
계산기(6151 내지 6155)는, 각각 복호 도중 결과 D614와 D611, 수신 데이터 D617(LDPC 부호)을 이용하여, 수학식 1, 수학식 10, 수학식 11에 따라, 각각 제2 연산을 행하여, 검사 행렬의 각 열의 1에 대응하는 5개의 복호 도중 결과 D615(vi')를 구한다. 계산부(615)는, 계산기(6151 내지 6155)의 제2 연산의 결과 얻어지는 5개의 복호 도중 결과 D615를, 복호 도중 결과 저장용 메모리(610)에 공급한다.
수신용 메모리(616)는, 통신로를 통해 수신한 수신값(부호 비트) D616으로부터 계산한 부호 비트가 0인 것 같은 값인 수신 LLR(대수 우도비)을, 수신 데이터 D617로서 저장한다.
즉, 수신용 메모리(616)의 제1 어드레스에는, 검사 행렬의 열에 대응하는 수신 데이터 D617 중, 검사 행렬의 제1열째부터 제5열째까지 대응하는 수신 데이터 D617이 저장된다. 그리고, 제2 어드레스에는, 검사 행렬의 제6열째부터 제10열째까지 대응하는 수신 데이터 D617이 저장되며, 제3 어드레스에는, 검사 행렬의 제11열째부터 제16열째까지 대응하는 수신 데이터 D617이 저장된다. 이후, 마찬가지로, 제4 어드레스부터 제18 어드레스까지, 검사 행렬의 제17열째부터 제90열째까지 대응하는 수신 데이터 D617이, 5개씩 저장된다.
그리고, 수신용 메모리(616)는, 이미 저장되어 있는 수신 데이터 D617을 계산부(615)에 의한 제2 연산에 필요로 되는 순서로 5개씩 동시에 판독하여, 계산부(615)에 공급한다.
또한, 수신용 메모리(616)는, 예를 들면, 싱글 포트 RAM으로 구성된다. 또한, 수신용 메모리(616)에 저장되는 데이터량, 즉, 수신용 메모리(616)에 필요로 되는 기억 용량은, LDPC 부호의 부호 길이와, 수신 데이터의 양자화 비트 수와의 승산값이다. 또한, 수신용 메모리(616)의 워드(word) 수는, LDPC 부호의 부호 길이, 즉, 검사 행렬의 열 수인 90을, 동시에 판독하는 수신 데이터 D617의 수인 5로 나누어 계산한 값인 18이다.
제어부(617)는, 제어 신호 D618을 복호 도중 결과 저장용 메모리(610)에, 제어 신호 D619를 사이클릭 시프트 회로(611)에 공급함으로써, 각각을 제어한다. 또한, 제어부(617)는, 제어 신호 D620을 계산부(612)에, 제어 신호 D621을 사이클릭 시프트 회로(614)에, 제어 신호 D622를 계산부(615)에 공급함으로써, 각각을 제어한다.
복호 도중 결과 저장용 메모리(610), 사이클릭 시프트 회로(611), 계산부(612), 복호 도중 결과 저장용 메모리(613), 사이클릭 시프트 회로(614), 계산부(615)의 순으로, 데이터가 일주함으로써, 복호 장치(600)는, 1회의 복호를 행할 수 있다. 복호 장치(600)에서는, 소정의 횟수만큼 반복하여 복호가 행해진 후, 계산부(615)가, 수학식 5에 따르는 연산을 행하고, 그 연산 결과가 최종적인 복호 결과로서 출력된다.
도 29는 도 26의 계산부(612)의 계산기(6121)의 구성예를 도시하는 블록도이다.
또한, 도 29에서는, 계산기(6121)에 대하여 설명하지만, 계산기(6122) 내지 계산기(6125)도 마찬가지로 구성된다.
또한, 도 29에서는, 계산기(615)에 의한 제2 연산의 결과 얻어지는 각 복호 도중 결과(vi')가 6비트로 양자화되어 있는 것으로 하여, 계산기(6121)를 나타내고 있다. 또한, 도 29의 계산기(6121)에는, 클럭 ck가 공급되며, 이 클럭 ck는, 필요한 클럭에 공급되도록 되어 있다. 그리고, 각 블록은, 클럭 ck에 동기하여 처리를 행한다.
도 29의 계산기(6121)는, 제어부(617)로부터 공급되는 제어 신호 D620에 기초하여, 사이클릭 시프트 회로(611)로부터 1개씩 판독되는 복호 도중 결과 D611(vi')을 이용하여, 수학식 9에 따르는 제1 연산을 행한다.
즉, 계산기(6121)에는, 사이클릭 시프트 회로(611)로부터 공급되는 5개의 6비트의 복호 도중 결과 D611(vi') 중의, 1개의 복호 도중 결과 D611이 공급되며, 최상위 비트의 부호 비트 D631이 EXOR 회로(635)에 공급됨과 함께, 그 6비트의 복호 도중 결과 D611(Vi')의 하위 5비트의 절대값 D632(|vi'|)가, 가산기(631)에 공급된다. 또한, 계산기(6121)에는, 제어부(617)로부터 제어 신호 D620이 공급되며, 그 제어 신호 D620이 셀렉터(633)와 셀렉터(637)에 공급된다.
가산기(631)는, 절대값 D632(|vi'|)와 레지스터(632)에 저장되어 있는 9비트의 값 D633을 가산함으로써, 절대값 D632(|vi'|)를 적산하고, 그 결과 얻어지는 9비트의 적산값을 레지스터(632)에 재저장한다. 또한, 검사 행렬의 1행에 걸치는 모든 1에 대응하는 복호 도중 결과 D611로부터 구해진 절대값 D632(|vi'|)가 적산 된 경우, 레지스터(632)는 리세트된다.
검사 행렬의 1행에 걸치는 복호 도중 결과 D611이 한개씩 판독되어, 레지스터(632)에 1행분의 절대값 D632가 적산된 적산값이 저장된 경우, 제어부(617)로부터 공급되는 제어 신호 D620은, 0으로부터 1로 변화된다. 예를 들면, 행의 웨이트(row weight)가 「9」인 경우, 제어 신호 D620은, 1부터 8클럭째까지는 「0」으로 되고, 9클럭째에서는 「1」로 된다.
제어 신호 D620이 「1」인 경우, 셀렉터(633)는, 레지스터(632)에 저장되어 있는 값, 즉, 검사 행렬의 1행에 걸치는 모든 1에 대응하는 복호 도중 결과 D611(복호 도중 결과 vi')의 절대값 D632(|vi'|)가 적산된 9비트의 값 D633(i=1부터 i=dc까지의 Σ|vi'|)을 선택하여, 값 D634로서, 레지스터(634)에 출력하여 저장시킨다. 레지스터(634)는, 저장하고 있는 값 D634를, 9비트의 값 D635로서, 셀렉터(633)에 공급함과 함께, 출력한다. 제어 신호 D620이 「0」인 경우, 셀렉터(633)는, 레지스터(634)로부터 공급된 값 D635를 선택하여, 레지스터(634)에 출력하여 재저장시킨다. 즉, 검사 행렬의 1행에 걸치는 모든 1에 대응하는 복호 도중 결과 D611(복호 도중 결과 vi')의 절대값 D632(|vi'|)가 적산될 때까지, 레지스터(634)는, 전회 적산된 |vi'|를, 셀렉터(633)에 공급함과 함께, 출력한다.
이상의 처리와 병행하여, EXOR 회로(635)는, 레지스터(636)에 저장되어 있는 1비트의 값 D637과 부호 비트 D631의 배타적 논리합을 연산함으로써, 부호 비트끼리의 승산을 행하고, 1비트의 승산 결과 D636을 레지스터(636)에 재저장한다. 또 한, 검사 행렬의 1행에 걸치는 모든 1에 대응하는 복호 도중 결과 D611의 부호 비트 D631이 승산된 경우, 레지스터(636)는 리세트된다.
검사 행렬의 1행에 걸치는 모든 1에 대응하는 복호 도중 결과 D611로부터 구해진 부호 비트 D631이 승산된 승산 결과 D636(i=1부터 dc까지의 Πsign(vi'))이 레지스터(636)에 저장된 경우, 제어부(617)로부터 공급되는 제어 신호 D620은, 「0」으로부터 「1」로 변화된다.
제어 신호 D620이 「1」인 경우, 셀렉터(637)는, 레지스터(636)에 저장되어 있는 값, 즉, 검사 행렬의 1행에 걸치는 모든 1에 대응하는 복호 도중 결과 D611의 부호 비트 D631이 승산된 값 D637(i=1부터 i=dc까지의 Πsign(vi'))을 선택하고, 1비트의 값 D638로서 레지스터(638)에 출력하여 저장시킨다. 레지스터(638)는, 저장하고 있는 값 D638을, 1비트의 값 D639로서 셀렉터(637)에 공급함과 함께, 출력한다. 제어 신호 D620이 「0」인 경우, 셀렉터(637)는, 레지스터(638)로부터 공급된 값 D639를 선택하여, 레지스터(638)에 출력하여 재저장시킨다. 즉, 검사 행렬의 1행에 걸치는 모든 1에 대응하는 복호 도중 결과 D611(복호 도중 결과 vi')의 부호 비트 D631이 승산될 때까지, 레지스터(638)는, 전회 저장한 값을, 셀렉터(637)에 공급함과 함께, 출력한다.
계산기(6121)에서는, 레지스터(634)로부터 출력된 9비트의 값 D635(i=1부터 i=dc까지의 Σ|vi'|)를 하위 9비트로 함과 함께, 레지스터(638)로부터 출력된 1비 트의 값 D639(sign(vi'))를 최상위 비트로 하는 합계 10비트가 복호 도중 결과 D612(복호 도중 결과 w)로서 출력된다.
이상과 같이, 계산기(6121)에서는, 수학식 9의 연산이 행해져, 복호 도중 결과 w가 구해진다.
도 30은 도 26의 계산부(615)의 계산기(6151)의 구성예를 도시하는 블록도이다.
또한, 도 30에서는, 계산기(6151)에 대하여 설명하지만, 계산기(6152) 내지 계산기(6155)도 마찬가지로 구성된다.
또한, 도 30에서는, 계산기(612)에 의한 제1 연산의 결과 얻어지는 각 복호 도중 결과(w)가 부호 비트를 합쳐 합계 10비트로 양자화되며, 복호 도중 결과 저장용 메모리(610)로부터 공급되는, 전회의 제2 연산의 결과 얻어진 각 복호 도중 결과(uj)가 부호 비트를 합쳐 6비트로 양자화되어 있는 것으로 하여, 계산기(6151)를 나타내고 있다. 또한, 도 30의 계산기(6151)에는, 클럭 ck가 공급되며, 이 클럭 ck는, 필요한 블록에 공급되도록 되어 있다. 그리고, 각 블록은, 클럭 ck에 동기하여 처리를 행한다.
도 30의 계산기(6151)는, 제어부(617)로부터 공급되는 제어 신호 D622에 기초하여, 수신용 메모리(616)로부터 1개씩 판독되는 수신 데이터 D617(수신값 u0i), 사이클릭 시프트 회로(614)로부터 1개씩 판독되는 복호 도중 결과 D614(w), 및 복 호 도중 결과 저장용 메모리(610)로부터 1개씩 판독되는 전회의 계산부(615)에 의한 제2 연산의 결과 얻어진 복호 도중 결과 D610(vi')을 이용하여, 수학식 1, 수학식 10, 수학식 11에 따르는 제2 연산을 행한다.
즉, 계산기(6151)에서는, 사이클릭 시프트 회로(614)로부터, 검사 행렬의 행에 대응하는 10비트의 복호 도중 결과 D614(복호 도중 결과 w)가 1개씩 판독됨과 함께, 복호 도중 결과 저장용 메모리(610)로부터, 전회의 계산부(615)에 의한 제2 연산의 결과 얻어진 6비트의 복호 도중 결과 D610(복호 도중 결과 vi')이 1개씩 판독되고, 그 복호 도중 결과 D614의 최상위 비트의 부호 비트 D651(sign(w))과 복호 도중 결과 D610의 최상위 비트의 부호 비트 D653(sign(uj))이, EXOR 회로(653)에 공급됨과 함께, 그 복호 도중 결과 D614의 하위 9비트의 절대값 D652(|w|)와 복호 도중 결과 D610의 하위 9비트의 부호 비트 D653(|vi'|)이, 감산기(651)에 공급된다. 또한, 계산기(6151)에서는, 수신용 메모리(616)로부터 6비트의 수신 데이터 D617이 1개씩 판독되어, 가산기(658)에 공급된다. 또한, 계산기(6151)에는, 제어부(617)로부터 제어 신호 D622가 공급되며, 그 제어 신호 D622는 셀렉터(656)에 공급된다.
감산기(651)는, 절대값 D652로부터 절대값 D654를 감산하고, 그 5비트의 감산값 D655를 LUT(652)에 공급한다. LUT(652)는, 그 감산값 D655에 대하여, φ-1의 연산을 행한 5비트의 연산 결과 D656(φ-1(|w|-|vi'|))을 출력한다.
한편, EXOR 회로(653)는, 부호 비트 D651(sign(w))과 부호 비트 D653(sign(vi'))의 배타적 논리합을 연산함으로써, 부호 비트 D651과 부호 비트 D653을 승산하고, 1비트의 승산 결과를 승산값 D657로서 출력한다. 그리고, LUT(652)로부터 공급되는 5비트의 연산 결과 D656을 하위 5비트(φ-1|w|-|vi'|)로 함과 함께, EXOR 회로(653)로부터 공급되는 1비트의 값 D657(sign(w)×sign(vi'))을 최상위 비트로 한 6비트의 값 D658이, 가산기(654)에 공급됨과 함께, FIFO 메모리(659)에 공급된다.
이상과 같이, 수학식 10에 따르는 연산이 행해지며, 그 연산의 결과인 6비트의 값 D658(uj)이, 가산기(654)에 공급됨과 함께, FIFO 메모리(659)에 공급된다.
가산기(654)는, 6비트의 값 D658(uj)과 레지스터(655)에 저장되어 있는 9비트의 값 D659를 가산함으로써, 값 D658을 적산하고, 그 결과 얻어지는 9비트의 적산값을, 레지스터(655)에 재저장한다. 또한, 검사 행렬의 1열에 걸치는 모든 1에 대응하는 값 D658이 적산된 경우, 레지스터(655)는 리세트된다.
검사 행렬의 1열에 걸치는 값 D658이 1개씩 판독되어, 레지스터(655)에 1열분의 값 D658이 적산된 값이 저장된 경우, 제어부(617)로부터 공급되는 제어 신호 D622는 「0」으로부터 「1」로 변화된다. 예를 들면, 열의 웨이트가 「5」인 경 우, 제어 신호 D622는, 1부터 4클럭째까지는 「0」으로 되고, 5클럭째에서는 「1」로 된다.
제어 신호 D622가 「1」인 경우, 셀렉터(656)는, 레지스터(655)에 저장되어 있는 값, 즉, 검사 행렬의 1열에 걸치는 1에 대응하는 값 D658(uj)이 적산된 9비트의 값 D659(j=1부터 dv까지의 Σuj)를 선택하여, 레지스터(657)에 출력하여 저장시킨다. 레지스터(657)는, 저장하고 있는 값 D659를, 9비트의 값 D660으로서, 셀렉터(471)와 가산기(658)에 공급한다. 제어 신호 D622가 「0」인 경우, 셀렉터(656)는, 레지스터(657)로부터 공급된 값 D660을 선택하여, 레지스터(657)에 출력하여 재저장시킨다. 즉, 검사 행렬의 1열에 걸치는 1에 대응하는 값 D658(uj)이 적산될 때까지, 레지스터(657)는, 전회 적산된 값을, 셀렉터(656)와 가산기(658)에 공급한다.
가산기(658)는, 9비트의 값 D660과, 수신용 메모리(616)로부터 공급된 6비트의 수신 데이터 D617을 가산하고, 그 결과 얻어지는 9비트의 값 D661을 공급한다.
계산기(615)에서는, 최후의 연산을 행하는 경우, 가산기(658)가, 9비트의 값 D661을 최종적인 복호 결과로서 출력한다. 즉, 계산부(615)는, 수학식 5에 따라 연산을 행한다.
한편, FIFO 메모리(659)는, 레지스터(665)로부터 새로운 값 D660(j=1부터 j=dv까지의 Σuj)이 출력되기까지의 동안, 6비트의 값 D658(uj)을 지연하고, 6비트의 값 D662로서 감산기(660)에 공급한다. 감산기(660)는, 9비트의 값 D660으로부 터 6비트의 값 D662를 감산하고, 그 감산값 D663을 출력한다. 즉, 감산기(660)는, 검사 행렬의 1열에 걸치는 1에 대응하는 값 D658의 적산값으로부터, 구하고자 하는 브랜치에 대응하는 값, 즉 검사 행렬의 소정의 1에 대응하는 값 D658(uj)을 감산하고, 그 감산값(i=1부터 i=dv-1까지의 Σuj)을 6비트의 감산값 D663으로서 출력한다.
이상과 같이, 수학식 1에 따르는 연산이 행해지며, 그 연산의 결과인 6비트의 감산값 D663(vi)이 출력된다. 그리고, 감산기(660)로부터 출력된 6비트의 감산값 D663의 하위 5비트의 절대값(|vi|)이, LUT(661)에 공급됨과 함께, 최상위 비트의 부호 비트(sign(vi))가 값 D665로서 출력된다.
LUT(661)는, 절대값(|vi|)에 대하여, φ의 연산을 행한 5비트의 연산 결과 D666(φ|vi|))을 출력한다. 그리고, LUT(661)로부터 출력된 5비트의 연산 결과 D666(φ(|vi|))을 하위 5비트로 함과 함께, 값 D665(sign(vi))를 최상위 비트로 한 합계 6비트를, 복호 도중 결과(vi')로서 복호 도중 결과 저장용 메모리(610)에 공급한다.
이상과 같이, 계산기(6151)에서는, 수학식 1, 수학식 10, 수학식 11의 연산이 행해져 복호 도중 결과 vi'가 구해진다.
또한, 도 15의 검사 행렬의 열의 웨이트의 최대는 5이기 때문에, 즉, 계산기 (6151)에 공급되는 복호 도중 결과 D614(w)와 복호 도중 결과 D610(vi')의 최대 수는 5이기 때문에, 계산기(6151)는, 5개의 복호 도중 결과 D614와 복호 도중 결과 D610으로부터 구해지는 5개의 연산 결과 D658(uj)을 지연시키는 FIFO 메모리(659)를 갖고 있다. 열의 웨이트가 5 미만인 행의 메시지를 계산할 때에는, FIFO 메모리(659)에서의 지연량이, 그 열의 웨이트의 값으로 줄어든다.
도 31은 도 26의 복호 도중 결과 저장용 메모리(610)의 구성예를 도시하는 블록도이다.
복호 도중 결과 저장용 메모리(610)는, 스위치(701과 704), 및 2개의 싱글 포트 RAM인 복호 도중 결과 저장용 RAM(702와 703)으로 구성된다.
이 복호 도중 결과 저장용 메모리(610)의 각 부에 대하여 상세히 설명하기 전에, 우선, 복호 도중 결과 저장용 RAM(702와 703)에의 데이터의 저장 방법에 대하여 설명한다.
복호 도중 결과 저장용 RAM(702와 703)은, 계산부(612)에 의한 제1 연산의 결과 얻어져, 스위치(701)를 통해 공급된 복호 도중 결과 D615를 저장한다.
구체적으로는, 복호 도중 결과 저장용 RAM(702)의 제1 어드레스로부터 제5 어드레스에는, 도 15의 검사 행렬 H의 제1열째부터 제5열째까지의 1에 대응하는 복호 도중 결과 D615(D701)가, 각 행 모두 가로 방향(열 방향)으로 채운 형태로(0을 무시한 형태로) 저장된다.
즉, 제j 행 제i 열을, (j, i)로 나타내는 것으로 하면, 복호 도중 결과 저장 용 RAM(702)의 제1 어드레스에는, 도 15의 검사 행렬의 (1, 1)부터 (5, 5)의 5×5의 단위 행렬의 1에 대응하는 데이터가, 제2 어드레스에는, 도 15의 검사 행렬의 (6, 1)부터 (10, 5)의 합 행렬(5×5의 단위 행렬을 우측으로 1개만큼 사이클릭 시프트한 제1 시프트 행렬과, 우측으로 2개만큼 사이클릭 시프트한 제2 시프트 행렬의 합인 합 행렬)을 구성하는 제1 시프트 행렬의 1의 위치에 대응하는 데이터가 저장된다. 또한, 제3 어드레스에는, 검사 행렬의 (6, 1)부터 (10, 5)의 합 행렬을 구성하는 제2 시프트 행렬의 1의 위치에 대응하는 데이터가 저장된다. 이하, 제4 어드레스 및 제5 어드레스에 대해서도, 도 15의 검사 행렬에 대응지어, 데이터가 저장된다.
복호 도중 저장용 RAM(702)의 제6 어드레스부터 제10 어드레스에는, 도 15의 검사 행렬의 제11열째부터 제15열째까지의 1에 대응하는 데이터가 저장된다. 즉, 제6 어드레스에는, 검사 행렬의 (11, 11)부터 (15, 15)의 합 행렬(5×5의 단위 행렬과, 5×5의 단위 행렬을 우측으로 3개만큼 사이클릭 시프트한 제1 시프트 행렬의 합인 합 행렬)을 구성하는 제1 시프트 행렬의 1의 위치에 대응하는 데이터가 저장되며, 제7 어드레스에는, 검사 행렬의 (11, 11)부터 (15, 15)의 합 행렬을 구성하는 단위 행렬의 1에 대응하는 데이터가 저장된다. 이하, 제8 어드레스로부터 제10 어드레스에 대해서도, 검사 행렬에 대응지어 데이터가 저장된다.
마찬가지로, 복호 도중 저장용 RAM(702)의 제10 어드레스부터 제28 어드레스에는, 도 15의 검사 행렬에 대응짓고, 제21열째부터 제25열째까지, 제31열째부터 제35열째까지, 제41열째부터 제45열째까지, 제51열째부터 제55열째까지, 제61열째 부터 제65열째까지, 제71열째부터 제75열째까지, 제81열째부터 제85열째까지의 1에 대응하는 데이터가 저장된다. 즉, 복호 도중 결과 저장용 RAM(702)의 워드 수는 28이다.
복호 도중 결과 저장용 RAM(703)의 제1 어드레스부터 제5 어드레스에는, 도 15의 검사 행렬 H의 제6열째부터 제10열째까지의 1에 대응하는 복호 도중 결과 D615(D702)가, 각 행 모두 가로 방향(열 방향)으로 채운 형태로(0을 무시한 형태로) 저장된다.
즉, 복호 도중 결과 저장용 RAM(703)의 제1 어드레스에는, 검사 행렬의 구성 행렬인 (6, 1)부터 (10, 5)의 합 행렬(5×5의 단위 행렬을 우측으로 1개만큼 사이클릭 시프트한 제1 시프트 행렬과, 우측으로 2개만큼 사이클릭 시프트한 제2 시프트 행렬의 합인 합 행렬)을 구성하는 제1 시프트 행렬의 1에 대응하는 데이터가, 제2 어드레스에는, 검사 행렬의 구성 행렬인 (6, 1)부터 (10, 5)의 합 행렬을 구성하는 제2 시프트 행렬의 1에 대응하는 데이터가 저장된다. 이하, 제3 어드레스부터 제5 어드레스도 마찬가지로 검사 행렬의 구성 행렬과 대응지어 데이터가 저장된다.
마찬가지로, 복호 도중 저장용 RAM(703)의 제6 어드레스로부터 제26 어드레스에는, 도 15의 검사 행렬의 제16열째부터 제20열째까지, 제26열째부터 제30열째까지, 제36열째부터 제40열째까지, 제46열째부터 제50열째까지, 제56열째부터 제60열째까지, 제66열째부터 제70열째까지, 제76열째부터 제80열째까지, 제86열째부터 제90열째까지의 1에 대응하는 데이터가, 도 15의 검사 행렬에 대응지어 저장된다. 즉, 복호 도중 결과 저장용 RAM(703)의 워드 수는 26이다.
상술한 바와 같이, 복호 도중 결과 저장용 RAM(702)의 워드(word) 수는 28이고, 복호 도중 결과 저장용 RAM(703)의 워드 수는 26이다.
도 32는 복호 도중 결과 저장용 메모리(610)의 복호 도중 결과 저장용 RAM(702)과 복호 도중 결과 저장용 RAM(703)의 판독과 기입의 동작을 설명하는 타이밍차트이다.
또한, 도 32에서, 횡축은 시간(t)을 나타내고 있다.
복호 도중 결과 저장용 메모리(610)에서는, 계산부(612)에 의한 제1 연산이 행해지는 경우, 제어부(617)로부터 공급되는 제어 신호 D7202에 기초하여, 복호 도중 결과 저장용 RAM(702)으로부터 이미 저장되어 있는 제2 연산의 결과 얻어지는 복호 도중 결과 D703을 판독하거나, 혹은 제어부(617)로부터 공급되는 제어 신호 D7203에 기초하여, 복호 도중 결과 저장용 RAM(703)으로부터, 이미 저장되어 있는 제2 연산의 결과 얻어지는 복호 도중 결과 D704를 판독하고, 그 판독한 복호 도중 결과를 스위치(704)를 통해, 사이클릭 시프트 회로(614)에 공급한다.
복호 도중 결과 저장용 메모리(610)에는, 계산부(615)에 의해 제2 연산이 행해지는 경우, 계산부(615)로부터 제2 연산의 결과 얻어지는 복호 도중 결과 D615(vi')가 공급되며, 그 복호 도중 결과 D615가 복호 도중 결과 저장용 RAM(702)또는 복호 도중 결과 저장용 RAM(703) 중의 한쪽의 소정의 어드레스에 기입됨과 동시에, 다른쪽으로부터, 전회의 계산부(615)에 의한 제2 연산의 결과 얻어진 복호 도중 결과 D610(vi')이 판독되어, 사이클릭 시프트 회로(614)를 통해, 계산부(615)에 출력된다.
스위치(701)에는, 계산부(615)로부터 5개의 복호 도중 결과 D615가 공급됨과 함께, 그 복호 도중 결과 D615를 기입하는 메모리로서, 복호 도중 결과 저장용 RAM(702) 또는 복호 도중 결과 저장용 RAM(703)의 한쪽의 선택을 나타내는 제어 신호 D7201이 공급된다. 스위치(701)는, 제어 신호 D7201에 기초하여, 복호 도중 결과 저장용 RAM(702) 또는 복호 도중 결과 저장용 RAM(703)의 한쪽을 선택하고, 그 선택한 한쪽에, 5개의 복호 도중 결과 D612를 공급한다.
복호 도중 결과 저장용 RAM(702)에는, 스위치(701)로부터 5개의 복호 도중 결과 D612가, 복호 도중 결과 D701로서 공급됨과 함께, 제어부(617)로부터 어드레스를 나타내는 제어 신호 D7022가 공급된다. 복호 도중 결과 저장용 RAM(702)은, 제어 신호 D7202가 나타내는 어드레스에 이미 저장되어 있는 전회의 계산부(615)에 의한 제2 연산의 결과 얻어진 5개의 복호 도중 결과 D701을 판독하여, 복호 도중 결과 D703으로서 스위치(704)에 공급한다. 또한, 복호 도중 결과 저장용 RAM(702)은, 제어 신호 D7202가 나타내는 어드레스에, 스위치(701)로부터 공급된 5개의 복호 도중 결과 D702를 저장한다(기입한다).
복호 도중 결과 저장용 RAM(703)에는, 스위치(701)로부터 5개의 복호 도중 결과 D615가, 복호 도중 결과 D702로서 공급됨과 함께, 제어부(617)로부터 어드레 스를 나타내는 제어 신호 D7203이 공급된다. 복호 도중 결과 저장용 RAM(703)은, 제어 신호 D7203이 나타내는 어드레스에 이미 저장되어 있는 전회의 계산부(615)에 의한 제2 연산의 결과 얻어진 5개의 복호 도중 결과 D702를 판독하여, 복호 도중 결과 D704로서 스위치(704)에 공급한다. 또한, 복호 도중 결과 저장용 RAM(702)은, 제어 신호 D7203이 나타내는 어드레스에, 스위치(701)로부터 공급된 5개의 복호 도중 결과 D702를 저장한다(기입한다).
스위치(704)에는, 복호 도중 결과 저장용 RAM(702)으로부터 복호 도중 결과 D703이 공급되거나, 혹은 복호 도중 결과 저장용 RAM(703)으로부터 복호 도중 결과 D704가 공급된다. 또한, 제어부(617)로부터, 복호 도중 결과 저장용 RAM(702) 또는 복호 도중 결과 저장용 RAM(703)의 한쪽의 선택을 나타내는 제어 신호 D7204가 공급된다. 스위치(704)는, 제어 신호 D7204에 기초하여, 복호 도중 결과 저장용 RAM(702) 또는 복호 도중 결과 저장용 RAM(703)의 한쪽을 선택하고, 그 선택한 한쪽으로부터 공급된 5개의 복호 도중 결과를, 5개의 복호 도중 결과 D610으로서 계산부(615)에 공급한다.
복호 도중 결과 저장용 메모리(610)에서는, 계산부(615)에 의해 제2 연산이 행해지는 경우, 복호 도중 결과 저장용 RAM(702)이, 제어 신호 D7202에 기초하여, 이미 저장되어 있는, 전회의 계산부(615)의 제2 연산의 결과 얻어진 복호 도중 결과 D701 중, 동일 어드레스에 저장하고 있는 검사 행렬의 제1열째부터 제5열째까지 의 1에 대응하는 복호 도중 결과 D701을, 5개 단위로, 5회 판독하여, 스위치(704)를 통해, 계산부(615)에 공급한다. 즉, 도 15의 검사 행렬 H의 열 웨이트는, 5이기 때문에, 검사 행렬 H의 각 열의 1에 대응하는 복호 도중 결과는 5개 있고, 복호 도중 결과 저장용 RAM(702)은, 제1행렬째부터 제5열째까지의 1에 대응하는 복호 도중 결과 D701을, 5개 단위로 5회 판독한다.
다음으로, 복호 도중 결과 저장용 RAM(703)은, 제어 신호 D7203에 기초하여, 이미 저장되어 있는, 전회의 계산부(615)에 의한 제2 연산의 결과 얻어진 복호 도중 결과 D702 중, 동일 어드레스에 저장하고 있는 검사 행렬의 제6열째부터 제10열째까지의 1에 대응하는 5개의 복호 도중 결과 D702를, 5회 계속하여 판독하여, 스위치(704)와 사이클릭 시프트 회로(614)를 통해, 계산부(615)에 공급한다. 그것과 동시에, 복호 도중 결과 저장용 RAM(702)에는, 계산부(615)에 의해, 지금 행해지고 있는 제2 연산의 결과 얻어지는 검사 행렬의 제1열째부터 제5열째까지의 1에 대응하는 5개의 복호 도중 결과 D615가 스위치(701)를 통해, 복호 도중 결과 D701로서 공급되며, 복호 도중 결과 저장용 RAM(702)은, 그 복호 도중 결과 D701을, 제어 신호 D7202에 기초하여, 이미 판독된 복호 도중 결과 D703이 저장되어 있었던 어드레스에 5회 계속하여 저장한다.
그 후, 복호 도중 결과 저장용 RAM(702)은, 제어 신호 D7202에 기초하여, 이미 저장하고 있는, 전회의 계산부(615)에 의한 제2 연산의 결과 얻어진 복호 도중 결과 D701 중, 동일 어드레스에 저장하고 있는 검사 행렬의 제11열째부터 제15열째 까지의 1에 대응하는 복호 도중 결과 D701을, 5개 단위로 5회 계속하여 판독하여, 스위치(704)를 통해, 계산부(615)에 공급한다. 그것과 동시에, 복호 도중 결과 저장용 RAM(703)에는, 계산부(615)에 의해, 지금 행해지고 있는 제2 연산의 결과 얻어지는 검사 행렬의 제6열째부터 제10열째까지의 1에 대응하는 5개의 복호 도중 결과 D612가 스위치(701)를 통해, 복호 도중 결과 D702로서 공급되며, 복호 도중 결과 저장용 RAM(703)은, 그 복호 도중 결과 D702를, 제어 신호 D7203에 기초하여, 이미 판독된 복호 도중 결과 D704가 저장되어 있었던 어드레스에 5회 계속하여 저장한다.
이후, 마찬가지로, 계산부(615)에 의한 제2 연산의 결과 얻어지는 검사 행렬의 모든 1에 대응하는 복호 도중 결과가, 복호 도중 결과 저장용 RAM(702) 또는 복호 도중 결과 저장용 RAM(703)에 저장될 때까지, 복호 도중 결과 저장용 RAM(702)과 복호 도중 결과 저장용 RAM(703)은, 5회씩의 판독 또는 기입을 교대로 행한다.
도 33은 도 26의 복호 장치(600)의 복호 처리를 설명하는 흐름도이다. 이 처리는, 예를 들면, 수신용 메모리(616)에 복호해야 할 수신 데이터가 저장되었을 때, 개시된다.
단계 S70에서, 사이클릭 시프트 회로(614)는, 복호 도중 결과 저장용 메모리(613)로부터 공급된 후술하는 단계 S76에서 저장된 5개의 복호 도중 결과 D613을, 재배열하여 사이클릭 시프트를 행하여, 계산부(615)에 공급한다.
구체적으로는, 사이클릭 시프트 회로(614)에는, 복호 도중 결과 저장용 메모 리(613)로부터 5개의 복호 도중 결과 D613이 공급됨과 함께, 제어부(617)로부터, 그 복호 도중 결과 D613에 대응하는 검사 행렬의 1이 검사 행렬에서 기초가 되는 단위 행렬 등을 몇개 사이클릭 시프트한 것인지의 정보(Matrix 데이터)를 나타내는 제어 신호 D621이 공급된다. 사이클릭 시프트 회로(614)는, 제어 신호 D621에 기초하여, 5개의 복호 도중 결과 D613을 사이클릭 시프트하고(재배열하고), 그 결과를 복호 도중 결과 D614로서, 계산부(615)에 공급한다.
또한, 수신용 메모리(616)로부터 공급된 수신 데이터 D617에 대하여, 아직 제1 연산이 행해지지 않고, 복호 도중 결과 저장용 메모리(613)에 복호 도중 결과 D612가 저장되어 있지 않은 경우, 계산부(615)는, 초기 값으로 설정한다.
단계 S71에서, 계산부(615)는, 제2 연산을 행하고, 그 연산의 결과인 복호 도중 결과 D615를 복호 도중 결과 저장용 메모리(610)에 공급한다.
구체적으로는, 계산부(615)에는, 단계 S70에서 사이클릭 시프트 회로(614)로부터 5개의 복호 도중 결과 D614가 공급됨과 함께, 직전의 후술하는 단계 S72에서 복호 도중 결과 저장용 메모리(610)로부터 복호 도중 결과 D610이 공급된다. 또한, 수신 데이터용 메모리(616)로부터 5개의 수신 데이터 D617이 공급되며, 5개의 복호 도중 결과 D615와 D610, 수신 데이터 D617이, 계산부(615)의 계산기(6151 내지 6155)의 각각에 1개씩 공급된다. 또한, 계산부(615)에는, 제어부(617)로부터 제어 신호 D622가 공급되며, 그 제어 신호 D622가 계산기(6151 내지 6155)에 공급된다.
계산기(6151 내지 6155)는, 복호 도중 결과 D614와 D610과, 수신 데이터 D617을 이용하여, 제어 신호 D622에 기초하여, 수학식 1, 수학식 10, 수학식 11에 따라, 각각 연산을 행하고, 그 연산의 결과 얻어지는 검사 행렬의 각 열의 1에 대응하는 복호 도중 결과 D615(vi')를 복호 도중 결과 저장용 메모리(610)에 공급한다.
단계 S71의 처리 후에는, 단계 S72로 진행하여, 복호 도중 결과 저장용 메모리(610)는, 단계 S71에서 계산부(615)로부터 공급된 복호 도중 결과 D615를, 동일 어드레스에 저장함과 함께, 이미 저장되어 있는 복호 도중 결과 D615(D610)를 판독하여, 사이클릭 시프트 회로(611)와 계산부(615)에 공급한다.
단계 S72의 처리 후에는, 단계 S73으로 진행하여, 제어부(617)는, 계산부(615)에 의해, 검사 행렬의 각 열의 1에 대응하는 모든 복호 도중 결과 D615가 연산되었는지의 여부를 판정하고, 모든 복호 도중 결과 D615가 연산되어 있지 않다고 판정한 경우, 단계 S70으로 되돌아가, 상술한 처리를 반복한다.
한편, 단계 S73에서, 제어부(617)는, 계산부(615)에 의해, 모든 복호 도중 결과 D615가 연산된 것으로 판정한 경우, 단계 S74로 진행하여, 사이클릭 시프트 회로(611)는, 복호 도중 결과 저장용 메모리(610)로부터 공급되는 복호 도중 결과 D610(vi')을 사이클릭 시프트한다.
구체적으로는, 사이클릭 시프트 회로(611)에는, 복호 도중 결과 저장용 메모리(610)로부터 5개의 복호 도중 결과 D610이 공급됨과 함께, 제어부(617)로부터, 그 복호 도중 결과 D610에 대응하는 검사 행렬의 1이 검사 행렬에서 기초가 되는 단위 행렬 등을 몇개 사이클릭 시프트한 것인지의 정보(Matrix 데이터)를 나타내는 제어 신호 D619가 공급된다. 사이클릭 시프트 회로(611)는, 제어 신호 D619에 기초하여, 5개의 복호 도중 결과 D610을 사이클릭 시프트하고(재배열하고), 그 결과를 복호 도중 결과 D611로서, 계산부(612)에 공급한다.
단계 S74의 처리 후에는, 단계 S75로 진행하여, 계산부(612)는, 제1 연산을 행하고, 그 연산 결과인 복호 도중 결과 D612를 사이클릭 시프트 회로(614)에 공급한다.
구체적으로는, 계산부(612)에는, 단계 S74에서 사이클릭 시프트 회로(611)로부터 5개의 복호 도중 결과 D611(vi')이 공급되며, 그 복호 도중 결과 D611이, 계산부(612)의 계산기(6121 내지 6125)의 각각에 1개씩 공급된다. 또한, 계산부(612)에는, 제어부(617)로부터 제어 신호 D621이 공급되며, 그 제어 신호 D621이 계산기(6121 내지 6125)에 공급된다.
계산기(6121 내지 6125)는, 각각 복호 도중 결과 D611을 이용하여, 제어 신호 D619에 기초하여, 수학식 9에 따라, 각각 연산을 행하고, 그 연산의 결과 얻어지는 검사 행렬의 행에 대응하는 복호 도중 결과 D612(w)를 복호 도중 결과 저장용 메모리(613)에 공급한다.
단계 S75의 처리 후에는, 단계 S76로 진행하여, 복호 도중 결과 저장용 메모리(613)는, 단계 S75에서 계산부(612)로부터 공급된 복호 도중 결과 D612를, 동일 어드레스에 저장하고, 단계 S77로 진행한다.
단계 S77에서, 제어부(617)는, 계산부(612)에 의해, 검사 행렬의 모든 행에 대응하는 복호 도중 결과 D612가 연산되었는지의 여부를 판정하고, 모든 복호 도중 결과가 연산되어 있지 않다고 판정한 경우, 단계 S74로 되돌아가, 상술한 처리를 반복한다.
한편, 단계 S77에서, 제어부(617)는, 계산부(612)에 의해, 모든 행에 대응하는 복호 도중 결과 D612가 연산되었다고 판정한 경우, 처리를 종료한다.
또한, 복호 장치(600)는, 복호 횟수만큼 도 33의 복호 처리를 반복하여 행하며, 계산부(621)에 의해 상술한 수학식 5에 따르는 연산의 결과 얻어지는 값 D661이, 최종적인 복호 결과로서 출력된다.
상술한 설명에서는, 복호 도중 결과 저장용 메모리(610)는, 2개의 싱글 포트 RAM으로 구성하였지만, 1개의 RAM에 대하여 판독과 기입이 동시에 발생하지 않도록 하면, 3개 이상의 RAM으로 구성해도 된다. 예를 들면, RAM의 물리적인 비트가 부족한 경우에는, 복수의 RAM을 이용하여 동일한 제어 신호를 제공함으로써, 논리적으로 1개의 RAM으로 간주할 수 있다.
또한, 브랜치 데이터(브랜치에 대응하는 메시지)가 부족한 개소에 관해서는, 메모리 저장 시(복호 도중 결과 저장용 메모리(610, 613)에의 데이터 저장 시)에는, 어떤 메시지도 저장시키지 않고, 또한, 연산 시(계산부(612)에서의 제1 연산 시와 계산부(615)에서의 제2 연산 시)에도 어떤 연산도 행하지 않는다.
또한, 도 16A와 도 16B의 사이클릭 시프트 회로(314, 320), 도 18의 사이클릭 시프트 회로(411, 414), 도 26의 사이클릭 시프트 회로(611, 614)에는, 배럴 시 프터를 이용하면 회로 규모를 작게 하면서 원하는 조작을 실현할 수 있다.
상술한 경우에는, 설명을 간단하게 하기 위해, P가 5인 경우, 즉, 검사 행렬을 구성하는 구성 행렬의 행 수 및 열 수가 5인 경우를 예로 들었지만, 구성 행렬의 행 수 및 열 수 P는 반드시 5일 필요는 없으며, 검사 행렬에 따라 다른 값을 취하는 경우도 있을 수 있다. 예를 들면, P는 360이나 392이어도 된다.
또한, 본 실시 형태에서는, 부호 길이 90, 부호화율 2/3의 LDPC 부호를 이용하였지만, LDPC 부호의 부호 길이나 부호화율은, 몇이어도 상관없다. 예를 들면, 구성 행렬의 행 수 및 열 수 P가 5인 경우, 브랜치 총수가 5 이하이면, 어떤 부호 길이, 부호화율의 LDPC 부호라도, 제어 신호를 변화시키는 것만으로, 도 16A 내지 도 16C의 복호 장치(300), 도 18의 복호 장치(400), 도 26의 복호 장치(600)를 이용하여 복호 가능하다.
또한, 구성 행렬의 행 수 및 열 수 P가 소정의 값이고, 브랜치의 총수가 임의의 값 이하라는 조건을 만족시키는 임의의 LDPC 부호의 복호 장치는, 그 조건을 만족시키는, 임의의 부호 길이로, 임의의 부호화율의 LDPC 부호를 복호할 수 있다.
검사 행렬이, 구성 행렬의 행 수 및 열 수 P의 배수가 아닌 경우에는, 검사 행렬의 우수리의 외측에 모두 0(all 0)의 성분을 붙여 P의 배수로 간주하여 적용할 수 있는 경우가 있다.
다음으로, 상술한 일련의 처리는, 하드웨어에 의해 행할 수도 있고, 소프트웨어에 의해 행할 수도 있다. 일련의 처리를 소프트웨어에 의해 행하는 경우에는, 그 소프트웨어를 구성하는 프로그램이, 범용의 컴퓨터 등에 인스톨된다.
따라서, 도 34는, 상술한 일련의 처리를 실행하는 프로그램이 인스톨되는 컴퓨터의 일 실시 형태의 구성예를 도시하고 있다.
프로그램은, 컴퓨터에 내장되어 있는 기록 매체로서의 하드디스크(905)나 ROM(903)에 사전에 기록해 둘 수 있다.
혹은 또한, 프로그램은, 플렉시블 디스크, CD-ROM(Compact Disc Read Only Memory), MO(Magneto Optical) 디스크, DVD(Digital Versatile Disc), 자기 디스크, 반도체 메모리 등의 리무버블 기록 매체(911)에, 일시적 혹은 영속적으로 저장(기록)해 둘 수 있다. 이러한 리무버블 기록 매체(911)는, 소위 패키지 소프트웨어로서 제공할 수 있다.
또한, 프로그램은, 상술한 바와 같은 리무버블 기록 매체(911)로부터 컴퓨터에 인스톨하는 것 외에, 다운로드 사이트로부터, 디지털 위성 방송용의 인공 위성을 통해, 컴퓨터에 무선으로 전송하거나, LAN(Local Area Network), 인터넷 등의 네트워크를 통해, 컴퓨터에 유선으로 전송하고, 컴퓨터에서는, 그와 같이 하여 전송되어 오는 프로그램을, 통신부(908)에서 수신하여, 내장하는 하드디스크(905)에 인스톨할 수 있다.
컴퓨터는, CPU(Central Processing Unit)(902)를 내장하고 있다. CPU(902)에는, 버스(901)를 통해, 입출력 인터페이스(910)가 접속되어 있고, CPU(902)는, 입출력 인터페이스(910)를 통해, 사용자에 의해, 키보드나, 마우스, 마이크 등으로 구성되는 입력부(907)가 조작됨으로써 명령이 입력되면, 그것에 따라, ROM(Read Only Memory)(903)에 저장되어 있는 프로그램을 실행한다. 혹은, 또한, CPU(902) 는, 하드디스크(905)에 저장되어 있는 프로그램, 위성 혹은 네트워크로부터 전송되며, 통신부(908)에서 수신되어 하드디스크(905)에 인스톨된 프로그램, 또는 드라이브(909)에 장착된 리무버블 기록 매체(911)로부터 판독되어 하드디스크(905)에 인스톨된 프로그램을, ROM(Random Access Memory)(904)에 로드하여 실행한다. 이에 의해, CPU(902)는, 상술한 흐름도에 따른 처리, 혹은 상술한 블록도의 구성에 의해 행해지는 처리를 행한다. 그리고, CPU(902)는, 그 처리 결과를, 필요에 따라, 예를 들면, 입출력 인터페이스(910)를 통해, LCD(Liquid Crystal Display)나 스피커 등으로 구성되는 출력부(906)로부터 출력, 혹은, 통신부(908)로부터 송신, 또는, 하드디스크(905)에 기록시킨다.
여기서, 본 명세서에서, 컴퓨터에 각종 처리를 행하게 하기 위한 프로그램을 기술하는 처리 단계는, 반드시 흐름도로서 기재된 순서를 따라 시계열로 처리할 필요는 없으며, 병렬적 혹은 개별로 실행되는 처리(예를 들면, 병렬 처리 혹은 오브젝트에 의한 처리)도 포함하는 것이다.
또한, 프로그램은, 하나의 컴퓨터에 의해 처리되는 것이어도 되고, 복수의 컴퓨터에 의해 분산 처리되는 것이어도 된다. 또한, 프로그램은, 먼 곳의 컴퓨터에 전송되어 실행되는 것이어도 된다.
이상과 같이, P×P의 단위 행렬, 그 콤포넌트의 1 중 1개 이상이 0으로 된 준단위 행렬, 단위 행렬 혹은 준단위 행렬을 사이클릭 시프트한 시프트 행렬, 단위 행렬, 준단위 행렬, 혹은 시프트 행렬의 복수의 합인 합 행렬, P×P의 0행렬의 조합으로 나타낼 수 있는 검사 행렬을 갖는 LDPC 부호의 복호를, 체크 노드와 배리어 블 노드의 연산을 P개 동시에 행하는 아키텍처(architecture)를 채용함으로써, 노드 연산을, P개 동시에 행함으로써 동작 주파수를 실현 가능한 범위로 억제할 수 있어, 다수의 반복 복호를 행하는 것을 가능하게 하면서, 메모리(FIFO나 RAM)에의 기입과 판독 시에, 다른 어드레스에의 동시 액세스가 발생하는 것을 방지할 수 있다.
또한, 도 16A 내지 도 16C의 복호 장치(300)를 반복하여 이용하여, 도 15의 검사 행렬로 나타내어지는 LDPC 부호를 복호하는 경우에는, 269개의 브랜치를 체크 노드, 배리어블 노드마다 5개씩 연산하는 것이 가능하기 때문에, 1회의 복호에, 269/5×2≒108클럭 동작하면 되게 된다. 50회의 복호에는, 90개의 부호 정보를 수신하는 동안에, 108×50=5400클럭 동작하면 되게 되어, 수신 주파수의 약 60배의 동작 주파수이면 되게 된다. 따라서, 도 16A 내지 도 16C의 복호 장치(300)에 따르면, 각 노드 연산을 한개씩 행하는 도 9의 복호 장치에 비해, 1/5의 동작 주파수이면 된다. 또한, 회로 규모의 면에서 봐도, 메모리의 크기는 동일하기 때문에, 논리 회로가 다소 커져도 전체에의 영향은 작다고 할 수 있다.
또한, 도 18의 복호 장치(400)와 도 26의 복호 장치(600)는, 도 16A 내지 도 16C의 복호 장치(300)에 비해, 메모리의 용량이 작게 되어 있다.
예를 들면, LDPC 부호의 검사 행렬이 도 15의 검사 행렬이고, LDPC 부호의 양자화 비트 수가 6비트인 경우, 도 16A 내지 도 16C의 복호 장치(300)에서는, 브랜치 데이터 저장 메모리에, 모든 브랜치 수의 269×6=1614비트의 용량을 갖는 RAM 2개, 즉, 2개의 RAM에서 1614×2=3228비트의 용량이 필요하였다. 이에 대하여, 예 를 들면, 복호 도중 결과 v의 양자화 비트 수가 9비트인 경우, 도 18의 복호 장치(400)에서는, 복호 도중 결과 저장용 메모리(413)에, 모든 브랜치 수의 1614비트의 용량을 갖는 RAM과, 복호 도중 결과 저장용 메모리(410)에, LDPC 부호의 부호 길이(검사 행렬의 열 수)와 복호 도중 결과 v의 양자화 비트 수의 승산값, 즉 90×9=810 비트의 용량을 갖는 RAM을 구비하면 되어, 복호 장치의 회로 규모를 작게 할 수 있다. 또한, 도 18의 복호 장치(400)에서는, 제2 연산을 행하는 계산부(415)에서, FIFO 메모리를 가질 필요가 없기 때문에, 로직의 회로 규모를 작게 할 수 있다.
또한, 예를 들면, LDPC 부호의 검사 행렬이 도 15의 검사 행렬이고, 복호 도중 결과 v의 양자화 비트 수가 10비트인 경우, 도 26의 복호 장치(600)에서는, 복호 도중 결과 저장용 메모리(610)에, 모든 브랜치 수의 1614비트의 용량을 갖는 RAM과, 복호 도중 결과 저장용 메모리(613)에, 검사 행렬의 행 수와 복호 도중 결과 v의 승산값, 즉 30×10=300비트의 용량을 갖는 RAM을 구비하면 되어, 복호 장치의 회로 규모를 작게 할 수 있다. 또한, 도 26의 복호 장치(600)에서는, 제1 연산을 행하는 계산부(612)에서, FIFO 메모리를 가질 필요가 없기 때문에, 로직의 회로 규모를 작게 할 수 있다.
일반적으로, LDPC 부호는 부호 길이가 수천 내지 수만으로 크기 때문에, P의 값도 수백의 크기를 갖는 것이 사용된다. 그 경우에는, 본 발명에 따른 복호 장치를 이용하는 효과는 더욱 커진다.
또한, 본 발명에 따른 복호 장치는, 섬 프로덕트 알고리즘을 충실히 실장하 는 것이기 때문에, 메시지의 양자화 이외의 복호 손실이 발생하지 않는다.
이상의 관점에서, 본 발명에 따른 복호 장치를 이용함으로써, 고성능의 복호가 가능하게 된다.

Claims (41)

  1. LDPC(Low Density Parity Check) 부호의 복호 장치로서,
    P×P의 단위 행렬, 그 단위 행렬의 콤포넌트인 1 중의 1개 이상이 0으로 된 행렬인 준단위 행렬, 상기 단위 행렬 혹은 준단위 행렬을 사이클릭 시프트한 행렬인 시프트 행렬, 상기 단위 행렬, 준단위 행렬, 혹은 시프트 행렬 중의 복수의 합인 합 행렬, 또는 P×P의 0행렬을 구성 행렬로 하여, 상기 LDPC 부호의 검사 행렬이, 복수의 상기 구성 행렬의 조합으로 나타내어지는 경우에 있어서,
    상기 LDPC 부호의 복호를 위한 P개의 체크 노드의 연산을 동시에 행하는 제1 연산 수단과,
    상기 LDPC 부호의 복호를 위한 P개의 배리어블 노드의 연산을 동시에 행하는 제2 연산 수단과,
    상기 P개의 체크 노드의 연산, 또는 상기 P개의 배리어블 노드의 연산의 결과 얻어지는 P개의 브랜치에 대응하는 메시지 데이터를 동시에 기입 및 판독하는 메시지 기억 수단을 포함하고,
    상기 메시지 기억 수단은, 웨이트가 2 이상인 구성 행렬에 대하여, 그 구성 행렬을, 웨이트가 1인 단위 행렬, 준단위 행렬, 또는 시프트 행렬의 합의 형태로 표현하였을 때의, 그 웨이트가 1인 단위 행렬, 준단위 행렬, 또는 시프트 행렬에 속하는 P개의 브랜치에 대응하는 메시지를, 동일한 어드레스에 저장하는 것을 특징으로 하는 복호 장치.
  2. 제1항에 있어서,
    상기 제1 연산 수단은, 체크 노드의 연산을 행하는 P개의 체크 노드 계산기를 갖고,
    상기 제2 연산 수단은, 배리어블 노드의 연산을 행하는 P개의 배리어블 노드 계산기를 갖는 것을 특징으로 하는 복호 장치.
  3. 삭제
  4. 삭제
  5. 삭제
  6. 삭제
  7. 삭제
  8. 삭제
  9. 삭제
  10. 삭제
  11. 제1항에 있어서,
    상기 P개의 체크 노드의 연산, 또는 상기 P개의 배리어블 노드의 연산의 결과 얻어지는 메시지를 재배열하는 재배열 수단을 더 구비하는 것을 특징으로 하는 복호 장치.
  12. 삭제
  13. 삭제
  14. 제1항에 있어서,
    상기 제1 연산 수단은, 상기 P개의 체크 노드의 연산과 상기 P개의 배리어블 노드의 연산의 일부를 행하고,
    상기 제2 연산 수단은, 상기 P개의 배리어블 노드의 연산의 다른 일부를 행하는 것을 특징으로 하는 복호 장치.
  15. 삭제
  16. 제14항에 있어서,
    상기 제1 연산 수단이 상기 P개의 체크 노드의 연산과 상기 P개의 배리어블 노드의 연산의 일부를 행함으로써 얻어지는 P개의 브랜치에 대응하는 제1 복호 도중 결과를 동시에 기입 및 판독하는 제1 복호 도중 결과 기억 수단을 더 구비하는 것을 특징으로 하는 복호 장치.
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 제1항에 있어서,
    상기 제1 연산 수단은, 상기 P개의 체크 노드의 연산의 일부를 행하고,
    상기 제2 연산 수단은, 상기 P개의 체크 노드의 연산의 다른 일부와, 상기 P개의 배리어블 노드의 연산을 행하는 것을 특징으로 하는 복호 장치.
  28. 삭제
  29. 삭제
  30. 제27항에 있어서,
    상기 제2 연산 수단이 상기 P개의 체크 노드의 연산의 다른 일부와, 상기 P개의 배리어블 노드의 연산을 행함으로써 얻어지는 P개의 브랜치에 대응하는 제2 복호 도중 결과를 동시에 기입 및 판독하는 제2 복호 도중 결과 기억 수단을 더 구비하는 것을 특징으로 하는 복호 장치.
  31. 삭제
  32. 삭제
  33. 삭제
  34. 삭제
  35. 삭제
  36. 삭제
  37. 삭제
  38. 삭제
  39. 삭제
  40. LDPC(Low Density Parity Check) 부호의 복호 장치의 복호 방법으로서,
    P×P의 단위 행렬, 그 단위 행렬의 콤포넌트인 1 중의 1개 이상이 0으로 된 행렬인 준단위 행렬, 상기 단위 행렬 혹은 준단위 행렬을 사이클릭 시프트한 행렬인 시프트 행렬, 상기 단위 행렬, 준단위 행렬, 혹은 시프트 행렬 중의 복수의 합인 합 행렬, 또는 P×P의 0행렬을 구성 행렬로 하여, 상기 LDPC 부호의 검사 행렬이, 복수의 상기 구성 행렬의 조합으로 표시되는 경우에 있어서,
    상기 LDPC 부호의 복호를 위한 P개의 체크 노드의 연산을 동시에 행하는 제1 연산 단계와,
    상기 LDPC 부호의 복호를 위한 P개의 배리어블 노드의 연산을 동시에 행하는 제2 연산 단계와,
    상기 P개의 체크 노드의 연산, 또는 상기 P개의 배리어블 노드의 연산의 결과 얻어지는 P개의 브랜치에 대응하는 메시지 데이터를 동시에 기입 및 판독하는 메시지 기억 단계를 포함하고,
    상기 메시지 기억 단계는, 웨이트가 2 이상인 구성 행렬에 대하여, 그 구성 행렬을, 웨이트가 1인 단위 행렬, 준단위 행렬, 또는 시프트 행렬의 합의 형태로 표현하였을 때의, 그 웨이트가 1인 단위 행렬, 준단위 행렬, 또는 시프트 행렬에 속하는 P개의 브랜치에 대응하는 메시지를, 동일한 어드레스에 저장하는 것을 특징으로 하는 복호 방법.
  41. LDPC 부호의 복호를 컴퓨터에 행하게 하는 프로그램을 기록한 기록 매체로서,
    상기 프로그램은, P×P의 단위 행렬, 그 단위 행렬의 콤포넌트인 1 중의 1개 이상이 0으로 된 행렬인 준단위 행렬, 상기 단위 행렬 혹은 준단위 행렬을 사이클릭 시프트한 행렬인 시프트 행렬, 상기 단위 행렬, 준단위 행렬, 혹은 시프트 행렬 중의 복수의 합인 합 행렬, 또는 P×P의 0행렬을 구성 행렬로 하여, 상기 LDPC 부호의 검사 행렬이, 복수의 상기 구성 행렬의 조합으로 표시되는 경우에 있어서,
    상기 LDPC 부호의 복호를 위한 P개의 체크 노드의 연산을 동시에 행하는 제1 연산 단계와,
    상기 LDPC 부호의 복호를 위한 P개의 배리어블 노드의 연산을 동시에 행하는 제2 연산 단계와,
    상기 P개의 체크 노드의 연산, 또는 상기 P개의 배리어블 노드의 연산의 결과 얻어지는 P개의 브랜치에 대응하는 메시지 데이터를 동시에 기입 및 판독하는 메시지 기억 단계를 포함하고,
    상기 메시지 기억 단계는, 웨이트가 2 이상인 구성 행렬에 대하여, 그 구성 행렬을, 웨이트가 1인 단위 행렬, 준단위 행렬, 또는 시프트 행렬의 합의 형태로 표현하였을 때의, 그 웨이트가 1인 단위 행렬, 준단위 행렬, 또는 시프트 행렬에 속하는 P개의 브랜치에 대응하는 메시지를, 동일한 어드레스에 저장하는 것을 특징으로 하는 프로그램을 기록한 기록 매체.
KR1020057000601A 2003-05-13 2004-04-19 복호 장치 및 복호 방법, 및 기록 매체 KR101090001B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
JPJP-P-2003-00133941 2003-05-13
JP2003133941 2003-05-13
JP2003294383A JP4225163B2 (ja) 2003-05-13 2003-08-18 復号装置および復号方法、並びにプログラム
JPJP-P-2003-00294383 2003-08-18
PCT/JP2004/005562 WO2004102811A1 (ja) 2003-05-13 2004-04-19 復号装置および復号方法、並びにプログラム

Publications (2)

Publication Number Publication Date
KR20060007362A KR20060007362A (ko) 2006-01-24
KR101090001B1 true KR101090001B1 (ko) 2011-12-05

Family

ID=33455446

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020057000601A KR101090001B1 (ko) 2003-05-13 2004-04-19 복호 장치 및 복호 방법, 및 기록 매체

Country Status (6)

Country Link
US (2) US7299397B2 (ko)
EP (3) EP2270990B1 (ko)
JP (1) JP4225163B2 (ko)
KR (1) KR101090001B1 (ko)
ES (3) ES2401577T3 (ko)
WO (1) WO2004102811A1 (ko)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7409628B2 (en) * 2002-08-15 2008-08-05 Broadcom Corporation Efficient design to implement LDPC (Low Density Parity Check) decoder
US8140931B2 (en) * 2003-07-03 2012-03-20 Dtvg Licensing, Inc. Method and system for generating parallel decodable low density parity check (LDPC) codes
US7296208B2 (en) * 2003-07-03 2007-11-13 The Directv Group, Inc. Method and system for generating parallel decodable low density parity check (LDPC) codes
KR20050118056A (ko) * 2004-05-12 2005-12-15 삼성전자주식회사 다양한 부호율을 갖는 Block LDPC 부호를 이용한이동 통신 시스템에서의 채널부호화 복호화 방법 및 장치
FR2871975B1 (fr) * 2004-06-22 2006-08-11 St Microelectronics Sa Decodeur ldpc
WO2006055086A1 (en) * 2004-10-01 2006-05-26 Thomson Licensing A low density parity check (ldpc) decoder
US7634710B2 (en) * 2005-03-25 2009-12-15 Teranetics, Inc. Efficient decoding
JP4729964B2 (ja) * 2005-04-25 2011-07-20 ソニー株式会社 復号装置および復号方法
JP4595650B2 (ja) * 2005-04-25 2010-12-08 ソニー株式会社 復号装置および復号方法
JP4622654B2 (ja) * 2005-04-25 2011-02-02 ソニー株式会社 復号装置および復号方法
JP4617985B2 (ja) * 2005-04-25 2011-01-26 ソニー株式会社 符号装置および符号化方法
JP2006339799A (ja) 2005-05-31 2006-12-14 Toshiba Corp イレギュラー低密度パリティチェック符号復号器及び方法
KR100727316B1 (ko) * 2005-06-01 2007-06-12 삼성전자주식회사 저밀도채리티체크 채널 디코딩 방법 및 장치
JP4730592B2 (ja) * 2005-07-11 2011-07-20 ソニー株式会社 復号装置および復号方法
CN101248583B (zh) * 2005-07-13 2012-04-18 三菱电机株式会社 通信装置以及解码方法
JP4293172B2 (ja) 2005-09-13 2009-07-08 ソニー株式会社 復号装置および復号方法
KR101196917B1 (ko) 2005-12-01 2012-11-05 톰슨 라이센싱 저밀도 패리티 체크 코딩된 신호를 디코딩하기 위한 장치및 방법
US7661055B2 (en) * 2005-12-05 2010-02-09 Broadcom Corporation Partial-parallel implementation of LDPC (Low Density Parity Check) decoders
JP4807063B2 (ja) 2005-12-20 2011-11-02 ソニー株式会社 復号装置、制御方法、およびプログラム
US7530002B2 (en) * 2006-01-03 2009-05-05 Broadcom Corporation Sub-matrix-based implementation of LDPC (Low Density Parity Check) decoder
US7617433B2 (en) * 2006-01-03 2009-11-10 Broadcom Corporation Implementation of LDPC (low density parity check) decoder by sweeping through sub-matrices
JP4739086B2 (ja) * 2006-04-05 2011-08-03 三菱電機株式会社 誤り訂正復号装置および誤り訂正復号方法
US7647548B2 (en) * 2006-07-31 2010-01-12 Agere Systems Inc. Methods and apparatus for low-density parity check decoding using hardware-sharing and serial sum-product architecture
JP4743156B2 (ja) 2007-04-27 2011-08-10 ソニー株式会社 復号装置
JP4780027B2 (ja) * 2007-04-27 2011-09-28 ソニー株式会社 復号装置、制御方法、及びプログラム
US8359522B2 (en) 2007-05-01 2013-01-22 Texas A&M University System Low density parity check decoder for regular LDPC codes
JP4487212B2 (ja) * 2007-10-19 2010-06-23 ソニー株式会社 復号装置および方法、送受信システム、受信装置および方法、並びにプログラム
JP4487213B2 (ja) * 2007-10-19 2010-06-23 ソニー株式会社 復号装置および方法、並びにプログラム
CN101431337A (zh) * 2007-11-09 2009-05-13 松下电器产业株式会社 提高编码并行度实现降低编码时延的方法
JP2009271956A (ja) * 2008-04-30 2009-11-19 Toshiba Corp データ復号装置,データ再生装置,およびデータ復号方法
US8443033B2 (en) * 2008-08-04 2013-05-14 Lsi Corporation Variable node processing unit
US8145986B2 (en) * 2008-09-22 2012-03-27 Broadcom Corporation Multi-CSI (Cyclic Shifted Identity) sub-matrix based LDPC (Low Density Parity Check) codes
JP5320964B2 (ja) * 2008-10-08 2013-10-23 ソニー株式会社 サイクリックシフト装置、サイクリックシフト方法、ldpc復号装置、テレビジョン受像機、及び、受信システム
JP5536155B2 (ja) * 2012-08-03 2014-07-02 トムソン ライセンシング 誤り訂正を実行する装置及び方法
KR102068030B1 (ko) 2012-12-11 2020-01-20 삼성전자 주식회사 메모리 컨트롤러 및 그 동작방법
RU2546070C1 (ru) * 2013-11-12 2015-04-10 Открытое акционерное общество "Калужский научно-исследовательский институт телемеханических устройств" Способ мягкого декодирования помехоустойчивого кода
US9553608B2 (en) * 2013-12-20 2017-01-24 Sandisk Technologies Llc Data storage device decoder and method of operation
KR102433645B1 (ko) * 2015-11-09 2022-08-18 삼성전자주식회사 무선 통신 시스템에서 복호화 방법 및 장치
JP7051024B2 (ja) * 2020-02-27 2022-04-08 三菱電機株式会社 復号方法、復号装置、制御回路およびプログラム記憶媒体

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2002103631A1 (en) * 2001-06-15 2002-12-27 Flarion Technologies, Inc. Methods and apparatus for decoding ldpc codes

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6539367B1 (en) 2000-05-26 2003-03-25 Agere Systems Inc. Methods and apparatus for decoding of general codes on probability dependency graphs
JP4389373B2 (ja) 2000-10-11 2009-12-24 ソニー株式会社 2元巡回符号を反復型復号するための復号器
US6567465B2 (en) 2001-05-21 2003-05-20 Pc Tel Inc. DSL modem utilizing low density parity check codes
US6938196B2 (en) * 2001-06-15 2005-08-30 Flarion Technologies, Inc. Node processors for use in parity check decoders
US6801919B2 (en) 2001-07-27 2004-10-05 Hewlett-Packard Development Company, L.P. Object oriented database interface encapsulation that allows for chronologically overlapping transactions in a multi-threaded environment
US7246304B2 (en) 2001-09-01 2007-07-17 Dsp Group Inc Decoding architecture for low density parity check codes
JP2003269302A (ja) * 2002-03-18 2003-09-25 Hitachi Ltd スタータ
US20040019845A1 (en) 2002-07-26 2004-01-29 Hughes Electronics Method and system for generating low density parity check codes
US7178080B2 (en) 2002-08-15 2007-02-13 Texas Instruments Incorporated Hardware-efficient low density parity check code for digital communications
US6961888B2 (en) * 2002-08-20 2005-11-01 Flarion Technologies, Inc. Methods and apparatus for encoding LDPC codes
US6785863B2 (en) 2002-09-18 2004-08-31 Motorola, Inc. Method and apparatus for generating parity-check bits from a symbol set
US6957375B2 (en) * 2003-02-26 2005-10-18 Flarion Technologies, Inc. Method and apparatus for performing low-density parity-check (LDPC) code operations using a multi-level permutation

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2002103631A1 (en) * 2001-06-15 2002-12-27 Flarion Technologies, Inc. Methods and apparatus for decoding ldpc codes

Also Published As

Publication number Publication date
US7299397B2 (en) 2007-11-20
EP1624581A1 (en) 2006-02-08
EP1624581B1 (en) 2013-01-02
EP1624581A4 (en) 2008-07-09
EP2270989A3 (en) 2011-06-22
ES2426756T3 (es) 2013-10-25
US20050240853A1 (en) 2005-10-27
KR20060007362A (ko) 2006-01-24
EP2270990B1 (en) 2013-07-10
EP2270989B1 (en) 2013-07-03
EP2270989A2 (en) 2011-01-05
ES2424463T3 (es) 2013-10-02
EP2270990A2 (en) 2011-01-05
JP4225163B2 (ja) 2009-02-18
JP2004364233A (ja) 2004-12-24
EP2270990A3 (en) 2011-06-22
WO2004102811A1 (ja) 2004-11-25
USRE44420E1 (en) 2013-08-06
ES2401577T3 (es) 2013-04-22

Similar Documents

Publication Publication Date Title
KR101090001B1 (ko) 복호 장치 및 복호 방법, 및 기록 매체
KR101158919B1 (ko) 복호 방법 및 복호 장치, 및 기록 매체
KR101164283B1 (ko) 복호 장치 및 복호 방법
JP4487213B2 (ja) 復号装置および方法、並びにプログラム
JP4487212B2 (ja) 復号装置および方法、送受信システム、受信装置および方法、並びにプログラム
JP4293172B2 (ja) 復号装置および復号方法
JP4285148B2 (ja) 復号装置および復号方法、並びにプログラム
JP4729964B2 (ja) 復号装置および復号方法
CN101567699B (zh) 解码装置
JP4284600B2 (ja) 復号装置
JP4730592B2 (ja) 復号装置および復号方法
JP4822071B2 (ja) 復号装置および復号方法
JP4288582B2 (ja) 復号装置および復号方法、並びにプログラム
JP2009027302A (ja) 復号装置および復号方法
JP2007081602A (ja) 復号装置および復号方法

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: 20141125

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20151120

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20161028

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20171027

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20181112

Year of fee payment: 8