(57)【要約】【課題】  Ｋビット以下の任意のＭ系列乱数を生成すること。【解決手段】  マスク回路１はＫビットのビット列を所定のビットパターンでもってマスクし、ＥＸＯＲ回路３はマスクしたビット列に対する排他的論理和演算を行い、反転回路９は排他的論理和演算結果を示すビット値をシフトレジスタ１に保持されているＫビットのビット列を所定の方向にシフトした結果に含めたビット列の各ビットの値の反転／非反転を、パターンテーブル１４中の指示されたビット値に応じて制御し、制御結果のビット列を、Ｋビットで表現される乱数として出力する。【選択図】    図１
2005352904.tif 000002
【特許請求の範囲】
【請求項１】
Ｋビットで表現される乱数を発生する乱数発生方法であって、
メモリに保持されているＫビットのビット列を所定のビットパターンでマスクするマスク工程と、
前記マスク工程でマスクしたビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記メモリに保持されているＫビットのビット列を所定の方向にシフトした結果に含める演算工程と、
所定のビットパターン中の指示されたビット値に応じて、前記演算工程によるビット列中の各ビット値の反転／非反転を制御する第１の反転制御工程と、
前記第１の反転制御工程による処理結果のビット列を、Ｋビットで表現される乱数として出力する出力工程と
を備えることを特徴とする乱数発生方法。
【請求項２】
更に、前記演算工程で演算されたビット列が、ある特定のパターンのビット列であるか否かに応じて、前記所定のビットパターンの反転／非反転を制御する第２の反転制御工程を備えることを特徴とする請求項１に記載の乱数発生方法。
【請求項３】
Ｋビットで表現される乱数を発生する乱数発生方法であって、
メモリに保持されている（Ｋ−１）ビットのビット列を所定のビットパターンでマスクするマスク工程と、
前記マスク工程でマスクしたビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記メモリに保持されている（Ｋ−１）ビットのビット列を所定の方向にシフトした結果に含める第１の演算工程と、
処理する画素の画像上の位置に応じて、前記所定のビットパターン中のビット値を選択する選択工程と、
処理する画素の画像上の位置に応じて、前記選択工程で選択されたビット値を反転させる処理を制御する反転制御工程と、
前記第１の演算工程によるビット列の先頭に前記反転制御工程での処理結果のビットを付加したことにより得られるビット列を、Ｋビットで表現される乱数として出力する出力工程と
を備えることを特徴とする乱数発生方法。
【請求項４】
Ｋビットで表現される乱数を発生する乱数発生装置であって、
Ｋビットのビット列を保持するレジスタと、
前記レジスタが保持するビット列を所定のビットパターンでマスクするマスク手段と、
前記レジスタが保持するビット列を所定の方向にシフトするシフト手段と、
前記マスク手段がマスクしたビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記シフト手段がシフトした前記レジスタ内のビット列に含める演算手段と、
所定のビットパターン中の指示されたビット値に応じて、前記演算手段によるビット列中の各ビット値を反転させる処理を制御する第１の反転制御手段と、
前記第１の反転制御手段による処理結果のビット列を、Ｋビットで表現される乱数として出力する出力手段と
を備えることを特徴とする乱数発生装置。
【請求項５】
Ｋビットで表現される乱数を発生する乱数発生装置であって、
（Ｋ−１）ビットのビット列を保持するレジスタと、
前記レジスタが保持するビット列を所定のビットパターンでマスクするマスク手段と、
前記レジスタが保持するビット列を所定の方向にシフトするシフト手段と、
前記マスク手段がマスクしたビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記シフト手段がシフトした前記レジスタ内のビット列に含める第１の演算手段と、
前記第１の演算手段によるビット列中の所定ビット数分のビット列がある特定のビット列であるか否かに応じて決まるビット値と、所定のビットパターン中の指示されたビット値とに応じて決まるビット値を演算する第２の演算手段と、
前記第１の演算手段で演算されたビット列の先頭に前記第２の演算手段によるビットを付加したことにより得られるビット列を、Ｋビットで表現される乱数として出力する出力手段と
を備えることを特徴とする乱数発生装置。
【請求項６】
コンピュータに請求項１乃至３の何れか１項に記載の乱数発生方法を実行させることを特徴とするプログラム。
【請求項７】
請求項６に記載のプログラムを格納することを特徴とする、コンピュータ読み取り可能な記憶媒体。
【請求項８】
Ｋビットで表現される乱数を発生する乱数発生装置であって、
Ｋビットのビット列を保持する第１のレジスタと、
前記レジスタが保持するビット列から所定のビットを選択する第１の選択手段と、
前記レジスタが保持するビット列を所定の方向にシフトする第１のシフト手段と、
前記選択手段が選択したビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記第１のシフト手段がシフトした前記第１のレジスタ内のビット列に含める第１の演算手段と、
前記第１の演算手段によるビット列中の所定ビット数分のビット列が、ある特定のビット列であるか否かに応じて決まるビット値と、処理する画素の画像上の位置に応じて、前記第１の演算手段によるビット列中の各ビットの値を反転させる処理を制御する反転制御手段と、
前記反転制御手段による処理結果のビット列を、Ｋビットで表現される乱数として出力する出力手段と
を備えることを特徴とする乱数発生装置。
【請求項９】
Ｋビットで表現される乱数を発生する乱数発生装置であって、
（Ｋ−１）ビットのビット列を保持する第１のレジスタと、
前記レジスタが保持するビット列から所定のビットを選択する第１の選択手段と、
前記レジスタが保持するビット列を所定の方向にシフトする第１のシフト手段と、
前記選択手段が選択したビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記第１のシフト手段がシフトした前記第１のレジスタ内のビット列に含める第１の演算手段と、
処理する画素の画像上の位置に応じて、所定のビットパターン中のビット値を選択する選択手段と、
処理する画素の画像上の位置に応じて、前記選択手段により選択されたビットの値を反転させる処理を制御する反転制御手段と、
前記第１の演算手段によるビット列の先頭に前記反転制御手段による処理結果のビットを付加したことにより得られるビット列を、Ｋビットで表現される乱数として出力する出力手段と
を備えることを特徴とする乱数発生装置。
【請求項１０】
Ｋビットのビット列を保持する第２のレジスタと、
前記第２のレジスタが保持するビット列から所定のビットを選択する第２の選択手段と、
前記第２のレジスタが保持するビット列を所定の方向にシフトする第２のシフト手段と、
前記第２の選択手段が選択したビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記第２のシフト手段がシフトした前記第２のレジスタ内のビット列に含める第２の演算手段とを備え、
処理する画像上のライン終端またはライン先頭にて、前記第１のレジスタに前記第２のレジスタの値をロードすることを特徴とする請求項８又は９に記載の乱数発生装置。
【請求項１１】
Ｋビットで表現される乱数を発生する乱数発生方法であって、
メモリに保持されているＫビットのビット列から所定のビットを選択する第１の選択工程と、
前記メモリが保持するビット列を所定の方向にシフトする第１のシフト工程と、
前記選択工程で選択したビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記第１のシフト工程でシフトした前記メモリ内のビット列に含める第１の演算工程と、
前記第１の演算工程によるビット列中の所定ビット数分のビット列が、ある特定のビット列であるか否かに応じて決まるビット値と、処理する画素の画像上の位置に応じて、前記第１の演算工程によるビット列中の各ビットの値を反転させる処理を制御する反転制御工程と、
前記反転制御工程による処理結果のビット列を、Ｋビットで表現される乱数として出力する出力工程と
を備えることを特徴とする乱数発生方法。
【請求項１２】
Ｋビットで表現される乱数を発生する乱数発生方法であって、
メモリに保持されている（Ｋ−１）ビットのビット列から所定のビットを選択する第１の選択工程と、
前記メモリが保持するビット列を所定の方向にシフトする第１のシフト工程と、
前記選択工程で選択したビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記第１のシフト工程でシフトした前記メモリ内のビット列に含める第１の演算工程と、
処理する画素の画像上の位置に応じて、所定のビットパターン中のビット値を選択する選択工程と、
処理する画素の画像上の位置に応じて、前記選択工程により選択されたビットの値を反転させる処理を制御する反転制御工程と、
前記第１の演算工程によるビット列の先頭に前記反転制御工程による処理結果のビットを付加したことにより得られるビット列を、Ｋビットで表現される乱数として出力する出力工程と
を備えることを特徴とする乱数発生方法。
【請求項１３】
メモリが保持するＫビットのビット列から所定のビットを選択する第２の選択工程と、
当該メモリが保持するビット列を所定の方向にシフトする第２のシフト工程と、
前記第２の選択工程で選択したビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記第２のシフト工程でシフトした当該メモリ内のビット列に含める第２の演算工程とを備え、
処理する画像上のライン終端またはライン先頭にて、前記第１のレジスタに前記第２のレジスタの値をロードすることを特徴とする請求項１１又は１２に記載の乱数発生方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、乱数を発生させるための技術に関するものである。
【背景技術】
【０００２】
論理演算を用いる乱数発生方法の一つとしてＭ系列というＬビット長の乱数法がある。これは、ｘN＝ｘN-K＋ｘN-Lという式を用いるもので、用いる数字は０と１だけの１ビット乱数であり、Ｋを決めたとき特定のＬに対して論理的な最上の周期をもつのでＭａｘｉｍｕｍ、ＬｅｎｇｔｈのＭをとってＭ系列とよばれる。Ｋビットの内部状態（ｘN-K，ｘN-K+1，・・・、ｘN-1）が与えられればｘN，ｘN+1以下一意的に値が決まるから、内部状態は２K通りである。上記の方程式の自明の解ｘn＝０を除いて内部状態が２K−１個であり、Ｍ系列ではこれを周期とする。回路的には、シフトレジスタと、その途中の値をフィードバックするＥＸＯＲ（排他的論理和）で構成され、実現する原始多項式に合わせて上記フィードバック構成が決定される。
【特許文献１】特開平０５−２０６７９３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
上述したように、従来の乱数発生方法は、ＬＦＳＲ（Ｌｉｎｅａｒ  Ｆｅｅｄｂａｃｋ  Ｓｈｉｆｔ  Ｒｅｇｉｓｔｅｒ）を用いているため、隣接する数値間に相関性があり、特有のスペクトラムを有している。特に、中・低域の周波数領域にピークがあり、画像処理等に用いる場合、画質妨害が問題となっていた。
【０００４】
また、ＫビットのＬＦＳＲを用いた場合、周期は２Ｋ−１となり、１つの乱数発生器から複数周期の乱数を生成させることは困難であった。また、原始多項式も１つしか実現できなかったので、乱数のパターンも１つに限定されていた。
【０００５】
また、同じ乱数系列を逆方向に生成することも不可能であり、用途が限定されていた。
【０００６】
本発明は上述した課題を解決するためのものであり、Ｋビット以下の任意のＭ系列乱数を生成する為の技術を提供することを目的とする。
【０００７】
また本発明の別の目的としては、視覚的に良好な低域周波数成分の少ない乱数を生成することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の目的を達成するために、例えば本発明の乱数発生方法は以下の構成を備える。
【０００９】
すなわち、Ｋビットで表現される乱数を発生する乱数発生方法であって、
メモリに保持されているＫビットのビット列を所定のビットパターンでマスクするマスク工程と、
前記マスク工程でマスクしたビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記メモリに保持されているＫビットのビット列を所定の方向にシフトした結果に含める演算工程と、
所定のビットパターン中の指示されたビット値に応じて、前記演算工程によるビット列中の各ビット値の反転／非反転を制御する第１の反転制御工程と、
前記第１の反転制御工程による処理結果のビット列を、Ｋビットで表現される乱数として出力する出力工程と
を備えることを特徴とする。
【００１０】
本発明の目的を達成するために、例えば本発明の乱数発生方法は以下の構成を備える。
【００１１】
すなわち、Ｋビットで表現される乱数を発生する乱数発生方法であって、
メモリに保持されている（Ｋ−１）ビットのビット列を所定のビットパターンでマスクするマスク工程と、
前記マスク工程でマスクしたビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記メモリに保持されている（Ｋ−１）ビットのビット列を所定の方向にシフトした結果に含める第１の演算工程と、
処理する画素の画像上の位置に応じて、前記所定のビットパターン中のビット値を選択する選択工程と、
処理する画素の画像上の位置に応じて、前記選択工程で選択されたビット値を反転させる処理を制御する反転制御工程と、
前記第１の演算工程によるビット列の先頭に前記反転制御工程での処理結果のビットを付加したことにより得られるビット列を、Ｋビットで表現される乱数として出力する出力工程と
を備えることを特徴とする。
【００１２】
本発明の目的を達成するために、例えば本発明の乱数発生装置は以下の構成を備える。
【００１３】
すなわち、Ｋビットで表現される乱数を発生する乱数発生装置であって、
Ｋビットのビット列を保持するレジスタと、
前記レジスタが保持するビット列を所定のビットパターンでマスクするマスク手段と、
前記レジスタが保持するビット列を所定の方向にシフトするシフト手段と、
前記マスク手段がマスクしたビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記シフト手段がシフトした前記レジスタ内のビット列に含める演算手段と、
所定のビットパターン中の指示されたビット値に応じて、前記演算手段によるビット列中の各ビット値を反転させる処理を制御する第１の反転制御手段と、
前記第１の反転制御手段による処理結果のビット列を、Ｋビットで表現される乱数として出力する出力手段と
を備えることを特徴とする。
【００１４】
本発明の目的を達成するために、例えば本発明の乱数発生装置は以下の構成を備える。
【００１５】
すなわち、Ｋビットで表現される乱数を発生する乱数発生装置であって、
（Ｋ−１）ビットのビット列を保持するレジスタと、
前記レジスタが保持するビット列を所定のビットパターンでマスクするマスク手段と、
前記レジスタが保持するビット列を所定の方向にシフトするシフト手段と、
前記マスク手段がマスクしたビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記シフト手段がシフトした前記レジスタ内のビット列に含める第１の演算手段と、
前記第１の演算手段によるビット列中の所定ビット数分のビット列がある特定のビット列であるか否かに応じて決まるビット値と、所定のビットパターン中の指示されたビット値とに応じて決まるビット値を演算する第２の演算手段と、
前記第１の演算手段で演算されたビット列の先頭に前記第２の演算手段によるビットを付加したことにより得られるビット列を、Ｋビットで表現される乱数として出力する出力手段と
を備えることを特徴とする。
【００１６】
本発明の目的を達成するために、例えば本発明の乱数発生装置は以下の構成を備える。
【００１７】
すなわち、Ｋビットで表現される乱数を発生する乱数発生装置であって、
Ｋビットのビット列を保持する第１のレジスタと、
前記レジスタが保持するビット列から所定のビットを選択する第１の選択手段と、
前記レジスタが保持するビット列を所定の方向にシフトする第１のシフト手段と、
前記選択手段が選択したビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記第１のシフト手段がシフトした前記第１のレジスタ内のビット列に含める第１の演算手段と、
前記第１の演算手段によるビット列中の所定ビット数分のビット列が、ある特定のビット列であるか否かに応じて決まるビット値と、処理する画素の画像上の位置に応じて、前記第１の演算手段によるビット列中の各ビットの値を反転させる処理を制御する反転制御手段と、
前記反転制御手段による処理結果のビット列を、Ｋビットで表現される乱数として出力する出力手段と
を備えることを特徴とする。
【００１８】
本発明の目的を達成するために、例えば本発明の乱数発生装置は以下の構成を備える。
【００１９】
すなわち、Ｋビットで表現される乱数を発生する乱数発生装置であって、
（Ｋ−１）ビットのビット列を保持する第１のレジスタと、
前記レジスタが保持するビット列から所定のビットを選択する第１の選択手段と、
前記レジスタが保持するビット列を所定の方向にシフトする第１のシフト手段と、
前記選択手段が選択したビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記第１のシフト手段がシフトした前記第１のレジスタ内のビット列に含める第１の演算手段と、
処理する画素の画像上の位置に応じて、所定のビットパターン中のビット値を選択する選択手段と、
処理する画素の画像上の位置に応じて、前記選択手段により選択されたビットの値を反転させる処理を制御する反転制御手段と、
前記第１の演算手段によるビット列の先頭に前記反転制御手段による処理結果のビットを付加したことにより得られるビット列を、Ｋビットで表現される乱数として出力する出力手段と
を備えることを特徴とする。
【００２０】
本発明の目的を達成するために、例えば本発明の乱数発生方法は以下の構成を備える。
【００２１】
すなわち、Ｋビットで表現される乱数を発生する乱数発生方法であって、
メモリに保持されているＫビットのビット列から所定のビットを選択する第１の選択工程と、
前記メモリが保持するビット列を所定の方向にシフトする第１のシフト工程と、
前記選択工程で選択したビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記第１のシフト工程でシフトした前記メモリ内のビット列に含める第１の演算工程と、
前記第１の演算工程によるビット列中の所定ビット数分のビット列が、ある特定のビット列であるか否かに応じて決まるビット値と、処理する画素の画像上の位置に応じて、前記第１の演算工程によるビット列中の各ビットの値を反転させる処理を制御する反転制御工程と、
前記反転制御工程による処理結果のビット列を、Ｋビットで表現される乱数として出力する出力工程と
を備えることを特徴とする。
【００２２】
本発明の目的を達成するために、例えば本発明の乱数発生方法は以下の構成を備える。
【００２３】
すなわち、Ｋビットで表現される乱数を発生する乱数発生方法であって、
メモリに保持されている（Ｋ−１）ビットのビット列から所定のビットを選択する第１の選択工程と、
前記メモリが保持するビット列を所定の方向にシフトする第１のシフト工程と、
前記選択工程で選択したビット列に対する排他的論理和演算を行い、当該排他的論理和演算結果を示すビット値を、前記第１のシフト工程でシフトした前記メモリ内のビット列に含める第１の演算工程と、
処理する画素の画像上の位置に応じて、所定のビットパターン中のビット値を選択する選択工程と、
処理する画素の画像上の位置に応じて、前記選択工程により選択されたビットの値を反転させる処理を制御する反転制御工程と、
前記第１の演算工程によるビット列の先頭に前記反転制御工程による処理結果のビットを付加したことにより得られるビット列を、Ｋビットで表現される乱数として出力する出力工程と
を備えることを特徴とする。
【発明の効果】
【００２４】
本発明の構成により、Ｋビット以下の任意のＭ系列乱数を生成することができる。また、視覚的に良好な低域周波数成分の少ない乱数を生成することができる。
【発明を実施するための最良の形態】
【００２５】
以下添付図面を参照して、本発明の乱数発生装置を乱数発生器に適用した好適な実施形態に従って詳細に説明する。もちろん以下の実施形態は、本願発明の技術分野における当業者による実施を容易にするために開示を提供するものであり、特許請求の範囲によって確定される本願発明の技術的範囲に含まれるほんの一部の実施形態にすぎない。従って、本願明細書に直接的に記載されていない実施形態であっても、技術思想が共通する限り本願発明の技術的範囲に包含されることは当業者にとって自明であろう。
【００２６】
なお、便宜上複数の実施形態を記載するが、これらは個別に発明として成立するだけでなく、もちろん、複数の実施形態を適宜組み合わせることでも発明が成立することは、当業者であれば容易に理解できよう。
【００２７】
［第１の実施形態］
図１は、本実施形態に係る乱数発生器の基本構成を示すブロック図である。本実施形態では、画像を構成する全ての画素に対する乱数を生成する場合について説明する。
【００２８】
同図において、１は保持するビット列を右方向、左方向の両方向にシフト可能なシフトレジスタ、２はシフトレジスタ１から出力されたビット列をマスクするマスク回路、３はＥＸＯＲ回路、４はパターンテーブル、５はライン方向セレクタ、６はラインカウンタ、７は画素方向セレクタ、８は画素カウンタ、９は反転回路である。以下の説明では、シフトレジスタ１のビット数をＫビット（図１ではＫ＝９）、すなわち、９ビットで表現される乱数を発生する乱数発生器とするが、以下の説明の本質は９ビットに限定するものではない。
【００２９】
シフトレジスタ１は保持しているビット列を、乱数を生成する度に１ビット左にシフトする。マスク回路２は、シフトレジスタ１から出力されたビット列のうち、所定のビットのみをマスクしてＥＸＯＲ回路３に出力する。より具体的には、原始多項式に対応したビット以外をマスクするのであるが、例えば、シフトレジスタ１に「１１００１０１００」の９ビットが保持されており（０のインデックスが付けられているメモリ部分には「０」が、１のインデックスが付けられているメモリ部分には「０」が、２のインデックスが付けられているメモリ部分には「１」が、３のインデックスが付けられているメモリ部分には「０」が、４のインデックスが付けられているメモリ部分には「１」が、５のインデックスが付けられているメモリ部分には「０」が、６のインデックスが付けられているメモリ部分には「０」が、７のインデックスが付けられているメモリ部分には「１」が、８のインデックスが付けられているメモリ部分には「１」が保持されている）、原始多項式Ｘ７＋Ｘ＋１による乱数を生成する場合には、マスク回路２ではビット６、ビット０以外をマスクし（即ち上記シフトレジスタの値とマスク値「００１０００００１」との論理積をとる）、マスク回路２は「０００００００００」のビット列を出力する。また、原始多項式Ｘ９＋Ｘ４＋１による乱数を生成する場合には、マスク回路２ではビット８、ビット３以外をマスクし（即ち上記シフトレジスタの値とマスク値「１００００１０００」との論理積をとる）、マスク回路２は「１００００００００」のビット列を出力する。生成されたビット列はＥＸＯＲ回路３に入力される。
【００３０】
ＥＸＯＲ回路３は、マスク回路２から受けたビット列を参照して、フィードバック値を算出する。ＥＸＯＲ回路３はいわゆるパリティビット生成回路と同様の処理を行うものであり、マスク回路２から入力されたビット列において”１”のビット数をカウントし、カウントした数が偶数であれば０を、奇数であれば１を上記フィードバック値として出力する。このフィードバック値は同図の如く、シフトレジスタ１の下位ビット（同図では”０”と示された位置）に入力（フィードバック）される。シフトレジスタ１は、保持しているビット列を左方向に１ビット分シフトした後に、下位ビットにフィードバック値を入力する。そして、シフトレジスタ１は、自身が保持する９ビットのビット列を反転回路９に出力する。
【００３１】
従って、上記マスクのパターンを替えることで、Ｋ次以下の任意の原始多項式を実現できる。
【００３２】
パターンテーブル４は縦Ｈビット、横Ｗビット分のビットを保持するためのメモリであり、同図では縦４ビット、横４ビットの合計１６ビットを保持している。各ビットのビット値は０もしくは１である。
【００３３】
ラインカウンタ６は、処理画像のラインに対応したパターンテーブル４のパターンを読み出すためのカウンタである。すなわち、ラインカウンタ６がカウントしているカウント値は、処理しようとする画素が含まれているラインに対応するパターンテーブル４のラインを示している。ラインカウンタ６によるカウント値はセレクタ５に入力される。ラインカウンタ６によるカウント値をｃとすると、セレクタ５は、パターンテーブル４においてｃ列目の各ますに保持されているビット、すなわち４ビットのビット列を読み出して、後段のセレクタ７に出力する。
【００３４】
画素カウンタ８は、処理する画素の水平方向の位置に対応したパターンテーブル４のパターンを読み出すためのカウンタである。すなわち、画素カウンタ８がカウントしているカウント値は、処理しようとする画素に対応するラインカウンタ６により選択されたパターンテーブル４のラインデータ中のバターンの位置を示している。画素カウンタ８によるカウント値はセレクタ７に入力される。画素カウンタ８によるカウント値をｆとすると、セレクタ７は、セレクタ５から出力された４ビットのビット列においてｆ個目のビットを読み出して後段の反転回路９に出力する。
【００３５】
すなわち、ラインカウンタ６と画素カウンタ８により、パターンテーブル４が保持する１６個のビットのうち１つが指定されることになり、指定されたビットが反転回路９に出力される。換言すれば、この指定されたビットは、処理しようとするラインの位置、このラインにおいて処理しようとする画素の位置によって決まる。
【００３６】
反転回路９はセレクタ７から出力される１ビットを参照し、参照したビット値が１である場合には、シフトレジスタ１から出力される９ビットのビット列を構成する各ビット値を反転させて外部に出力し、参照したビット値が０である場合には、シフトレジスタ１から出力される９ビットのビット列には何もせずに外部に出力する。このようにして反転回路９からは、９ビットでもって表現される乱数が出力される。
【００３７】
以上説明した処理を行えば、処理しようとする画素の位置に応じて、パターンテーブル４が保持する１６個のビットのうち、１つが決定され、決定されたビット値に応じて、シフトレジスタ１が保持するビット列の反転／非反転を制御することができる。これにより、シフトレジスタ１が保持するビット列は２次元的に変調される。例えばパターンテーブル４に１０１０−０１０１−１０１０−０１０１の１６ビットを格納すれば、シフトレジスタ１によって生成された乱数の低周波成分は高周波側にシフトされる。
【００３８】
また、本実施形態による乱数発生方法によれば、発生する乱数の周期は２×（２Ｋ−１）と、従来の周期２Ｋ−１の２倍になり、周期の長い一様乱数を生成することができる。
【００３９】
また、上記反転操作により、乱数値が０となる場合（乱数の全ビットが１の値を反転した場合）が発生するが、０が問題となる場合は乱数の全ビットが１のときの反転を禁止するか、０を全ビットが１のデータに置換すれば、従来と同じ一様乱数となる。なお、同じ乱数系列を逆方向に生成するには上記シフトレジスタのシフト方向を逆にし、上記マスクのＬＳＢとＭＳＢ（Ｋビット以下の場合は、最高次数の位置）を交換するだけでよい。
【００４０】
［第２の実施形態］
図２は、本実施形態に係る乱数発生器の基本構成を示す図である。なお、同図において図１と同じ部分については同じ番号を付けており、その説明は省略する。図２において１１はシフトレジスタ、１２はマスク回路、１３はＥＸＯＲ回路、１４はパターンテーブル、１５はパターン検出回路、１６はラインカウンタ、１７はセレクタ、１８は画素カウンタ、１９はＥＸＯＲ回路、２０はパターンカウンタである。
【００４１】
シフトレジスタ１１、マスク回路１２、ＥＸＯＲ回路１３はそれぞれシフトレジスタ１、マスク回路２、ＥＸＯＲ回路３と同じで、第１の実施形態で説明したように動作するのであるが、マスク回路１２のマスクをマスク回路２のマスクと異ならせることで、上記シフトレジスタ１、マスク回路２、ＥＸＯＲ回路３により生成される乱数と系列（原始多項式）の異なる乱数を生成し、ラインの終端（または先頭）でシフトレジスタ１１の値をシフトレジスタ１にロードすることで上記シフトレジスタ１、マスク回路２、ＥＸＯＲ回路３により生成される乱数のライン間の相関性を排除できるようにしたものである。
【００４２】
パターンテーブル１４にはＭ系列乱数の周期分（２Ｋ−１）のパターンが格納されている。本実施形態ではＫ＝９であるので、パターンテーブル１４には５１１ビット分のビット列のパターンが格納されている。
【００４３】
画素カウンタ１８は、処理しようとする画素の画像上の水平方向の位置に対応したパターンテーブル１４の値を選択するためのカウンタである。
【００４４】
セレクタ１７は、画素カウンタ１８の値よりパターンテーブル１４に保持されている５１１ビットのビット列のうち１つを選択して後段の反転回路１９に出力する。
【００４５】
パターン検出回路１５は、シフトレジスタ１、もしくはシフトレジスタ１１から出力される９ビットのビット列を参照して、このビット列が予め決められたある特定のパターンのビット列であるか否かを判断する。そしてある特定のパターンである場合には画素カウンタ１８がカウントしているカウント値を０にリセットし、パターンカウンタ２０のカウント値を反転させる。
【００４６】
パターンカウンタ２０は、１ビットのカウンタでパターン検出回路１５からの指示がない限りは常に同じ値のカウント値（０もしくは１の値）を出力しており、上述の通り、パターン検出回路１５がある特定のパターンを検出した場合には、このカウント値を反転する。これにより、乱数列に一意に対応した反転パターンが画素カウンタ１８及びセレクタ１７によりＥＸＯＲ回路１９に入力される。
【００４７】
ラインカウンタ１６は１ビットのカウンタで、ライン毎にカウント値を反転させる。従って、ライン毎にも上記反転パターンは反転されることになる。
【００４８】
なお、上記「予め決められたある特定のパターンのビット列」は乱数列と同期をとるためのものであるので、基本的にどのようなパターンのビット列であっても良い。例えば検出を容易にするため、全てのビットが１となるパターンとしても良い。或いは、上記画素カウンタ１８を（２Ｋ−１）進カウンタとし、カウンタのキャリーでパターンカウンタを反転する構成としても良い。この場合はパターン検出回路１５が不要になる。
【００４９】
そしてＥＸＯＲ回路１９は、セレクタ１７からの出力である１ビットとパターンカウンタ２０からの出力である１ビットとラインカウンタ１６からの出力である１ビットとのＥＸＯＲ演算を行い、演算結果の１ビットを反転回路９に出力する。反転回路９は、この演算結果の１ビットが１である場合には、シフトレジスタ１からの９ビットを構成する各ビットを反転させてから反転後の９ビットを外部に出力する。一方、ＥＸＯＲ回路１９による演算結果の１ビットが０である場合には、シフトレジスタ１からの９ビットをそのまま外部に出力する。
【００５０】
上記反転パターンの設定により、用途に応じたスペクトル（周波数特性）を有する乱数が生成可能となる。
【００５１】
上記マスク回路１２のマスクパターンをマスク回路２のマスクパターンに一致させることにより、垂直方向に相関を持たせることも、或いは、周期の異なる乱数系列を生成させるようにしても良い。また、ランダム性を向上させるため、上記シフトレジスタ１１、マスク回路１２、ＥＸＯＲ回路１３にて生成される乱数をライン毎にＮ回生成させてから上記シフトレジスタ１にロードするようにしても良い。特に、シフトレジスタのビット数分（または原始多項式の最高次数分）乱数を空生成させてから上記シフトレジスタ１にロードすれば、ライン間の相関はなくなる。
【００５２】
また、上記パターンテーブル１４を２次元化し、空間周波数を整形するようにしても良い。この場合は、ラインカウンタ１６をシフトレジスタ１１、マスク回路１２、ＥＸＯＲ回路１３にて構成される乱数の周期に合わせ、パターンテーブル１４のラインの選択に用いる。なお、ＥＸＯＲ回路１９はラインカウンタ１６による反転は不要になるので、２入力で良い。
【００５３】
［第３の実施形態］
図３は、本実施形態に係る乱数発生器の基本構成を示す図である。同図において図１，２と同じ部分については同じ番後を付けており、その説明は省略する。同図において、２１，２２はＥＸＯＲ回路、２３，２４，２５はセレクタ、２６はパターン検出回路、２７は画素カウンタ、２８はＥＸＯＲ回路である。
【００５４】
セレクタ２３は、シフトレジスタ１１からの９ビットを受け、このうち９ビット以下の所定数のビット（同図では４ビット）を選択してＥＸＯＲ回路２１に入力する。ＥＸＯＲ回路２１は、入力された４ビットのビット列中の１の数が偶数であれば０を、奇数であれば１を出力し、シフトレジスタ１１に入力する。９次以下の原始多項式の＋１項を除く項数の最大値は４であるので、ＥＸＯＲ回路２１は４入力で充分である。なお、３項選択時は残りの入力として０を選択し、２項選択時は残りの入力に０を選択するか、同じビットを残りの入力として選択する。
【００５５】
同様に、セレクタ２４は、シフトレジスタ１からの９ビットを受け、このうち９ビット以下の所定数のビット（同図では４ビット）を選択してＥＸＯＲ回路２２に入力する。ＥＸＯＲ回路２２は、入力された４ビットのビット列中の１の数が偶数であれば０を、奇数であれば１を出力し、シフトレジスタ１に入力する。
【００５６】
セレクタ２５はシフトレジスタ１からの９ビットのビット列のうち原始多項式の最高次数に対応するビットから所定ビット数分のビット列を抽出して後段のパターン検出回路２６に入力する。
【００５７】
パターン検出回路２６は、セレクタ２５から入力された所定ビット数分のビット列がある特定のパターンのビット列に一致するものであるか否かを判断し、一致する場合には１のビットを後段のＥＸＯＲ回路２８に入力し、一致しない場合には０のビットをＥＸＯＲ回路２８に入力する。
【００５８】
一方、画素カウンタ２７は１ビットのデータを保持しており、乱数列が発生される度にその１ビットを反転させる。すなわち、乱数列が生成される毎に、０，１，０，１，，，というように、０と１を交互に出力することになる。画素カウンタ２７によるカウント値はＥＸＯＲ回路２８に入力される。
【００５９】
ＥＸＯＲ回路２８はパターン検出回路２６からの１ビットと画素カウンタ２７からの１ビットとのＥＸＯＲ演算を行い、演算結果の１ビットを後段のＥＸＯＲ回路１９に出力する。すなわちＥＸＯＲ回路２８は、セレクタ２５から入力された所定ビット数分のビット列がある特定のパターンのビット列に一致するものである場合には、画素カウンタ２７からのビットを反転させる処理を行い、その反転後のビットを後段のＥＸＯＲ回路１９に出力することになる。
【００６０】
例えば、最高次数から４ビットの値が０１０１の場合、Ｍ系列乱数ではシフトレジスタを用いているため以降の乱数のＭＳＢは０１０１の順となる。画素カウンタ２７によるカウント値は乱数が生成される度に反転するので、例えば生成した乱数のＭＳＢが０１０１…の順に出力され、この値に上記反転操作を行った場合、出力される乱数のＭＳＢは００００と連続して同じ値になってしまう。これは、乱数の高周波成分が低周波側に変調されることを意味し、視覚的に検知され易くなる。そこで、乱数のＭＳＢ側から所定ビット数分を抽出し、０１０１のようなパターンを検出して画素カウンタ２７の値を反転し、乱数が低周波側に変調されないようにするのである。
【００６１】
図５は、４次の原始多項式ｘ４＋ｘ＋１の場合のＭＳＢを示す図である。同図に示す如く、上記変更前はサイクル４から８までのＭＳＢが０となっているが（before項参照）、０１０１パターンの検出による反転を行うと（after項参照）、ＭＳＢの０の連続数及び１の連続数は３以下に抑えられていることがわかる。これは上記原始多項式にかかわらず、他の原始多項式においてもＭＳＢの０の連続数及び１の連続数は３以下に抑えられる。なお、００００を１１１１に置き換えれば、上記３０サイクル中に同じ値は２度づつ発生しているので、一様乱数となっており、かつ周期が２倍になっていることがわかる。また、ＥＸＯＲの代わりにＥＸＮＯＲを用いても良い。この場合は１１１１（全てのビットが１）を００００に置き換えればよい。
【００６２】
また、上記セレクタ２４を上記パターン同期信号（パターン検出回路１５の出力または２Ｋ−１進カウンタのキャリー）にて切替えるようにすることで、異なる原始多項式に順次切替えてゆくことが可能となる。これにより一様乱数の特性を維持しつつ周期をさらに拡大することが可能となる。なお、ライン方向の周期の拡大も上記セレクタ２３を切替えることで実現できる。この時の切替えのタイミングはシフトレジスタ１１のシフト動作がとまっている時であれば良いので、容易に切替えが可能である。
【００６３】
そしてＥＸＯＲ回路１９は、入力された全てのビット値に対するＥＸＯＲ演算処理を行い、その演算結果である１ビットを反転回路９に入力する。以降の処理については第１の実施形態と同じである。
【００６４】
なお、本実施形態ではＥＸＯＲ回路２１、２２は４入力としているが、これに限らず例えば２入力としても良い。この場合は一部（ここでは８次）の原始多項式の実現ができなくなるが、実現できなきなる原始多項式の数は少ないので、大きな支障はない。
【００６５】
［第４の実施形態］
図４は、本実施形態に係る乱数発生器の構成を示す図である。同図において図２，３と同じ部分については同じ番号を付けており、その説明は省略する。同図において、３１，３４はシフトレジスタ、３２，３５はマスク回路、３３，３６はＥＸＯＲ回路、２９はＭＳＢテーブル、３０はラインカウンタである。
【００６６】
シフトレジスタ３１、マスク回路３２、ＥＸＯＲ回路３３により構成されるＬＦＳＲによってライン毎に乱数を生成する処理については上記実施形態と同じである。これはシフトレジスタ３４，マスク回路３５，ＥＸＯＲ回路３６により構成されるＬＦＳＲについても同じである。本実施形態では乱数のＭＳＢはＭＳＢテーブル２９を変調して生成するので、上記ＬＦＳＲでもって扱うビット列のビット数は１ビット少なくなる。
【００６７】
ラインカウンタ３０はＭＳＢテーブル２９のラインを選択するためのカウンタで、ラインカウンタ１６と同様にしてラインが切り替わる毎に順次カウントアップし、ＭＳＢテーブル２９のライン数に達するとカウント値を０にリセットし、ＭＳＢテーブル２９のライン数分のカウントを繰り返す。
【００６８】
ＭＳＢテーブル２９には２次元的に乱数のＭＳＢが格納されており、ラインカウンタ３０及び画素カウンタ１８とセレクタ１７により１つのＭＳＢが選択される。この選択については、第１の実施形態と同様に、ラインカウンタでもって列を特定し、画素カウンタ１８でもってこの列のうちの１つのビットを選択することにより成される。
【００６９】
そしてＥＸＯＲ回路１９は、セレクタ１７からの１ビットとパターン検出回路１５、パターンカウンタ２０による１ビットとのＥＸＯＲ演算処理を行い、その演算結果である１ビットを出力する。そして出力されたこの１ビットをシフトレジスタ３１もしくはシフトレジスタ３４からの８ビットのビット列の先頭にＭＳＢとして付加し、合計９ビットのビット列を外部に出力する。
【００７０】
以上の構成により、ＭＳＢテーブル２９の画素方向のサイズをシフトレジスタ３４、マスク回路３５、ＥＸＯＲ回路３６にて構成される乱数の周期に一致させ、また、ライン方向のサイズは、シフトレジスタ３１、マスク回路３２、ＥＸＯＲ回路３３にて構成される乱数の周期に一致させることで、所望の空間周波数特性を持った乱数を生成させることができる。
【００７１】
［第５の実施形態］
第１乃至４の実施形態で説明した乱数発生方法は、図１乃至４に示す如く構成を備えるハードウェアでもって実行していたが、メモリとして機能する部分をコンピュータのＲＡＭ内に設け、メモリとして機能する部分以外のそれぞれの部分を、それぞれの部分の機能をコンピュータのＣＰＵに実行させるためのプログラムの形態でもって実装するようにしても良い。すなわち、第１乃至４の実施形態で説明した乱数発生方法をソフトウェアの形態でもって実装し、これをコンピュータに実行させることで、このコンピュータが上記各実施形態で説明した乱数発生方法を実現させるようにしても良い。その場合、このコンピュータの構成としては周知のＰＣ（パーソナルコンピュータ）やＷＳ（ワークステーション）等が適用可能であり、これらのコンピュータは周知の通り、ＣＰＵやＲＡＭを備える、また、これ以外の構成については特に限定するものではない。
【００７２】
また、このソフトウェアのプログラムをコンピュータに供給する方法についても特に限定するものではなく、周知の通り、ハードディスクドライブ装置からＲＡＭにロードするようにしても良いし、ＬＡＮやインターネットなどのネットワークを介して外部装置からこのコンピュータのＲＡＭにこのソフトウェアのプログラムを供給するようにしても良い。
【００７３】
［その他の実施形態］
本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体（または記憶媒体）を、カメラやプリンタ等の機器のＣＰＵやＭＰＵが記録媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成することになる。
【００７４】
また、カメラやプリンタ等の機器が読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、カメラやプリンタ等の機器上で稼働しているオペレーティングシステム（ＯＳ）などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【００７５】
さらに、記録媒体から読み出されたプログラムコードが、カメラやプリンタ等の機器に挿入された機能拡張カードやカメラやプリンタ等の機器に接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【００７６】
本発明を上記記録媒体に適用する場合、その記録媒体には、先に説明した機能構成に対応するプログラムコードが格納されることになる。
【図面の簡単な説明】
【００７７】
【図１】本発明の第１の実施形態に係る乱数発生器の基本構成を示すブロック図である。
【図２】本発明の第２の実施形態に係る乱数発生器の基本構成を示すブロック図である。
【図３】本発明の第３の実施形態に係る乱数発生器の基本構成を示すブロック図である。
【図４】本発明の第４の実施形態に係る乱数発生器の基本構成を示すブロック図である。
【図５】４次の原始多項式ｘ４＋ｘ＋１の場合のＭＳＢを示す図である。
【図１】
2005352904.tif 000003
【図２】
2005352904.tif 000004
【図３】
2005352904.tif 000005
【図４】
2005352904.tif 000006
【図５】
2005352904.tif 000007