(57)【特許請求の範囲】
【請求項１】
データのバーストエラーを訂正するためのインターリーブを行う装置において、
書き込みアドレス発生手段、第1及び第2選択手段から入力される入力系列を格納するためのインターリーブ格納手段と、
前記インターリーブ格納手段のメモリブロックに書き込み動作を行うために連続して入るシンボルが書き込まれるメモリの位置間オフセット(WR_OFF）を求め、実際に書き込まれるアドレス、データ及びメモリ制御信号を発生させるための前記書き込みアドレス発生手段と、
前記書き込みアドレス発生手段から連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF）を求めるために用いられる中間値(MID_OFF)及びスタート信号(cal_start)を受け取り、インターリーブの順に読み出すために必要なメモリ位置間のオフセット(RD_OFF)と、列間置換のために用いられる媒介変数(COL_OFF)とを発生させるためのアドレスオフセット発生手段と、
前記アドレスオフセット発生手段から発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF)ずつ増加させ、前記インターリーブ格納手段を読み出すためにアドレスを作ってメモリ制御信号を発生させるための読み出しアドレス発生手段と、
前記書き込みアドレス発生手段及び読み出しアドレス発生手段から伝達される書き込み動作のために必要な読み出し動作及び実際にインターリーブを行うために必要な読み出し動作の、制御信号及びアドレスの中から一つの該当サイクルに必要な信号を選択するための前記第1及び第2選択手段と、
前記読み出しアドレス発生手段から伝達されるインターリーブを行うための読み出し動作によって発生したメモリの出力信号の中から該当シンボルを選択するための第3選択手段と
を含むことを特徴とするインターリーブを行う装置。
【請求項２】
前記インターリーブを行う装置は、
一つのメモリのみを使用して、インターリーブ順に読み出された位置に、列間置換を考慮して次のデータを記録することを特徴とする請求項1に記載のインターリーブを行う装置。
【請求項３】
前記書き込みアドレス発生手段は、
データレートが増加すれば何ら変化せず、読み出し動作でデータレートが減少すれば、列当りのシンボルの数の差値と、連続して入るシンボルが書き込まれるメモリの位置間オフセット(WR_OFF)との積を利用して、データレートが減る場合に書き込まれない領域を飛ばすための媒介変数(JMP_OFF)を求めることを特徴とする請求項1又は2に記載のインターリーブを行う装置。
【請求項４】
前記書き込みアドレス発生手段は、
前記インターリーブ格納手段に書き込むために入力シンボルが書き込まれるべきアドレスを読み出し、入力シンボルが0であるならば、該当シンボルを0に、残りは1に表し、入力シンボルが1であるならば、該当シンボルを1に、残りは0に表してメモリのデータ幅ほどのマスクを作り、前記インターリーブ格納手段から読み出したデータと入力シンボルとが0であるならば、論理積を行い、入力シンボルが1であるならば、論理和を行ってその結果をメモリに記録して該当シンボルのみ上書きすることを特徴とする請求項3に記載のインターリーブを行う装置。
【請求項５】
データのバーストエラーを訂正するためのディインターリーブを行う装置において、
書き込みアドレス発生手段、第1及び第2選択手段から入力されるフレームのシンボルを格納するためのディインターリーブ格納手段と、
前記ディインターリーブ格納手段のメモリブロックに書き込み動作を行うために連続して入るシンボルが書き込まれるメモリの位置間オフセット(WR_OFF）を求め、実際に書き込まれるアドレス、データ及びメモリ制御信号を発生させるための前記書き込みアドレス発生手段と、
前記書き込みアドレス発生手段から連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF）を求めるために用いられる中間値(MID_OFF)及びスタート信号(cal_start)が入力されると、ディインターリーブの順に読み出すために必要なメモリ位置間のオフセット(RD_OFF)と列間置換とを復元するために必要な媒介変数(COL_OFF)を発生させるためのアドレスオフセット発生手段と、
前記アドレスオフセット発生手段から発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF)ずつ増加させ、前記ディインターリーブ格納手段を読み出すためにアドレスを作ってメモリ制御信号を発生させるための読み出しアドレス発生手段と、
前記書き込みアドレス発生手段及び読み出しアドレス発生手段から伝達される書き込み動作のために必要な読み出し動作と実際インターリーブを行うために必要な読み出し動作の制御信号とアドレスを選択するための前記第1及び第2選択手段と、
前記読み出しアドレス発生手段から伝達されるディインターリーブを行うための読み出し動作によって発生したメモリの出力の中で該当シンボルのみを選択するための第3選択手段と
を含むことを特徴とするディインターリーブを行う装置。
【請求項６】
前記ディインターリーブを行う装置は、
一つのメモリのみを使用してディインターリーブ順に応じて読み出された位置に列間置換を考慮して次のデータを記録することを特徴とする請求項5に記載のディインターリーブを行う装置。
【請求項７】
前記書き込みアドレス発生手段は、
データレートが減る場合に書き込まれない領域を飛ばすための媒介変数(JMP_OFF)を求めることを特徴とする請求項5又は6に記載のディインターリーブを行う装置。
【請求項８】
前記書き込みアドレス発生手段は、
前記インターリーブ格納手段に書き込むために入力シンボルが書き込まれるべきアドレスを読み出し、入力シンボルが0であるならば、該当シンボルを0に、残りは1に表し、入力シンボルが1であるならば、該当シンボルを1に、残りは0に表してメモリのデータ幅のみのマスクを作って前記ディインターリーブ格納手段から読み出したデータと入力シンボルとが0であるならば、論理積を行い、入力シンボルが1であるならば、論理和を行ってその結果をメモリに記録して該当シンボルのみ上書きすることを特徴とする請求項7に記載のディインターリーブを行う装置。
【請求項９】
データのバーストエラーを訂正するために用いられるインターリーブ/ディインターリーブを行う装置を利用したチャネル符号化システムにおいて、
外部から入力されるソースのデータ列を符号化するための符号化手段と、
前記符号化手段から伝達されるデータに対して列間置換を含んだブロックインターリーブを行うためのインターリーブ手段と、
前記インターリーブ手段を介してブロックインターリーブされたデータを変調してチャネルを通して送信する変調手段と、
前記変調手段を介して変調されたブロックインターリーブされたデータを受信して復調するための復調手段と、
前記復調手段を介して復調された、前記ブロックインターリーブされたデータに対して、列間置換を含んだブロックディインターリーブを行うためのディインターリーブ手段と、
前記ディインターリーブ手段を介してディインターリーブされたデータを復号化するための復号化手段とを含み、
前記インターリーブ手段は、
第１書き込みアドレス発生手段、第1及び第2選択手段から入力される入力系列を格納するためのインターリーブ格納手段と、
前記インターリーブ格納手段のメモリブロックに書き込み動作を行うために連続して入るシンボルが書き込まれるメモリの位置間オフセット(WR_OFF）を求め、実際に書き込まれるアドレス、データ及びメモリ制御信号を発生させるための前記第１書き込みアドレス発生手段とを含み、
前記ディインターリーブ手段は、
第２書き込みアドレス発生手段、第３及び第４選択手段から入力されるフレームのシンボルを格納するためのディインターリーブ格納手段と、
前記ディインターリーブ格納手段のメモリブロックに書き込み動作を行うために連続して入るシンボルが書き込まれるメモリの位置間オフセット(WR_OFF）を求め、実際に書き込まれるアドレス、データ及びメモリ制御信号を発生させるための前記第２書き込みアドレス発生手段と
を含むことを特徴とするインターリーブ/ディインターリーブを行う装置を利用したチャネル符号化システム。
【請求項１０】
前記インターリーブ/ディインターリーブを行う装置を利用したチャネル符号化システムは、
データのバーストエラーを訂正するために用いられるインターリーブ/ディインターリーブを行うことにおいて、
基本的に読み出された位置にデータを書き込むようにアドレスを発生させて列間置換を復元し、一つのメモリを使用してインターリーブ/ディインターリーブの順に読み出された位置に列間置換を考慮して次のデータを記録することを特徴とする請求項9に記載のインターリーブ/ディインターリーブを行う装置を利用したチャネル符号化システム。
【請求項１１】
前記インターリーブ手段は、
前記第１書き込みアドレス発生手段から連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF）を求めるために用いられる中間値(MID_OFF)及びスタート信号(cal_start)が入力されると、インターリーブの順に読み出すために必要なメモリ位置間のオフセット(RD_OFF)と、列間置換のために用いられる媒介変数(COL_OFF)とを発生させるためのアドレスオフセット発生手段と、
前記アドレスオフセット発生手段から発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF)ずつ増加させ、前記インターリーブ格納手段を読み出すためにアドレスを作ってメモリ制御信号を発生させるための読み出しアドレス発生手段と、
前記第１書き込みアドレス発生手段及び読み出しアドレス発生手段から伝達される書き込み動作のために必要な読み出し動作及び実際インターリーブを行うために必要な読み出し動作の、制御信号及びアドレスの中でいずれか一つの該当サイクルに必要な信号を選択するための前記第1及び第2選択手段と、
前記読み出しアドレス発生手段から伝達されるインターリーブを行うための読み出し動作によって発生したメモリの出力信号の中で該当シンボルを選択するための第５選択手段と
をさらに含むことを特徴とする請求項9又は10に記載のインターリーブ/ディインターリーブを行う装置を利用したチャネル符号化システム。
【請求項１２】
前記ディインターリーブ手段は、
前記第２書き込みアドレス発生手段から連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF）を求めるために用いられる中間値(MID_OFF)及びスタート信号(cal_start)を受け取り、ディインターリーブの順に読み出すために必要なメモリ位置間のオフセット(RD_OFF)と、列間置換を復元するために必要な媒介変数(COL_OFF)を発生させるためのアドレスオフセット発生手段と、
前記アドレスオフセット発生手段から発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF)ずつ増加させ、前記ディインターリーブ格納手段を読み出すためにアドレスを作ってメモリ制御信号を発生させるための読み出しアドレス発生手段と、
前記第２書き込みアドレス発生手段及び読み出しアドレス発生手段から伝達される書き込み動作のために必要な読み出し動作及び実際にインターリーブを行うために必要な読み出し動作の、制御信号及びアドレスを選択するための前記第３及び第４選択手段と、
前記読み出しアドレス発生手段から伝達されるディインターリーブを行うための読み出し動作によって発生したメモリの出力の中でいずれか一つの該当シンボルのみを選択するための第６選択手段と
をさらに含むことを特徴とする請求項9又は10に記載のインターリーブ/ディインターリーブを行う装置を利用したチャネル符号化システム。
【請求項１３】
データのバーストエラーを訂正するためのインターリーブを行う装置に適用されるインターリーブを行う方法において、
書き込みアドレス発生器及び第1及び第2多重化器から入力される入力系列を格納する第1ステップと、
前記格納されたメモリブロックに書き込み動作を行うために連続して入るシンボルが書き込まれるメモリの位置間オフセット(WR_OFF）を求め、実際書き込まれるアドレス、データ及びメモリ制御信号を発生させる第2ステップと、
前記発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF）を求めるために用いられる中間値(MID_OFF)及びスタート信号(cal_start)を入力されると、インターリーブの順に読み出すために必要なメモリ位置間のオフセット(RD_OFF)と、列間置換のために用いられる媒介変数(COL_OFF)とを発生させる第3ステップと、
前記発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF)ずつ増加させ、前記記録されたインターリーバRAMを読み出すためにアドレスを作ってメモリ制御信号を発生させる第4ステップと、
前記書き込みアドレス発生器及び読み出しアドレス発生器から伝達される書き込み動作のために必要な読み出し動作及び実際インターリーブを行うために必要な読み出し動作の、制御信号及びアドレスの中でいずれか一つの該当サイクルに必要な信号を各々選択する第5ステップと、
前記読み出しアドレス発生器から伝達されるインターリーブを行うための読み出し動作によって発生したメモリの出力信号の中で該当シンボルを選択する第6ステップとを含むことを特徴とするインターリーブを行う方法。
【請求項１４】
前記インターリーブを行う方法は、
一つのメモリのみを使用してインターリーブ順に応じて読み出された位置に列間置換を考慮して次のデータを記録することを特徴とする請求項13に記載のインターリーブを行う方法。
【請求項１５】
前記第2ステップは、
データレートが増加する場合には何ら変化なしに読み出し動作を行い、データレートが減少する場合には、列当りのシンボル数の差値とWR_OFFとの積を媒介変数として以前フレームに比べてシンボルが減って実際書き込まれないメモリの領域を飛ばすことを特徴とする請求項13又は14に記載のインターリーブを行う方法。
【請求項１６】
前記第2ステップは、
インターリーブを行うための媒介変数(i=0；WR_OFF=1；MID_OFF=C；MAX_B=B；JMP_OFF=0)を初期化する第7ステップと、前記媒介変数が初期化されれば、第1番目のフレームに対する信号(frame_sync)を待つ第8ステップと、
前記第1番目の列のスタートを知らせるフレームに対する信号(frame_sync)が入力されると第1番目のシンボルを記録するためにインターリーバRAMから該当アドレスを読み出す第9ステップと、
前記インターリーバRAMから読み出したデータと"wr_strobe"信号を確認した後、入力(input)信号により作られたマスクを用いて該当シンボルのみ上書きするために入力信号に応じて論理和または論理積を行って前記メモリブロックのアドレスを記録する第10ステップと、
前記読み出したフレームに対する信号(frame_sync）の第２番目のシンボルを記録するために、まず該当アドレスを読み出し、"wr_strobe"信号を確認した後、入力された第２番目の入力信号により作られたマスクを用いて、該当シンボルのみ上書きするために、入力信号に応じて論理和または論理積を行って前記インターリーバRAMに記録する第11ステップと、
前記書き込みアドレス発生器を介して一フレームのシンボルを全部記録した後、読み出しアドレス発生器でインターリーブを行っても良いという信号(rd_start)を発生させる第12ステップと
を含むことを特徴とする請求項15に記載のインターリーブを行う方法。
【請求項１７】
前記第3ステップは、
前記初期化された媒介変数の中で、MID_OFFが入力されるとMID_OFFがフレーム内のシンボル数であるNより小さいかを確認する第7ステップと、
前記第7ステップの確認の結果、MID_OFFがNより大きいか同じであるならば、所定の値に応じて"modulo"演算を行ってRD_OFFを求め、MID_OFFがNより小さいとRD_OFF がMID_OFFとなる第8ステップと、
前記得られた値によって列間置換を行うかを判断する第9ステップと、
前記第9ステップの判断の結果、列間置換を行わないと、COL_OFFが0となり、列間置換が行われると、WR_OFF*DIFF_COL_IDXを利用してCOL_OFFを求める第10ステップと、
前記得られたCOL_OFF値がNより大きいかを確認する第11ステップと、
前記COL_OFF値がNより大きいか同じであるならば、COL_OFFmod(N-1)のように"modulo"演算を行う第12ステップと
を含むことを特徴とする請求項13又は14に記載のインターリーブを行う方法。
【請求項１８】
前記第4ステップは、
前記書き込みアドレス発生器及びオフセット発生器に利用されたシンボルをインターリーブ順に読み出すために、インターリーブを行っても良いという信号(rd_start)が発生すれば、前記RD_OFFをラッチしてインターリーブするシンボルの数をカウントするための変数であるjを0に初期化する第7ステップと、
前記初期化後に、書き込み動作が行われている最中であるかを確認して読み出し動作が行われている最中であれば、直ちにメモリをインターリーブの順に読み出し、書き込み動作が行われている最中であれば、rd_strobe信号が1であるかを確認する第8ステップと、
前記第8ステップの確認の結果、rd_strobe信号が1でなければ、rd_strobe信号が1となるまで繰り返し行い、rd_strobe信号が1であれば、メモリをインターリーブの順に読み出す第9ステップと、
前記メモリをインターリーブの順に読み出した後、フレームに該当するシンボルを全部インターリーブの順に読み出したかを確認するために、jとN-1とを比較する第10ステップと、
前記第10ステップの比較の結果、jがN-1より小さければ、次のシンボルを読み出すために、RD_IDXをRD_OFFだけ増加させ、jを1だけ増加させた後、列が変るかを確認するために、jをB-1でmodulo演算を行う第11ステップと、
前記演算を行った値が'0'であるならば、RD_IDXにCOL_OFFだけ増加させた後、前記第14ステップに進み、結果値が’０’ではなければ、直ちに前記第8ステップに進む第12ステップと
を含むことを特徴とする請求項13又は14に記載のインターリーブを行う方法。
【請求項１９】
データのバーストエラーを訂正するためのディインターリーブを行う装置に適用されるディインターリーブを行う方法において、
書き込みアドレス発生器及び第1及び第2多重化器から入力されるフレームのシンボルを記録する第1ステップと、
前記記録されたメモリブロックに書き込み動作を行うために連続して入るシンボルが書き込まれるメモリの位置間オフセット(WR_OFF）を求め、実際書き込まれるアドレス、データ及びメモリ制御信号を発生させる第2ステップと、
前記発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF）を求めるために用いられる中間値(MID_OFF)及びスタート信号(cal_start)が入力されると、ディインターリーブの順に読み出すために必要なメモリ位置間のオフセット(RD_OFF)と列間置換を復元するために必要な媒介変数(COL_OFF)とを発生させる第3ステップと、
前記発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF)ずつ増加させ、前記記録されたディインターリーバRAMを読み出すためにアドレスを作ってメモリ制御信号を発生させる第4ステップと、
前記書き込みアドレス発生器及び読み出しアドレス発生器から伝達される書き込み動作のために必要な読み出し動作及び実際インターリーブを行うために必要な読み出し動作の。制御信号及びアドレスを選択する第5ステップと、
前記読み出しアドレス発生器から伝達されるディインターリーブを行うための読み出し動作によって発生したメモリの出力の中で該当シンボルのみを選択する第6ステップとを含むことを特徴とするディインターリーブを行う方法。
【請求項２０】
前記ディインターリーブを行う方法は、
一つのメモリのみを使用して、ディインターリーブ順に読み出された位置に列間置換を考慮して次のデータを記録することを特徴とする請求項19に記載のディインターリーブを行う方法。
【請求項２１】
前記第2ステップは、
ディインターリーブを行うための媒介変数(i=0；WR_OFF=1；MAX_B=B；JMP_0)を初期化する第7ステップと、
前記媒介変数が初期化されれば、最初フレームに対する信号(frame_sync)を待つ第8ステップと、
前記第1番目の列のスタートを知らせるフレームに対する信号(frame_sync)が入力されると、第1番目のシンボルを記録するためにディインターリーバRAMから該当アドレスを読み出す第9ステップと、
前記ディインターリーバRAMから読み出したデータと"wr_strobe"信号を確認した後に、入力(input)信号により作られたマスクを用いて該当シンボルのみ上書きするために入力信号に応じて論理和、または論理積を行って前記ディインターリーバRAMに記録する第10ステップと、
前記読み出したフレームに対する信号の第２番目のシンボルを記録するために、該当アドレスを読み出し、"wr_strobe"信号を確認した後に、入力された第２番目の入力信号により作られたマスクを用いて該当シンボルのみ上書きするために、入力信号に応じて論理和、または論理積を行って前記ディインターリーバRAMに記録する第11ステップと、
前記書き込みアドレス発生器を通して一フレームのシンボルを全部記録した後、読み出しアドレス発生器からインターリーブを行っても良いという信号(rd_start)とアドレスオフセット発生器から伝達されたRD_OFFを発生させる第12ステップと
を含むことを特徴とする請求項19又は20に記載のディインターリーブを行う方法。
【請求項２２】
前記第10ステップは、
現在入力されるシンボルが書き込まれる位置を含んだアドレスをまず読み出してその位置のデータのみ現在入力されたシンボルで上書きするために、該当アドレスを読み出し、"wr_strobe"信号を確認した後に、マスクを作る場合に、入力シンボルが0であれば、そのシンボルが書き込まれる位置を0とし、残りは1にして読み出したデータと論理積を行い、入力シンボルが1であれば、そのシンボルが書き込まれる位置を1とし、残りは0にして読み出したデータと論理和を行った結果をメモリの該当位置に書き込むことを特徴とする請求項21に記載のディインターリーブを行う方法。
【請求項２３】
前記第3ステップは、
前記初期化された媒介変数の中で、MID_OFFが入力されるとMID_OFFがフレーム内のシンボル数であるNより小さいかを確認する第7ステップと、
前記第7ステップの確認の結果、MID_OFFがNより大きいか、同じであれば、所定の値に応じて"modulo"演算を行ってRD_OFFを求め、MID_OFFがNより小さければ、RD_OFF がMID_OFFになる第8ステップと、
前記得られた値に応じて列間置換を行うかを判断する第9ステップと、前記第9ステップの判断の結果、列間置換を行わないと、COL_OFFが0となり、列間置換が行われば、RD_OFF*DIFF_COL_IDXを利用してCOL_OFFを求める第10ステップと、
前記得られたCOL_OFF値がNより大きいかを確認する第11ステップと、前記COL_OFF値がNより大きいか、同じであれば、COL_OFF mod(N-1)のように"modulo"演算を行う第12ステップと
を含むことを特徴とする請求項19又は20に記載のディインターリーブを行う方法。
【請求項２４】
前記第4ステップは、
前記書き込みアドレス発生器及びオフセット発生器に利用されたシンボルをディインターリーブ順に読み出すためにディインターリーブを行っても良いという信号(rd_start)が発生すれば、前記RD_OFFをラッチしてディインターリーブするシンボルの数をカウントするための変数であるjを0に初期化する第7ステップと、前記初期化後に、書き込み動作が行われているかを確認して読み出し動作が行われていれば、メモリをディインターリーブの順に読み出し、書き込み動作が行われていれば、rd_strobe信号が1であるかを確認する第8ステップと、
前記第8ステップの確認の結果、rd_strobe信号が1でなければ、rd_strobe信号が1となるまで繰り返し行い、rd_strobe信号が1であれば、メモリをディインターリーブの順に読み出す第9ステップと、
前記メモリをディインターリーブの順に読み出した後、フレームに該当するシンボルを全部ディインターリーブの順に読み出したかを確認するために、jとN-1とを比較する第10ステップと、
前記第10ステップの比較の結果、jがN-1より小さければ、次のシンボルを読み出すために、RD_IDXをRD_OFFだけ増加させ、jを1だけ増加させた後に、前記第8ステップから繰り返し行う第11ステップと
を含むことを特徴とする請求項19又は20に記載のディインターリーブを行う方法。
【請求項２５】
データのバーストエラーを訂正するためのインターリーブ/ディインターリーブを行う装置に適用されるインターリーブ/ディインターリーブを行う方法において、
インターリーブ/ディインターリーブを行うためのソースデータ(インターリーブ)のフレーム(ブロック)、またはインターリーブされたデータ(ディインターリーブ)フレーム(ブロック)を処理するために、インターリーブ/ディインターリーブ処理単位別にメモリに格納するステップと、
格納されたフレームを以前フレームであるとすれば、以前フレームをインターリーブ/ディインターリーブする間に再び次のフレームに該当するシンボルが入力されて、これを格納することができる前記メモリを必要とし、次のフレームに該当するシンボルのために前記メモリを追加せず、以前フレームのシンボルが読み出された位置に応じて記録するステップを含み、
前記格納するステップは、
書き込みアドレス発生手段、第１及び第２多重化器から入力される入力系列またはフレームのシンボルを前記メモリに格納する第１ステップと、
前記格納されたメモリブロックに書き込み動作を行うために連続してはいるシンボルが書き込まれるメモリの位置間オフセット(WR_OFF）を求め、実際に書き込まれるアドレス、データ及びメモリ制御信号を発生する第２ステップと、
を含むことを特徴とするインターリーブ/ディインターリーブを行う方法。
【請求項２６】
データのバーストエラーを訂正し、一つのメモリのみを使用してインターリーブ順に応じて読み出された位置に列間置換を考慮して次のデータを記録するために、プロセッサを備えたインターリーブを行う装置に、書き込みアドレス発生器及び第1及び第2多重化器から入力される入力系列を格納する第1機能と、
前記格納されたメモリブロックに書き込み動作を行うために連続して入るシンボルが書き込まれるメモリの位置間オフセット(WR_OFF）を求め、実際書き込まれるアドレス、データ及びメモリ制御信号を発生させる第2機能と、
前記発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF）を求めるために用いられる中間値(MID_OFF)及びスタート信号(cal_start)が入力されると、インターリーブの順に読み出すために、必要なメモリ位置間のオフセット(RD_OFF)と列間置換のために用いられる媒介変数(COL_OFF)とを発生させる第3機能と、
前記発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF)ずつ増加させ、前記格納されたインターリーバRAMを読み出すためにアドレスを作ってメモリ制御信号を発生させる第4機能と、
前記書き込みアドレス発生器及び読み出しアドレス発生器から伝達される書き込み動作のために必要な読み出し動作及び実際インターリーブを行うために必要な読み出し動作の、制御信号及びアドレスの中で該当サイクルに必要な信号を各々選択する第5機能と、
前記読み出しアドレス発生器から伝達されるインターリーブを行うための読み出し動作によって発生したメモリの出力信号の中で該当シンボルを選択する第6機能と
を実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項２７】
データのバーストエラーを訂正し、一つのメモリのみを使用してディインターリーブ順に応じて読み出された位置に列間置換を考慮して次のデータを記録するために、プロセッサを備えたディインターリーブを行う装置に、書き込みアドレス発生器及び第1及び第2多重化器から入力されるフレームのシンボルを格納する第1機能と、
前記格納されたメモリブロックに書き込み動作を行うために、連続して入るシンボルが書き込まれるメモリの位置間オフセット(WR_OFF）を求め、実際書き込まれるアドレス、データ及びメモリ制御信号を発生させる第2機能と、
前記発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF）を求めるために用いられる中間値(MID_OFF)及びスタート信号(cal_start)が入力されると、ディインターリーブの順に読み出すために必要なメモリ位置間のオフセット(RD_OFF)と列間置換を復元するために必要な媒介変数(COL_OFF)とを発生させる第3機能と、
前記発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF)ずつ増加させ、前記格納されたディインターリーバRAMを読み出すためにアドレスを作ってメモリ制御信号を発生させる第4機能と、
前記書き込みアドレス発生器及び読み出しアドレス発生器から伝達される書き込み動作のために必要な読み出し動作と実際インターリーブを行うために必要な読み出し動作の制御信号とアドレスを選択する第5機能と、
前記読み出しアドレス発生器から伝達されるディインターリーブを行うための読み出し動作によって発生したメモリの出力の中で該当シンボルのみを選択する第6機能と
を実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、無線通信システムにおけるアドレス発生器を含んだインターリーブ/ディインターリーブを行う装置、その方法、それを利用したチャネル符号化システム及びその方法を実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体に関し、特に、移動通信のチャネル環境で発生するデータのバーストエラーを訂正するために用いられるインターリーブ/ディインターリーブの運用において、一つのメモリを使用して基本的に読み出された位置にデータを書き込むようにアドレスを発生させて列間置換を含んだインターリーブ/ディインターリーブを行う装置、その方法、それを利用したチャネル符号化システム及びその方法を実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体に関する。
【０００２】
すなわち、本発明は、コード分割多重接続方式(CDMA)の移動通信システムを具現するのに必須的なインターリーブとディインターリーブとを具現して効率的かつ正確な信号伝送のために与えられた環境に強い応用技術を使用する。特に、移動通信では、多経路によるマルチフェ−ジングによりバーストエラーが発生するため、性能低下を防止するために符号化とインターリーブとを使用すれば、バーストエラーをランダムエラーに変える効率的な伝送が可能である。
【０００３】
【従来の技術】
次世代移動通信システム(IMT(International Mobile Telecommunication)-2000)におけるインターリーブ/ディインターリーブを行う装置は、伝送時間間隔(TTI)でインターリーブ/ディインターリーブを行い、最大伝送率は2Mbpsに達する。このとき、伝送時間間隔は、10〜80msで構成されるので、データレート(Data Rate)が384Kbpsであると仮定するとしても伝送時間間隔が80msであるならば、1次ディインターリーブのためのメモリの大きさは、約553Kbitsに達することとなる。このため、従来に用いられた方式で読み出しと書き込み用にRAMを二つ使用することとなれば、ディインターリーブを行うために要求されるメモリの大きさは、1Mbitsを超過することとなって、チップ面積の大部分を占めるようになることが分かる。また、ここに２次ディインターリーブと、1次および２次インターリーブのためのメモリまで必要であるので、高いデータレートを支援するモデムを一つのチップにするためには、メモリの大きさを減らすことが必須的であると言える。
【０００４】
もう一つの特徴は、ブロックインターリーブが行われる前に、列間置換を行うということである。これまでは単純ブロックインターリーブを一つのメモリを使用して具現することに対する議論はあったが、このように、列間置換を先行してブロックインターリーブを行う構造に対する議論はなかった。
【０００５】
以下、従来のインターリーブ/ディインターリーブ構造に対する内容を説明する。第1は、三つのメモリを使用する構造として、入力されるデータを格納するために一つのメモリを使用し、インターリーブ/ディインターリーブの順序、すなわち、第2番目のメモリを読み出すためのアドレスを格納するために、第２番目のメモリを使用し、インターリーブ/ディインターリーブした結果を格納するために、第３番目のメモリを使用する構造である。
【０００６】
第2は、第1の構造を改善したものとして、インターリーブ/ディインターリーブの順序をメモリに格納する代わりに、計数器と適切な演算を通してアドレスを発生させる構造である。したがって、この構造は、二つのメモリを使用するのにメモリの用途に応じて大きく二つの構造に区分することができる。その第1は、入力データを格納するために、そしてインターリーブ/ディインターリーブした結果を格納するために二つのメモリを使用することであり、第2は、まず一方のメモリに入力データを全部書き込んだ後、インターリーブ/ディインターリーブの順で読み出す。このとき、入力されるデータブロックは、他方のメモリに書き込む。すなわち、一方のメモリが書き込むために用いられるとき、他方は読み出すために用いられるという動作が交互に行われる構造である。
【０００７】
第3は、一つのメモリのみを使用する構造として、入力されたソースデータのメモリを2次元で接近させて、一回は行方向に書き込み列方向に読み出し、もう一回は、列方向に書き込み、行方向に読み出すようにする構造である。
【０００８】
上記のような内容中で、第1と第２の構造は、機能具現は容易であるが、384kbpsから2Mbpsに達する高いデータレートが要求される応用で要求されるメモリの大きさが絶対的であるので、大きさと電力消耗が最も重要な要素である端末器への適用では適切ではないが、第３の構造は効率的な構造といえる。
【０００９】
【発明が解決しようとする課題】
しかし、次世代移動通信システム(IMT-2000)におけるインターリーブを行う方法は、単純ブロックインターリーブを行う前に列間置換を行うので、単に行と列とを交互に書き込んで、読み出す方式で一つのメモリを使用してその動作を完成することができる。なぜならば、列間置換が発生するので、従来の単純ブロックインターリーブのように、行と列の2次元的な構造ではない、行と列の構造に一つの行を読み出し、書き込む非線型的な順序を従うべきであるためである。
【００１０】
従来のインターリーブとディインターリーブの方法は、プロセシングタイミングを考慮して二つのメモリを使用して片方のメモリに入力データを格納する間に他方のメモリで記録されたデータを読み出す方法を使用する。この方法は、データレートが低い時には、メモリの大きさが小さいので面積や電力消耗の増加量に比べて充分なプロセシングタイミングが得られるという長所を強調することができる。しかし、サービスが多様となり、それによって伝送するデータが増えることによって、これに比例して大きくなるメモリの大きさを考慮すると、二つのメモリを使用するということはこれ以上長所となり得ない。しかも、IMT-2000非同期式モデムの規格上、1次インターリーバは、伝送時間間隔で動作するのに最大80msまで支援するようになっているので、これを収容するためには、メモリの大きさがデータレートと伝送時間間隔に比例して大きくなるべきである。このため、二つのメモリを使用するということは、チップを複数個に作るか、外部のメモリを使用するしかないという結論に達する。したがって、モデムを一つのチップで具現できるようにインターリーブとディインターリーブのためのメモリの大きさを減らすことが極めて重要である。また、この方法は、従来のインターリーブを行う方法と異なって、列間置換を先行するので、メモリを一つのみ使用して、一回目は行を中心に書きこんで列を中心に読み出し、次は列を中心に書き込むという構造はIMT-2000システムに適用できない。
【００１１】
このようなことから見ると、一つのメモリを使用してインターリーブとディインターリーブとを行うようにして、メモリの大きさを減らすことによって、高いデータレートを要求するサービスが支援可能なモデムの一つのチップ化が可能にする方策が必要とされる。
【００１２】
本発明は、上記した要求に応えるために案出されたものであって、データのバーストエラーを訂正するために用いられるインターリーブ/ディインターリーブを行うことにおいて、基本的に読み出された位置にデータを書き込むようにアドレスを発生させて、列間置換を復元し、一つのメモリを使用してインターリーブ/ディインターリーブの順に応じて読み出された位置に列間置換を考慮して次のデータを記録するアドレス発生器を含んだインターリーブ/ディインターリーブを行う装置、その方法、それを利用したチャネル符号化システム及びその方法を実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体を提供することにその目的がある。
【００１３】
【課題を解決するための手段】
上記目的を達成するため、本発明は、データのバーストエラーを訂正するためのインターリーブを行う装置において、書き込みアドレス発生手段、第1及び第2選択手段から入力される入力系列を格納するためのインターリーブ格納手段と、前記インターリーブ格納手段のメモリブロックに書き込み動作を行うために連続して入るシンボルが書き込まれるメモリの位置間オフセット(WR_OFF）を求め、実際に書き込まれるアドレス、データ及びメモリ制御信号を発生させるための前記書き込みアドレス発生手段と、前記書き込みアドレス発生手段から連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF）を求めるために用いられる中間値(MID_OFF)及びスタート信号(cal_start)を受け取り、インターリーブの順に読み出すために必要なメモリ位置間のオフセット(RD_OFF)と、列間置換のために用いられる媒介変数(COL_OFF)とを発生させるためのアドレスオフセット発生手段と、前記アドレスオフセット発生手段から発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF)ずつ増加させ、前記インターリーブ格納手段を読み出すためにアドレスを作ってメモリ制御信号を発生させるための読み出しアドレス発生手段と、前記書き込みアドレス発生手段及び読み出しアドレス発生手段から伝達される書き込み動作のために必要な読み出し動作及び実際にインターリーブを行うために必要な読み出し動作の、制御信号及びアドレスの中から一つの該当サイクルに必要な信号を選択するための前記第1及び第2選択手段と、前記読み出しアドレス発生手段から伝達されるインターリーブを行うための読み出し動作によって発生したメモリの出力信号の中から該当シンボルを選択するための第3選択手段とを含むことを特徴とする。
【００１４】
また、本発明は、データのバーストエラーを訂正するためのディインターリーブを行う装置において、書き込みアドレス発生手段、第1及び第2選択手段から入力されるフレームのシンボルを格納するためのディインターリーブ格納手段と、前記ディインターリーブ格納手段のメモリブロックに書き込み動作を行うために連続して入るシンボルが書き込まれるメモリの位置間オフセット(WR_OFF）を求め、実際に書き込まれるアドレス、データ及びメモリ制御信号を発生させるための前記書き込みアドレス発生手段と、前記書き込みアドレス発生手段から連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF）を求めるために用いられる中間値(MID_OFF)及びスタート信号(cal_start)が入力されると、ディインターリーブの順に読み出すために必要なメモリ位置間のオフセット(RD_OFF)と列間置換とを復元するために必要な媒介変数(COL_OFF)を発生させるためのアドレスオフセット発生手段と、前記アドレスオフセット発生手段から発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF)ずつ増加させ、前記ディインターリーブ格納手段を読み出すためにアドレスを作ってメモリ制御信号を発生させるための読み出しアドレス発生手段と、前記書き込みアドレス発生手段及び読み出しアドレス発生手段から伝達される書き込み動作のために必要な読み出し動作と実際インターリーブを行うために必要な読み出し動作の制御信号とアドレスを選択するための前記第1及び第2選択手段と、前記読み出しアドレス発生手段から伝達されるディインターリーブを行うための読み出し動作によって発生したメモリの出力の中で該当シンボルのみを選択するための第3選択手段とを含むことを特徴とする。
【００１５】
また、本発明は、データのバーストエラーを訂正するために用いられるインターリーブ/ディインターリーブを行う装置を利用したチャネル符号化システムにおいて、外部から入力されるソースのデータ列を符号化するための符号化手段と、前記符号化手段から伝達されるデータに対して列間置換を含んだブロックインターリーブを行うためのインターリーブ手段と、前記インターリーブ手段を介してブロックインターリーブされたデータを変調してチャネルを通して送信する変調手段と、前記変調手段を介して変調されたブロックインターリーブされたデータを受信して復調するための復調手段と、前記復調手段を介して復調された、前記ブロックインターリーブされたデータに対して、列間置換を含んだブロックディインターリーブを行うためのディインターリーブ手段と、前記ディインターリーブ手段を介してディインターリーブされたデータを復号化するための復号化手段とを含むことを特徴とする。
【００１６】
また、本発明は、データのバーストエラーを訂正するためのインターリーブを行う装置に適用されるインターリーブを行う方法において、書き込みアドレス発生器及び第1及び第2多重化器から入力される入力系列を格納する第1ステップと、前記格納されたメモリブロックに書き込み動作を行うために連続して入るシンボルが書き込まれるメモリの位置間オフセット(WR_OFF）を求め、実際書き込まれるアドレス、データ及びメモリ制御信号を発生させる第2ステップと、前記発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF）を求めるために用いられる中間値(MID_OFF)及びスタート信号(cal_start)を入力されると、インターリーブの順に読み出すために必要なメモリ位置間のオフセット(RD_OFF)と、列間置換のために用いられる媒介変数(COL_OFF)とを発生させる第3ステップと、前記発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF)ずつ増加させ、前記記録されたインターリーバRAMを読み出すためにアドレスを作ってメモリ制御信号を発生させる第4ステップと、前記書き込みアドレス発生器及び読み出しアドレス発生器から伝達される書き込み動作のために必要な読み出し動作及び実際インターリーブを行うために必要な読み出し動作の、制御信号及びアドレスの中でいずれか一つの該当サイクルに必要な信号を各々選択する第5ステップと、前記読み出しアドレス発生器から伝達されるインターリーブを行うための読み出し動作によって発生したメモリの出力信号の中で該当シンボルを選択する第6ステップとを含むことを特徴とする。
【００１７】
また、本発明は、データのバーストエラーを訂正するためのディインターリーブを行う装置に適用されるディインターリーブを行う方法において、書き込みアドレス発生器及び第1及び第2多重化器から入力されるフレームのシンボルを記録する第1ステップと、前記記録されたメモリブロックに書き込み動作を行うために連続して入るシンボルが書き込まれるメモリの位置間オフセット(WR_OFF）を求め、実際書き込まれるアドレス、データ及びメモリ制御信号を発生させる第2ステップと、前記発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF）を求めるために用いられる中間値(MID_OFF)及びスタート信号(cal_start)が入力されると、ディインターリーブの順に読み出すために必要なメモリ位置間のオフセット(RD_OFF)と列間置換を復元するために必要な媒介変数(COL_OFF)とを発生させる第3ステップと、前記発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF)ずつ増加させ、前記記録されたディインターリーバRAMを読み出すためにアドレスを作ってメモリ制御信号を発生させる第4ステップと、前記書き込みアドレス発生器及び読み出しアドレス発生器から伝達される書き込み動作のために必要な読み出し動作及び実際インターリーブを行うために必要な読み出し動作の。制御信号及びアドレスを選択する第5ステップと、前記読み出しアドレス発生器から伝達されるディインターリーブを行うための読み出し動作によって発生したメモリの出力の中で該当シンボルのみを選択する第6ステップとを含むことを特徴とする。
【００１８】
また、本発明は、データのバーストエラーを訂正するためのインターリーブ/ディインターリーブを行う装置に適用されるインターリーブ/ディインターリーブを行う方法において、インターリーブ/ディインターリーブを行うためのソースデータ(インターリーブ)のフレーム(ブロック)、またはインターリーブされたデータ(ディインターリーブ)フレーム(ブロック)を処理するために、インターリーブ/ディインターリーブ処理単位別にメモリに格納し、格納されたフレームを以前フレームであるとすれば、以前フレームをインターリーブ/ディインターリーブする間に再び次のフレームに該当するシンボルが入力されて、これを格納することができる前記メモリを必要とし、次のフレームに該当するシンボルのために前記メモリを追加せず、以前フレームのシンボルが読み出された位置に応じて記録することを特徴とする。
【００１９】
また、本発明は、データのバーストエラーを訂正し、一つのメモリのみを使用してインターリーブ順に応じて読み出された位置に列間置換を考慮して次のデータを記録するために、プロセッサを備えたインターリーブを行う装置に、書き込みアドレス発生器及び第1及び第2多重化器から入力される入力系列を格納する第1機能と、前記格納されたメモリブロックに書き込み動作を行うために連続して入るシンボルが書き込まれるメモリの位置間オフセット(WR_OFF）を求め、実際書き込まれるアドレス、データ及びメモリ制御信号を発生させる第2機能と、前記発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF）を求めるために用いられる中間値(MID_OFF)及びスタート信号(cal_start)が入力されると、インターリーブの順に読み出すために、必要なメモリ位置間のオフセット(RD_OFF)と列間置換のために用いられる媒介変数(COL_OFF)とを発生させる第3機能と、前記発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF)ずつ増加させ、前記格納されたインターリーバRAMを読み出すためにアドレスを作ってメモリ制御信号を発生させる第4機能と、前記書き込みアドレス発生器及び読み出しアドレス発生器から伝達される書き込み動作のために必要な読み出し動作及び実際インターリーブを行うために必要な読み出し動作の、制御信号及びアドレスの中で該当サイクルに必要な信号を各々選択する第5機能と、前記読み出しアドレス発生器から伝達されるインターリーブを行うための読み出し動作によって発生したメモリの出力信号の中で該当シンボルを選択する第6機能とを実現させるためのプログラムを記録した記録媒体を提供する。
【００２０】
また、本発明は、データのバーストエラーを訂正し、一つのメモリのみを使用してディインターリーブ順に応じて読み出された位置に列間置換を考慮して次のデータを記録するために、プロセッサを備えたディインターリーブを行う装置に、書き込みアドレス発生器及び第1及び第2多重化器から入力されるフレームのシンボルを格納する第1機能と、前記格納されたメモリブロックに書き込み動作を行うために、連続して入るシンボルが書き込まれるメモリの位置間オフセット(WR_OFF）を求め、実際書き込まれるアドレス、データ及びメモリ制御信号を発生させる第2機能と、前記発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF）を求めるために用いられる中間値(MID_OFF)及びスタート信号(cal_start)が入力されると、ディインターリーブの順に読み出すために必要なメモリ位置間のオフセット(RD_OFF)と列間置換を復元するために必要な媒介変数(COL_OFF)とを発生させる第3機能と、前記発生した信号を連続して読み出されるシンボルのメモリ位置間のオフセット(RD_OFF)ずつ増加させ、前記格納されたディインターリーバRAMを読み出すためにアドレスを作ってメモリ制御信号を発生させる第4機能と、前記書き込みアドレス発生器及び読み出しアドレス発生器から伝達される書き込み動作のために必要な読み出し動作と実際インターリーブを行うために必要な読み出し動作の制御信号とアドレスを選択する第5機能と、前記読み出しアドレス発生器から伝達されるディインターリーブを行うための読み出し動作によって発生したメモリの出力の中で該当シンボルのみを選択する第6機能とを実現させるためのプログラムを記録した記録媒体を提供する。
【００２１】
本発明で、列間置換を復元し、一つのメモリを使用する構造は、基本的に一つのメモリを使用してインターリーブ/ディインターリーブの順に応じて読み出された位置に列間置換を考慮して次のデータを記録する方法を使用するが、以下の三つの内容に重点を置いて説明すれば、第1に、読み出される順に応じてその位置に書き込み動作が行われるので、次に読み出す順序と変位に対する演算が必要であり、また列間置換を復元するためのオフセットを計算する演算が必要であり、第2に、プロセシングタイミングを最大限確保する方法として、第1番目でオフセットを計算するために必要な演算を早く行うことのできるハードウェアの構造と同時に行うことのできる演算を並列に行うようにする構造が必要であり、第3に、データレートが変わる場合、すなわち、入力されるデータブロックの大きさが変わる場合に対する考慮が必要であることを特徴とする。
【００２２】
【発明の実施の形態】
以下、当業者が本発明を容易に実施できるように、本発明の好ましい実施の形態を、図面を参照しながら説明する。
【００２３】
図１は、本発明に係るインターリーブを使用するチャネル符号化システムの構成例示図である。
【００２４】
図１に示すように、移動通信チャネルを通して進行する信号は、フェ−ジングの影響を受けることとなる。エラー訂正アルゴリズムを使用すれば、適正信号電力を使用してフェ−ジングによるエラーを復元することができる。すなわち、大部分のエラー訂正アルゴリズムは、ランダムエラーに強い。しかし、バーストエラー発生時エラー訂正の効率は大きく低下する。このような特徴を考慮してチャネルにより発生するバーストエラーを防止するために、符号化されたデータ列を受けてそれを予め混和し、受信側では、デコーディングする前に受信したデータ列を逆混和する動作を行ってランダムエラー化させることがインターリーブとディインターリーブの主な機能である。
【００２５】
したがって、インターリーブとディインターリーブを使用したチャネル符号化システムは、図１で示すように、入力されるソースのデータ列が畳み込み符号化やターボ符号化を使用する符号化器110を通して符号化され、インターリーバ120を通してインターリーブが行われ、変調器130を通して適切な方法で変調されてチャネル140を介して送信される。すると、送信されたデータを受信して復調器150を介して復調され、ディインターリーバ160でディインターリーブを行った後に、復号化器170を介して送信側のソースデータを復元する。
【００２６】
図２は、本発明に利用される単純ブロックインターリーブを行う方法の説明図である。
【００２７】
図２に示すように、ソースシンボル210では、インターリーブ前のシンボルをS0、S1、S2、S3、…SN-1で示す。書き込みオペレーション(Write Operation)220の矢印は、ソースシンボル210を行を基準として記録した動作を示し、その結果のソースシンボル210を2次元の配列で示した。この場合、列の数をCで、行の数をBで仮定すれば、"N= C * B"の関係が成立する。その後、インターリーブを行うのに列を中心に読み出せば良い。読み出す順を読み出しオペレーション(Read Operation)230の矢印で示し、インターリーブを行った後のシンボルの順序をインターリーブされたシンボル240に示す。
【００２８】
前述したように、次世代移動通信システム(IMT-2000)では、このようなブロックインターリーブを行う前に列間置換を行う。すなわち、インターリーブのために列を中心に読み出すが、読み出す列の順序が順次的でなく、予め定義された順序に従う。
【００２９】
これに対するより詳細な説明のために、以下では、次世代移動通信システム(IMT-2000)で用いられるインターリーブを行う方法について説明する。
【００３０】
IMT-2000では、以下のように２種類のインターリーブを行う方法を使用するが、本発明では、その中で1次インターリーバの特徴を説明することにする。
【００３１】
1)TTIによって次の表1で列の数を選択する。
【００３２】
2)行の数は入力される全体ビット数を列の数で割る。
【００３３】
3)決定された行と列に合せて行を基準に入力系列を記録する。
【００３４】
4)以下に示す表１の1次インターリーブのための列間置換パターンを、表に示すように列間置換を行った順に読み出す。
【００３５】
【表１】
0004728500.tif 000002
【００３６】
上記の表１に示すように、一般的なブロックインターリーブの方法を行う前に列間置換を行う。すなわち、TTIが40msである場合に、インターリーブのために読み出される列の順は、0番目列、2番目列、1番目列、そして最後に3番目列となる。
【００３７】
一方、本発明で用いられる用語と媒介変数を定義すれば、以下の通りである。
-フレーム:一回のインターリーブ/ディインターリーブを行うためのデータブロックの単位。
-N:一フレームに含まれたシンボル数、表1では、TTI当りのシンボルの数。
-C:列の数、上記の表１ではTTIによって決定される。
-B:一つの列に含まれるシンボルの数、N/C。
-MAX_B:一つの列に含まれる最大シンボルの数、初期値は、0であり、以後にBの値と比較して更新される。
-WR_IDX:現在入力されるシンボルが書き込まれるメモリの位置。
-WR_OFF:連続して入るシンボルが書き込まれるメモリの位置間のオフセット。
-JMP_OFF:データレートが減る場合に書き込まれない領域を飛ばすための媒介変数。
-MID_OFF:RD_OFFを求めるために用いられる中間値。Nと比較して大きいかまたは等しい場合に"modulo"演算を行い、小さい場合には、その値がまさにRD_OFFとなる。
-RD_IDX:現在読み出されているシンボルのメモリ位置。
-RD_OFF:連続して読み出されるシンボルのメモリ位置間のオフセット。
-COL_OFF:列間置換のために用いられる媒介変数。
-DIFF_COL_IDX:COL_OFFを計算するために必要な列インデックス間の差値。
【００３８】
上の定義によって一フレームに入力されるシンボルのインデックスを、0、1、2、…、N-1で表すことができ、最初の入力シンボルのインデックスが0であって、最後のシンボルのインデックスをN-1であるとすれば、これらは順にインターリーバメモリに書き込まれる。i番目のインターリーバの出力を"DOUT(i)"とすれば、次の数式1のように示すことができる。
【００３９】
【数１】
0004728500.tif 000003
【００４０】
但し、ここで2Mは前で定義した列の数Cと同じであり、
【００４１】
【外１】
0004728500.tif 000004
【００４２】
は、xより小さいか同じである最も大きい整数を意味し、BROM(y)はyをMビットに拡張してビットの順を替える演算である。上記の数式1は、1次インターリーブのように列の数が2の指数乗で表すことのできる場合のみに適用可能である。しかし、２次インターリーバの場合には、列の数が30に固定されているので上記の[数式1]に定義することができない。したがって、より良い一般化のために次の数式のように表す。
【００４３】
for i in 0 to (N-1) loop
if i = 0 then
j <= 0；
elsif (i mod B) /= 0 then
j <= j + C；                          (1)
else
j <= j + C + DIFF_COL_IDX；            (2)
end if；
if j>N-1 then
j <= j - (N-1)；
end if；
DOUT(i) <= SOURCE(j)；
end loop；
【００４４】
ここで、(1)と(2)の数式を通して列の数Cがオフセットに作用し、列が替わる時列間置換が発生するために、DIFF_COL_IDX値が足されることが分かる。この場合、DIFF_COL_IDXは、次の数式2のように得られる。
【００４５】
【数２】
DIFF_COL_IDX = REAL_COL_IDX - (PRE_COL_IDX + 1)；
【００４６】
ここで、PRE_COL_IDXは、以前に記録した列のインデックスを示し、REAL_COL_IDXは、列間置換後の列のインデックスを示す。すなわち、前記表１の例で、もしTTIが40msであるならば、列の数は4となり、列間置換を行った後の列の順は、0->2->1->3列となる。それで、第1番目の列である0-列が入力された後に、1-列でなく、2-列が入力される。この場合、DIFF_COL_IDXは、"2-(0+1)=1"となる。このような方法でインターリーブされた後のシンボルインデックスとインターリーブ前のシンボルインデックス間の関係が分かる。
【００４７】
本発明を通してインターリーブとディインターリーブのための効率的なアドレス発生器を使用することとなれば、多様なサービスを支援するIMT-2000用モデムにおいて要求されるメモリの大きさを約40%程度減らすことができる。なぜならば、1次インターリーバとディインターリーバのメモリ大きさが80msのTTIを支援する場合要求される他のメモリと比較して絶対的な大きさを有するためである。
【００４８】
次の表２は、3G TS 25.101規格文書を参考にして、データレートが384kbpsであってTTIが80msであるときに、本発明の方法と従来の方法を使用した場合のメモリ大きさを比較したものである。
【００４９】
【表２】
0004728500.tif 000005
【００５０】
上記の表２から分かるように、IMT-2000の1次ディインターリーバで要求されるメモリの大きさを大きく減らすことによって、端末器側モデムは一つのチップ化がなし得るし、基地局側は、より多くのチャネルを一つのチップに収容することができる。
【００５１】
図３は、本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う装置の中の、列間置換を含んだブロックインターリーブを行う装置の一実施形態の構成図である。
【００５２】
図３に示すように、列間置換を含んだブロックインターリーブを行う装置は、入力系列を格納するためのインターリーバRAM310と、インターリーバRAM310のメモリブロックに書き込み動作を行うために必要なWR_OFFを求め、実際書き込まれるアドレスとデータ及びメモリ制御信号を発生するための書き込みアドレス発生器320と、書き込みアドレス発生器320からMID_OFF及びcal_start信号を入力されてインターリーブの順に読み出すようにするために必要なRD_OFFと列間置換のために必要なCOL_OFFを発生するためのアドレスオフセット発生器330と、アドレスオフセット発生器330から発生した信号をRD_OFFずつ増加させ、インターリーバRAM310を読み出すためにアドレスを作ってメモリ制御信号を発生するための読み出しアドレス発生器340と、書き込みアドレス発生器320及び読み出しアドレス発生器340から伝達される書き込み動作のために必要な読み出し動作と実際インターリーブを行うために必要な読み出し動作の制御信号とアドレスの中でいずれか一つの該当サイクルに必要な信号を選択するための多重化器350、360と、読み出しアドレス発生器340から伝達されるインターリーブを行うための読み出し動作によって発生したメモリの出力信号の中で、いずれか一つの該当シンボルを選択するための多重化器370を備える。
【００５３】
以下、前述した構造を持つ本発明の列間置換を含んだブロックインターリーブを行う装置の動作を詳細に説明する。
【００５４】
まず、書き込みアドレス発生器320は、後述する図４及び図５のフローチャートに示す動作を行うブロックとして、マイクロプロセッサーまたは他の外部のインターフェースを通して現在の入力フレームの情報が入力されると格納するレジスタ集合が必要である。このレジスタ集合にフレーム大きさや列の数または、この例では、TTIなどが記録された後に、媒介変数を初期化させ、RD_OFFとCOL_OFFとを求めるために、アドレスオフセット発生器330にMID_OFFとcal_start信号とを伝送する。そして、第1番目の列のスタートを知らせるframe_sync信号を入力し、最初のシンボルを記録するためにインターリーバRAM310から該当アドレスである0番地を読み出す。もちろん、この場合、多重化器350、360は、メモリ制御信号であるwr_rdbとwr_adr信号とを選択し、インターリーバRAM310から読み出したデータとwr_strobe信号を確認した後に、入力(input)信号により作られたマスクを用いて該当シンボルのみ上書きするために、入力信号によって論理和または論理積を行った後に、再びメモリブロックの0番地に記録する。以後、第２番目のシンボルを記録するために、まず該当アドレスを読み出し、wr_strobe信号を確認した後に、入力された第２番目の入力(input)信号により作られたマスクを該当シンボルのみ上書きするために、入力信号によって論理和または論理積を行い、再びインターリーバRAM310に記録する。書き込みアドレス発生器320は、このような動作を繰り返し発生させて一フレームのシンボルを全部記録すれば、読み出しアドレス発生器340にインターリーブを行っても良いという信号であるrd_start信号を発生させる。
【００５５】
そして、アドレスオフセット発生器330は、後述する図６のフローチャートのような動作を行うブロックとして、前述したように、MID_OFFを受け取ってこの値がNより大きいか同じであるならば、"modulo"演算を行ってRD_OFFを作り、Nより小さければ、MID_OFFがRD_OFFとなる。このように、RD_OFFが得られたら、列間置換のためのCOL_OFFを求める。RD_OFFとCOL_OFFとが全て得られたら、読み出しアドレス発生器340に該当値を渡すためにcal_done信号を伝送する。
【００５６】
そして、読み出しアドレス発生器340は、後述する図７のフローチャートに示す動作を行うブロックとして、書き込みアドレス発生器320からインターリーブを行っても良いというrd_start信号が入力されてRD_OFFとCOL_OFFとが伝送されれば、直ちにインターリーブのためのメモリ読み出し動作が始まる。前述したように、RD_IDXをRD_OFFずつ線型的に増加させ、ディインターリーバメモリを読み出してインターリーブを行う。但し、列が替わるとき、列間置換のためにCOL_OFFが加算されるべきであり、またデータレートが減少する時は実際書き込まれない領域を飛ばすようにRD_IDXにJMP_OFFを加算する。このような読み出し動作モードでは多重化器350、360を介してメモリ制御信号をrd_rdbとrd_adrとを選択する。もし、書き込み動作と同時に読み出しが行われば、読み出し動作はrd_strobe信号を確認して動作を行うべきである。
【００５７】
なお、書き込みアドレス発生器320とアドレスオフセット発生器330及び読み出しアドレス発生器340の具体的な動作に対する説明は、後述する図４及び図５ないし図７で詳細に説明する。
【００５８】
このようなインターリーブを行う装置は、従来の二つのメモリを使用する構造とは異なって一つのメモリのみを使用し、また従来の一つのメモリのみを使用する構造が単純ブロックインターリーブのみを支援することとは異なり、単純ブロックインターリーブだけでなく列間置換を先行するブロックインターリーブも同様の構造で行うことができる。
【００５９】
図４及び図５は、本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う方法のうちの、インターリーブのための書き込みアドレス発生方法の一実施形態のフローチャートである。以下、第1番目のフレームがどのように書き込まれ、読み出されるかについて説明する。
【００６０】
図４及び図５に示すように、まず五つの媒介変数を初期化する（410）。第1番目のフレームが書き込まれるとき、インターリーバRAM310は、意味のないデータで書き込まれているのでどの位置にも書き込むことができる。上記でも定義したように、連続して入力される二つのシンボルをインターリーバRAM310に書き込むためのメモリの位置間オフセットをWR_OFFとすれば、最初のフレームのためのWR_OFFは、任意の値を有し得るが、具現上容易にするために、過程410に示すように1に初期化する。そして、iは入力されるシンボルの数をカウントするための媒介変数として0に初期化される。残りのMID_OFFとMAX_B、そしてJMP_OFFを利用してサブオフセット(Sub_offset)を計算(calculation)してcal_startを1と表せば、RD_OFFとCOL_OFFとが得られるが、これらは読み出し動作のために用いられる媒介変数であるので、読み出し動作である図６で説明することにする。
【００６１】
以上のように媒介変数が初期化されれば、第1番目のフレームに対するframe_sync信号が1であるかを確認して（421）、1でなければ、frame_sync信号が1となるまで繰り返し行い、frame_sync信号が1であれば、該当メモリを読み出す（430）。
【００６２】
ここで、frame_sync信号とは、インターリーブのための一フレームのデータが入力されることを表す一種の同期を合せる信号であるとみることができる。基本的にメモリを一つのみ使用するので、現在入力されるシンボルが書き込まれる位置を含んだアドレスをまず読み出して、その位置のデータのみ現在入力されたシンボルで上書きすべきである。したがって、このために該当メモリを読み出した後（430）に、wr_strobe信号が1であるかを確認して（431）、1でなければ、wr_strobe信号が1となるまで待ち、wr_strobe信号が1であれば、入力されたシンボルのみ書き込まれるようにマスクを作る（440）。すなわち、入力されたシンボルが書き込まれる位置のデータのみ上書きするためにマスクを作る。ここで、wr_strobe信号は、入力シンボルが有効であるかを示す制御信号であるとみることができる。そして、マスクは、入力シンボルが0であれば、そのシンボルが書き込まれる位置のみ0とし、残りは、1として、該当メモリを読み出す過程430で読み出したデータと論理積を行い、入力シンボルが1であれば、そのシンボルが書き込まれる位置のみ1にし、残りは0にして該当メモリを読み出す過程430で読み出したデータと論理和を行う方法で該当位置のシンボルのみ上書きする。
【００６３】
ここで考慮すべきことは、入力されるシンボルをメモリに書き込む動作と既に書き込まれた、すなわち、以前フレームのシンボルを読み出す動作が重なるかの二つの事項が考えられる。その第1番目は、メモリをデュアルポートラム(Dual Port RAM)を使用するかに対する考慮であって、第２番目は、シングルポートラム(Single Port RAM)を使用する場合に、読み出しと書き込み動作との間の関係に対する考慮である。ここで、デュアルポートラム(Dual Port RAM)を使用すれば、読み出しと書き込みとが各々独立的に動作するために、制御が容易であり、より大きいタイミングマージンが得られるが、面積が大きくなり電力消耗量が多くなる短所がある。したがって、タイミングが不足しなければ、シングルポートラム(Single Port RAM)を使用することがより効率的であるといえる。
【００６４】
まず、メモリを読み出す動作と書き込む動作とが分離できる場合には、一つのフレームを全部記録した後に、そのフレームをインターリーブするために読み出し、読み出されて位置に次のフレームのデータを記録すれば良いので、この場合にはシングルポートラム(Single Port RAM)を使用して容易に具現可能である。
【００６５】
第2番目に、メモリを読み出す動作と書き込む動作とが分離できない場合であるが、これは２次インターリーバの場合には必然的であるといえる。なぜならば、変調器に渡すタイミングが伝送するデータがある間には、全区間に亘って規則的に発生すべきであるので、以前フレームのデータを速い時間内に読み出すことができないからである。すなわち、以前フレームをインターリーブするための読み出し動作を行う最中に、次のフレームのデータが入力されるとき、どのように処理すべきかに関する問題である。一般的に、内部的に行われる動作を行う速度が速いと仮定することができるが、最悪の場合に読み出しと書き込みとの動作速度が同一であるならば、二つの動作を交互に行われるようにすべきである。このような場合には、プロセシングタイミングに応じてデュアルポートラム(Dual Port RAM)を使用するか、シングルポートラム(Single Port RAM)を使用するためには、書き込み動作と読み出し動作とが交互に起きるようにタイミングを分割する制御が必要である。
【００６６】
後述する図４及び図５は、このような動作を考慮したものである。したがって、入力されたシンボルのみ書き込まれるようにマスクを作る過程440で、rd_strobe信号が1となることは、この時に読み出し動作が可能であることを表す信号であるとみることができる。結局、該当メモリを読み出す過程430で、書き込み動作を行うために、該当アドレスを一回読み出し、過程440で入力されたシンボルのみ書き込まれるようにマスクを作りながら、実際インターリーブのための読み出し動作を同時に行い、過程450では、前記で作られたマスクと該当メモリを読み出す過程430で読み出したデータ間に論理和や論理積を行って、その結果をメモリに書き込み、次のシンボルを記録するための位置情報であるWR_IDXをWR_OFFだけ増加させる。そして、フレームに該当するシンボル全体をメモリに記録したかを確認して、一フレームのシンボルを全部記録できなかった場合、すなわち、iがN-1より小さい場合には、該当メモリを読み出す過程430から繰り返し行う。iがN-1より大きいかまたは等しい場合については、第２番目のフレームのための媒介変数を求める過程で説明する。
【００６７】
いままで説明した第1番目のフレームの記録のために必要な媒介変数の数式を要約すれば、次の通りである。
【００６８】
Initial value:
WR_OFF <= 1；
WR_IDX <= 0；
Computed value:
for i in 0 to (N-1) loop
if i=0 then
WR_IDX <= 0；
else
WR_IDX <= WR_IDX + WR_OFF；
end if；
if WR_IDX ≧N then
WR_IDX <= WR_IDX - (N-1)；
end if；
end loop；
【００６９】
一方、第1番目のフレームが書き込まれる実施の形態は、図８の過程740と同様である。ここで、"src index”は、ソースデータ720のインデックスを示し、"mem index”は、インターリーバRAM310のインデックスを示すが、ここで、インターリーバRAM310のデータ幅を8ビットと仮定すれば、"mem index"の最下位3ビットがその8ビットの中で一つのビットを選択するためのインデックス(index)となり、残りは、実メモリのアドレスとなる。WR_OFFが1であるので、WR_IDXが線型的に1ずつ増加しながら入力されるソースシンボルをインターリーバRAM310に記録する。
【００７０】
以下では、最初フレームのための媒介変数がどのように求められ、第1番目のフレームがどのように読み出されるかを説明する。まず、読み出し動作のために必要な媒介変数は次のように初期化される。図４及び図５の過程410で初期化されたMID_OFFとは、連続に読み出される二つのシンボルのメモリ位置間のオフセットを表すRD_OFFを求めるために用いられる値として、図６に示すように、必要に応じて"modulo"演算を行ってRD_OFFとなるが、実際には、過程491で見られるように、WR_OFFと列の数であるCの積で表すことができる。WR_OFFの初期値が1であるので、MID_OFFはCとなり、Nより小さい値であるのでこの値が即ちRD_OFFとなる。このとき、もしTTIが10msであるならば、表１から分かるように、インターリーブが行われないのでこの場合は、MID_OFFが1となる。データレートが変わる場合を考慮するための重要な変数として、MAX_BとJMP_OFFとがあるが、これらの全ては、初期値が0であり、フレーム単位で更新される。MAX_Bの値は、Bの値と比較して大きい値に更新され、JMP_OFFは、Bが大きい値から小さい値に変わるとき、すなわちデータレートが減少すると、以前フレームに比べてシンボルの数が減るので、実際書き込まれない領域が発生するが、読み出し動作が行われている時に、この領域を飛ばすために、このオフセットほどインデックスを増加させてデータレートが変わっても同じ流れで制御が可能にする。したがって、過程420では、大きく二つの動作を行うが、この動作のフローチャートは後述する図６と同様である。
【００７１】
第1番目は、MID_OFFがフレーム内のシンボル数であるNより小さいかを確認して（510）、MID_OFFがNより大きいかまたは等しければ、必要に応じて"modulo"演算を行ってRD_OFFを求め（520）、MID_OFFがNより小さければ、MID_OFFがRD_OFFとなる。これを数式で表せば、次の通りである。
【００７２】
MID_OFF <= WR_OFF x C；
if MID_OFF < N then
RD_OFF <= MID_OFF；
else
RD_OFF <= MID_OFF mod (N-1)；
end if；
【００７３】
第２番目は、COL_OFFを求めるが、COL_OFFは列間置換を行うために必要であり、次の数式のように求められる。
【００７４】
COL_OFF <= DIFF_COL_IDX x WR_OFF；    (3)
if COL_OFF≧N then
COL_OFF <= COL_OFF mod (N-1)；      (4)
end if；
【００７５】
次いで、表１でTTIが10msか20msである場合のように、列間置換を行うかを判断して（540）、行われない場合には、COL_OFFが0となり（550）、列間置換が行われる場合には、上記の数式(3)または過程560に示したように、COL_OFFを求める。このとき、COL_OFF値がNより大きいかを確認して（570）、大きいかまたは等しければ、上記の数式(4)または過程のように"modulo"演算を行う。
【００７６】
ここで、注目すべきことは、図６で得られるRD_OFFやCOL_OFFはフレームが記録されることとは関係なく、読み出し動作が行われる時に用いられるので入力されるフレームデータを記録する前に図６で行われる演算が終わる必要はない。すなわち、フレームデータが記録される動作とRD_OFFとCOL_OFFとを求める動作を並列に行うことができる。
【００７７】
いままで説明した最初のフレームを読み出すために必要な媒介変数の数式を要約すれば、次の通りである。
【００７８】
Initial value:
JMP_OFF <= 0；      (5)
MID_OFF <= C；      (6)
Computed value:
RD_OFF <= MID_OFF；     (7)
COL_OFF <= WR_OFF x DIFF_COL_IDX；  (8)
【００７９】
一方、前記図４及び図５と図６を通して書き込まれたシンボルをインターリーブ順に読み出す方法を説明すれば、後述する図７と同様である。図７は、図４及び図５のrd_startが発生する過程460を説明するための図である。すなわち、図６で得られたRD_OFFを過程610でラッチしてインターリーブするシンボルの数をカウントするための重要な変数としてjを0に初期化する（610）。この例では、シングルポートラム(Single Port RAM)を使用して読み出しと書き込みとが同時に発生し、書き込み動作に優先順位がある場合である。
【００８０】
以後、まず書き込み動作が行われているかを確認して（620）、読み出し動作が行われていれば、直ちにメモリをインターリーブの順に読み出せば良いが（640）、書き込み動作が行われていれば、図４及び図５の過程440で渡すrd_strobe信号が1であるかを確認して（630）、1でなければ、rd_strobe信号が1となるまで待ち、rd_strobe信号が1であれば、メモリをインターリーブの順に読み出す（640）。次いで、フレームに該当するシンボルを全部インターリーブの順に読み出したかを確認するために、jとN-1とを比較する（650）。
【００８１】
比較の結果、jがN-1より小さい場合、すなわちまだインターリーブを行うべきシンボルが残っていれば、次のシンボルを読み出すために、RD_IDXをRD_OFFだけ増加させ、jを1だけ増加させた後に（660）、列が変るかを確認するためにjをB-1に"modulo"演算を行う（670）。確認の結果、その結果値が'0'、すなわち列が変わる場合には、列間置換動作が起きるようにRD_IDXにCOL_OFFだけ増加させる（680）。もちろん、最初のフレームであるので、JMP_OFFは初期値である0である。その以後に現在書き込み動作が進行中であるかを確認する過程620に進み、結果値が'0’でなければ、直ちに書き込み動作が進行中であるかを確認する過程620に進む。
【００８２】
ここでメモリを読み出すために、すなわち、インターリーブのために用いられるRD_IDXは、次の数式で表すことができる。
【００８３】
for j in 0 to (N-1) loop
if j=0 then
RD_IDX <= 0；
elsif (j mod B)/=0 then
RD_IDX <= RD_IDX + RD_OFF；
else
RD_IDX <= RD_IDX + RD_OFF + COL_OFF + JMP_OFF；
end if；
if RD_IDX ≧N then
RD_IDX <= RD_IDX - (N-1)；
end if；
end loop；
【００８４】
以下では、第２番目のフレームを書き込むための媒介変数がどのように計算され、このフレームがどのように記録されるかを説明する。
【００８５】
第1番目のフレーム全体を記録したならば、過程460でそのフレームのインターリーブのために読み出し動作を行っても良いという意味のrd_start信号を1に作り、470で第２番目のフレームに対する情報を入力されるまで待つ。
【００８６】
第２番目のフレームに対する情報を受け取った後に、第２番目のフレームのための媒介変数を再定義するが、第1番目のフレームの読み出し順に書き込まれるべきであるので、第1番目のフレームのRD_OFFが第２番目のフレームのWR_OFFとなる471。その後、第２番目のフレームを読み出すために必要な媒介変数を求めるが、この説明は第２番目のフレームの読み出し動作の説明の中で行う。
【００８７】
このように、第２番目のフレームのための媒介変数を求めた後、過程421で次のフレームのスタートを表すframe_sync信号を待つ。ここで、第２番目のフレームを書き込むために必要な媒介変数と実際書き込み動作が行われる最中に、WR_IDXの演算がどのように行われるかを数式で表せば次の通りである。
【００８８】
WR_OFF <= RD_OFF；      (9)
for i in 0 to (N-1) loop
if i=0 then
WR_IDX <= 0；
else
WR _IDX <= WR_IDX + WR_OFF；
end if；
if WR_IDX ≧N then
WR_IDX <= WR_IDX - (N-1)；
end if；
end loop；
【００８９】
以下、第２番目のフレームを読み出すための媒介変数がどのように計算されるかを説明する。
【００９０】
まず、データレートが変ったかを確認(MAX_B > B)するが（480）、もし変化がなかったり増加すれば、MAX_Bは次のフレームの一つの列に含まれたシンボルの数であるBに更新され、JMP_OFFは0となり（782）、減少すれば、MAX_Bは変わらず、JMP_OFFを求める（481）。このとき、JMP_OFFとNとを比較して（490）、JMP_OFFがNより大きければ、"modulo"演算を行い（492）、次のフレームのRD_OFFとCOL_OFFとを求めるために、MID_OFFを求めるが、この値は次のフレームのWR_OFFに列の数であるCを乗じた値となる（491）。
【００９１】
ここで、第２番目のフレームを読み出すための媒介変数を求める数式を要約すれば、次の通りである。
【００９２】
if MAX_B>B then
JMP_OFF <= (MAX_B - B) x WR_OFF；
If JMP_OFF > (N-1) then
JMP_OFF <= JMP_OFF mod (N-1)；
end if；
else
MAX_B <= B；
JMP_OFF <= 0；
end if；
MID_OFF <= WR_OFF x C；     (10)
if MID_OFF < N then
RD_OFF <= MID_OFF；    (11)
else
RD_OFF <= MID_OFF mod (N-1)；   (12)
end if；
【００９３】
このとき、数式(9)でWR_OFF=RD_OFFであるので、数式(10)は、MID_OFF=RD_OFF×Cにも表すことができる。数式(10)と(11)とは過程420を通して図６で求められる。このように、次のフレームのための媒介変数を求めた後、次のフレームをインターリーブしても良いという意味のrd_start信号を待つ。図４及び図５の過程460でrd_startが発生した後に、第２番目のフレームを読み出す動作は第1番目のフレームを読み出す動作と同様である。
【００９４】
for j in 0 to (N-1) loop
if j=0 then
RD_IDX <= 0；
elsif (j mod B)/=0 then
RD_IDX <= RD_IDX + RD_OFF；
else
RD_IDX <= RD_IDX + RD_OFF + COL_OFF + JMP_OFF；
end if；
if RD_IDX ≧N then
RD_IDX <= RD_IDX  (N-1)；
end if；
end loop；
【００９５】
すなわち、第1番目のフレームが書き込まれた後にインターリーブされ、第２番目のフレームのための媒介変数値が得られ、その値を使用して第２番目のフレームが書き込まれ、再びインターリーブされる。この実施形態を、図８を参照しながら説明する。
【００９６】
図８に示すように、最初フレームがインターリーバRAM310に書き込まれた後、過程740、770でのようにインターリーブのためにフレームが読み出される。ここで、DOUT INDEXは、インターリーブされた結果のインデックスを表すが、ここで注目すべきことは、列が変わる時列間置換のためにCOL_OFFが足されるということである。すなわち、列当りのシンボルの数が6であるので、DOUT INDEXが5から6に変われば、過程710で示したように、DIFF_COL_IDXは、2 - ( 0 + 1 ) =1となり、COL_OFFは、1 * 1=1となる。したがって、RD_IDXが20 + 4 + 1=25となり、この値は、N-1より大きいのでN-1を引く。また、DOUT INDEXが11から12に変わる時は、DIFF_COL_IDXは、1 - ( 2 + 1 )=-2となり、COL_OFFは、1 * (-2) =-2となる。したがって、RD_IDXが22 + 4 - 2=24となり、この値はN-1より大きいのでN-1を引く。このような方法で最初のフレームに対するインターリーブを行う。次に、第２番目のフレームを書き込むためのWR_OFFとWR_IDXとを求める過程を過程770に示す。まず、WR_OFFは、最初のフレームが読み出される順に応じて記録されるべきであるので、最初のフレームのRD_OFF値が第２番目のフレームのWR_OFFとなる。したがって、WR_IDXは、WR_OFFである4ずつ線型的に増加し、該当するインターリーバメモリのアドレスに入力される第２番目のフレームのシンボルが記録される。そのように記録された結果を780に示した。次は、第２番目のフレームがインターリーブのためにどのように読み出されるかについて過程790を通して説明する。図４及び図５の過程491に従うと、RD_OFFを求めるために、まずMID_OFFを求めるが、この値は第２番目のフレームのWR_OFF、または第1番目のフレームのRD_OFFと列の数であるCとの積により得られるので、4 * 4 =16となり、この値がNより小さいので、図６の過程530を通してRD_OFFとなる。
【００９７】
第1番目のフレームの読み出し動作と同様に、同一の列に属する時はRD_IDXがRD_OFFである16ずつ線型的に増加し、列が変わるとき、すなわち例えば、DOUT INDEXが5から6に変わるとき、DIFF_COL_IDXは1となり、COL_OFFはWR_OFFが4であるので4となる。それで、DOUT INDEXが6であるシンボルのRD_IDXは、11 + 16 + 4=31となり、この値はN-1より大きいので31 - 23=8となる。このような方法で第２番目のフレームのインターリーブが行われる。
【００９８】
以上で、列間置換を先行し、ブロックインターリーブを行うために必要な媒介変数を求める方法と、どのように書き込まれるか、そしてどのようにインターリーブ順に読み出されるかをフローチャートに基づいて説明した。
【００９９】
図９は、本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う装置の中の、ディインターリーブを行う装置の一実施形態の構成図であり、これは列間置換を含んだブロックインターリーブをディインターリーブするためのものである。
【０１００】
図９に示すように、列間置換を含んだブロックインターリーブされたディインターリーブを行う装置は、入力されるフレームのシンボルを記録するためのディインターリーバRAM810、ディインターリーバRAM810に書き込み動作を行うために必要なWR_OFFを求め、実際書き込まれるアドレスとデータ及びメモリ制御信号を発生するための書き込みアドレス発生器820と、書き込みアドレス発生器820からMID_OFF及びcal_start信号が入力されるとディインターリーブの順に読み出すために必要なRD_OFFと列間置換を復元するために必要なCOL_OFFとを発生するためのアドレスオフセット発生器830と、書き込みアドレス発生器820から伝達される信号をRD_OFFずつ増加させ、ディインターリーバRAM810を読み出すためにアドレスを作ってメモリ制御信号を発生するための読み出しアドレス発生器840と、書き込みアドレス発生器820及び読み出しアドレス発生器840から伝達される書き込み動作のために必要な読み出し動作と実際インターリーブを行うために必要な読み出し動作の制御信号とアドレスを選択するための多重化器850、860と、読み出しアドレス発生器840から伝達されるディインターリーブを行うための読み出し動作によって発生したメモリの出力の中で該当シンボルのみを選択するための多重化器870を備える。
【０１０１】
以下、上記したことのような構造を持つ本発明の列間置換を含んだブロックディインターリーブを行う装置の動作を詳細に説明する。
【０１０２】
まず、書き込みアドレス発生器820は、後述する図１０及び図１１のフローチャートに示した動作を行うブロックとして、マイクロプロセッサーやまたは他の外部のインターフェースを通して現在の入力フレームの情報が入力されると記録するレジスタ集合が必要である。このレジスタ集合にフレームの大きさや列の数、またはこの例では、TTIなどが記録された後に、媒介変数を初期化させ、RD_OFFと列間置換を復元するために必要なCOL_OFFを求めるために、アドレスオフセット発生器830にMID_OFFとcal_start信号とを伝送する。そして、第1番目の列のスタートを知らせるframe_sync信号が入力されると、最初のシンボルを記録するためにディインターリーバRAM810から該当アドレスである0番地を読み出す。もちろん、この時多重化器850、860は、メモリ制御信号であるwr_rdbとwr_adr信号とを選択し、ディインターリーバRAM810から読み出したデータとwr_strobe信号とを確認した後、入力(input)信号により作られたマスクを該当シンボルのみ上書きするために、入力信号に応じて論理和または論理積を行った後に、再びディインターリーバRAM810に記録する。以後、第２番目のシンボルを記録するために、まず該当アドレスを読み出し、wr_strobe信号を確認した後、入力された第２番目の入力信号により作られたマスクを該当シンボルのみ上書きするために入力信号に応じて論理和または論理積を行った後に、再びディインターリーバRAM810に記録する。書き込みアドレス発生器820では、このような動作が繰り返し発生し、列が変わる時アドレスオフセット発生器830からCOL_OFFが入力されると列間置換を復元する動作を行い、一フレームのシンボルを全部記録したら、読み出しアドレス発生器840にディインターリーブを行っても良いという信号であるrd_start信号とアドレスオフセット発生器830から受け取ったRD_OFFを渡す。
【０１０３】
そして、アドレスオフセット発生器830は、ディインターリーブの順に読み出すために必要なRD_OFFと列間置換を復元するために必要なCOL_OFFを作るブロックとして、後述する図１２のフローチャートのように動作を行うブロックである。前述したように、MID_OFFを受け取ってこの値がNより大きいかまたは等しければ、"modulo"演算を行ってRD_OFFを作り、Nより小さければMID_OFFが直ちにRD_OFFとなる。このように、RD_OFFが得られたら、列間置換を復元するためのCOL_OFFを求める。RD_OFFとCOL_OFFが全て得られたら、書き込みアドレス発生器820に該当値を渡すためにcal_done 信号を送る。
【０１０４】
そして、読み出しアドレス発生器840は、アドレスオフセット発生器830から作られた信号をRD_OFFずつ増加させ、ディインターリーバRAM810を読み出すためにアドレスを作ってメモリ制御信号を発生させるブロックとして、後述する図１３のフローチャートのように動作を行うブロックである。書き込みアドレス発生器820からディインターリーブを行っても良いという信号であるrd_startとRD_OFF値であるMID_OFFとを受け取ったら直ちにディインターリーブのためのメモリ読み出し動作が始まる。前述したように、RD_IDXをRD_OFFずつ線型的に増加させてディインターリーバRAM810を読み出してディインターリーブを行う。もちろん、この時は多重化器850、860でメモリ制御信号であるrd_rdb及びrd_adrを選択する。もし、書き込み動作と同時に読み出しが行われば、読み出し動作はrd_strobe信号を確認し動作を行うべきである。
【０１０５】
但し、ここで考慮する事項は列間置換を復元するために元来の順に記録をすることによって規則性を提供される代わりに、TTIが40msまたは80msであるとき、図１５及び図１６のようなタイミング上の制約が伴う。
【０１０６】
図１５に示すように、まずTTIが40msであるとき、1310を見れば四つの列で構成され、入力シンボルは10ms単位で受信する。四つの列を全部ディインターリーバRAM810に記録した後に、ディインターリーブのための読み出し動作が始まるが、過程1311で読み出される位置と書き込まれる位置とが重なり得る。このために重なる分のデータを格納するために一つの列に該当する付加的なRAM810が必要である。
【０１０７】
また、図１６に示すように、TTIが80msであるとき、1320を見れば、過程1321と1322で読み出される前に入力されるシンボルが記録されて該当シンボルを喪失することとなるので、80msを支援するためには二つの列分のメモリがさらに必要である。
【０１０８】
それで、1321と1322に該当するタイミングに適切なアドレッシングを通してメモリを選択すれば良い。もちろん、この場合に二つの列分さらに大きいメモリを使用して該当サイクルに適切なオフセットだけ増加させる方法を使用することもでき、一フレームのみを収容できる大きさのメモリと付加的に必要な列分の小さいメモリを別に置いて選択信号を作って書き込み読み出す方法があり得る。この場合は、付加的に増加したメモリは単純に計数器をおいてアドレスを線型的に増加させて書き込みまたは読み出しを行えば良い。
【０１０９】
このようなディインターリーブを行う装置では、既存の構造に比べて1次ディインターリーバRAMは37.5%、２次ディインターリーバの場合は40%程度減らすことができる。
【０１１０】
一方、列間置換を行い、ブロックインターリーブされて入力されるシンボルがディインターリーバメモリにどのように書き込まれディインターリーブされるかを、図１０及び図１１ないし図１３で詳細に説明する。
【０１１１】
図１０及び図１１は、本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う方法の中の、ディインターリーブのための書き込みアドレス発生方法の一実施形態のフローチャートである。以下、図１０及び図１１を参照し、第1番目のフレームがどのように書き込まれ、読み出されるかについて説明する。
【０１１２】
図１０及び図１１に示すように、まず五つの媒介変数を初期化する（910）。第1番目のフレームが書き込まれるとき、ディインターリーバRAM910は、意味のないデータで満たされているのでどの位置にも書き込むことができる。上記でも定義したように、連続して入力される二つのシンボルをディインターリーバRAM910に書き込むためのメモリの位置間オフセットをWR_OFFとすれば、最初のフレームのためのWR_OFFは、任意の値を有し得るが、具現上容易にするために、過程910に示すように、1に初期化する。そして、MID_OFFとは、連続に読み出される二つのシンボルのメモリ位置間のオフセットを示すRD_OFFを求めるために用いられる値として、図１２に示すように、Nより大きいかまたは等しければ、"modulo"演算を行ってRD_OFFとなるが、WR_OFFと列当りのシンボルの数であるBの積で表すことができる。WR_OFFの初期値が1であるのでMID_OFFはBとなりNより小さい値であるのでこの値がRD_OFFとなる。このとき、もしTTIが10msであるならば、表１から分かるように、インターリーブが行われないのでこの場合はMID_OFFが1となる。
【０１１３】
そしてiは現在入力されるシンボルのインデックスを表すが、初期値は0であって線型的に1ずつ増加する。データレートが変わる場合を考慮するための重要な変数としてMAX_BとJMP_OFFとがあるが、これら全部初期値は0でありフレーム単位で更新される。MAX_Bの値は、Bの値と比較して大きい値に更新され、JMP_OFFはBが大きい値から小さい値に変わるとき、すなわち、データレートが減少するとき、以前フレームに比べてシンボルの数が減るので実際書き込まれない領域が発生するが、このとき、このオフセットほどインデックスを増加させてデータレートが変わっても同じ流れで制御できる。
【０１１４】
そして、過程920では、大きく二つの動作を行うが、この動作のフローチャートは図１２に示すものと同様である。
【０１１５】
まず、MID_OFFがフレーム内のシンボル数であるNより大きいか同じである場合に、この値を"modulo"演算を行ってRD_OFFを求め（1020）、MID_OFFがNより小さければ、MID_OFFがRD_OFFとなる（1080）。
【０１１６】
次いで、この値に基づいてCOL_OFFを求めるが、COL_OFFが必要な理由は次の通りである。一般的なブロックインターリーブと異なって次世代移動通信システム(IMT-2000)では、上記でも説明したように、列間置換がインターリーブ前に発生する。これによってディインターリーバの入力されるシンボルと出力されるシンボルとの間の関係の一般化が難しくなる。なぜならば、読み出されるインデックスに応じて入力されるシンボルを書き込むべきであるが、列間置換によって読み出されるシンボルのインデックスと書き込まれるシンボルのインデックスとの間の規則性が壊れるためである。それで、これを補償するために、本発明では、実際列のインデックスに応じて入力シンボルをディインターリーバRAM810に記録する。例えば、TTIが40msであるならば、列の数が四つとなり、列間置換によって最初には0番目の列が入力され、次には2番目の列が入力されるが、この時直に連結して2番目の列を記録せず、1番目の列全体が記録される程度のオフセットを飛ばしてディインターリーバRAM810に記録する。これをCOL_OFFとして次の数式のように示す。
【０１１７】
COL_OFF <= DIFF_COL_IDX x RD_OFF；   (13)
if COL_OFF≧N then
COL_OFF <= COL_OFF mod (N-1)；   (14)
end if；
【０１１８】
また、表１でTTIが10msや20msである場合のように、列間置換を行わない場合には、COL_OFFが0となり（1040）、列間置換が行われる場合には、数式(13)または1050に示すようにCOL_OFFを求める。このとき、COL_OFF値がNより大きいかを確認して（1010）、大きいか同じである場合には、数式(14)または過程1070のように"modulo"演算を行う。
【０１１９】
以上のように媒介変数が得られたら、最初フレームの最初の列に対するframe_sync信号を待つ（920）。ここで、frame_syncとは、ディインターリーブのための一つの列のデータが入力されることを表す一種の同期を合せる信号であると見ることができる。インターリーバとは異なってディインターリーバの場合には、一シンボル当り複数のビットを入力されてチャネルデコーダーで軟判定(soft decision)を行う。
【０１２０】
したがって、メモリ運用の観点で二つの場合が考えられる。
【０１２１】
第1番目は、一シンボルに該当する複数のシンボル、すなわち表２の場合で6ビットを一つのアドレスに割り振る場合であるが、この時はWR_IDXやRD_IDX自体がメモリのアドレスとなり、書き込む前に読み出す必要がない。
【０１２２】
第2番目は、一シンボルの一ビットずつ複数のシンボルを一つのアドレスにおく場合として、第1番目の全体メモリ大きさは同じであるが、一シンボルに該当するビット数ほどメモリを並列におく構造となる。この場合には、チャネルデコーダーのチャネルデコーダーで要求するビット数が変わる場合に能動的に対処できる。ここでは、第２番目の仮定を中心に説明する。
【０１２３】
基本的にメモリを一つのみ使用するので、現在入力されるシンボルが書き込まれる位置を含んだアドレスをまず読み出し、その位置のデータのみ現在入力されたシンボルで上書きすべきである。このために該当アドレスを読み出した後（930）に、wr_strobe信号が1であるかを確認して931、1でなければ、wr_strobe信号が1になるまで繰り返し行い、wr_strobe信号が1であるならば、入力されたシンボルが書き込まれる位置のデータのみ上書きするためにマスクを作る（940）。ここで、wr_strobe信号は、入力シンボルが有効であるかを示す制御信号であると見ることができる。そして、マスクは、入力シンボルが0であるならば、そのシンボルが書き込まれる位置のみ0とし、残りは1に作って該当アドレスを読み出す過程930で読み出したデータと論理積を行うようにし、入力シンボルが1であるならば、そのシンボルが書き込まれる位置のみ1にし、残りは0にして該当メモリを読み出す過程930で読み出したデータと論理和を行う方法で該当位置のシンボルのみ上書きする。
【０１２４】
ここで、二つの事項が考えられる。その第1は、メモリをデュアルポートラム(Dual Port RAM)を使用することかに対する考慮であり、第2は、シングルポートラム(Single Port RAM)を使用する場合に読み出しと書き込み動作との間の関係に対する考慮である。ここで、デュアルポートラム(Dual Port RAM)を使用すれば、読み出しと書き込みとが各々独立的に動作するために、制御が容易であり、より大きいタイミングマージンが得られるが、大きさと電力消耗の面で損害を受けてしまう。したがって、タイミングが不足しなければ、シングルポートラム(Single Port RAM)を使用することが効率的であるといえる。したがって、シングルポートラム(Single Port RAM)を使用する場合に、読み出しと書き込みとの動作間の関係を表せば以下の通りである。
【０１２５】
以前のフレームをディインターリーブするための読み出し動作を行っている最中に次のフレームのデータが入力されるとき、どのように処理するかに関することである。一般的に内部的に行われる読み出し動作を行う速度が速いと仮定することができるが、最悪の場合に、読み出しと書き込みとの動作速度が同じであれば、二つの動作を交互に行うようにしなければならない。すなわち、読み出し動作のみ行っていれば、毎サイクルごとに読み出し動作が行われ、それに対し、書き込み動作と重なる場合には、書き込み動作のためのタイミングに優先順位をおくべきであり、最悪の場合には、書き込みと読み出しとが交互に発生するようにすべきである。それで、読み出し動作が行われている最中に次のフレームのシンボルが入力される場合には、読み出し動作を止めて入力されるシンボルをまず書き込まなければならない。後述する図１０及び図１１は、このような動作を考慮したものである。したがって、入力されたシンボルのみ書き込まれるようにマスクを作る過程940で、rd_strobeが1になることはこの時に読み出し動作が可能であることを表す信号と見ることができる。結局、該当メモリを読み出す過程930で書き込み動作を行うために該当アドレスを一回読み出し、過程940で入力されたシンボルのみ書き込まれるようにマスクを作りながら実際ディインターリーブのための読み出し動作が同時に行われるようにし、過程950では、前記で作られたマスクと該当メモリとを読み出す過程930で読み出したデータ間に論理和や論理積を行ってその結果をメモリに書き込み、次のシンボルを記録するための位置情報であるWR_IDXをWR_OFFだけ増加させる。そして、フレームに該当するシンボル全体をメモリに記録したかを確認して一フレームのシンボルを全部記録できなかった場合、すなわちiがN-1より小さい場合には、現在まで入力されたシンボルの数であるiと列当りのシンボルの数であるBとを比較して（952）、列が増加する場合には、列間置換を復元するために、過程950で得られたWR_IDXにCOL_OFFとJMP_OFFとを足した値が次の列の第1番目のシンボルを記録するための位置となる（853）。以後、次の列のスタートを表すframe_sync信号を待つ過程920から繰り返し行い、列が増加しない場合には、直ちに該当メモリを読み出す過程930から繰り返し行い、iがN-1より大きいかまたは等しい場合には、第２番目のフレームのための媒介変数を求める過程で説明することにする。
【０１２６】
これまで説明した最初のフレームの記録のために必要な媒介変数の数式を要約すれば、次の通りである。
【０１２７】
Initial value:
WR_OFF <= 1；
WR_IDX <= 0；
JMP_OFF <= 0；
MID_OFF <= B；
Computed value:
RD_OFF <= MID_OFF；
COL_OFF <= RD_OFF x DIFF_COL_IDX；
if i = 0 then
WR_IDX <= 0；
elsif (i mod B)/=0 then
WR_IDX <= WR_IDX + WR_OFF；   (15)
else
WR_IDX <= WR_IDX + WR_OFF + JMP_OFF + COL_OFF；      (16)
end if；
if WR_IDX ≧N then
WR_IDX <= WR_IDX - (N-1)；
end if；
【０１２８】
但し、この時数式(16)のJMP_OFFは、最初フレームであるかデータレートが減少する場合でなければ、0であるので省略できる。
【０１２９】
次に、第1番目のフレームがどのように読み出されるか、そして第２番目のフレームを書き込むための媒介変数がどのように計算されるかを説明する。
【０１３０】
まず、フレーム全体を記録したならば、そのフレームのディインターリーブのために読み出し動作を行っても良いという意味のrd_start信号を1に作って（960）、第２番目のフレームに対する情報を入力されたかを確認して（970）、入力されなかったら、第２番目のフレームに対する情報を入力されるまで繰り返し行い、第２番目のフレームに対する情報が入力される。以後、第２番目のフレームのための媒介変数を再定義するが、WR_OFFは、第1番目のフレームを読み出す順に書き込まれるべきであるので、第1番目のフレームのRD_OFFが第２番目のフレームのWR_OFFとなる。次いで、データレートが変ったかを確認して（880）、変化がなかったり増加すれば、MAX_Bは次のフレームの一つの列に含まれたシンボルの数であるBに更新されてJMP_OFFは0となり（982）、減少すれば、MAX_Bは変化なしにJMP_OFFを求める（981）。この場合、JMP_OFFとNとを比較して（990）、Nが大きければ、"modulo"演算を行うので、次のフレームのMID_OFFは次のフレームのWR_OFFに一つの列に該当するシンボルの数であるBを乗じた値となるが（991）、以後過程920から繰り返し行い、Nが小さければ、"modulo"演算を行ってJMP_OFFを求めた後、過程991に進む。
【０１３１】
ここで、第２番目のフレームのための媒介変数を求める数式を要約すれば、次の通りである。
【０１３２】
WR_OFF <= RD_OFF；      (17)
if MAX_B>B then
JMP_OFF <= (MAX_B - B) x WR_OFF；
If JMP_OFF > (N-1) then
JMP_OFF <= JMP_OFF mod (N-1)；
end if；
else
MAX_B <= B；
JMP_OFF <= 0；
end if；
MID_OFF <= WR_OFF x B；     (18)
if MID_OFF < N then
RD_OFF <= MID_OFF；    (19)
else
MID_OFF <= MID_OFF mod (N-1)；   (20)
end if；
【０１３３】
この場合、数式(17)でWR_OFF=RD_OFFであるので、数式(18)はMID_OFF=RD_OFF×Bにも表すことができる。数式(19)と数式(20)とは、過程920を通して図１２のように求められる。
【０１３４】
このように、次のフレームのための媒介変数を求めた後、次のフレームの第1番目の列のスタートを表すframe_sync信号を待つ過程921に進む。
【０１３５】
図１０及び図１１と図１２のフローチャートを通して書き込まれたシンボルをディインターリーブ順に読み出す方法を図１３に示す。図１３は、図１０及び図１１のrd_startが発生する過程960を説明するものであって、すなわち図１２でCOL_OFFの生成のために求めたRD_OFFを過程1110でラッチしてディインターリーブするシンボルの数をカウントするための変数としてjを0に初期化する（1110）。前述したように、この方法は、シングルポートラム(Single Port RAM)を使用することを仮定したので、書き込み動作に優先順位があり、読み出しと書き込みとが同時に発生し得る。
【０１３６】
以後、まず書き込み動作が行われているかを確認して（1120）、読み出し動作が行われていれば、メモリをディインターリーブの順に読み出せば良いが（1140）、書き込み動作が行われていれば、図１０及び図１１の過程940で渡すrd_strobe信号が1であるかを確認して（1130）、1でなければ、rd_strobe信号が1となるまで待ち、rd_strobe信号が1であるならば、メモリをインターリーブの順に読み出す（1140）。以後、フレームに該当するシンボルを全部ディインターリーブの順に読み出したかを確認するためにjとN-1とを比較する（1150）。
【０１３７】
比較結果、jがN-1より小さい場合、すなわち、まだディインターリーブを行うシンボルが残っているならば、次のシンボルを読み出すためにRD_IDXをRD_OFFだけ増加させ、jは1だけ増加させた後に（1160）、現在書き込み動作が進行中であるかを再び確認する過程1120から繰り返し行う。
【０１３８】
ここで、メモリを読み出すために用いられるRD_IDXは次の数式で表すことができる。
【０１３９】
RD_IDX <= RD_IDX + RD_OFF；
if RD_IDX ≧N then
RD_IDX <= RD_IDX  (N-1)；
end if；
【０１４０】
以上で、列間置換を行い、ブロックインターリーブされたシンボルをディインターリーバメモリに書き込むために必要な媒介変数を求める方法と、どのように書き込まれるか、そしてどのようにディインターリーブ順に読み出されるかを説明した。
【０１４１】
図１４は、本発明に係るディインターリーバを行う装置の実施形態を示す図である。伝送時間間隔が40msであって、処理するフレームの大きさNが24シンボルであるならば、表１を通して分かるように、列の数Cは4であり、各列のシンボル数Bは6シンボルから構成される。便宜上ディインターリーバRAM810のデータ幅を8ビットで仮定したし、残りの媒介変数の計算方法は上記で説明したものと同様である。
【０１４２】
まず、第1番目のフレームがどのように書き込まれるかを説明する。1220は、インターリーブ前のソースシンボルの配列を4Ｘ6行列の形態で示している。これはソースシンボルを行と列の数に合せて行を中心に記録した結果である。過程1230は、インターリーブされ後のシンボルを示しているが、列-1と列-2の順に変わっていることが分かる。ディインターリーバは、常に過程1230に示す順にシンボルが入力される。過程1240は、第1番目のフレーム(伝送時間間隔に入力される四つの列）を記録する過程を示している。前述した図１０及び図１１で説明したように、WR_OFFの初期値が1であり、WR_IDX = WR_IDX + WR_OFFであるので、1ずつ線型的に増加し、インターリーブされた入力シンボルをディインターリーバRAM810に記録する。この場合、WR_IDXの下位3ビットは、8ビットディインターリーバRAM810の一つのアドレス内のインデックスとなり、残りは実アドレスとなる。すなわち、WR_IDXが1であれば、2進数で"〜000001"であるので、現在入力されるシンボルをディインターリーバRAM810の0番地の8ビット中に第２番目のビットであるビット-1に上書きしろという意味であり、もし、WR_IDXが12であれば、2進数で"〜001100"であるので、1番地の8ビット中に第5番目のビットであるビット-4に書き込めという意味となる。このような方法で第1番目のフレームの最初の列が書き込まれた結果が過程1250の最初の列に示されている。すなわち、ディインターリーバメモリの0番地のビット-0(左側)からソースシンボルのインデックス0、ビット-1にソースシンボルのインデックス4、ビット-2にソースシンボルのインデックス8、ビット-3にソースシンボルのインデックス12、ビット-4にソースシンボルのインデックス16、そしてビット-5に最初の列の最後のシンボルである20を記録する。以後、次のシンボルを記録するためのWR_IDXは、1が増加して6になるが、これは、列間置換がおきなかったとき、第２番目の列の第1番目のシンボルである1が入る時は正しいが、実際には列間置換が発生して第3番目の列の第1番目のシンボルである2が入る。すなわち、次の列のインデックスが1でなく2であるので、DIFF_COL_IDX = 2 - 1=1になり、COL_OFF= DIFF_COL_IDX × B = 1 × 6 = 6になって、WR_IDX = WR_IDX + COL_OFF + JMP_OFF = 6 + 6 + 0 = 12に増加することが分かる。このとき、JMP_OFFはデータレートが減少しなかったので0である。したがって、ソースシンボルのインデックス2は、WR_IDXが12であるのでディインターリーバRAM23の1番地のビット-4に記録される。そして、次のシンボルであるソースシンボルのインデックス6は、またWR_IDXが1だけ増加した13、すなわち、ディインターリーバRAM810の1番地ビット-5に記録され、ソースシンボルのインデックス10は14、すなわち、ディインターリーバRAM810の1番地ビット-6に記録され、ソースシンボルのインデックス14は15、すなわち、ディインターリーバRAM810メモリの1番地ビット-7に記録され、ソースシンボルのインデックス18は16、すなわち、ディインターリーバRAM810の2番地ビット-0に記録され、第３番目の列の最後であるソースシンボルのインデックス22は17、すなわち、ディインターリーバRAM810の2番地ビット-1に記録される。次のシンボルを記録するためのWR_IDXは、1だけ増加した18であるが、列が変わるので列間置換を復元するためにDIFF_COL_IDXとCOL_OFFとを求めるべきである。次の列のインデッ��スが3でなく1であるのでDIFF_COL_IDX = 1 - 3 = -2になり、COL_OFF = -2 Ｘ 6 = -12であるのでWR_IDX = 18 - 12 = 6になる。以後、入力される第２番目の列のソースシンボルは再びWR_IDXを1ずつ増加させ記録し、第２番目の列の最後のシンボルである21を記録してから、再び列間置換を復元するためにDIFF_COL_IDXとCOL_OFFの演算が必要である。このとき、DIFF_COL_IDX = 3 - 2 = 1で COL_OFF = 1 Ｘ 6 = 6になってWR_IDX = 12 + 6 = 18になる。以後に入力される第４番目の列の記録のために、WR_IDXを1ずつ増加させ、ディインターリーバRAM810に記録する。過程125は、このような方法で第1番目のフレームに該当する全てのシンボルがディインターリーバRAM810に書き込まれた結果を示す。第1番目のフレームを全部記録した後、過程1260の第1番目の列で示すように、RD_OFF値が決定されるが、上記での説明によれば、初期MID_OFFが Bであるので6になり、この値はN値である24より小さいので、この値がRD_OFFとなる。RD_OFFが決定されれば、RD_IDXはRD_OFFを線型的に足しながら該当インデックスのシンボルを読み出す。この時もWR_IDXと同様に、RD_IDXの下位3ビットはディインターリーバメモリ該当アドレスの8ビット中に一シンボルを示すために用いられ、残りは実際ディインターリーバメモリのアドレスとなる。過程1260でRD_IDXの初期値は0であり、第２番目のシンボルを読み出すためにRD_OFFを足せば、0 + 6 = 6となる。第３番目のシンボルを読み出すために、再びRD_OFFを足せば、6 + 6 = 12になり、このような方法で第４番目は18、第５番目は24になるが、この値はN値である24より大きいので上記で説明したように、N-1の値を引く。すなわち、24 - 23 = 1になる。
【０１４３】
そして、次のRD_IDXは、またRD_OFFを足した1 + 6 = 7、次は、7 + 6 = 13、… 、17 + 6 = 23で求められることを示している。このとき、N値である24より大きいか同じである場合には、上記で説明したように、N-1の値を引く。過程1270は、第２番目のブロックが記録される過程を示す。このとき、第1番目のフレームを読み出す順に第２番目のフレームを記録すべきであるので、第1番目のフレームのRD_OFFである6が第２番目のフレームのWR_OFFになって、WR_IDXが6ずつ増加することが分かり、その以後に記録される方法は第1番目のフレームを記録したことと同様である。第1番目のフレームと同様に、注目すべきことは列間置換を復元するために列が変わるとき、DIFF_COL_IDXとCOL_OFFとを求めるべきであり、この時WR_IDXがCOL_OFFだけ増加しなければならないということである。過程1280は、過程1270の方法で記録された第2番目のフレームの結果を示しており、過程1290は、第２番目のフレームを読み出すためのRD_OFFを求める方法とRD_IDXの演算過程を示している。
【０１４４】
第２番目のフレームのRD_OFFは、WR_OFFにBを乗じた値であるので、6 Ｘ 6 = 36になるが、この値がNより大きいので、"modulo"演算を行って36 mod 23=13になる。したがって、第２番目のフレームを読み出すためのRD_IDXは、13ずつ線型的に増加することが分かり、このとき、RD_IDXがNより大きいか同じであるならば、N-1を引く。このように、発生させたRD_IDXを通して第1番目のフレームと同じ方法でディインターリーバRAM810を読み出せば良い。第３番目のフレームのWR_OFFは、第２番目のフレームのRD_OFFになり、上記で説明したことと同様の読み出しと書き込み動作が繰り返される。
【０１４５】
すなわち、本発明に係るアドレス発生器を利用したインターリーブ/ディインターリーブを行う方法は、インターリーブ/ディインターリーブされるべきソースデータ(インターリーブ)のフレーム(ブロック)、またはインターリーブされたデータ(ディインターリーブ)フレーム(ブロック)を処理することにおいて、入力されるシンボルと出力されるシンボルとの順序が異なるために、インターリーブ/ディインターリーブ処理単位別に必ずメモリに格納するステップを含み、その格納されたフレームを以前フレームとすれば、以前フレームをインターリーブ/ディインターリーブする間に、再び次のフレームに該当するシンボルが入力されてこれを格納することができるようにするメモリを必要とし、次のフレームに該当するシンボルのためにメモリを追加せず、以前フレームのシンボルが読み出された位置に応じて記録する。
【０１４６】
尚、本発明の技術思想は、上記好ましい実施の形態によって具体的に記述されたが、上記した実施の形態はその説明のためのものであって、その制限のためのものでないことに留意されるべきである。また、本発明の技術分野の通常の専門家であるならば、本発明の技術思想の範囲内で種々の実施の形態が可能であることを理解されるべきである。
【０１４７】
【発明の効果】
上記したように本発明によれば、インターリーブとディインターリーブのための効率的なアドレス発生器を使用することにより、多様なサービスを支援するIMT-2000用モデムにおいて要求されるメモリの大きさを約40%程度減らすことができるという効果がある。
【０１４８】
すなわち、本発明によれば、一つのメモリのみでインターリーブとディインターリーブとを行ってメモリの大きさを減らすことにより、高いデータレートを要求するサービスが支援可能なモデムの一つのチップ化が可能になるという効果がある。
【図面の簡単な説明】
【図１】本発明に係るインターリーブを使用するチャネル符号化システムの構成例示図である。
【図２】本発明に利用される単純ブロックインターリーブを行う方法の説明図である。
【図３】本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う装置中、インターリーブを行う装置の一実施形態の構成図である。
【図４】本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う方法中、インターリーブのための書き込みアドレス発生方法の一実施形態のフローチャートである。
【図５】本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う方法中、インターリーブのための書き込みアドレス発生方法の一実施形態のフローチャートである。
【図６】本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う方法中、インターリーブのためのオフセット発生方法の一実施形態のフローチャートである。
【図７】本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う方法中、インターリーブのための読み出しアドレス発生方法の一実施形態のフローチャートである。
【図８】本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う方法中、列間置換を含んだブロックインターリーブを行う方法の一実形態の説明図である。
【図９】本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う装置中、ディインターリーブを行う装置の一実施形態の構成図である。
【図１０】本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う方法中、インターリーブのための書き込みアドレス発生方法の一実施形態のフローチャートである。
【図１１】本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う方法中、インターリーブのための書き込みアドレス発生方法の一実施形態のフローチャートである。
【図１２】本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う方法中、インターリーブのためのオフセット発生方法の一実施形態のフローチャートである。
【図１３】本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う方法中、インターリーブのための読み出しアドレス発生方法の一実施形態のフローチャートである。
【図１４】本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う方法中、列間置換を含んだブロックインターリーブされたデータのディインターリーブを行う過程の一実施形態の説明図である。
【図１５】本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う装置中、ディインターリーブを行う時読み出し/書き込み動作のタイミング図である。
【図１６】本発明に係るアドレス発生器を含んだインターリーブ/ディインターリーブを行う装置中、ディインターリーブを行う時読み出し/書き込み動作のタイミング図である。
【符号の説明】
３１０  インターリーバRAM
３２０、８２０  書き込みアドレス発生器
３３０、８３０  アドレスオフセット発生器
３４０、８４０  読み出しアドレス発生器
３５０、３６０、３７０、８５０、８６０、８７０  多重化器
８１０  ディインターリーバRAM
【図１】
0004728500.tif 000006
【図２】
0004728500.tif 000007
【図３】
0004728500.tif 000008
【図４】
0004728500.tif 000009
【図５】
0004728500.tif 000010
【図６】
0004728500.tif 000011
【図７】
0004728500.tif 000012
【図８】
0004728500.tif 000013
【図９】
0004728500.tif 000014
【図１０】
0004728500.tif 000015
【図１１】
0004728500.tif 000016
【図１２】
0004728500.tif 000017
【図１３】
0004728500.tif 000018
【図１４】
0004728500.tif 000019
【図１５】
0004728500.tif 000020
【図１６】
0004728500.tif 000021