Walsh変換、フーリエ変換を用いた正規分布疑似乱数の生成手法
Walsh transform (WT) and Fourier transform (FT) generating normal/Gaussian
distribution sequences
- Walsh変換、フーリエ変換を用いて正規分布疑似乱数を生成出来ることが分かったので、その手法をご紹介します.(偶然の発見です) 一様分布乱数を正規分布乱数へ簡単に変換出来ます.
- 厳密な解析・特性評価等はまだおこなっていません.
- 特許出願等はおこなっていませんので、どなたでもご自由にご利用いただけます. 学会発表の予定もありません. 学生さんの卒論・修論のネタなどにもご利用ください.
Walsh変換を用いた正規分布疑似乱数の生成(WT法) |
- Nヶの平均 0 の一様分布乱数列をWalsh変換すると、Nヶの正規分布疑似乱数列が得られます. 高速Walsh変換を用いるためにデータ長Nは2の冪(N=2M)とします.

フーリエ変換を用いた正規分布疑似乱数の生成(FT法) |
- Nヶの平均 0 の一様分布乱数列2セットから複素数列を生成してフーリエ変換します. 変換結果の実部と虚部をそれぞれ取り出すと、Nヶの正規分布疑似乱数列が2セット得られます. 高速フーリエ変換を用いるためにデータ長Nは2の冪(N=2M)とします.

- WT法・FT法で一様分布乱数列を正規分布に変換する基本原理は中心極限定理(CLT, Central Limit Theorem)を用いた手法と同様です. 違いは単純な加算ではなく、重み付け係数付き加算をしていることです.

- Nヶの一様分布乱数の線形結合によりNヶの正規分布乱数 g[n] を作り出しているので、出力 g[n] 間には相関が生じているのではないか?(乱数としての特性が劣化しているのではないか?)という疑義が生じますが、詳細は未確認です. データ長Nが十分に大きければ実用上の問題が生じるほどではない~と期待したいところですが.
. . . .
- 擬似乱数の検定方法として離散フーリエ変換検定というのがあるそうですが、それとWT法・FT法の技術的関連性はよく分かりません.(2025/3/28追記)
- 一様分布乱数の代わりに、-1/1の2値の擬似乱数またはオフセットを除去した2値の擬似乱数列(平均0)を用いても正規分布乱数(シミュレーション結果)を生成できます.(2025/3/29追記)
- 見方を変えると直交変換法(WT法、FT法)は以下のような問題であると考えられます.(2025.3.31追記)
問題の記述は非常に単純ですが、厳密な数学的証明も簡単に出来るでしょうか?
- NヶのN次元直交ベクトル cn があるとき
cn={ cn0, cn1, cn2, ... , cn(N-1) } (n=0, 1, 2, ... , N-1)
cn*ck=0 (n≠k)
- 平均0の乱数unを要素に持つN次元ベクトル u と cn との内積を考える
u={ u0, u1, u2, ... , uN-1 }
u0+u1+u2+ ... +uN-1=0
- Nケの内積 gn はどのような特性を持つだろうか?(特に相関特性は?)
gn=u *cn (n=0, 1, 2, ... , N-1)
- シミュレーションから gn は正規分布乱数となることが確認されていて、これは中心極限定理からも納得出来る結果ではあるが、数学的に厳密な証明や直感的に分かりやすい証明は出来るだろうか?
C言語のサンプル・プログラムとシミュレーション結果 |






Scilabのサンプル・プログラムとシミュレーション結果 |
- 動作確認は Scilab Ver.6 でおこなっています.
- グラフはいずれも一様分布乱数のseedを変えて4回実行したシミュレーション結果を重ね書きしたものです.
- データ長はすべてN=220=1048576です.

上のグラフの形がかなり歪(左右非対称)に見えるので、一様分布乱数のseedを変えてもう一度プロットしてみました(2025.3.28追加)
(SEED='f0a50fa5', 'a5a53c3c', '0000ffff', 'ffff0000')

一様乱数の代わりに-1/1の2値の擬似乱数を用いても正規分布乱数を生成できます.(2025/3/29追記)
左右のグラフは使用した2値の擬似乱数のseedが異なります.(Scilabプログラム pn_walsh_transform_method.sce)






.
- 今まで誰も気が付かなかったのが不思議なほど単純なWT法・FT法・直交変換法を発見するにいたった経緯は次のとおりです.
- 離散時間信号処理(デジタル信号処理)の分野のある特別な試験信号を生成する手法として、周波数領域で信号の振幅周波数特性・位相特性を定義して、その逆フーリエ変換により時間信号を得る~というものがあります.
- ならば同様に周波数領域でランダムな位相特性を定義して、それを逆フーリエ変換すれば特性の良いランダム・ノイズ/擬似乱数が得られるのではないか?と考えて試してみました. 試行錯誤を繰り返しているうちに、適当な擬似乱数をフーリエ変換すれば正規分布特性が得られることに気づき、さらにフーリエ変換の代わりにWalsh変換を使っても良いではないかということになり、最終的に中心極限定理に基づく正規分布乱数生成手法と同じことをやっているのだと理解出来ました.
- このような形で一様分布乱数、正規分布とWalsh変換・フーリエ変換が一つに結びつくとは興味深いことです.(ガウス関数のフーリエ変換がガウス関数になるという既知の性質はあるそうですが)
FFTの使い方(電子科学シリーズ91)、安居院猛、中嶋正之、産報出版、1981(ISBNコードが日本で使われるようになる以前の本です)
FORTRANの算術型GOTO文/計算型GOTO文を目にしたのは何十年ぶりでしょうか. . . .
- 高速フーリエ変換はFFTWを使うのが定番です. ScilabもFFTWを利用しています.