この記事は離散フーリエ変換(DFT)の紹介と、多項式の求解との関連、剰余群に対するDFTについて考えた記事です。
複素数のデータ列
と表せます。
また
なので
となります。
データ列として
とすると
畳み込みの定義では、
フーリエ変換はよく、時間のデータを周波数のデータにする変換、また空間のデータを波数のデータにするという説明がされます。そしてフーリエ変換の実用例として、フーリエ変換により周波数のデータにし、これに高周波成分をカットするローパスフィルタを作用させ、ノイズ除去するという例があります。
ノイズ除去の方法として、移動平均を取るという方法があります。それはデータ点をその近傍でとった平均で置き換えるという操作を全ての点について行うことです。そしてこれは畳み込みという演算になります。さてここで、なにか気づかないでしょうか?そうです!!!周波数フィルタを作用させることと、移動平均をとることは、同じことなのです。これが、 畳み込み定理なのです!!!
複素数になってしまいました。複素共役のペアができていないと、実数のデータには戻りません。
データが3点だと端の影響がでて分かりにくいですが、移動平均のような形になっています。ローパスフィルタによりデータが"ならされた"わけです。
現実には多くの場合
解の形も離散フーリエ変換と類似しています。例えば子葉さんの記事siyoに先の例と同じ式が現れています。次数
という形をしておりe282、
異なる
アルゴリズムの詳細は置いといて、FFTのキモをずばり言います。それは並べ替えです。
このように変形され、カッコの中が小さいサイズのDFTになります。DFTの計算の
Cooley-Turkey法
図と同じことをしてみます。
並べ替え
サイズ3のDFTを以下のように求めて
このように計算量が削減できます。
互いに素な整数
ここで
なので
これより
また
これは中国の剰余定理に基づく対応です。中国の剰余定理は互いに素な
これらの並び換えを使うとDFT行列は下図のようになります。
Prime Factor FFT
これは二重DFTになっていることが分かります。
Prime Factor FFT
Cooley - Turkey 法の最後の式を並び変えると
3つのサイズ2のDFTの計算になることが分かります。Prime-Factor法はCooley Turkey法の出力配列も並び変えすることで、数学的に純粋にしたものという感じに見えます。
サイズが素数のDFT行列
このためこれまでの原理で計算量は削減できません。しかし別の原理によりこの場合も計算量を削減することができます。まず
Raderのアルゴリズム
巡回畳み込みは、畳み込み原理によりFFTにより計算できるので、これも計算量の削減になります。
簡単な
多項式の求解とDFTの類似性、FFTが小さなサイズのDFTに帰着させる方法であることから、多項式の可解性がFFTの計算と関係しているのではないかと思いました。しかしサイズ6のDFTがサイズ3とサイズ2のDFTに分解でき、3次方程式と2次方程式が解けることから、6次方程式も解けることになりそうですが、そうではないので、まだわからないところです。
いままで実数データに対するDFTの話でしたが、例えば文字列など、値の範囲が限られているデータに対してDFTを行う場合どうなるのでしょうか?例えば円周率の数列の連続する10個の数字の平均が大きくなる位置を探すとき、畳み込みの計算にFFTが使えます。このとき0から9まで範囲しかとらない数値を実数として扱ってしまう無駄が生じるはずです。
まず
ここで
となります。
剰余群の入力配列のデータの節約は即座にできますが、DFTの出力は
この格子は原点から
例えば
二組の実数で表しているところを格子点の座標として表現できれば、容量の節約が
できそうですが、計算機では場合によって加算有限 > 不可算無限となることがありそう簡単ではありません。というのも実数は適当な粗視化で64 bit にしているのに対し、格子点を整数の配列として表すと配列長によっては莫大なデータ量になる可能性があるからです。なので十分少ない加算有限にできなければ意味がありません。
与えられた
を計算するうまい方法はあるか?
剰余群に対するDFTの効率化、高速化を考えるにあたって、FFTのときのように
なんとか数学の問題に翻訳できないかという試みですが、いかがだったでしょうか!!!