FFT
入力の高速フーリエ変換 (FFT)

ライブラリ:
DSP System Toolbox /
Transforms
説明
FFT ブロックは、N 次元の入力配列 u の最初の次元全体において高速フーリエ変換 (FFT) を計算します。ブロックは 2 つの可能な FFT 実装のどちらかを使用します。FFTW ライブラリを基にした実装か、基数 2 のアルゴリズムのコレクションを基にした実装を選択できます。ブロックで実装を選択できるように、[Auto]
を選択できます。FFT 実装の詳細については、アルゴリズムを参照してください。
ユーザー指定の FFT 長 (P と等しくない) では、ゼロ パディングまたは切り捨て、あるいは長さを法とするデータ ラッピングが FFT 演算の前に発生します。P ≤ M の FFT の場合、次のようになります。
y = fft(u,M) % P ≤ M
ラッピング:
y(:,L) = fft(datawrap(u(:,L),M)) % P > M; L = 1,...,N
切り捨て:
y (:,L) = fft(u,M) % P > M; L = 1,...,N
ヒント
入力の長さ P が FFT 長 M より大きい場合、FFT 出力での振幅が増加することがあります。振幅が増加するのは、FFT ブロックが M を法とするデータ ラッピングを使用してすべての使用可能な入力サンプルを保持するためです。
このような振幅の増加を避けるため、入力サンプル P の長さを FFT 長 M まで切り捨てることができます。これを行うには、Pad ブロックをモデル内の FFT ブロックの前に配置します。
端子
入力
出力
Port_1 — 入力の FFT
ベクトル | 行列 | N 次元配列
パラメーター
メイン
FFT implementation — FFT 実装
Auto
(既定値) | Radix-2
| FFTW
このパラメーターを [FFTW]
に設定して、任意の長さの入力信号をサポートします。ブロックは FFTW 実装で生成されたコードを MATLAB® を実行可能なホスト コンピューターのみに制限します。
ビット反転した処理、固定小数点データまたは浮動小数点データ、または Simulink® Coder™ を使った移植可能な C コード生成では、このパラメーターを [Radix-2]
に設定します。M 行 N 列の入力行列の次元 M は、2 のべき乗でなければなりません。他の入力サイズで操作するには、Pad ブロックを使ってこれらの次元を 2 のべき乗にパディングまたは切り捨てをするか、可能な場合は FFTW 実装を選択します。[Radix-2]
モードで使用されるアルゴリズムの詳細については、基数 2 の実装を参照してください。
このパラメーターを [Auto]
に設定して、ブロックが FFT 実装を選択できるようにします。2 のべき乗でない変換の長さの浮動小数点の場合、FFTW アルゴリズムは自動的に選択されます。それ以外の場合は、Radix-2 アルゴリズムが自動的に選択されます。2 のべき乗でない変換の長さの場合、ブロックは生成したコードを MATLAB のホスト コンピューターに制限します。
Output in bit-reversed order — Output in bit-reversed order
off
(既定値) | on
入力要素の順序に対する出力チャネル要素の順序を指定します。このチェック ボックスをオンにすると、出力チャネル要素が入力順序に対してビット反転した順序で表示されます。このチェック ボックスをオフにすると、出力チャネル要素が入力順序に対して線形順に表示されます。
メモ
FFT ブロックは出力をビット反転した順序で計算します。FFT ブロックの出力を線形順にするには、追加のビット反転演算が必要になります。多くの状況では [Output in bit-reversed order] チェック ボックスをオンにすると FFT ブロックの速度を上げることができます。
出力の順序の詳細については、Linear and Bit-Reversed Output Orderを参照してください。
依存関係
このパラメーターを有効にするには、[FFT implementation] を [Auto]
または [Radix-2]
に設定します。
Divide output by FFT length — Divide output by FFT length
off
(既定値) | on
このパラメーターを選択すると、ブロックは FFT 長によって FFT の出力を分割します。このオプションは、FFT の出力をその入力と同じ振幅範囲内に留める必要がある場合に役立ちます。これは特に、固定小数点データ型での作業に役立ちます。
Inherit FFT length from input dimensions — Inherit FFT length from input dimensions
on
(既定値) | off
入力次元から FFT 長を継承する場合に選択します。このチェック ボックスをオンにする場合、入力の長さは 2 のべき乗でなければなりません。
依存関係
このチェック ボックスをオフにする場合、長さを指定する [FFT length] パラメーターが使用できるようになります。
FFT length — FFT length
64
(既定値) | 整数
FFT 長を 2 以上の整数で指定します。
[FFT implementation] パラメーターを Radix-2
に設定する場合または [Output in bit-reversed order] チェック ボックスをオンにする場合、この値は 2 のべき乗でなければなりません。
依存関係
このパラメーターを有効にするには、[Inherit FFT length from input dimensions] チェック ボックスをオフにします。
Wrap input data when FFT length is shorter than input length — 入力のラップまたは切り捨て
on
(既定値) | off
FFT 長に応じて入力をラップするか、切り捨てるかを選択します。このパラメーターをオンにすると、FFT 長が入力の長さよりも短い場合、FFT 演算の前に長さを法とするデータ ラッピングが発生します。このチェック ボックスをオフにすると、FFT 演算の前に入力データが FFT 長に切り捨てられます。
依存関係
このパラメーターを有効にするには、[Inherit FFT length from input dimensions] チェック ボックスをオフにします。
データ型
丸めモード — 丸め方法
Floor
(既定値) | Ceiling
| Convergent
| Nearest
| Round
| Simplest
| Zero
固定小数点演算の丸めモードを選択します。
制限
正弦表の値はこのパラメーターに従わず、常に [Nearest]
に丸められます。
[丸めモード] パラメーターは、以下のすべての条件に一致する場合、数値結果には影響しません。
[乗算出力] のデータ型が次である。
[Inherit: Inherit via internal rule]
。[アキュムレータ] のデータ型が次である。
[Inherit: Inherit via internal rule]
。
これらのデータ型設定を使用すると、ブロックは完全精度モードで動作します。
整数オーバーフローで飽和 — 整数オーバーフローで飽和
off
(既定値) | on
このパラメーターをオンにすると、ブロックは固定小数点演算の結果を飽和させます。このパラメーターをオフにすると、ブロックは固定小数点演算の結果をラップします。saturate
および wrap
の詳細については、固定小数点演算のオーバーフロー モードを参照してください。
制限
[整数オーバーフローで飽和] のパラメーターは、以下のすべての条件に一致する場合、数値結果には影響しません。
[乗算出力] のデータ型が次である。
[Inherit: Inherit via internal rule]
。[アキュムレータ] のデータ型が次である。
[Inherit: Inherit via internal rule]
。
これらのデータ型設定を使用すると、ブロックは完全精度モードで動作します。
正弦表 — 正弦表の値のデータ型
Inherit: Same word length as input
(既定値) | fixdt(1,16)
正弦表の値の語長を指定する方法を選択します。正弦表の値の小数部の長さは常に語長から 1 を引いた値に等しくなります。このパラメーターは以下のように設定できます。
データ型継承ルール。例:
[Inherit: Same word length as input]
有効なデータ型として評価する式。例:
fixdt(1,16)
[データ型アシスタントを表示] ボタン をクリックして、[正弦表] パラメーターの設定を行うための [データ型アシスタント] を表示します。
詳細は、データ型アシスタントを利用したデータ型の指定 (Simulink)を参照してください。
制限
正弦表の値は [丸めモード] パラメーターおよび [整数オーバーフローで飽和] パラメーターには従わず、常に飽和して [Nearest]
に丸められます。
乗算出力 — 乗算出力のデータ型
Inherit: Inherit via internal rule
(既定値) | Inherit: Same as input
| fixdt(1,16,0)
乗算出力のデータ型を指定します。このブロックの乗算出力データ型の使い方を示す図は、固定小数点および乗算のデータ型を参照してください。このパラメーターは以下のように設定できます。
データ型継承ルール。例:
[Inherit: Inherit via internal rule]
。このルールの詳細は、内部ルールによる継承を参照してください。有効なデータ型として評価する式。例:
fixdt(1,16,0)
[データ型アシスタントを表示] ボタン をクリックして、[乗算出力] パラメーターの設定を行うための [データ型アシスタント] を表示します。
詳細は、データ型アシスタントを利用したデータ型の指定 (Simulink)を参照してください。
アキュムレータ — アキュムレータのデータ型
Inherit: Inherit via internal rule
(既定値) | Inherit: Same as input
| Inherit: Same as product output
| fixdt(1,16,0)
アキュムレータのデータ型を指定します。このブロックのアキュムレータ データ型の使い方を示す図は、固定小数点を参照してください。このパラメーターは以下のように設定できます。
データ型継承ルール。例:
[Inherit: Inherit via internal rule]
。このルールの詳細は、内部ルールによる継承を参照してください。有効なデータ型として評価する式。例:
fixdt(1,16,0)
[データ型アシスタントを表示] ボタン をクリックして、[アキュムレータ] パラメーターの設定を行うための [データ型アシスタント] を表示します。
詳細は、データ型アシスタントを利用したデータ型の指定 (Simulink)を参照してください。
出力 — 出力データ型
Inherit: Inherit via internal rule
(既定値) | Inherit: Same as input
| fixdt(1,16,0)
出力データ型を指定します。このブロックの出力データ型の使い方を示す図は、固定小数点を参照してください。このパラメーターは以下のように設定できます。
データ型継承ルール。例:
[Inherit: Inherit via internal rule]
。[Inherit: Inherit via internal rule]
を選択すると、ブロックは出力の語長と小数部の長さを自動的に計算します。理想的な出力の語長と小数部の長さを計算するためにブロックが使用する方程式は、[Divide output by FFT length] チェック ボックスの設定によって異なります。[Divide output by FFT length] チェック ボックスをオンにした場合、理想的な出力の語長と小数部の長さは入力の語長と小数部の長さと同じになります。
[Divide output by FFT length] チェック ボックスをオフにした場合、ブロックは次の方程式に従って理想的な出力の語長と小数部の長さを計算します。
これらの理想的な結果を使用して、内部ルールによって、使用しているハードウェアに適した語長と小数部の長さが選択されます。詳細は、内部ルールによる継承を参照してください。
有効なデータ型として評価する式。例:
fixdt(1,16,0)
[データ型アシスタントを表示] ボタン をクリックして、[出力] パラメーターの設定を行うための [データ型アシスタント] を表示します。
詳細は、信号のデータ型の制御 (Simulink)を参照してください。
出力の [最小値] — ブロックが出力しなければならない最小値
[]
(既定値) | スカラー
ブロックが出力する最小値を指定します。既定値は []
(指定なし) です。Simulink ソフトウェアは、以下を行う際にこの値を使用します。
シミュレーション範囲のチェック (信号範囲の指定 (Simulink)を参照)
固定小数点データ型の自動スケーリング
出力の [最大値] — ブロックが出力しなければならない最大値
[]
(既定値) | スカラー
ブロックが出力する最大値を指定します。既定値は []
(指定なし) です。Simulink ソフトウェアは、以下を行う際にこの値を使用します。
シミュレーション範囲のチェック (信号範囲の指定 (Simulink)を参照)
固定小数点データ型の自動スケーリング
固定小数点ツールによる変更に対してデータ型の設定をロックする — 固定小数点ツールによるデータ型のオーバーライドの回避
off
(既定値) | on
ブロック ダイアログ ボックスで指定するデータ型が固定小数点ツールによってオーバーライドされないようにするには、このパラメーターを選択します。
ブロックの特性
アルゴリズム
FFTW 実装
FFTW 実装は、シミュレーションとコード生成の両方で、2 のべき乗および 2 のべき乗でない変換の長さのサポートを含む、最適化された FFT 計算を提供します。FFTW 実装を使用して生成されたコードは MATLAB を実行可能なコンピューターでのみ実行できます。入力データ型は浮動小数点でなければなりません。
基数 2 の実装
基数 2 の実装は、ビット反転した処理や固定小数点データまたは浮動小数点データをサポートし、ブロックで Simulink Coder を使用した移植可能な C コードを生成できるようにします。M 行 N 列の入力行列の次元 M は、2 のべき乗でなければなりません。他の入力サイズで操作するには、Pad ブロックを使ってこれらの次元を 2 のべき乗にパディングまたは切り捨てをするか、可能な場合は FFTW 実装を選択します。
基数 2 を選択すると、ブロックは次のアルゴリズムの 1 つ以上を実装します。
バタフライ演算
double 信号のアルゴリズム
半分長のアルゴリズム
基数 2 の時間間引き (DIT) アルゴリズム
基数 2 の周波数間引き (DIF) アルゴリズム
実数/複素数の入力 | 出力順序 | FFT 計算に使用するアルゴリズム |
---|---|---|
複素数 | 線形 | ビット反転した演算と基数 2 の DIT |
複素数 | ビット反転 | 基数 2 の DIF |
実数 | 線形 | 半分長および double 信号のアルゴリズムを併用した、ビット反転した演算と基数 2 の DIT |
実数 | ビット反転 | 半分長および double 信号のアルゴリズムを併用した基数 2 の DIF |
DFT を計算する前に実数値のシーケンスから複素数値のシーケンスを形成することにより、実数入力信号での FFT アルゴリズムの効率性が向上する可能性があります。2N+1 の実数入力チャネルがある場合、FFT ブロックは double 信号のアルゴリズムを最初の 2N 入力チャネルに、半分長のアルゴリズムを最後の奇数チャネルに適用して、これらの複素数値のシーケンスを形成します。
固定小数点データ型の実数入力信号では、すべての入力チャネルが同一であっても、最後の奇数チャネルの出力で異なる数値結果が表示されることがあります。この数値の相違は、double 信号のアルゴリズムと半分長のアルゴリズムの相違に起因します。
この数値の相違は、次の 2 つの方法で除去することができます。
固定小数点入力信号に完全精度の演算を使用する
入力データ型を浮動小数点に変更する
double 信号のアルゴリズムの詳細については、[2]、475 ページの「Efficient Computation of the DFT of Two Real Sequences」を参照してください。半分長のアルゴリズムの詳細については、[2]、476 ページの「Efficient Computation of the DFT of a 2N-Point Real Sequence」を参照してください。
特定の状況では、ブロックの基数 2 のアルゴリズムは回転因子のすべての可能な三角関数値を計算します。
ここで、K は M か N のいずれか大きい方の値であり、また です。ブロックはこれらの値をテーブルに格納し、シミュレーション中に取得します。固定小数点と浮動小数点のテーブル エントリ数は、次の表にまとめられています。
N 点 FFT のテーブル エントリ数 | |
---|---|
浮動小数点 | 3N/4 |
固定小数点 | N |
参照
[1] Orfanidis, S. J. Introduction to Signal Processing. Upper Saddle River, NJ: Prentice Hall, 1996, p. 497.
[2] Proakis, John G. and Dimitris G. Manolakis. Digital Signal Processing, 3rd ed. Upper Saddle River, NJ: Prentice Hall, 1996.
[3] FFTW (https://www.fftw.org
)
[4] 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++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
次の条件に該当する場合、このブロックから生成される実行可能ファイルは、MATLAB に付属のプリビルドされたダイナミック ライブラリ ファイル (
.dll
ファイル) に依存します。[FFT implementation] が
[FFTW]
に設定されている。[Inherit FFT length from input dimensions] がオフで、[FFT length] が 2 のべき乗でない値に設定されている。
このブロックから生成されたコードとすべての関連ファイルを zip 圧縮ファイルにパッケージ化するには、関数
packNGo
を使用します。この zip ファイルを使用して、MATLAB がインストールされていない他の開発環境にプロジェクトを移動して解凍し、リビルドすることができます。詳細は、How To Run a Generated Executable Outside MATLABを参照してください。FFT 長が 2 のべき乗の場合は、このブロックからスタンドアロンの C コードおよび C++ コードを生成できます。
固定小数点の変換
Fixed-Point Designer™ を使用して固定小数点システムの設計とシミュレーションを行います。
次の図は、FFT ブロックで固定小数点信号に使用されるデータ型を示します。パラメーターで説明されているように、FFT ダイアログ ボックスの図に表示される [正弦表]、[アキュムレータ]、[乗算出力] および [出力] データ型を設定できます。
FFT ブロックへの入力は、まず出力データ型にキャストされてから出力バッファーに格納されます。各バタフライ段階の後、アキュムレータ データ型で信号が処理され、バタフライの最終出力が出力データ型にキャストし直されます。ブロックは、時間間引き FFT での各バタフライ段階の前と、周波数間引き FFT での各バタフライ段階の後で、回転因数で乗算されます。
乗算器への入力は両方とも複素数であるため、乗算器の出力がアキュムレータ データ型で表示されます。実行される複素数の乗算の詳細については、乗算のデータ型を参照してください。
メモ
ブロックの入力が固定小数点の場合、すべての内部データ型は符号付き固定小数点になります。
バージョン履歴
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)