Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

ifft

逆フーリエ高速変換

説明

X = ifft(Y) は、高速フーリエ変換アルゴリズムを使用して Y の逆離散フーリエ変換を計算します。X のサイズは Y と同じです。

  • Y がベクトルの場合、ifft(Y) はそのベクトルの逆変換を返します。

  • Y が行列の場合、ifft(Y) は行列の各列の逆変換を返します。

  • Y が多次元配列の場合、ifft(Y) は、サイズが 1 ではない最初の次元に沿った値をベクトルとして扱い、各ベクトルの逆変換を返します。

X = ifft(Y,n) は、長さが n になるように Y の末尾をゼロでパディングして、Yn 点の逆フーリエ変換を返します。

X = ifft(Y,n,dim) は、次元 dim に沿った逆フーリエ変換を返します。たとえば、Y が行列の場合、ifft(Y,n,2) は、各行の n 点の逆変換を返します。

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

すべて折りたたむ

フーリエ変換とその逆変換は、時間と空間でサンプリングされたデータと周波数でサンプリングされたデータを変換します。

ベクトルを作成してそのフーリエ変換を計算します。

X = [1 2 3 4 5];
Y = fft(X)
Y = 1×5 complex

  15.0000 + 0.0000i  -2.5000 + 3.4410i  -2.5000 + 0.8123i  -2.5000 - 0.8123i  -2.5000 - 3.4410i

Y の逆変換を計算します。これは元のベクトル X と同じです。

ifft(Y)
ans = 1×5

     1     2     3     4     5

実数信号のフーリエ変換である片側スペクトルの逆フーリエ変換を求めます。

周波数領域で片側スペクトルを読み込みます。このスペクトルのサンプリング周波数とサンプリング周期を表示します。

load Y1spectrum.mat
Fs
Fs = 1000
T
T = 1.0000e-03

片側スペクトルの複素数の大きさをプロットします。

L1 = length(Y1);
f = Fs/(2*L1-1)*(0:L1-1);
plot(f,abs(Y1))
xlabel("f (Hz)")
ylabel("|Y1(f)|")

Figure contains an axes object. The axes object with xlabel f (Hz), ylabel |Y1(f)| contains an object of type line.

時間領域信号の離散フーリエ変換は周期的な性質をもっており、スペクトルの前半が正の周波数、後半が負の周波数となり、最初の要素はゼロ周波数用に予約されています。実数信号の場合、周波数領域の離散フーリエ変換は両側スペクトルであり、正の周波数のスペクトルは、時間領域における実数信号のピーク振幅が半分である負の周波数のスペクトルの複素共役です。片側スペクトルの逆フーリエ変換を求めるには、片側スペクトルを両側スペクトルに変換します。

Y2 = [Y1(1) Y1(2:end)/2 fliplr(conj(Y1(2:end)))/2];

両側スペクトルの逆フーリエ変換を求めて、時間領域で実数信号を復元します。

X = ifft(Y2);

信号をプロットします。

t = (0:length(X)-1)*T;
plot(t,X)
xlabel("t (seconds)")
ylabel("X(t)")

Figure contains an axes object. The axes object with xlabel t (seconds), ylabel X(t) contains an object of type line.

関数 ifft により変換のサイズを制御できます。

3 行 5 列の乱数行列を作成し、各行の 8 点の逆フーリエ変換を計算します。結果の各行の長さは 8 です。

Y = rand(3,5);
n = 8;
X = ifft(Y,n,2);
size(X)
ans = 1×2

     3     8

ほぼ共役対称のベクトルの場合、'symmetric' オプションを指定することで逆フーリエ変換をより高速で計算できます。これにより出力も確実に実数になります。計算によって丸め誤差が生じると、ほぼ共役対称のデータが発生する可能性があります。

ほぼ共役対称のベクトル Y を作成し、逆フーリエ変換を計算します。その場合、'symmetric' オプションを指定する逆変換を計算し、ほぼゼロの虚数部を削除します。

Y = [1 2:4+eps(4) 4:-1:2]
Y = 1×7

    1.0000    2.0000    3.0000    4.0000    4.0000    3.0000    2.0000

X = ifft(Y)
X = 1×7 complex

   2.7143 + 0.0000i  -0.7213 + 0.0000i  -0.0440 - 0.0000i  -0.0919 + 0.0000i  -0.0919 - 0.0000i  -0.0440 + 0.0000i  -0.7213 - 0.0000i

Xsym = ifft(Y,'symmetric')
Xsym = 1×7

    2.7143   -0.7213   -0.0440   -0.0919   -0.0919   -0.0440   -0.7213

入力引数

すべて折りたたむ

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

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

逆変換の長さ。[]、または非負の整数スカラーとして指定します。変換の長さを Y の長さより大きく指定し、Y をゼロでパディングすることにより、ifft のパフォーマンスを改善できます。長さは通常 2 のべき乗、または小さい素数の積として指定します。n が信号の長さ未満である場合、ifftn 番目の要素から後の残りの信号値を無視し、切り捨て後の結果を返します。n が 0 の場合、ifft は空の行列を返します。

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

演算の対象の次元。正の整数のスカラーとして指定します。既定では、dim はサイズが 1 でない最初の配列次元です。たとえば、行列 Y を考えます。

  • ifft(Y,[],1) は各列の逆フーリエ変換を返します。

    ifft(Y,[],1) column-wise operation

  • ifft(Y,[],2) は各行の逆フーリエ変換を返します。

    ifft(Y,[],2) row-wise operation

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

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

詳細

すべて折りたたむ

ベクトルの離散フーリエ変換

Y = fft(X) はフーリエ変換、X = ifft(Y) は逆フーリエ変換をそれぞれ実装します。長さ nX および Y の変換は、次式で定義されます。

Y(k)=j=1nX(j)Wn(j1)(k1)X(j)=1nk=1nY(k)Wn(j1)(k1),

ここで、

Wn=e(2πi)/n

は 1 の n 乗根の 1 つです。

アルゴリズム

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

    関数 g(a)g(a)=g*(a) の場合に共役対称です。ただし、時間領域信号の高速フーリエ変換では、スペクトルの半分が正の周波数、残りの半分が負の周波数となり、最初の要素はゼロ周波数用に予約されています。このため、ベクトル v は、v(2:end)conj(v(end:-1:2)) と等しい場合に共役対称です。

拡張機能

バージョン履歴

R2006a より前に導入