gijyutsu-keisan.com

3.マクロ(VBA)

ここでは、マクロを流用するための説明をします。 ご自身で作成されたソフトウエアに本マクロを流用することに制約はありません。 ご自由にお使いください。
ただし、例えばソフトウエアの破損等を及ぼした場合でも一切の保証は致しません

3.1.モジュール構成

本ソフトウエアのマクロ構成は下図の通りです。
モジュール構成 計算プロシージャは“M60_CalcFourier”のみに記述されています。 従って、このモジュールを他Excelソフトウエアへインポートすることで、簡単に移植可能です。
なお“M41_SetGraph”モジュールや、各シート内にもマクロは記述されていますが、 これらは本ソフトウエアフォーマット用のものですので、他Excelソフトウエア移植時には不要です。

3.2.プロシージャ

“M60_CalcFourier”のみを対象に説明します。

3.2.1.プロシージャ構成

本ソフトウエアは下図のプロシージャ構成となっています。
プロシージャ構成 Functionはセル入力関数に対応するためのデータ引き当てロジックを組んだものです。 フーリエ変換計算の基本ロジックは“Sub CalcDFT”と“Sub CalcFFT”に記述しています。 最低限これらのSubプロシージャをコピーすれば、フーリエ変換計算は可能です。 ただし、下記3つの静的変数を参照しているため、流用する場合はこれらも一緒にコピーするか、各プロシージャ内の変数部分を数値に書き換える等で対応してください。

(1)Public Const pi = 3.14159265358979

円周率で、Sub CalcDFT、Sub CalcFFTの両方で使用しています。

(2)Public Const limPowL = 1

(3)Public Const limPowU = 20

これらはFFTの計算点数制約を与える変数で、Sub CalcFFTで使用しています(上限制約を“>”で指定しているため20となっています)。

3.2.2.Sub CalcDFT

Sub CalcDFT ( errFlag, fout, fin )
errFlag プロシージャ内でエラーが発生した場合、errFlag = Trueになります。
fout( i ,j ) 計算結果を格納する変数で、二次配列になります。 一次iはデータ点数に対応し、二次jは以下となります。
j = 0:実軸
j = 1:虚軸
fin( i ,j ) 計算用データを格納する変数で、二次配列になります。 配列指定する際は、“Redim fin ( データ点数, 1 )”の形で指定して下さい。 一次はデータ点数に対応し、二次jは以下となります。
j=0:実軸
j=1:虚軸(通常、fin( i, 1 ) = 0 (すべてのiに対して))

3.2.3.Sub CalcFFT

このSubプロシージャ1つで、高速フーリエ変換、高速逆フーリエ変換の両方に対応します。
Sub CalcFFT ( errFlag, fout, fin , Optional inv)
errFlag プロシージャ内でエラーが発生した場合、errFlag = Trueになります。
fout( i ,j ) 計算結果を格納する変数で、二次配列になります。 一次iはデータ点数に対応し、二次jは以下となります。
j = 0:実軸
j = 1:虚軸
fin( i ,j ) 計算用データを格納する変数で、二次配列になります。 配列指定する際は、“Redim fin ( データ点数, 1 )”の形で指定して下さい。 一次はデータ点数に対応し、二次jは以下となります。
j=0:実軸
j=1:虚軸(通常、fin( i, 1 ) = 0 (すべてのiに対して))
inv “1”=フーリエ変換、“-1”=フーリエ逆変換となります。 指定しない場合は“1”(フーリエ変換)がデフォルトで適用されます。