このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
LMS Filter
LMS 適応アルゴリズムを使用した出力、誤差および重みの計算
ライブラリ:
DSP System Toolbox /
Filtering /
Adaptive Filters
DSP System Toolbox HDL Support /
Filtering
説明
LMS Filter ブロックは、5 つの異なるアルゴリズムを使用して適応 FIR フィルターを実装することができます。ブロックは、出力信号 y(n) と目的の信号 d(n) の間で誤差 e(n) を最小化するために必要なフィルターの重みまたは係数を推定します。出力はフィルター処理された入力信号です。これが目的の信号の推定になります。[Error] 端子は目的の信号から出力信号を差し引いた結果を出力します。
このブロックは、特定の状況下で SIMD コード生成もサポートします。詳細は、コード生成を参照してください。
例
端子
入力
Input — 入力信号
スカラー | 列ベクトル
入力信号。スカラーまたは列ベクトルとして指定します。
入力が固定小数点の場合、符号付きでなければなりません。
[アルゴリズム] パラメーターを [符号-誤差 LMS]
、[符号-データ LMS]
または [符号-符号 LMS]
に設定した場合、[Input] 端子経由のデータ入力は実数でなければなりません。
データ型: single
| double
| fixed point
Desired — 目的の信号
スカラー | 列ベクトル
目的の信号。スカラーまたは列ベクトルとして指定します。目的の信号は Input
信号と同じデータ型、実数/複素数および次元をもたなければなりません。
[Input] が固定小数点の場合、目的の信号は符号付き固定小数点でなければなりません。
[アルゴリズム] パラメーターを [符号-誤差 LMS]
、[符号-データ LMS]
または [符号-符号 LMS]
に設定した場合、[Desired] 端子経由のデータ入力は実数でなければなりません。
データ型: single
| double
| fixed point
Step-size — Step-size
スカラー
ステップ サイズ μ を入力します。正規化 LMS 方程式の収束では、0<µ<2 となります。入力の型は Input
端子の型と一致しなければなりません。
[Input] が固定小数点の場合、ステップサイズは符号付き固定小数点でなければなりません。
依存関係
この端子は Specify step size via
パラメーターを [入力端子]
に設定する場合にのみ表示されます。
データ型: single
| double
| fixed point
Adapt — フィルターの重みの更新
スカラー
この端子への入力がゼロより大きい場合、ブロックはフィルターの重みを継続的に更新します。この端子への入力がゼロ以下の場合、フィルターの重みは現在の値を維持します。
依存関係
この端子は Adapt port
パラメーターを [on]
に設定する場合にのみ表示されます。
データ型: single
| double
| int8
| int16
| int32
| Boolean
Reset — フィルターの重みのリセット
スカラー
フィルターの重み値を初期値にリセットする信号。スカラーとして指定します。リセット端子でリセット イベントが検出されるたびに、ブロックはフィルターの重みをリセットします。リセット信号のレートはデータ信号入力と同じレートでなければなりません。
リセット イベントのタイプについては、Reset
パラメーターを参照してください。
依存関係
この端子は、[リセット端子] パラメーターを [立ち上がりエッジ]
、[立ち下がりエッジ]
、[両エッジ]
または [非ゼロのサンプル]
に設定する場合にのみ表示されます。
データ型: single
| double
| int8
| int16
| int32
| Boolean
出力
Output — 目的の信号の推定
スカラー | 列ベクトル
目的の信号の推定。スカラーまたは列ベクトルとして返されます。入力信号と同じサイズ、同じ実数/複素数となります。
出力信号のデータ型は、目的の信号のデータ型と同じです。
データ型: single
| double
| fixed point
Error — 出力信号と目的の信号の誤差
スカラー | 列ベクトル
出力信号と目的の信号の誤差。スカラーまたは列ベクトルとして返されます。この誤差は、目的の信号から出力信号を差し引いた結果です。
誤差信号のデータ型は、目的の信号のデータ型と同じです。
データ型: single
| double
| fixed point
Wts — フィルターの重み
スカラー | 列ベクトル
フィルターの重み。スカラーまたは列ベクトルとして返されます。各反復で、ブロックはこの端子から現在の更新されたフィルターの重みを出力します。
重みのデータ型は、浮動小数点信号の Input
端子の型と一致しなければなりません。固定小数点信号の Weights
パラメーターに従います。
依存関係
この端子は Output filter weights
パラメーターを [On]
に設定する場合にのみ表示されます。
データ型: single
| double
| fixed point
パラメーター
[メイン] タブ
アルゴリズム — アルゴリズムの選択
LMS
(既定値) | 正規化 LMS
| 符号-誤差 LMS
| 符号-データ LMS
| 符号-符号 LMS
フィルターの重みの計算に使用するアルゴリズムを選択します。
フィルター長 — Filter length
32
(既定値) | スカラー
FIR フィルターの重みのベクトルの長さを入力します。
ステップ サイズの指定方法 — ステップ サイズの指定
ダイアログ
(既定値) | 入力端子
ステップ サイズ (mu) — ステップ サイズ
0.1
(既定値) | 正のスカラー
ステップ サイズ μ を入力します。正規化 LMS 方程式の収束では、0<µ<2 となります。
調整可能: Yes
依存関係
このパラメーターは、Specify step size via
パラメーターを [ダイアログ]
に設定した場合にのみ表示されます。
漏れ係数 (0 ~ 1) — 漏れ係数
1.0
(既定値) | スカラー
漏れ係数 0 < 1 – μα ≤ 1 を入力します。
調整可能: Yes
フィルターの重みの初期値 — フィルターの重みの初期値
0
(既定値) | ベクトル | スカラー
フィルターの重みの初期値 w(0) をベクトルまたはスカラーとして入力します。スカラーを入力すると、ブロックはこのスカラー値を使ってフィルターの重みのベクトルを作成します。このベクトルの長さはフィルター長に等しく、値はすべてこのスカラー値と等しくなります。
Adapt 端子 — Adapt 端子を有効にする
on
(既定値) | off
このチェック ボックスをオンにすると Adapt
入力端子が有効になります。
リセット端子 — リセット端子
なし
(既定値) | 立ち上がりエッジ
| 立ち下がりエッジ
| 両エッジ
| 非ゼロのサンプル
フィルターの重み値を初期値にリセットするには、[リセット端子] パラメーターを使用します。リセット信号はデータ信号入力と同じレートでなければなりません。
[なし]
を選択して Reset
端子を無効にします。[Reset] 端子を有効にするには、リストから次のいずれかを選択します。
立ち上がりエッジ
— [Reset] の入力が次のいずれかを行うときにリセット操作をトリガーします。負の値から正の値またはゼロに立ち上がる
ゼロから正の値に立ち上がる。この場合、立ち上がりは負の値からゼロへの立ち上がりと連続していません (次の図を参照)。
立ち下がりエッジ
— [Reset] の入力が次のいずれかを行うときにリセット操作をトリガーします。正の値から負の値またはゼロに立ち下がる
ゼロから負の値に立ち下がる。この場合、立ち下がりは正の値からゼロへの立ち下がりと連続していません (次の図を参照)。
両エッジ
— [Reset] の入力が[立ち上がりエッジ]
または[立ち下がりエッジ]
の場合、リセット操作をトリガーします。非ゼロのサンプル
— Reset の入力が非ゼロの各サンプル時間でリセット操作をトリガーします。
フィルターの重みの出力 — フィルターの重みの出力
on
(既定値) | off
[Output filter weights] パラメーターを選択して Wts
端子からフィルターの重みをエクスポートします。各反復で、ブロックはこの端子から現在の更新されたフィルターの重みを出力します。
[データ型] タブ
丸めモード — 丸め演算の方法
負方向
(既定値) | 正方向
| 最も近い偶数方向
| 最も近い正の整数方向
| 最も近い整数方向
| 最も簡潔
| ゼロ方向
整数オーバーフローで飽和 — オーバーフロー アクションの方法
オフ (既定値) | オン
このパラメーターをオンにすると、ブロックは固定小数点演算の結果を飽和させます。このパラメーターをオフにすると、ブロックは固定小数点演算の結果をラップします。saturate
および wrap
の詳細については、固定小数点演算のオーバーフロー モードを参照してください。
パラメーター — パラメーター
1 番目の入力と同じ語長
(既定値) | 語長の指定
| 2 進小数点スケーリング
漏れ係数とステップ サイズの語長と小数部の長さの指定方法を選択します。
1 番目の入力と同じ語長
–– 漏れ係数とステップ サイズの語長がブロックへの最初の入力の語長と一致します。このモードでは、漏れ係数とステップ サイズの小数部の長さは 2 進小数点のみのスケーリングに自動的に設定されます。このスケーリングは、与えられた係数の値と語長で可能な限り最高の精度を提供します。語長の指定
–– 漏れ係数とステップ サイズの語長をビット数で入力できます。このモードでは、漏れ係数とステップ サイズの小数部の長さは 2 進小数点のみのスケーリングに自動的に設定されます。このスケーリングは、与えられた係数の値と語長で可能な限り最高の精度を提供します。2 進小数点スケーリング
–– 漏れ係数とステップ サイズの語長と小数部の長さをビット数で入力できます。漏れ係数とステップ サイズの語長は同じでなければなりませんが、小数部の長さは異なっても構いません。
Specify step size via
パラメーターで [入力端子]
を選択する場合、漏れ係数の語長は Step-size
端子でのステップ サイズ入力の語長と同じになります。漏れ係数の小数部の長さは、漏れ係数の語長に基づいて可能な限り最高の精度に自動的に設定されます。
依存関係
このパラメーターは、[ステップ サイズの指定方法] パラメーターを [ダイアログ]
に設定した場合にのみ表示されます。
重み — フィルターの重みの語長と小数部の長さ
1 番目の入力と同じ
(既定値) | 2 進小数点スケーリング
ブロックのフィルターの重みの語長と小数部の長さを指定する方法を選択します。
1 番目の入力と同じ
–– フィルターの重みの語長と小数部の長さがブロックへの 1 番目の入力のそれらと一致します。2 進小数点スケーリング
–– フィルターの重みの語長と小数部の長さをビット数で入力できます。
Product and quotient — 積と商の語長と小数部の長さ
1 番目の入力と同じ
(既定値) | 2 進小数点スケーリング
u'u、W'u、、 および商 Q の語長と小数部の長さを指定する方法を選択します。ここで、u は入力ベクトル、W はフィルターの重みのベクトル、μ はステップ サイズ、e は誤差、Q は商で、次のように定義できます。
1 番目の入力と同じ
–– これらの量の語長と小数部の長さがブロックへの 1 番目の入力のそれらと一致します。2 進小数点スケーリング
–– これらの量の語長と小数部の長さをビット数で入力できます。これらの量の語長は同じでなければなりませんが、小数部の長さは異なっても構いません。
アキュムレータ — アキュムレータの語長と小数部の長さ
1 番目の入力と同じ
(既定値) | 2 進小数点スケーリング
このパラメーターを使用して、u'u および W'u 演算のアキュムレータの語長と小数部の長さの指定方法を指定します。
メモ
このパラメーターは、 演算のアキュムレータの語長と小数部の長さを指定するためには使用しません。この量のアキュムレータのデータ型は積のデータ型と同じになるように自動的に設定されます。このアキュムレータの最小、最大およびオーバーフロー情報は積の情報の一部としてログ記録されます。オートスケーリングは、この積とアキュムレータを 1 つのデータ型として扱います。
1 番目の入力と同じ
–– これらの特性はブロックへの入力の特性と一致します。2 進小数点スケーリング
–– アキュムレータの語長と小数部の長さをビット数で入力できます。両方のアキュムレータの語長は同じでなければなりませんが、小数部の長さは異なっても構いません。
固定小数点ツールによる変更に対してデータ型の設定をロックする — 固定小数点ツールによるデータ型のオーバーライドの回避
off
(既定値) | on
ブロック ダイアログ ボックスで指定するデータ型が固定小数点ツールによってオーバーライドされないようにするには、このパラメーターを選択します。
ブロックの特性
データ型 |
|
直達 |
|
多次元信号 |
|
可変サイズの信号 |
|
ゼロクロッシング検出 |
|
詳細
LMS Filter のアルゴリズム
Algorithm
パラメーターに [LMS]
を選択すると、ブロックは最小平均二乗 (LMS) アルゴリズムを使ってフィルターの重みを計算します。このアルゴリズムは、次の方程式で定義されます。
このブロックで使用できる各種の LMS 適応フィルター アルゴリズムは、以下のように定義されます。
LMS ––
正規化された LMS ––
正規化された LMS では、重みの更新時に数値が不安定になる可能性を克服するため、小さい正の定数 ε が分母に追加されました。倍精度浮動小数点入力の場合、ε は関数
eps
の出力です。単精度浮動小数点入力の場合、ε はeps("single")
の出力です。固定小数点入力の場合、ε は 0 です。符号-誤差 LMS ––
符号-データ LMS ––
ここで u(n) は実数です。
符号-符号 LMS ––
ここで u(n) は実数です。
変数 | 説明 |
---|---|
n | 現在の時間インデックス |
u(n) | ステップ n でのバッファー済み入力サンプルのベクトル |
u*(n) | ステップ n でのバッファー済み入力サンプルのベクトルの複素共役 |
w(n) | ステップ n でのフィルターの重み推定ベクトル |
y(n) | ステップ n でのフィルター処理された出力 |
e(n) | ステップ n での推定誤差 |
d(n) | ステップ n での目的の応答 |
µ | 適応ステップ サイズ |
α | 漏れ係数 (0 < α ≤ 1) |
ε | 重みの更新時に数値が不安定になる可能性を修正する定数。 |
参照
[1] Hayes, M.H. Statistical Digital Signal Processing and Modeling. New York: John Wiley & Sons, 1996.
拡張機能
C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。
生成されたコードは特定の条件下で関数 memcpy
または関数 memset
(string.h
) に依存します。
Intel® AVX2 コード置換ライブラリを使用した SIMD コードの生成
メモ
Embedded Coder® のライセンスが必要です。
LMS Filter ブロックは、次の条件を満たす場合、Intel AVX2 コード置換ライブラリを使用した SIMD コード生成をサポートします。
[アルゴリズム] を
[LMS]
または[正規化 LMS]
に設定した。入力信号が実数値である。
入力信号のデータ型が
single
またはdouble
である。
このワークフローを使用してこのブロックから SIMD コードを生成するには、Use Intel AVX2 Code Replacement Library to Generate SIMD Code from Simulink Blocksを参照してください。
ターゲット ハードウェアの命令セット拡張を活用した SIMD コードの生成 (R2023b 以降)
メモ
Simulink® Coder™ または Embedded Coder のライセンスが必要です。
次の条件を満たす場合、モデル コンフィギュレーション パラメーター [ターゲット ハードウェアの命令セット拡張を活用] を使用してすべての Intel プラットフォーム上で LMS Filter ブロックの SIMD コードを生成できます。
[アルゴリズム] を
[符号-誤差 LMS]
、[符号-データ LMS]
、[符号-符号 LMS]
、[LMS]
、または[正規化 LMS]
に設定した。入力信号は、実数フィルター係数を使用する場合、実数値である。
入力信号が実数または複素数のフィルター係数をもつ複素数値である。
入力信号のデータ型が
single
またはdouble
である。
さらに、モデルを適切に構成します。Simulink モデル ウィンドウの [モデル化] タブで [モデル設定] をクリックし、[コード生成] でこれらのパラメーターを設定します。
[最適化] ペインで以下を行います。
[ターゲット ハードウェアの命令セット拡張を活用] パラメーターで特定の命令セットを指定する。
[リダクションの最適化] パラメーターを選択する。
[最適化レベル] で、[レベル] を
[最大]
に設定し、[優先度] を[実行速度を最大化]
に設定する。
[インターフェイス] ペインの [ソフトウェア環境] で [非有限数] をクリアする。
このワークフローを使用してこのブロックから SIMD コードを生成するには、Use Target Hardware Instruction Set Extensions to Generate SIMD Code from Simulink Blocks for Intel Platformsを参照してください。
サポートされているブロック上での計算量が多い演算の場合、SIMD 内部パラメーターは Intel プラットフォーム上で生成されたコードのパフォーマンスを大幅に向上させることができます。詳細については、Optimize Code for Reduction Operations by Using SIMD (Simulink Coder)を参照してください。
DSP System Toolbox™ での SIMD コード生成の詳細については、SIMD コード生成を参照してください。
HDL コード生成
HDL Coder™ を使用して FPGA 設計および ASIC 設計のための VHDL、Verilog および SystemVerilog のコードを生成します。
HDL Coder™ は、HDL の実装および合成ロジックに影響を与える、追加の構成オプションを提供します。
既定では、LMS フィルターの実装ではフィルターの FIR セクションについて線形和が使用されます。
次の場合、LMS フィルターはツリー和を実装します (クリティカル パスが短くなります)。
実数データで LMS フィルターを使用している。
アキュムレータの W'u のデータ型の語長が積の W'u のデータ型の語長より
ceil(log2(filter length))
ビット以上長い。アキュムレータの W'u のデータ型と積の W'u のデータ型で小数部の長さが等しい。
ConstrainedOutputPipeline | 設計内で既存の遅延を移動することによって出力に配置するレジスタの数。分散型パイプラインは、これらのレジスタを再分散しません。既定の設定は |
InputPipeline | 生成コードに挿入する入力パイプライン ステージの数。分散型パイプラインと制約付き出力パイプラインは、これらのレジスタを移動できます。既定の設定は |
OutputPipeline | 生成コードに挿入する出力パイプライン ステージの数。分散型パイプラインと制約付き出力パイプラインは、これらのレジスタを移動できます。既定の設定は |
このブロックは、複素信号に対するコード生成をサポートします。
HDL Coder は、LMS フィルターの
[正規化 LMS]
アルゴリズムをサポートしていません。Reset
端子は、Boolean
とunsigned
の入力のみをサポートします。Adapt
端子は、Boolean
の入力のみをサポートします。[フィルター長] は 2 以上でなければなりません。
固定小数点の変換
Fixed-Point Designer™ を使用して固定小数点システムの設計とシミュレーションを行います。
入力が固定小数点の場合、勾配が 2 のべき乗でバイアスが 0 の符号付き整数または符号付き固定小数点値でなければなりません。
固定小数点データ型
次の図は、LMS Filter ブロック内で固定小数点信号に使用されるデータ型を示します。次の表は図で使用されている変数の定義をまとめています。
変数 | 定義 |
---|---|
u | 入力ベクトル |
W | フィルターの重みのベクトル |
µ | ステップ サイズ |
e | エラー |
Q | 商、 |
積 u'u | エネルギー計算の図における積のデータ型 |
アキュムレータ u'u | エネルギー計算の図におけるアキュムレータのデータ型 |
積 W'u | 畳み込みの図における積のデータ型 |
アキュムレータ W'u | 畳み込みの図におけるアキュムレータのデータ型 |
積 | ステップ サイズと誤差の積の図における積のデータ型 |
積 | 重みの更新の図における積とアキュムレータのデータ型1 |
1この量のアキュムレータのデータ型は、積のデータ型と同じになるように自動的に設定されます。このアキュムレータの最小、最大およびオーバーフロー情報は積の情報の一部としてログ記録されます。オートスケーリングは、この積とアキュムレータを 1 つのデータ型として扱います。
ブロック マスクのパラメーター、重み、積、商およびアキュムレータのデータ型を設定できます。このブロックの固定小数点入力、出力およびマスク パラメーターは次の特性をもたなければなりません。
入力信号と目的の信号は同じ語長でなければならないが、その小数部の長さは異なってもよい。
ステップ サイズと漏れ係数は同じ語長でなければならないが、その小数部の長さは異なってもよい。
出力信号と誤差信号は目的の信号と同じ語長と小数部の長さをもっている。
u'u、W'u、 および の演算の商と積の出力は同じ語長でなければならないが、その小数部の長さは異なってもよい。
u'u および W'u の演算のアキュムレータのデータ型は同じ語長でなければならないが、その小数部の長さは異なってもよい。
乗算器への入力の少なくとも 1 つが実数の場合、乗算器の出力は積の出力データ型になります。乗算器への入力が両方とも複素数の場合、乗算の結果はアキュムレータのデータ型になります。詳細は、乗算のデータ型を参照してください。
バージョン履歴
R2006a より前に導入R2023b: 複素信号に対する SIMD コードの生成
R2023b 以降、Embedded Coder がある場合、入力信号が複素数値のときに、モデル コンフィギュレーション パラメーター [ターゲット ハードウェアの命令セット拡張を活用] を使用して LMS Filter ブロックの SIMD コードを生成できます。
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)