(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-10-14
(54)【発明の名称】レギュラQC-LDPCコードの構成方法および電子機器
(51)【国際特許分類】
H03M 13/19 20060101AFI20221006BHJP
【FI】
H03M13/19
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2022509171
(86)(22)【出願日】2020-07-24
(85)【翻訳文提出日】2022-02-14
(86)【国際出願番号】 CN2020103929
(87)【国際公開番号】W WO2021027525
(87)【国際公開日】2021-02-18
(31)【優先権主張番号】201910744688.7
(32)【優先日】2019-08-13
(33)【優先権主張国・地域又は機関】CN
(81)【指定国・地域】
(71)【出願人】
【識別番号】511151662
【氏名又は名称】中興通訊股▲ふん▼有限公司
【氏名又は名称原語表記】ZTE CORPORATION
【住所又は居所原語表記】ZTE Plaza,Keji Road South,Hi-Tech Industrial Park,Nanshan Shenzhen,Guangdong 518057 China
(74)【代理人】
【識別番号】100112656
【氏名又は名称】宮田 英毅
(74)【代理人】
【識別番号】100089118
【氏名又は名称】酒井 宏明
(72)【発明者】
【氏名】陶凱
【テーマコード(参考)】
5J065
【Fターム(参考)】
5J065AB01
5J065AC01
5J065AD07
5J065AE06
5J065AH01
(57)【要約】
本願の実施例は通信の分野に関し、レギュラQC-LDPCコードの構成方法および電子機器を開示する。方法は、巡回シフト値行列内の1行目、1列目の各要素を0に初期化するステップと、既定条件を満たすK個の数値を取得するステップであって、既定条件は、その中の1つの数値が0であり、かつ任意の2つの数値の差からなる集合に重複する数が存在しないことを含むステップと、巡回シフト値行列の2行目のK個の要素にK個の数値をそれぞれ割り当てるステップと、2行目の1番目の要素に0を割り当てるステップと、巡回置換行列の次元数情報に基づいて、各値割り当て待ち要素について内径条件を満たす値を探索するステップであって、各値割り当て待ち要素とは、1行目、2行目、1列目以外の各要素を指すステップと、巡回シフト値行列に基づいて、レギュラQC-LDPCコードのチェック行列を構成するステップと、を含む。
【選択図】
図3
【特許請求の範囲】
【請求項1】
レギュラQC-LDPCコードの巡回シフト値行列内の1行目、1列目の各要素を0に初期化するステップと、
既定条件を満たすK個の数値を取得するステップであって、Kの値は前記巡回シフト値行列の列数に等しく、前記既定条件は、その中の1つの前記数値が0であり、かつ任意の2つの前記数値の差からなる集合に重複する数が存在しないことを含むステップと、
前記巡回シフト値行列の2行目のK個の要素に前記K個の数値をそれぞれ割り当てるステップであって、前記2行目の1番目の要素に0を割り当てるステップと、
前記レギュラQC-LDPCコードの巡回置換行列の次元数情報に基づいて、値割り当て待ちの各要素について既定の内径条件を満たす値を探索して、前記巡回シフト値行列を得るステップであって、前記値割り当て待ちの各要素とは、前記巡回シフト値行列内の、1行目、2行目、1列目以外の各要素を指すステップと、
前記巡回シフト値行列に基づいて、前記レギュラQC-LDPCコードのチェック行列を構成するステップと、
を含むレギュラQC-LDPCコードの構成方法。
【請求項2】
既定条件を満たすK個の数値を取得する前記ステップは、
前記列数に基づいて差集合を確定し、前記差集合からK個の差集合要素を選択するステップと、
前記K個の差集合要素の中の最小値を確定し、前記K個の差集合要素からそれぞれ前記最小値を差し引いて前記K個の値を得るステップと、
を含む請求項1に記載のレギュラQC-LDPCコードの構成方法。
【請求項3】
既定条件を満たすK個の数値を取得する前記ステップは、
ルーカス数列から連続して並ぶK個の数列要素を選択するステップと、
前記K個の数列要素の中の最小値を確定し、前記K個の数列要素からそれぞれ前記最小値を差し引いて前記K個の値を得るステップと、
を含む請求項1に記載のレギュラQC-LDPCコードの構成方法。
【請求項4】
前記内径条件は、前記チェック行列の内径が8、10、または12であることを含む請求項1に記載のレギュラQC-LDPCコードの構成方法。
【請求項5】
前記次元数情報には、次元数の初期値とステップサイズとが含まれ、前記レギュラQC-LDPCコードの巡回置換行列の次元数情報に基づいて、値割り当て待ちの各要素について既定の内径条件を満たす値を探索する前記ステップは、
前記次元数に基づいて複数の候補値を確定するステップと、
複数の前記候補値に基づいて、各前記値割り当て待ち要素に対して内径検出を行い、前記次元数の下に各前記値割り当て待ち要素が前記内径条件を満たすようにする候補値が存在するか否かを判断するステップと、
各前記値割り当て待ち要素が前記内径条件を満たすようにする候補値が存在する場合、全ての要素に値が割り当てられた前記巡回シフト値行列を得るステップと、
各前記値割り当て待ち要素が前記内径条件を満たすようにする候補値が存在しない場合、前記ステップサイズを用いて前記次元数を更新し、前記レギュラQC-LDPCコードの巡回置換行列の次元数情報に基づいて、値割り当て待ちの各要素について既定の内径条件を満たす値を探索する前記ステップを繰り返すステップと、
を含む請求項1に記載のレギュラQC-LDPCコードの構成方法。
【請求項6】
複数の前記候補値に基づいて、各前記値割り当て待ち要素に対して内径検出を行う前記ステップにおいて、各前記候補値に対し、前記候補値が前記巡回シフト値行列に存在しないと判断した場合、前記候補値を前記値割り当て待ち要素に割り当て、かつ内径検出を行う
請求項5に記載のレギュラQC-LDPCコードの構成方法。
【請求項7】
複数の前記候補値に基づいて、各前記値割り当て待ち要素に対して内径検出を行い、前記次元数の下に各前記値割り当て待ち要素が前記内径条件を満たすようにする候補値が存在するか否かを判断する前記ステップは、
各前記値割り当て待ち要素に対し、前記内径条件を満たす候補値を前記値割り当て待ち要素の選択可能値集合に追加ステップと、値割り当てステップに進むステップと、を含み、前記値割り当てステップは、
前記値割り当て待ち要素の選択可能値集合が空集合でない場合、前記選択可能値集合から1つの選択可能値を選択して前記値割り当て待ち要素に割り当て、全ての前記値割り当て待ち要素に値が割り当てられた場合、前記次元数の下に各前記値割り当て待ち要素が前記内径条件を満たすようにする候補値が存在すると判定ステップと、
前記値割り当て待ち要素の選択可能値集合が空集合であり、かつ前記値割り当て待ち要素が1番目の値割り当て待ち要素ではない場合、前記値割り当て待ち要素の一つ前の値割り当て待ち要素の現在値を、前記一つ前の値割り当て待ち要素の選択可能値集合から除外し、前記一つ前の値割り当て待ち要素に対して前記値割り当てステップを実行するステップと、
前記値割り当て待ち要素の選択可能値集合が空集合であり、かつ前記値割り当て待ち要素が1番目の値割り当て待ち要素である場合、前記次元数の下に各前記値割り当て待ち要素が前記内径条件を満たすようにする候補値が存在しないと判定するステップと、を含み、
左から右、上から下の順に各前記値割り当て待ち要素について、前記内径条件を満たす値を探索する
請求項5に記載のレギュラQC-LDPCコードの構成方法。
【請求項8】
前記巡回シフト値行列に基づいて、前記レギュラQC-LDPCコードのチェック行列を構成する前記ステップは具体的に、前記巡回シフト値行列と、探索された各前記値割り当て待ち要素の前記内径条件を満たす値が基づく前記次元数とに基づいて、前記レギュラQC-LDPCコードのチェック行列を構成する
請求項5に記載のレギュラQC-LDPCコードの構成方法。
【請求項9】
少なくとも1つのプロセッサと、前記少なくとも1つのプロセッサと通信可能に接続されたメモリと、を含み、
前記メモリには前記少なくとも1つのプロセッサによって実行できる命令が記憶され、前記命令が前記少なくとも1つのプロセッサによって実行されることで、前記少なくとも1つのプロセッサによって請求項1から8の何れか一項に記載のレギュラQCーLDPCコードの構成方法を実行できる
電子機器。
【請求項10】
コンピュータプログラムが記憶され、前記コンピュータプログラムがプロセッサによって実行された時、請求項1から8の何れか一項に記載のレギュラQCーLDPCコードの構成方法を実現する
コンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本願は出願番号が201910744688.7で、出願日が2019年8月13日である中国特許出願に基づいて提出され、その中国特許出願の優先権を主張し、その中国特許出願の全文を援用により本願に組み入れる。
【0002】
本願の実施例は通信分野に関し、特にレギュラQC-LDPCコードの構成方法及び電子機器に関する。
【背景技術】
【0003】
準巡回低密度パリティチェック(Quasi-Cyclic Low-Density Parity-Check、QC-LDPCと略称する)コードはLDPCコードの中で最も代表的で広く研究され、応用されているコードであり、QCコードとLDPCコードの組み合わせであり、LDPCコードの優れた誤り訂正性能とQCコードの構造化特性を併せ持つ。
【0004】
様々なタイプのQC-LDPCコードの中で、最も一般的なタイプは「巡回置換行列(Circulant Permutation Matrice:CPM)」形式に基づくQC-LDPCコードであり、そのチェック行列Hの形式は
図1に示すように、各要素I(s
i,j)は1つの単位行列または単位行列の巡回シフト行列、または全ゼロ行列を表す。要素I(s
i,j)中の巡回シフト値s
i,jを抽出して巡回シフト値行列H
sを構成することにより、サイズの大きいチェック行列Hの設計をサイズの比較的小さい巡回シフト値行列H
sの設計に変換することができ、行列H
sの形式は
図2に示す。チェック行列に全ゼロサブ行列が存在しないQC-LDPCコードは、(J,K)レギュラQC-LDPCコードとも呼ばれ、ここで、JとKはそれぞれチェック行列Hの列重みと行重み、すなわち巡回シフト値行列H
sの行数と列数を指す。QC-LDPCコードのチェック行列に対応するTannerグラフにおける最短ループの長さを内径(girth)と定義し、良好な復号性能を得るためには、構成されるチェック行列の内径をできるだけ大きくすることが求められる。
【発明の概要】
【発明が解決しようとする課題】
【0005】
本願実施例の目的は、レギュラQC-LDPCコードの構成方法および電子機器を提供することにある。
【課題を解決するための手段】
【0006】
本願の実施例は、レギュラQC-LDPCコードの構成方法を提供し、前記レギュラQC-LDPCコードの構成方法は、レギュラQC-LDPCコードの巡回シフト値行列内の1行目、1列目の各要素を0に初期化するステップと、既定条件を満たすK個の数値を取得するステップであって、Kの値は前記巡回シフト値行列の列数に等しく、前記既定条件は、その中の1つの前記数値が0であり、かつ任意の2つの前記数値の差からなる集合に重複する数が存在しないことを含むステップと、前記巡回シフト値行列の2行目のK個の要素に前記K個の数値をそれぞれ割り当てるステップであって、前記2行目の1番目の要素に0を割り当てるステップと、前記レギュラQC-LDPCコードの巡回置換行列の次元数情報に基づいて、値割り当て待ちの各要素について既定の内径条件を満たす値を探索して、前記巡回シフト値行列を得るステップであって、前記値割り当て待ちの各要素とは、前記巡回シフト値行列内の、1行目、2行目、1列目以外の各要素を指すステップと、前記巡回シフト値行列に基づいて、前記レギュラQC-LDPCコードのチェック行列を構成するステップと、
を含む。
【0007】
本願の実施例はさらに、電子機器を提供し、前記電子機器は、少なくとも1つのプロセッサと、前記少なくとも1つのプロセッサと通信可能に接続されたメモリと、を含み、前記メモリには前記少なくとも1つのプロセッサによって実行できる命令が記憶され、前記命令が前記少なくとも1つのプロセッサによって実行されることで、前記少なくとも1つのプロセッサによって前記レギュラQCーLDPCコードの構成方法を実行できる。
【0008】
本願の実施例はさらに、コンピュータ読み取り可能な記憶媒体を提供し、前記コンピュータ読み取り可能な記憶媒体にはコンピュータプログラムが記憶され、前記コンピュータプログラムがプロセッサによって実行された時、前記レギュラQCーLDPCコードの構成方法を実現する。
【図面の簡単な説明】
【0009】
一つ又は複数の実施例をそれに対応する添付図面中の画像によって例示的に示し、これらの例示的な説明は、実施例に対する限定を構成せず、添付図面中の同じ参照符号を有する素子は同様の素子であることを示し、特に明記されていない限り、図面中の画像は比例に対する限定を構成しない。
【
図1】「巡回置換行列」に基づくQC-LDPCコードのチェック行列表現式である。
【
図2】「巡回置換行列」に基づくQC-LDPCコードの巡回シフト値行列表現式である。
【
図3】本願の第一実施例におけるレギュラQC-LDPCコードの構成方法に基づくフローチャートである。
【
図4】本願の第一実施例におけるステップ104に基づく具体的なフローチャートである。
【
図5】本願の第二実施例におけるレギュラQC-LDPCコードの構成方法に基づくフローチャートである。
【
図6】本願の第三実施例におけるレギュラQC-LDPCコードの構成方法に基づくフローチャートである。
【
図7】本願の第四実施例における電子機器のブロック図である。
【発明を実施するための形態】
【0010】
本願実施例の目的、技術案及び利点をより明らかにするために、以下では、添付図面を組み合わせて本願の各実施形態を詳しく説明する。しかしながら、当業者であれば、本願の各実施形態において、読み手に本願をよりよく理解してもらうために多くの技術的詳細が提示されていることを理解することができる。しかし、これらの技術的詳細及び以下の各実施例に基づく様々な変更及び修正がなくとも、本願の保護を求める技術案を実現することができる。以下の各実施例の区分は、説明の便宜のためになされており、本願の具体的な実施形態にいかなる限定を構成すべきではなく、各実施形態は、矛盾しない限り、組み合わせたり互いに引用したりすることができる。
【0011】
本願の第一実施例は、レギュラQC-LDPCコードの構成方法に関する。具体的な流れを
図3に示す。
【0012】
ステップ101において、レギュラQC-LDPCコードの巡回シフト値行列内の1行目、1列目の各要素を0に初期化する。
【0013】
ステップ102において、既定条件を満たすK個の数値を取得し、ここで、Kの値は巡回シフト値行列の列数に等しく、既定条件は、その中の1つの数値が0であり、かつ任意の2つの数値の差からなる集合に重複する数が存在しないことを含む。
【0014】
ステップ103において、巡回シフト値行列の2行目のK個の要素にK個の数値をそれぞれ割り当て、ここで、2行目の1番目の要素に0を割り当てる。
【0015】
ステップ104において、レギュラQC-LDPCコードの巡回置換行列の次元数情報に基づいて、値割り当て待ちの各要素について内径条件を満たす値を探索して、巡回シフト値行列を得て、値割り当て待ちの各要素とは、巡回シフト値行列内の、1行目、2行目、1列目以外の各要素を指す。
【0016】
ステップ105において、巡回シフト値行列に基づいて、レギュラQC-LDPCコードのチェック行列を構成する。
【0017】
以下では、本実施形態のレギュラQC-LDPCコードの方法の実現の詳細について具体的に説明するが、以下の内容は、提供される実現の詳細への理解を容易にするためのもので、本案を実施するための必須条件ではない。
【0018】
レギュラQC-LDPCコードの構成はすなわち、レギュラQC-LDPCコードのチェック行列を構成することであり、通常、与えられた行数、列数、および内径に基づいて、巡回シフト値行列の各要素の値を確定して、巡回シフト値行列に基づいてチェック行列を構成する。本実施例及び以下の各実施例において、アルファベットJ、K、Gでそれぞれ行数、列数、内径を表し、すなわち、本実施例は、内径Gの(J,K)レギュラQC-LDPCコードの構成方法を提供する。
【0019】
なお、本実施例において、既定の行数J、列数K、内径Gの具体的な数値について、何ら制限はない。一例において、設定された内径は8、10、または12としてもよく、すなわち、本実施例は、大内径の(J、K)レギュラQC-LDPCコードを探索するために使用することができる。
【0020】
ステップ101において、与えられた行数Jと列数Kに基づいて、行数がJで、列数がKである巡回シフト値行列Hsを作成し、その巡回シフト値行列Hs内の各要素を初期化する。初期化において、巡回シフト値行列Hsの1行目、1列目の各要素にすべて0の値を割り当て、残りの要素にはシステムでデフォルトの値割り当て待ちを意味する値を割り当てることができる。たとえば、システムにおいてデフォルトで-1が値割り当て待ちを表す場合、これらの残りの要素に-1の値を割り当てることができる。
【0021】
ステップ102とステップ103において、既定条件を満たすK個の数値を取得し、これらのK個の数値は巡回シフト値行列Hsの2行目のK個の要素にそれぞれ対応し、これらのK個の数値は既定条件を満たす必要があり、すなわち以下の条件を満たす必要がある:その中の1つの数値が0であり、かつ任意の2つの数値の差からなる集合に重複する数が存在しない。
【0022】
例えば、K=4であり、これらのK個の数値はそれぞれa1、a2、a3、a4である。ここで、a1とa2の差をb12、a1とa3の差をb13、a1とa4の差をb14、a2とa3の差をb23、a2とa4の差をb24、a3とa4の差をb34と記せば、集合{b12、b13、b14、b23、b24、b34}には重複する数が存在せず、すなわち、b12、b13、b14、b23、b24、b34はそれぞれ異なる。そして、a1、a2、a3、a4のいずれか一つが0であり、2行目の各要素に値を割り当てるとき、0を2行目の1番目の要素に割り当て、残りの3つを2行目の他の3つの要素に割り当てる。
【0023】
ここで、0をK個の数値のうちの1番目に並べてもよいし、あるいは、K個の数値を小さい順に並べてもよく、このとき、2行目の各要素に値を割り当てるとき、K個の数値の並び順に従って2行目の各要素に順番に値を割り当てることができる。
【0024】
一例において、
図4に示すように、ステップ104は以下のサブステップを含む。
【0025】
サブステップ1041において、次元数に基づいて複数の候補値を確定する。
【0026】
サブステップ1042において、複数の候補値に基づいて、各値割り当て待ち要素に対して内径検出を行い、次元数の下に各値割り当て待ち要素が内径条件を満たすようにする候補値が存在するか否かを判断し、YESの場合、サブステップ1043に進み、NOの場合、サブステップ1044に進む。
サブステップ1043において、全ての要素に値が割り当てられた巡回シフト値行列を得る。
【0027】
サブステップ1044において、ステップサイズを用いて次元数を更新し、かつステップ104を繰り返す。
【0028】
本実施例において、次元数情報には、次元数の初期値とステップサイズとが含まれ、ただし、次元数の初期値は1より大きい整数であり、本実施例において、アルファベットP、Stepでそれぞれ次元数とステップサイズを表す。初めてステップ104を実行するとき、この次元数の初期値を使用して複数の候補値を確定する。
【0029】
サブステップ1041において、次元数Pに基づいて確定された複数の候補値は、次のように順に配列される:1、2、……P-1、すなわち、次元数Pに基づいて、一つの候補値集合PMを確定することができ、この候補値集合は小さい順に並んだ複数の候補値を含み、PM={1、2、3、...、p-1}と表現することができる。
【0030】
サブステップ1042において、複数の候補値に基づいて各値割り当て待ち要素に対して順次内径検出を行う中、各値割り当て待ち要素に対して左から右、上から下の順に内径検出してもよい。すなわち、検出順序は、3行目の2番目の要素、3行目の3番目の要素、…、3行目のK番目の要素;4行目の2番目の要素、4行目の3番目の要素、…、4行目のK番目の要素;……;J行目の2番目の要素、J行目の3番目の要素、……、J行目のK番目の要素である。
【0031】
ここで、サブステップ1042は、以下のような具体的な実現方式を有してもよい。
【0032】
ステップa、各値割り当て待ち要素に対して内径検出を行う中、候補値集合PMから各候補値を順次取り出し、また、各候補値に対し、この候補値が巡回シフト値行列に存在しないと判断した場合にのみ、この候補値をこの値割り当て待ち要素に割り当て、かつ内径検出を行う。すなわち、各候補値に対し、この候補値がこの巡回シフト値行列に存在するか否かを判断し、この候補値がこの巡回シフト値行列に存在しなければ、候補値をこの値割り当て待ち要素に割り当て、かつ内径検出を行い、この候補値がこの巡回シフト値行列に既に存在する場合、この候補値をこの値割り当て待ち要素に割り当てて内径検出を行うことはない。
【0033】
ここで、この候補値がこの巡回シフト値行列に存在するか否かとは、この候補値が巡回シフト値行列内のいずれか一つの要素の値と同じであるか否かを意味する。この候補値がその中の一つの要素の値と同じであれば、この候補値がこの巡回シフト値行列に既に存在することを意味する。この候補値がいずれの要素の値とも異なる場合、この候補値がこの巡回シフト値行列に存在しないことを意味する。
【0034】
もしこの候補値がこの巡回シフト値行列に既に存在する場合、この候補値を用いてこの値割り当て待ち要素に対して内径検出することは、必然的に内径条件を満たすことができない。したがって、この例において、この候補値がこの巡回シフト値行列に既に存在するか否かを判断することにより、必然的に検出失敗を招く候補値を先に除外することができ、これによって探索回数を減らし、探索速度をより向上させることができる。なお、他の例では、サブステップ1042において、複数の候補値を順次この値割り当て待ち要素に割り当てて内径検出を行ってもよい。
【0035】
本実施例における内径検出とは、この値割り当て待ち要素にこの候補値が割り当てられたとき、そのときのチェック行列の内径が既定内径G以上か否かを判断することである。YESの場合、この候補値によってこの値割り当て待ち要素が内径条件を満たすことができ、つまり、この候補値がこの値割り当て待ち要素の一つの選択可能値であることを意味する。NOの場合(つまり、そのときのチェック行列内に内径Gよりも小さいループがある場合)、この候補値がこの値割り当て待ち要素の選択可能値ではないことを意味する。その中で、Gより小さい様々な長さのループに対して探索してもよく、例えばGが10であれば、長さが4、6、8である各ループに対して探索して、存在するか否かを判断する。これにより、Gより小さいループが現れないように確保し、つまり、内径がG以上であることが確保することができる。
【0036】
ここで、複数の候補値の中には、この値割り当て待ち要素が内径条件を満たすようにできる候補値がいくつか存在する可能性があり、この値割り当て待ち要素が内径条件を満たすようにするいくつかの候補値の中からいずれか1つを選んで値割り当て待ち要素に割り当ててもよい。本実施例において、予めこの値割り当て待ち要素に選択可能値集合Cand_Si,jを作成しておき、ここで、Si,jはこの値割り当て待ち要素を表し、2≦i≦J-1で、1≦j≦K-1であり、i、jはすべて整数で、各候補値によるこの値割り当て待ち要素の内径検出が完了するまで、内径条件を満たす候補値を、この値割り当て待ち要素に対応する選択可能値集合Cand_Si,jに追加する。
【0037】
その後、値割り当てステップに進み、値割り当てステップは次のサブステップbとステップcを含む。
【0038】
ステップbにおいて、Cand_Si,jが空集合か否かを判断し、Cand_Si,jが空集合でない場合、Cand_Si,jから任意の一つの選択可能値を選択してこの値割り当て待ち要素Si,jに割り当て、そして、全ての値割り当て待ち要素を検出し終わるまで、上記の複数の候補値に基づいて値割り当て待ち要素Si,jの次の値割り当て待ち要素に対して内径検出を行う。すべての値割り当て待ち要素に値が割り当てられた場合、その次元数の下に各値割り当て待ち要素が内径条件を満たすようにする候補値が存在すると判定し、サブステップ1043に進む。
【0039】
ステップcにおいて、Cand_Si,jが空集合である場合、Si,jの一つ前の要素の現在割り当てられている値がSi,jの選択可能値の選択に影響することを示し、このとき、Si,jの一つ前の要素に戻る必要があり、Si,jの一つ前の要素の現在値をSi,jの一つ前の要素の選択可能値集合から除外し、Si,jの一つ前の要素を再び値割り当て待ち要素として、値割り当てステップを繰り返し、すなわち、ステップbに戻る。Si,jが3行目の2番目の要素である場合、Si,jには一つ前の要素が存在しない。このとき、この次元数の下には各値割り当て待ち要素が内径条件を満たすようにする候補値が存在しないと判定し、サブステップ1044に進み、この次元数にこのステップサイズを加算したものを新たな次元数とすることで、この次元数を更新する。次元数を更新した後、ステップ104に戻る。
【0040】
すなわち、現在の次元数の下に、各値割り当て待ち要素が内径条件を満たすようにする候補値が存在しない場合、次元数を更新した後、ステップ104を繰り返して、更新された次元数の下で探索する。各値割り当て待ち要素が内径条件を満たすようにする候補値がまだ見つかっていない限り、各値割り当て待ち要素の内径条件を満たす値が見つかるまで、ステップ104を繰り返し実行し、これにより、全ての値割り当て待ち要素に値が割り当てられたこのレギュラQC-LDPCコードの巡回シフト値行列が得られる。それと同時に、巡回置換行列の次元数、すなわちこの次元数の下で探索されたこの巡回シフト値行列を得ることができる。
【0041】
ステップ105において、探索された巡回シフト値行列に基づいて、巡回置換行列の次元数、すなわちこの探索された巡回シフト値行列が基づく巡回置換行列の次元数と結び付けて、内径Gの(J、K)レギュラQC-LDPCコードのチェック行列を構成し、すなわち、内径Gの(J、K)レギュラQC-LDPCコードを構成する。
【0042】
本実施例において、取得したK個の数値がこの既定条件を満たし、かつこれらのK個の数値を使って2行目の各要素に値を割り当てると、1行目と2行目に長さ4と8のループが生じないことを確保することができる。ここで、長さ6のループは3行目以前に現れる可能性がないので、2行目の各要素に値を割り当てるとき、長さ6のループを考慮しなくてもよい。各値割り当て待ち要素に対する探索において、チェック行列に長さが内径Gより小さいループを発生させる値を避けることができる(つまり、内径Gが6より大きければ、長さ6のループの発生を避けることができるのである)。
【0043】
従来技術に対して、本実施例では、まずはレギュラQC-LDPCコードの巡回シフト値行列の1行目、1列目の各要素を0に初期化し、そして、既定条件を満たす複数の数値を取得して、かつ複数の数値を巡回シフト値行列の2行目の各要素にそれぞれ割り当て、既定条件は、その中の1つの数値が0であり、かつ任意の2つの数値の差からなる集合に重複する数が存在しないことを含む。この場合、行列の最初の2行に必ず特定の長さのループが現れないようにして、2行目の各要素の値を先に確定することができる。そして、巡回置換行列の次元数情報に基づいて、各値割り当て待ち要素の値を探索し、各値割り当て待ち要素とは、巡回シフト値行列内の、1行目、2行目、1列目以外の各要素を指す。すなわち、探索によって値を割り当てる必要のある値割り当て待ち要素は、2行目から始まるのではなく、3行目の2番目の要素から始まるため、従来技術に比べて、探索によって値を割り当てる必要のある値割り当て待ち要素の数を減らすことで、巡回シフト値行列の探索時間を短縮し、レギュラQC-LDPCコードの構成速度を向上させる。特に、符号化率が高く内径が大きい場合、探索時間を大幅に短縮することで、レギュラQC-LDPCコードの構成速度を大幅に向上させることができる。
【0044】
特に、符号化率が高く内径が大きい場合、列重みが一定であると、符号化率が大きくなるにつれて、チェック行列のサイズもそれ相応に大きくなるため、内径条件を満たす巡回シフト値をより多く探索する必要がある。一方、符号化率が一定であると、内径が大きくなるにつれて、満たすべき内径条件もますます厳しくなり、各巡回シフト値の探索はより複雑になる。したがって、符号化率が高く内径が大きい場合に対し、本願は探索時間を大幅に短縮することができる。
【0045】
以下は、本実施例の方法に基づいて内径Gの(J,K)レギュラQC-LDPCコードを構成する実例である。なお、以下の実例における各ステップの区分は、違う方法で明確に説明するだけで、実現時には1つのステップに統合したり、いくつかのステップを複数のステップに分解したりすることができ、
図3、
図4における各ステップと同じ論理関係を包含する。
【0046】
例その一において、内径8の(3,6)レギュラQC-LDPCコードを構成する。
【0047】
ステップ1において、入力パラメータから、Jが3、Kが6、内径が8であることがわかり、3*6の巡回シフト値行列Hsを作成し、それを初期化して、初期化後のHsは以下のようになる。
【0048】
【0049】
ステップ2において、列数Kが6であることから、(31、6、1)差集合内の複数の数値{1、5、11、24、25、27}を選択し、これら6つの値から最小値「1」を差し引いて、得られた{0、4、10、23、24、26}を巡回シフト値行列の2行目の要素として、この場合、Hsは以下のようになる。
【0050】
【0051】
なお、(31、6、1)差集合から選択される6つの数値は一意ではなく、{31、6、1}差集合から任意の6つを選択すればよい。上記は一例にすぎない。
【0052】
ステップ3において、巡回置換行列の次元数Pの初期値は27で、ステップサイズStepは1である。巡回シフト値行列Hsの3行目の要素を走査探索する。具体的には、以下のようになる。
【0053】
ステップ3.1において、巡回シフト値行列Hsの2行目の要素に基づいて、採用済み値0、4、10、23、24、26の使用済みフラグChoose_0、Choose_4、Choose_10、Choose_23、Choose_24、Choose_26を全てtrueに設定し、採用されていないものをfalseに設定し、探索位置iの初期値を1に、探索リターンフラグReturn_iをfalseに設定する。
【0054】
ステップ3.2において、3行目の2番目の要素S2,i=1から、左から右に向かって各要素が内径条件を満たす選択可能値を一つずつ確定し、これらの値を選択可能値集合Cand_S2,iに入れて、iが6になった時に停止する。具体的な作業手順は次のステップを含む。
【0055】
ステップ3.2.1において、i=1から、まず、探索リターンフラグReturn_iがtrueであるか否かを判断し、それがfalseであれば、要素S2,iに対して選択可能値の探索を行うことが可能であることを示し、ステップ3.2.2に移り、それがtrueであれば、その要素に内径条件を満たす選択可能値が見つからないことを示す。この場合、一つ前の要素S2,i-1に戻って値を改めて割り当て探索する必要があるので、ステップ3.2.4に移る。
【0056】
ステップ3.2.2において、次元数Pの初期値は27であるため、次元数に基づいて集合{1、2、3、...、26}を確定し、集合{1、2、3、...、26}の値を1つずつ順にjに割り当て、jが行列Hsに既に現われた場合、つまりChoose_jがtrueである場合、その値をスキップして、次の値の検出を直接行う。Choose_jがfalseである場合、jをS2,iに割り当てて、かつ内径検出を行う。このとき、巡回シフト値行列に存在する内径の長さが規定の内径大きさ8以上であれば、すなわちJudge_cycleがtrueである場合、jが選択可能値であることを示し、その値を選択可能値集合Cand_S2,iに入れてから、次の値の検出を行い、行列に8より小さいループが現れた場合、その値jが選択不可であることを示し、直接次の値の検出を行う。集合{1、2、3、...、26}内の全ての要素を走査し終わった後、ステップ3.2.3に進む。
【0057】
ステップ3.2.3において、現在の選択可能値集合Cand_S2,iが空集合であるか否かを判断し、そうでない場合、すなわちsize(Cand_S2,i)が0と等しくない場合、集合Cand_S2,iからランダムに1つの数を選んで、S2,iに割り当て、使用済み値フラグChoose_S2,iをtrueに設定して、iを1だけインクリメントさせ、そしてステップ3.2.1に移って次の要素S2,i+1の選択可能値探索を行う。Cand_S2,iが空集合である場合、すなわちsize(Cand_S2,i)=0である場合、一つ前の要素S2,i-1の現在割り当てられている値がS2,iの選択可能値の選択に影響することを示し、探索リターンフラグReturn_iがtrueであると規定し、iを1だけデクリメントさせ、ステップ3.2.1に移る。
【0058】
ステップ3.2.4において、S2,iの使用済み値フラグChoose_S2,iをfalseに設定し、そして選択可能値集合Cand_S2,iが空集合であるか否かを判断し、そうでない場合、すなわちsize(Cand_S2,i)は0と等しくないので、集合Cand_S2,iからランダムに1つの数を選んでS2,iに割り当て、使用済み値フラグChoose_S2,iをtrueに設定して、iを1だけインクリメントさせ、そしてステップ3.2.1に移って、S2,i+1の選択可能値探索を行う。Cand_S2,iが空集合である場合、すなわちsize(Cand_S2,i)=0である場合、そのときのiの値が1であるか否かを判断し、YESの場合、現在のpの値の下に、条件を満たす巡回シフト値行列が見つからないことを示し、現在のpの値にステップサイズStepを加算してからpに改めて割り当てて、そしてステップ3.1に移って探索を再開し、NOの場合、一つ前の要素S2,i-2の値がS2,i-1とS2,iの取りうる値に影響することを示し、探索リターンフラグReturn_iをfalse、Return_(i-1)をtrueに設定し、iを1だけデクリメントさせてから、ステップ3.2.1に移る。
【0059】
ステップ3.3において、巡回シフト値行列Hsの3行目の全ての要素の値が確定された場合、適切な巡回シフト値行列が探索されたことを示し、このとき、走査探索から直接抜ける。
【0060】
ステップ4において、走査探索によって得られた巡回シフト値行列Hs、現在のpが取った値の結果を出力し、巡回シフト値行列Hsの形式は以下の通りである。
【0061】
【0062】
Pが取った値は27である。
【0063】
ステップ5において、巡回シフト値行列HsとPが取った値に基づいて、チェック行列を得る。
【0064】
例その二において、内径10の(3,8)レギュラQC-LDPCコードを構成する。
【0065】
ステップ1において、入力パラメータから、Jが3、Kが8、内径が10であることがわかり、3*8の巡回シフト値行列Hsを作成し、それを初期化して、初期化後のHsは以下のようになる。
【0066】
【0067】
ステップ2において、列数Kが8であることから、(57、8、1)差集合内の複数の数値{1、6、7、9、19、38、42、49}を選択し、これら8つの値から最小値「1」を差し引いて、得られた{0、5、6、8、18、37、41、48}を巡回シフト値行列の2行目の要素として、この場合、Hsは以下のようになる。
【0068】
【0069】
なお、(57、8、1)差集合から選択される8つの数値は一意ではなく、{57、8、1}差集合から任意の8つを選択すればよい。上記は一例にすぎない。
【0070】
ステップ3において、巡回置換行列の次元数Pの初期値は49で、ステップサイズStepは1である。巡回シフト値行列Hsの3行目の要素を走査探索する。具体的には、以下のようになる。
【0071】
ステップ3.1において、巡回シフト値行列Hsの2行目の要素に基づいて、採用済み値0、5、6、8、18、37、41、48の使用済みフラグChoose_0、Choose_5、Choose_6、Choose_8、Choose_18、Choose_37、Choose_41、Choose_48を全てtrueに設定し、採用されていないものをfalseに設定し、探索位置iの初期値を1に、探索リターンフラグReturn_iをfalseに設定する。
【0072】
ステップ3.2において、3行目の2番目の要素S2,i=1から、左から右に向かって各要素が内径条件を満たす選択可能値を一つずつ確定し、これらの値を選択可能値集合Cand_S2,iに入れて、iが8になった時に停止する。具体的な作業手順は次のステップを含む。
【0073】
ステップ3.2.1において、i=1から、まず、探索リターンフラグReturn_iがtrueであるか否かを判断し、それがfalseであれば、要素S2,iに対して選択可能値の探索を行うことが可能であることを示し、ステップ3.2.2に移り、それがtrueであれば、その要素に内径条件を満たす選択可能値が見つからないことを示す。この場合、一つ前の要素S2,i-1に戻って値を改めて割り当て探索する必要があるので、ステップ3.2.4に移る。
【0074】
ステップ3.2.2において、次元数Pの初期値は49であるため、次元数に基づいて集合{1、2、3、...、48}を確定し、集合{1、2、3、...、48}の要素を1つずつ順にjに割り当て、jが行列Hsに既に現われた場合、つまりChoose_jがtrueである場合、その値をスキップして、次の値の検出を直接行う。Choose_jがfalseである場合、jをS2,iに割り当てて、かつ内径検出を行う。このとき、巡回シフト値行列に存在する内径の長さが規定の内径大きさ10以上であれば、すなわちJudge_cycleがtrueである場合、jが選択可能値であることを示し、その値を選択可能値集合Cand_S2,iに入れてから、次の値の検出を行い、行列に10より小さいループが現れた場合、その値jが選択不可であることを示し、直接次の値の検出を行う。集合{1、2、3、...、48}内の全ての要素を走査し終わった後、ステップ3.2.3に進む。
【0075】
ステップ3.2.3において、現在の選択可能値集合Cand_S2,iが空集合であるか否かを判断し、そうでない場合、すなわちsize(Cand_S2,i)が0と等しくない場合、集合Cand_S2,iからランダムに1つの数を選んで、S2,iに割り当て、使用済み値フラグChoose_S2,iをtrueに設定して、iを1だけインクリメントさせ、そしてステップ3.2.1に移って次の要素S2,i+1の選択可能値探索を行う。Cand_S2,iが空集合である場合、すなわちsize(Cand_S2,i)=0である場合、一つ前の要素S2,i-1の現在割り当てられている値がS2,iの選択可能値の選択に影響することを示し、探索リターンフラグReturn_iがtrueであると規定し、iを1だけデクリメントさせ、ステップ3.2.1に移る。
【0076】
ステップ3.2.4において、S2,iの使用済み値フラグChoose_S2,iをfalseに設定し、そして選択可能値集合Cand_S2,iが空集合であるか否かを判断し、そうでない場合、すなわちsize(Cand_S2,i)は0と等しくないので、集合Cand_S2,iからランダムに1つの数を選んでS2,iに割り当て、使用済み値フラグChoose_S2,iをtrueに設定して、iを1だけインクリメントさせ、そしてステップ3.2.1に移って、S2,i+1の選択可能値探索を行う。Cand_S2,iが空集合である場合、すなわちsize(Cand_S2,i)=0である場合、そのときのiの値が1であるか否かを判断し、YESの場合、現在のpの値の下に、条件を満たす巡回シフト値行列が見つからないことを示し、現在のpの値にステップサイズstepを加算してからpに改めて割り当てて、そしてステップ3.1に移って探索を再開し、NOの場合、一つ前の要素S2,i-2の値がS2,i-1とS2,iの取りうる値に影響することを示し、探索リターンフラグReturn_iをfalse、Return_(i-1)をtrueに設定し、iを1だけデクリメントさせてから、ステップ3.2.1に移る。
【0077】
ステップ3.3において、巡回シフト値行列Hsの3行目の全ての要素の値が確定された場合、適切な巡回シフト値行列が探索されたことを示し、このとき、走査探索から直接抜ける。
【0078】
ステップ4において、走査探索によって得られた巡回シフト値行列Hs、現在のpが取った値の結果を出力し、巡回シフト値行列Hsの形式は以下の通りである。
【0079】
【0080】
ステップ5において、巡回シフト値行列HsとPが取った値に基づいて、チェック行列を得る。
【0081】
例その三において、内径12の(3,12)レギュラQC-LDPCコードを構成する。
【0082】
ステップ1において、入力パラメータから、Jが3、Kが12、内径が12であることがわかり、3*12の巡回シフト値行列Hsを作成し、それを初期化して、初期化後のHsは以下のようになる。
【0083】
【数7】
ステップ2において、列数Kが12であることから、(133、12、1)差集合内の複数の数値{1、11、16、40、41、43、52、60、74、78、121、128}を選択し、これら12個の値から最小値「1」を差し引いて、得られた{0、10、15、39、40、42、51、59、73、77、120、127}を巡回シフト値行列の2行目の要素として、この場合、H
sは以下のようになる。
【0084】
【数8】
なお、(133、12、1)差集合から選択される12個の数値は一意ではなく、{133、12、1}差集合から任意の12個を選択すればよい。上記は一例にすぎない。
【0085】
ステップ3において、巡回置換行列の次元数Pの初期値は128で、ステップサイズStepは1である。巡回シフト値行列Hsの3行目の要素を走査探索する。具体的には、以下のようになる。
【0086】
ステップ3.1において、巡回シフト値行列Hsの2行目の要素に基づいて、採用済み値0、10、15、39、40、42、51、59、73、77、120、127の使用済みフラグChoose_0、Choose_10、Choose_15、Choose_39、Choose_40、Choose_42、Choose_51、Choose_59、Choose_73、Choose_77、Choose_120、Choose_127を全てtrueに設定し、採用されていないものをfalseに設定し、探索位置iの初期値を1に、探索リターンフラグReturn_iをfalseに設定する。
【0087】
ステップ3.2において、3行目の2番目の要素S2,i=1から、左から右に向かって各要素が内径条件を満たす選択可能値を一つずつ確定し、これらの値を選択可能値集合Cand_S2,iに入れて、iが12になった時に停止する。具体的な作業手順は次のステップを含む。
【0088】
ステップ3.2.1において、i=1から、まず、探索リターンフラグReturn_iがtrueであるか否かを判断し、それがfalseであれば、要素S2,iに対して選択可能値の探索を行うことが可能であることを示し、ステップ3.2.2に移り、それがtrueであれば、その要素に内径条件を満たす選択可能値が見つからないことを示す。この場合、一つ前の要素S2,i-1に戻って値を改めて割り当て探索する必要があるので、ステップ3.2.4に移る。
【0089】
ステップ3.2.2において、次元数Pの初期値は128であるため、次元数に基づいて集合{1、2、3、...、127}を確定し、集合{1、2、3、...、127}の要素を1つずつ順にjに割り当て、jが行列Hsに既に現われた場合、つまりChoose_jがtrueである場合、その値をスキップして、次の値の検出を直接行う。Choose_jがfalseである場合、jをS2,iに割り当てて、かつ内径検出を行う。このとき、巡回シフト値行列に存在する内径の長さが規定の内径大きさ12以上であれば、すなわちJudge_cycleがtrueである場合、jが選択可能値であることを示し、その値を選択可能値集合Cand_S2,iに入れてから、次の値の検出を行い、行列に12より小さいループが現れた場合、その値jが選択不可であることを示し、直接次の値の検出を行う。集合{1、2、3、...、127}内の全ての要素を走査し終わった後、ステップ3.2.3に進む。
【0090】
ステップ3.2.3において、現在の選択可能値集合Cand_S2,iが空集合であるか否かを判断し、そうでない場合、すなわちsize(Cand_S2,i)が0と等しくない場合、集合Cand_S2,iからランダムに1つの数を選んで、S2,iに割り当て、使用済み値フラグChoose_S2,iをtrueに設定して、iを1だけインクリメントさせ、そしてステップ3.2.1に移って次の位置S2,i+1の選択可能値探索を行う。Cand_S2,iが空集合である場合、すなわちsize(Cand_S2,i)=0である場合、一つ前の要素S2,i-1の現在割り当てられている値がS2,iの選択可能値の選択に影響することを示し、探索リターンフラグReturn_iがtrueであると規定し、iを1だけデクリメントさせ、ステップ3.2.1に移る。
【0091】
ステップ3.2.4において、S2,iの使用済み値フラグChoose_S2,iをfalseに設定し、そして選択可能値集合Cand_S2,iが空集合であるか否かを判断し、そうでない場合、すなわちsize(Cand_S2,i)は0と等しくないので、集合Cand_S2,iからランダムに1つの数を選んでS2,iに割り当て、使用済み値フラグChoose_S2,iをtrueに設定して、iを1だけインクリメントさせ、そしてステップ3.2.1に移って、S2,i+1の選択可能値探索を行う。Cand_S2,iが空集合である場合、すなわちsize(Cand_S2,i)=0である場合、そのときのiの値が1であるか否かを判断し、YESの場合、現在のpの値の下に、条件を満たす巡回シフト値行列が見つからないことを示し、現在のpの値にステップサイズstepを加算してからpに改めて割り当てて、そしてステップ3.1に移って探索を再開し、NOの場合、一つ前の要素S2,i-2の値がS2,i-1とS2,iの取りうる値に影響することを示し、探索リターンフラグReturn_iをfalse、Return_(i-1)をtrueに設定し、iを1だけデクリメントさせてから、ステップ3.2.1に移る。
【0092】
ステップ3.3において、行列Hsの3行目の全ての要素の値が確定された場合、適切な巡回シフト値行列が探索されたことを示し、このとき、走査探索から直接抜ける。
【0093】
ステップ4において、走査探索によって得られた巡回シフト値行列Hs、現在のpが取った値の結果を出力し、行列Hsの形式は以下の通りである。
【0094】
【0095】
Pの取る値は5220である。
【0096】
ステップ5において、巡回シフト値行列HsとPが取った値に基づいて、チェック行列を得る。
【0097】
本願の第二実施例は、レギュラQC-LDPCコードの構成方法に関する。第二実施例は、第一実施例とほぼ同じであるが、主な相違点は次の通りである。本願の第二実施例において、条件を満たす数値を素早く見つける具体的な方法を提供する。
【0098】
図5に示すように、第二実施例におけるレギュラQC-LDPCコードの構成方法を示すフローチャートである。
【0099】
ステップ201において、レギュラQC-LDPCコードの巡回シフト値行列内の1行目、1列目の各要素を0に初期化する。ステップ201はステップ101とほぼ同じであるので、ここでは説明を省略する。
【0100】
ステップ202において、既定条件を満たすK個の数値を取得し、ここで、Kの値は巡回シフト値行列の列数に等しく、既定条件は、その中の1つの数値が0であり、かつ任意の2つの数値の差からなる集合に重複する数が存在しないことを含む。
【0101】
ステップ202は以下のサブステップを含む。
【0102】
サブステップ2021において、列数に基づいて差集合を確定し、差集合からK個の差集合要素を選択する。
【0103】
具体的には、列数がKであるため、(v、k、λ)差集合が得られる。このうち、列数Kによって得られる差集合には複数の要素が含まれており、vはこの差集合の最大要素である。本実施例において、k=K、λ=1とする。ここで、k=Kは、その列数Kから得られる差集合からK個の差集合要素を任意に取り出すことを意味し、λ=1は、取り出したK個の差集合要素のうち、任意の2つの差集合要素の差が1回しか現れないことを意味する。つまり、K個の差集合要素は以下の条件を満たす。任意の2つの差集合要素の差からなる集合に重複する数が存在しない。たとえば、列数Kが8で、(57、8、1)差集合の要素{1、6、7、9、19、38、42、49}を選択し、ここでv=57である。
【0104】
サブステップ2022において、K個の差集合要素の中の最小値を確定し、K個の差集合要素からそれぞれ最小値を差し引いてK個の値を得る。
【0105】
具体的には、2行目の1番目の要素が0であることを確保するために、K個の差集合要素からそれぞれK個の差集合要素の中の最小値を差し引いてK個の数値を得て、かつそのうち1個の数値が0である必要がある。ここで、K個の数値は、K個の差集合要素から同じ値を差し引いて得られるものなので、以下の条件を満たす。任意の2つの数値の差からなる集合に重複する数が存在しない。
【0106】
通常、差集合からK個の差集合要素を取り出す場合、連続して並んだK個の差集合要素を取り出すことができ、このとき、取り出したK個の差集合要素は小さい順に並んでいるので、K個の数値も小さい順に並んでおり、かつ1番目の数値は0である。このとき、2行目の各要素に値を割り当てるとき、K個の数値の並び順に従って2行目の各要素に順番に値を割り当てることができる。
【0107】
ステップ203において、巡回シフト値行列の2行目のK個の要素にK個の数値をそれぞれ割り当て、ここで、2行目の1番目の要素に0を割り当てる。ステップ203はステップ103とほぼ同じであるので、ここでは説明を省略する。
【0108】
ステップ204において、レギュラQC-LDPCコードの巡回置換行列の次元数情報に基づいて、値割り当て待ちの各要素について内径条件を満たす値を探索して、巡回シフト値行列を得て、値割り当て待ちの各要素とは、巡回シフト値行列内の、1行目、2行目、1列目以外の各要素を指す。ステップ204はステップ104とほぼ同じであるので、ここでは説明を省略する。
【0109】
ステップ205において、巡回シフト値行列に基づいて、レギュラQC-LDPCコードのチェック行列を構成する。ステップ205はステップ105とほぼ同じであるので、ここでは説明を省略する。
【0110】
本実施例において、差分値に基づいて既定条件を満たすK個の数値を得ることで、条件を満たすK個の数値を素早く見つけることができる。
本願の第三実施例は、レギュラQC-LDPCコードの構成方法に関する。第三実施例と第二実施例との相違点として、本願の第三実施例において、条件を満たす数値を素早く見つけるもう一つの具体的な方法を提供する。
【0111】
図6に示すように、第三実施例におけるレギュラQC-LDPCコードの構成方法を示すフローチャートである。
【0112】
ステップ301において、レギュラQC-LDPCコードの巡回シフト値行列内の1行目、1列目の各要素を0に初期化する。ステップ301はステップ101とほぼ同じであるので、ここでは説明を省略する。
【0113】
ステップ302において、既定条件を満たすK個の数値を取得し、ここで、Kの値は巡回シフト値行列の列数に等しく、既定条件は、その中の1つの数値が0であり、かつ任意の2つの数値の差からなる集合に重複する数が存在しないことを含む。
【0114】
ステップ302は以下のサブステップを含む。
【0115】
サブステップ3021において、ルーカス数列から連続して並ぶK個の数列要素を選択する。
【0116】
ここで、ルーカス数列は既知の数列であり、ルーカス数列から連続して並ぶK個の数列要素を選択し、ルーカス数列自体の特性から、連続して並ぶK個の数列の要素は以下の条件を満たす:任意の2つの数列の差からなる集合に重複する数が存在しない。
【0117】
サブステップ3022において、K個の数列要素の中の最小値を確定し、K個の数列要素からそれぞれ最小値を差し引いてK個の値を得る。
【0118】
具体的には、2行目の1番目の要素が0であることを確保するために、K個の数列要素からそれぞれK個の数列要素の中の最小値を差し引いてK個の数値を得て、かつそのうち1個の数値が0である必要がある。ここで、K個の数値は、K個の数列要素から同じ値を差し引いて得られるものなので、以下の条件を満たす:任意の2つの数値の差からなる集合に重複する数が存在しない。
【0119】
ルーカス数列から取り出した連続して並ぶK個の数列要素は、小さい順に並んでいるので、K個の数値も小さい順に並んでおり、かつ1番目の数値は0である。このとき、2行目の各要素に値を割り当てるとき、K個の数値の並び順に従って2行目の各要素に順番に値を割り当てることができる。
【0120】
ステップ303において、巡回シフト値行列の2行目のK個の要素にK個の数値をそれぞれ割り当て、ここで、2行目の1番目の要素に0を割り当てる。ステップ303はステップ103とほぼ同じであるので、ここでは説明を省略する。
【0121】
ステップ304において、レギュラQC-LDPCコードの巡回置換行列の次元数情報に基づいて、値割り当て待ちの各要素について内径条件を満たす値を探索して、巡回シフト値行列を得て、値割り当て待ちの各要素とは、巡回シフト値行列内の、1行目、2行目、1列目以外の各要素を指す。ステップ304はステップ104とほぼ同じであるので、ここでは説明を省略する。
【0122】
ステップ305において、巡回シフト値行列に基づいて、レギュラQC-LDPCコードのチェック行列を構成する。ステップ305はステップ105とほぼ同じであるので、ここでは説明を省略する。
【0123】
本実施例において、ルーカス数列に基づいて既定条件を満たすK個の数値を得ることで、条件を満たすK個の数値を素早く見つけることができる。
【0124】
上記の各種方法のステップ分けは、単に明確に説明するためになされたものであり、実装時に1つのステップに統合するか、又は一部のステップを複数のステップに再分割することができ、同一の論理的関係が含まれていれば、いずれも本願の保護範囲内に含まれる。アルゴリズム及びプロセスの中核となる設計を変更せずに、そのアルゴリズム又はプロセスに重要でない修正を加えたり、又は重要でない設計を導入したりしたものであれば、いずれも本願の保護範囲内に含まれる。
本願の第四実施例は電子機器に関し、
図7に示すように、少なくとも1つのプロセッサ701と、前記少なくとも1つのプロセッサ701と通信可能に接続されたメモリ702と、を含み、前記メモリ702には前記少なくとも1つのプロセッサ701によって実行できる命令が記憶され、前記命令が前記少なくとも1つのプロセッサ701によって実行されることで、前記少なくとも1つのプロセッサ701によって前記何れか一つ実施例に記載のレギュラQCーLDPCコードの構成方法を実行できる。
【0125】
ここで、メモリ702およびプロセッサ701はバス方式で接続され、バスは任意の数の相互接続されたバスおよびブリッジを含むことができ、バスによって1つまたは複数のプロセッサ701とメモリ702の様々な回路が一つに接続される。バスはまた、周辺機器、電圧安定器、およびパワーマネジメント回路などの様々な他の回路を一つに接続することができるが、これらは当分野で周知なことであるので、本文ではこれ以上説明しない。バスインターフェースは、バスとトランシーバとの間のインターフェースを提供する。トランシーバは、1つの素子であってもよく、複数の受信機および送信機のような複数の素子であってもよく、伝送媒体上で様々な他の装置と通信するための手段を提供する。プロセッサ701によって処理されたデータはアンテナを介して無線媒体で伝送され、さらに、アンテナはまたデータを受信して、プロセッサ701にデータを伝送する。
【0126】
プロセッサ701は、バスの管理および通常の処理を担う以外にも、さらにタイミング、周辺インターフェース、電圧調整、電源管理、およびその他の制御機能を含む様々な機能を提供することができる。一方、メモリ702は、プロセッサ701によって操作を実行するときに使用されるデータを記憶するために使用されてもよい。本願の第五実施例は、コンピュータプログラムが記憶されたコンピュータ読み取り可能な記憶媒体に関する。コンピュータプログラムがプロセッサにより実行された時、上記の方法実施例を実現する。
【0127】
すなわち、当業者であれば、上記の実施例の方法における全部または一部のステップを実施することは、プログラムによって関連するハードウェアに命令することによって実現できることは、理解できるであろう。このプログラムは1つの記憶媒体に記憶され、1つの装置(ワンチップコンピュータ、チップなどであってもよい)またはプロセッサ(processor)に本願の各実施例に記載の方法の全部または一部のステップを実行させるためのいくつかの命令を含む。一方、前述した記憶媒体は、USBメモリ、リムーバブルハードディスク、読み取り専用メモリ(ROM:Read-Only Memory)、ランダムアクセスメモリ(RAM:Random Access Memory)、磁気ディスクまたは光ディスクなど、プログラムコードを記憶できる各種媒体を含む。
【0128】
当業者であれば、上記の各実施例は、本出願を実施するための具体的な実施例であり、実際の応用において、本願の精神及び範囲を逸脱することなく、形式的に及び細部に様々な変更を加えることができることを理解することができる。
【国際調査報告】