このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ifft
逆フーリエ高速変換
説明
例
ベクトルの逆変換
フーリエ変換とその逆変換は、時間と空間でサンプリングされたデータと周波数でサンプリングされたデータを変換します。
ベクトルを作成してそのフーリエ変換を計算します。
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)|")
時間領域信号の離散フーリエ変換は周期的な性質をもっており、スペクトルの前半が正の周波数、後半が負の周波数となり、最初の要素はゼロ周波数用に予約されています。実数信号の場合、周波数領域の離散フーリエ変換は両側スペクトルであり、正の周波数のスペクトルは、時間領域における実数信号のピーク振幅が半分である負の周波数のスペクトルの複素共役です。片側スペクトルの逆フーリエ変換を求めるには、片側スペクトルを両側スペクトルに変換します。
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)")
行列のパディング後の逆変換
関数 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 2 3 4 4 3 2
X = ifft(Y)
X = 1×7
2.7143 -0.7213 -0.0440 -0.0919 -0.0919 -0.0440 -0.7213
Xsym = ifft(Y,'symmetric')
Xsym = 1×7
2.7143 -0.7213 -0.0440 -0.0919 -0.0919 -0.0440 -0.7213
入力引数
Y
— 入力配列
ベクトル | 行列 | 多次元配列
入力配列。ベクトル、行列、または多次元配列として指定します。Y
の型が single
である場合、ifft
はネイティブ レベルの単精度で計算し、X
の型も single
になります。それ以外の場合、X
は double
型として返されます。
データ型: double
| single
| int8
| int16
| int32
| uint8
| uint16
| uint32
| logical
複素数のサポート: あり
n
— 逆変換の長さ
[]
(既定値) | 非負の整数スカラー
逆変換の長さ。[]
、または非負の整数スカラーとして指定します。変換の長さを Y
の長さより大きく指定し、Y
をゼロでパディングすることにより、ifft
のパフォーマンスを改善できます。長さは通常 2 のべき乗、または小さい素数の積として指定します。n
が信号の長さ未満である場合、ifft
は n
番目の要素から後の残りの信号値を無視し、切り捨て後の結果を返します。n
が 0 の場合、ifft
は空の行列を返します。
データ型: double
| single
| int8
| int16
| int32
| uint8
| uint16
| uint32
| logical
dim
— 演算の対象の次元
正の整数スカラー
演算の対象の次元。正の整数のスカラーとして指定します。既定では、dim
はサイズが 1 でない最初の配列次元です。たとえば、行列 Y
を考えます。
ifft(Y,[],1)
は各列の逆フーリエ変換を返します。ifft(Y,[],2)
は各行の逆フーリエ変換を返します。
データ型: double
| single
| int8
| int16
| int32
| uint8
| uint16
| uint32
| logical
symflag
— 対称性のタイプ
'nonsymmetric'
(既定値) | 'symmetric'
対称性のタイプ。'nonsymmetric'
または 'symmetric'
として指定します。丸め誤差により Y
が厳密には共役対称でない場合、ifft(Y,'symmetric')
は、(負の周波数スペクトルにある) 後半の要素を無視することによって Y
が共役対称であるかのように扱います。共役対称性の詳細については、アルゴリズムを参照してください。
詳細
ベクトルの離散フーリエ変換
Y = fft(X)
はフーリエ変換、X = ifft(Y)
は逆フーリエ変換をそれぞれ実装します。長さ n
の X
および Y
の変換は、次式で定義されます。
ここで、
は 1 の n 乗根の 1 つです。
アルゴリズム
関数
ifft
はY
のベクトルが共役対称であるかどうかをテストします。Y
のベクトルが共役対称である場合、逆変換の計算がより高速になり、出力は実数になります。関数 は の場合に共役対称です。ただし、時間領域信号の高速フーリエ変換では、スペクトルの半分が正の周波数、残りの半分が負の周波数となり、最初の要素はゼロ周波数用に予約されています。このため、ベクトル
v
は、v(2:end)
がconj(v(end:-1:2))
と等しい場合に共役対称です。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
symflag
が'symmetric'
の場合を除き、出力は必ず複素数になります。これは虚数部がすべて 0 であっても同様です。コード生成では、オプション
symmetric
が指定されている場合のみ対称アルゴリズムが使用されます。可変サイズ データに関連した制限については、ツールボックス関数のコード生成に対する可変サイズの制限 (MATLAB Coder)を参照してください。
MEX 出力の場合、MATLAB® Coder™ は MATLAB が FFT アルゴリズムに使用するライブラリを使用します。スタンドアロン C/C++ コードの場合、コード ジェネレーターは既定で、FFT ライブラリの呼び出しを生成する代わりに FFT アルゴリズムのコードを生成します。特定のインストールされた FFTW ライブラリの呼び出しを生成するには、FFT ライブラリ コールバック クラスを指定します。FFT ライブラリ コールバック クラスの詳細については、
coder.fftw.StandaloneFFTW3Interface
(MATLAB Coder) を参照してください。MATLAB Function ブロックのシミュレーションの場合、シミュレーション ソフトウェアは MATLAB が FFT アルゴリズムに使用するライブラリを使用します。C/C++ コード生成の場合、コード ジェネレーターは既定で、FFT ライブラリの呼び出しを生成する代わりに FFT アルゴリズム用のコードを生成します。特定のインストールされた FFTW ライブラリの呼び出しを生成するには、FFT ライブラリ コールバック クラスを指定します。FFT ライブラリ コールバック クラスの詳細については、
coder.fftw.StandaloneFFTW3Interface
(MATLAB Coder) を参照してください。コード置換ライブラリ (CRL) を使用して、Neon 拡張を含む ARM® Cortex®-A Processors で実行される最適化されたコードを生成できます。最適化されたコードを生成するには、Embedded Coder® Support Package for ARM Cortex-A Processors (Embedded Coder) をインストールしなければなりません。ARM Cortex-A で生成されたコードは Ne10 ライブラリを使用します。詳細については、Ne10 Conditions for MATLAB Functions to Support ARM Cortex-A Processors (Embedded Coder) を参照してください。
コード置換ライブラリ (CRL) を使用して、ARM Cortex-M Processors で実行される最適化されたコードを生成できます。最適化されたコードを生成するには、Embedded Coder Support Package for ARM Cortex-M Processors (Embedded Coder) をインストールしなければなりません。ARM Cortex-M で生成されたコードでは、CMSIS ライブラリを使用します。詳細については、CMSIS Conditions for MATLAB Functions to Support ARM Cortex-M Processors (Embedded Coder) を参照してください。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
使用上の注意事項および制限事項:
出力は複素数です。
対称性のタイプ
'symmetric'
はサポートされていません。可変サイズ データに関連した制限については、ツールボックス関数のコード生成に対する可変サイズの制限 (MATLAB Coder)を参照してください。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意事項および制限事項:
symflag
が'symmetric'
の場合を除き、出力は必ず複素数になります。これは虚数部がすべて 0 であっても同様です。
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
分散配列
Parallel Computing Toolbox™ を使用して、クラスターの結合メモリ上で大きなアレイを分割します。
この関数は分散配列を完全にサポートしています。詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)