# MATH_IFFT

## 構文

      #include <nitro/math/fft.h>

      void MATH_IFFT( fx32* data, u32 nShift, const fx16* sinTable );

## 引数

data | 変換するデータへのポインタ。変換後のデータは上書きされる。
nShift | 入力複素数の個数に2を底とした対数を取った値。
sinTable | sin 値のテーブルのポインタ。

## 返り値

なし。

## 説明

離散フーリエ変換の逆変換を高速フーリエ変換のアルゴリズムを用いて行います。複素数列を入力とし、複素数列を出力します。
MATH_FFT 関数の逆の操作です。

以下、2nShift(2のnShift乗) を N と置きます。data は fx32 型の長さ 2*N の配列です。 data には N 個の複素数が実数と虚数が交互に格納される形式で渡します。 すなわち、i を虚数単位とすると、入力データは、 `{data[0]+i*data[1], data[2]+i*data[3], ..., data[N*2-2]+i*data[N*2-1]}` という長さ N の複素数列となります。
sinTable は `sinTable[k] = sin( (2π/N) * k ) (k = 0, 1,..., N*3/4-1)` となるように fx16 型の sin 値を代入した、長さ N*3/4 の配列へのポインタです。`MATH_MakeFFTSinTable()`で作成することもできます。
離散フーリエ変換の逆変換結果も複素数列になり、data に入力時と同じ形式で上書きして返されます。

固定小数点数を用いて計算しているため、大きな値を入力として与えると桁あふれを起こす危険があります。 入力値を s32 型として見たときの絶対値が `0x80000000/N` 以上にならないことを目安としてください。 また、順変換と逆変換を行った場合の誤差は最大で FX32_ONE の数倍程度となります。

## 参照

`MATH_MakeFFTSinTable, MATH_FFT, MATH_FFTReal, MATH_IFFTReal`

## 履歴

2005/07/21 sinTable の説明の修正
2005/07/11 説明の修正
2005/05/13 初版