Main Content

ifftn

多次元逆高速フーリエ変換

説明

X = ifftn(Y) は、高速フーリエ変換アルゴリズムを使用して N 次元配列の多次元離散逆フーリエ変換を返します。N 次元逆変換は、Y の各次元に沿って 1 次元逆変換を計算することと等価です。出力 X は、Y と同じサイズです。

X = ifftn(Y,sz) は、ベクトル sz の要素に従って Y を切り捨てるか、Y の末尾をゼロでパディングしてから、逆変換を実行します。sz の各要素は、対応する変換の次元の長さを定義します。たとえば、Y が 5×5×5 の配列の場合、X = ifftn(Y,[8 8 8]) は各次元をゼロでパディングして、8×8×8 の逆変換 X を返します。

X = ifftn(___,symflag) は、前述の構文の任意の入力引数の組み合わせに加えて、Y の対称性を指定します。たとえば、ifftn(Y,'symmetric')Y を共役対称として扱います。

すべて折りたたむ

関数 ifftn を使用して、周波数でサンプリングされた多次元データを、時間または空間でサンプリングされたデータに変換できます。また、関数 ifftn により変換のサイズも制御できます。

3×3×3 の配列を作成し、逆フーリエ変換を計算します。

Y = rand(3,3,3);
ifftn(Y);

Y の次元の末尾をゼロでパディングして、変換のサイズを 8×8×8 にします。

X = ifftn(Y,[8 8 8]);
size(X)
ans = 1×3

     8     8     8

ほぼ共役対称の配列の場合、'symmetric' オプションを指定することで逆フーリエ変換をより高速で計算できます。これにより出力も確実に実数になります。

ほぼ共役対称の配列の 3 次元逆フーリエ変換を計算します。

Y(:,:,1) = [1e-15*i 0; 1 0];
Y(:,:,2) = [0 1; 0 1];
X = ifftn(Y,'symmetric')
X = 
X(:,:,1) =

    0.3750   -0.1250
   -0.1250   -0.1250


X(:,:,2) =

   -0.1250    0.3750
   -0.1250   -0.1250

入力引数

すべて折りたたむ

入力配列。ベクトル、行列、または多次元配列として指定します。Y の型が single である場合、ifftn はネイティブ レベルの単精度で計算し、X の型も single になります。それ以外の場合、Xdouble 型として返されます。

データ型: double | single | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical
複素数のサポート: あり

逆変換の次元の長さ。正の整数のベクトルとして指定します。

データ型: double | single | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

対称性のタイプ。'nonsymmetric' または 'symmetric' として指定します。丸め誤差により Y が厳密には共役対称でない場合、ifftn(Y,'symmetric') は、(負の周波数スペクトルにある) 後半の要素を無視することによって Y が共役対称であるかのように扱います。共役対称性の詳細については、アルゴリズムを参照してください。

詳細

すべて折りたたむ

N 次元逆フーリエ変換

N 次元配列 Y の離散逆フーリエ変換 X は次のように定義されます。

Xp1,p2,...,pN=j1=1m11m1ωm1p1j1j2=1m21m2ωm2p2j2...jN=1mN1mNωmNpNjNYj1,j2,...,jN.

k = 1,2,...,N の各次元の長さは mk であり、ωmk=e2πi/mk は 1 の複素根です。ここで i は虚数単位です。

アルゴリズム

  • 関数 ifftn は多次元配列 Y が共役対称であるかどうかをテストします。Y が共役対称である場合、逆変換の計算がより高速になり、出力は実数になります。

    関数 g(a,b,c,...)g(a,b,c,...)=g*(a,b,c,...) の場合に共役対称です。ただし、多次元時間領域信号の高速フーリエ変換では、スペクトルの半分が正の周波数、残りの半分が負の周波数となり、最初の行、列、ページなどはゼロ周波数用に予約されています。このため、たとえば 3 次元配列 Y は、次の条件がすべて満たされる場合に共役対称です。

    • Y(1,1,2:end) が共役対称であるか、Y(1,1,2:end) = conj(Y(1,1,end:-1:2)) である

    • Y(1,2:end,1) が共役対称であるか、Y(1,2:end,1) = conj(Y(1,end:-1:2,1)) である

    • Y(2:end,1,1) が共役対称であるか、Y(2:end,1,1) = conj(Y(end:-1:2,1,1)) である

    • Y(1,2:end,2:end) が共役中心対称であるか、Y(1,2:end,2:end) = conj(Y(1,end:-1:2,end:-1:2)) である

    • Y(2:end,1,2:end) が共役中心対称であるか、Y(2:end,1,2:end) = conj(Y(end:-1:2,1,end:-1:2)) である

    • Y(2:end,2:end,1) が共役中心対称であるか、Y(2:end,2:end,1) = conj(Y(end:-1:2,end:-1:2,1)) である

    • Y(2:end,2:end,2:end) が共役中心対称であるか、Y(2:end,2:end,2:end) = conj(Y(end:-1:2,end:-1:2,end:-1:2)) である

拡張機能

バージョン履歴

R2006a より前に導入

参考

| | | |