このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
dsp.IFFT
逆離散フーリエ変換 (IDFT)
説明
dsp.IFFT
System object™ は、入力の逆離散フーリエ変換 (IDFT) を計算します。オブジェクトは、入力が実数/複素数のどちらであるか、また、出力が線形順とビット反転順のどちらであるかに応じて、次の 1 つ以上の高速フーリエ変換 (FFT) アルゴリズムを使用します。
入力の IFFT を計算するには、次のようにします。
dsp.IFFT
オブジェクトを作成し、そのプロパティを設定します。関数と同様に、引数を指定してオブジェクトを呼び出します。
System object の機能の詳細については、System object とはを参照してください。
作成
説明
は、列ベクトルまたは N 次元配列の IDFT を計算する ift
= dsp.IFFTIFFT
オブジェクト ift
を返します。列ベクトルまたは N 次元配列の場合、IFFT
オブジェクトは配列の最初の次元に沿って IDFT を計算します。入力が行ベクトルである場合、IFFT
オブジェクトは単一サンプルの IDFT の行を計算し、警告を表示します。
は、各プロパティが指定の値に設定された ift
= dsp.IFFT(Name,Value
)IFFT
オブジェクト ift
を返します。各プロパティ名を一重引用符で囲みます。指定していないプロパティは既定値になります。
プロパティ
特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release
を使用します。
プロパティが "調整可能" の場合、その値をいつでも変更できます。
プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。
FFTImplementation
— FFT の実装
Auto
(既定値) | Radix-2
| FFTW
FFT に使用する実装を Auto
、Radix-2
、または FFTW
として指定します。このプロパティを Radix-2
に設定する場合、FFT の長さは 2 のべき乗でなければなりません。
BitReversedInput
— 入力要素のビット反転順解釈の有効化
false
(既定値) | true
IFFT
オブジェクトへのフーリエ変換された入力要素の順序がビット反転順である場合、このプロパティを true
に設定します。既定の設定は false
で、これは線形順を表します。
依存関係
このプロパティは、FFTLengthSource
プロパティが Auto
の場合にのみ適用されます。
ConjugateSymmetricInput
— 入力の共役対称解釈の有効化
false
(既定値) | true
入力が共役対称である場合、このプロパティを true
に設定して、実数値出力を得ます。実数値シーケンスの離散フーリエ変換は共役対称であり、このプロパティを true
に設定すると IDFT 計算法が最適化されます。共役対称入力に対してこのプロパティを false
に設定すると、出力値が非ゼロの虚数部をもつ複素数になる可能性があります。これは丸め誤差によって発生します。非共役対称入力に対してこのプロパティを true
に設定すると、出力が無効になります。
依存関係
このプロパティは、FFTLengthSource
プロパティが Auto
の場合にのみ適用されます。
Normalize
— FFT 長での出力分割の有効化
true
(既定値) | false
IFFT 出力を FFT 長で分割するかどうかを指定します。既定の設定は true
で、出力の各要素が FFT 長で分割されます。
FFTLengthSource
— FFT 長のソース
Auto
(既定値) | Property
FFT 長の決定方法を Auto
または Property
として指定します。このプロパティを Auto
に設定すると、FFT 長は入力信号の行数と等しくなります。
依存関係
このプロパティは、BitReversedInput
および ConjugateSymmetricInput
の両方が false
である場合にのみ適用されます。
FFTLength
— FFT 長
64
(既定値) | 整数
FFT 長を 2 以上の整数で指定します。
次の条件のいずれかに当てはまる場合、このプロパティは 2 のべき乗でなければなりません。
入力が固定小数点データ型である。
FFTImplementation プロパティが
Radix-2
である。
依存関係
このプロパティは、BitReversedInput
および ConjugateSymmetricInput
プロパティを false
に、FFTLengthSource
プロパティを 'Property'
に設定した場合に適用されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
WrapInput
— 入力のラッピングまたは切り捨てのブール値
true
(既定値) | false
FFTLength
が入力長よりも短い場合に入力データをラップします。このプロパティを true に設定すると、FFTLength
が入力長よりも短い場合、FFT 演算の前に長さを法とするデータ ラッピングが発生します。このプロパティを false に設定すると、FFT 演算の前に入力データが FFTLength
に切り捨てられます。
固定小数点プロパティ
RoundingMethod
— 固定小数点演算の丸め手法
Floor
(既定値) | Ceiling
| Convergent
| Nearest
| Round
| Simplest
| Zero
丸め方法を指定します。
OverflowAction
— 固定小数点演算のオーバーフロー アクション
Wrap
(既定値) | Saturate
オーバーフロー アクションを Wrap
または Saturate
として指定します。
SineTableDataType
— 正弦表の語長と小数部の長さ
Same word length as input
(既定値) | Custom
正弦表のデータ型を Same word length as input
または Custom
として指定します。
CustomSineTableDataType
— 正弦表の語長と小数部の長さ
numerictype([],16)
(既定値) | numerictype
正弦表の固定小数点データ型を Signedness
が Auto
に設定されたスケーリングされていない numerictype
(Fixed-Point Designer) オブジェクトとして指定します。
依存関係
このプロパティは、SineTableDataType
プロパティを Custom
に設定した場合に適用されます。
ProductDataType
— 乗算の語長と小数部の長さ
Full precision
(既定値) | Same as input
| Custom
積のデータ型を Full precision
、Same as input
、または Custom
として指定します。
CustomProductDataType
— 乗算の語長と小数部の長さ
numerictype([],32,30)
(既定値) | numerictype
乗算の固定小数点型を Signedness
が Auto
に設定された、スケーリングされた numerictype
(Fixed-Point Designer) オブジェクトとして指定します。
依存関係
このプロパティは、ProductDataType
プロパティを Custom
に設定した場合に適用されます。
AccumulatorDataType
— アキュムレータの語長と小数部の長さ
Full precision
(既定値) | Same as input
| Same as product
| Custom
アキュムレータのデータ型を Full precision
、Same as input
、Same as product
、または Custom
として指定します。
CustomAccumulatorDataType
— アキュムレータの語長と小数部の長さ
numerictype([],32,30)
(既定値) | numerictype
アキュムレータの固定小数点データ型を Signedness
が Auto
に設定された、スケーリングされた numerictype
(Fixed-Point Designer) オブジェクトとして指定します。
依存関係
このプロパティは、AccumulatorDataType
プロパティを Custom
に設定した場合に適用されます。
OutputDataType
— 出力の語長と小数部の長さ
Full precision
(既定値) | Same as input
| Custom
出力データ型を Full precision
、Same as input
または Custom
に指定します。
CustomOutputDataType
— 出力の語長と小数部の長さ
numerictype([],16,15)
(既定値) | numerictype
出力の固定小数点型を Signedness
が Auto
に設定された、スケーリングされた numerictype
(Fixed-Point Designer) オブジェクトとして指定します。
依存関係
このプロパティは、OutputDataType
プロパティを Custom
に設定した場合に適用されます。
使用法
入力引数
x
— データ入力
ベクトル | 行列 | N 次元配列
データ入力。ベクトル、行列または N 次元配列として指定します。
FFTLengthSource
プロパティが Auto
である場合、最初の次元に沿った x
の長さは、正の 2 の整数乗でなければなりません。FFTLengthSource
プロパティが 'Property'
である場合、最初の次元に沿った x
の長さは、任意の正の整数になり、FFTLength
プロパティは、正の 2 の整数乗でなければなりません。
可変サイズの入力信号は、FFTLengthSource
プロパティが 'Auto'
に設定されている場合にのみ、サポートされます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fi
複素数のサポート: あり
出力引数
y
— 入力信号の逆離散フーリエ変換
ベクトル | 行列 | N 次元配列
入力信号の逆離散フーリエ変換。ベクトル、行列、または N 次元配列として返されます。
FFTLengthSource
プロパティが 'Auto'
に設定されている場合、FFT 長は入力信号の行数と同じになります。FFTLengthSource
プロパティが 'Property'
に設定されている場合、FFT 長は FFTLength
プロパティで指定されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fi
複素数のサポート: あり
オブジェクト関数
オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj
という名前の System object のシステム リソースを解放するには、次の構文を使用します。
release(obj)
例
高エネルギー FFT 係数を使用した正弦波信号の作成
ノイズを含んだ正弦波入力信号の FFT を計算します。信号のエネルギーは、FFT 係数の大きさの二乗として保存されます。信号エネルギーの 99.99% を占める FFT 係数を決定し、その係数の IFFT を取って時間領域信号を再構成します。再構成後の信号と元の信号を比較します。
有限の時間間隔 で定義される時間領域信号 について考えます。信号 のエネルギーは、次の方程式で求められます。
FFT 係数 は、周波数領域の信号値と見なされます。したがって、周波数領域の信号 のエネルギーは、FFT 係数の大きさの二乗和です。
パーセバルの定理によると、時間領域または周波数領域における信号の合計エネルギーは同じです。
初期化
dsp.SineWave
System object を初期化して、44.1 kHz でサンプリングされる、周波数が 1000 Hz の正弦波を生成します。dsp.FFT
および dsp.IFFT
オブジェクトを構築して、入力信号の FFT と IFFT を計算します。
これらの各変換オブジェクトの 'FFTLengthSource'
プロパティは 'Auto'
に設定されます。したがって、FFT 長は入力フレーム サイズと見なされます。この例の入力フレーム サイズは 1020 で、2 のべき乗ではないため、'FFTImplementation'
を 'FFTW'
として選択します。
L = 1020; Sineobject = dsp.SineWave('SamplesPerFrame',L,... 'PhaseOffset',10,... 'SampleRate',44100,... 'Frequency',1000); ft = dsp.FFT('FFTImplementation','FFTW'); ift = dsp.IFFT('FFTImplementation','FFTW',... 'ConjugateSymmetricInput',true); rng(1);
ストリーミング
ノイズを含む入力信号でストリーミングを行います。各フレームの FFT を計算し、信号の 99.99% のエネルギーを構成する係数を決定します。これらの係数の IFFT を取って時間領域信号を再構成します。
numIter = 1000; for Iter = 1:numIter Sinewave1 = Sineobject(); Input = Sinewave1 + 0.01*randn(size(Sinewave1)); FFTCoeff = ft(Input); FFTCoeffMagSq = abs(FFTCoeff).^2; EnergyFreqDomain = (1/L)*sum(FFTCoeffMagSq); [FFTCoeffSorted, ind] = sort(((1/L)*FFTCoeffMagSq),... 1,'descend'); CumFFTCoeffs = cumsum(FFTCoeffSorted); EnergyPercent = (CumFFTCoeffs/EnergyFreqDomain)*100; Vec = find(EnergyPercent > 99.99); FFTCoeffsModified = zeros(L,1); FFTCoeffsModified(ind(1:Vec(1))) = FFTCoeff(ind(1:Vec(1))); ReconstrSignal = ift(FFTCoeffsModified); end
信号の 99.99% のエネルギーは、Vec(1)
によって与えられる FFT 係数の数で表すことができます。
Vec(1)
ans = 296
信号はこれらの係数を使用して効率的に再構成されます。再構成された信号の最後のフレームと元の時間領域信号を比較すると、差が非常に小さくなっており、プロットがほぼ一致していることがわかります。
max(abs(Input-ReconstrSignal))
ans = 0.0431
plot(Input,'*'); hold on; plot(ReconstrSignal,'o'); hold off;
アルゴリズム
このオブジェクトは、IFFT ブロックのリファレンス ページで説明されているアルゴリズム、入力、および出力を実装しています。オブジェクト プロパティは、[出力サンプリング モード] パラメーターが dsp.IFFT
でサポートされないことを除き、ブロック パラメーターに対応しています。
参照
[1] FFTW (https://www.fftw.org
)
[2] Frigo, M. and S. G. Johnson, “FFTW: An Adaptive Software Architecture for the FFT,” Proceedings of the International Conference on Acoustics, Speech, and Signal Processing, Vol. 3, 1998, pp. 1381-1384.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
MATLAB コード生成における System object (MATLAB Coder)を参照してください。
次の条件に該当する場合、この System object から生成される実行可能ファイルは、MATLAB® に付属のプリビルドされたダイナミック ライブラリ ファイル (
.dll
ファイル) に依存します。FFTImplementation
が'FFTW'
に設定されている。FFTImplementation
が'Auto'
に設定されており、FFTLengthSource
が'Property'
に設定されており、FFTLength
が 2 のべき乗でない。
この System object から生成されたコードとすべての関連ファイルを zip 圧縮ファイルにパッケージ化するには、関数
packNGo
を使用します。この zip ファイルを使用して、MATLAB がインストールされていない他の開発環境にプロジェクトを移動して解凍し、リビルドすることができます。詳細については、How To Run a Generated Executable Outside MATLABを参照してください。FFT 長が 2 のべき乗の場合は、この System object からスタンドアロンの C コードおよび C++ コードを生成できます。
バージョン履歴
R2012a で導入
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)