このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
LMS Filter
R2026a最小平均二乗 (LMS) 適応アルゴリズムを使用した出力、誤差、および重みの計算
LMS Filter block

To add a block to a model, double-click the canvas and start typing the block name. Then, select the block from the list.
ライブラリ:
DSP System Toolbox /
Filtering /
Adaptive Filters
DSP System Toolbox HDL Support /
Filtering
説明
LMS Filter ブロックは、5 つの異なるアルゴリズムを使用して適応 FIR フィルターを実装することができます。ブロックは、出力信号 y(n) と目的の信号 d(n) の間で誤差 e(n) を最小化するために必要なフィルターの重みまたは係数を推定します。出力はフィルター処理された入力信号です。これが目的の信号の推定になります。[Error] 端子は目的の信号から出力信号を差し引いた結果を出力します。
このブロックは、特定の状況下で SIMD コード生成もサポートします。詳細については、コード生成を参照してください。
例
端子
入力
入力信号。スカラーまたは列ベクトルとして指定します。
入力が固定小数点の場合、符号付きでなければなりません。
[アルゴリズム] パラメーターを [符号-誤差 LMS]、[符号-データ LMS] または [符号-符号 LMS] に設定した場合、[Input] 端子経由のデータ入力は実数でなければなりません。
データ型: single | double | fixed point
目的の信号。スカラーまたは列ベクトルとして指定します。目的の信号は Input 信号と同じデータ型、実数/複素数および次元をもたなければなりません。
[Input] が固定小数点の場合、目的の信号は符号付き固定小数点でなければなりません。
[アルゴリズム] パラメーターを [符号-誤差 LMS]、[符号-データ LMS] または [符号-符号 LMS] に設定した場合、[Desired] 端子経由のデータ入力は実数でなければなりません。
データ型: single | double | fixed point
ステップ サイズ μ を入力します。正規化 LMS 方程式の収束では、0<µ<2 となります。入力の型は Input 端子の型と一致しなければなりません。
[Input] が固定小数点の場合、ステップサイズは符号付き固定小数点でなければなりません。
依存関係
この端子は Specify step size via パラメーターを [入力端子] に設定する場合にのみ表示されます。
データ型: single | double | fixed point
この端子への入力がゼロより大きい場合、ブロックはフィルターの重みを継続的に更新します。この端子への入力がゼロ以下の場合、フィルターの重みは現在の値を維持します。
依存関係
この端子は Adapt port パラメーターを [on] に設定する場合にのみ表示されます。
データ型: single | double | int8 | int16 | int32 | Boolean
フィルターの重み値を初期値にリセットする信号。スカラーとして指定します。リセット端子でリセット イベントが検出されるたびに、ブロックはフィルターの重みをリセットします。リセット信号のレートはデータ信号入力と同じレートでなければなりません。
リセット イベントのタイプについては、Reset パラメーターを参照してください。
依存関係
この端子は、[リセット端子] パラメーターを [立ち上がりエッジ]、[立ち下がりエッジ]、[両エッジ] または [非ゼロのサンプル] に設定する場合にのみ表示されます。
データ型: single | double | int8 | int16 | int32 | Boolean
出力
目的の信号の推定。スカラーまたは列ベクトルとして返されます。入力信号と同じサイズ、同じ実数/複素数となります。
出力信号のデータ型は、目的の信号のデータ型と同じです。
データ型: single | double | fixed point
出力信号と目的の信号の誤差。スカラーまたは列ベクトルとして返されます。この誤差は、目的の信号から出力信号を差し引いた結果です。
誤差信号のデータ型は、目的の信号のデータ型と同じです。
データ型: single | double | fixed point
フィルターの重み。スカラーまたは列ベクトルとして返されます。各反復で、ブロックはこの端子から現在の更新されたフィルターの重みを出力します。
重みのデータ型は、浮動小数点信号の Input 端子の型と一致しなければなりません。固定小数点信号の Weights パラメーターに従います。
依存関係
この端子は Output filter weights パラメーターを [On] に設定する場合にのみ表示されます。
データ型: single | double | fixed point
パラメーター
[メイン] タブ
フィルターの重みの計算に使用するアルゴリズムを選択します。
FIR フィルターの重みのベクトルの長さを入力します。
ステップ サイズ μ を入力します。正規化 LMS 方程式の収束では、0<µ<2 となります。
調整可能: Yes
依存関係
このパラメーターは、Specify step size via パラメーターを [ダイアログ] に設定した場合にのみ表示されます。
漏れ係数 0 < 1 – μα ≤ 1 を入力します。
調整可能: Yes
フィルターの重みの初期値 w(0) をベクトルまたはスカラーとして入力します。スカラーを入力すると、ブロックはこのスカラー値を使ってフィルターの重みのベクトルを作成します。このベクトルの長さはフィルター長に等しく、値はすべてこのスカラー値と等しくなります。
このチェック ボックスをオンにすると Adapt 入力端子が有効になります。
フィルターの重み値を初期値にリセットするには、[リセット端子] パラメーターを使用します。リセット信号はデータ信号入力と同じレートでなければなりません。
[なし] を選択して Reset 端子を無効にします。[Reset] 端子を有効にするには、リストから次のいずれかを選択します。
立ち上がりエッジ— [Reset] の入力が次のいずれかを行うときにリセット操作をトリガーします。負の値から正の値またはゼロに立ち上がる
ゼロから正の値に立ち上がる。この場合、立ち上がりは負の値からゼロへの立ち上がりと連続していません (次の図を参照)。

立ち下がりエッジ— [Reset] の入力が次のいずれかを行うときにリセット操作をトリガーします。正の値から負の値またはゼロに立ち下がる
ゼロから負の値に立ち下がる。この場合、立ち下がりは正の値からゼロへの立ち下がりと連続していません (次の図を参照)。

両エッジ— [Reset] の入力が[立ち上がりエッジ]または[立ち下がりエッジ]の場合、リセット操作をトリガーします。非ゼロのサンプル— Reset の入力が非ゼロの各サンプル時間でリセット操作をトリガーします。
[Output filter weights] パラメーターを選択して Wts 端子からフィルターの重みをエクスポートします。各反復で、ブロックはこの端子から現在の更新されたフィルターの重みを出力します。
[データ型] タブ
このパラメーターをオンにすると、ブロックは固定小数点演算の結果を飽和させます。このパラメーターをオフにすると、ブロックは固定小数点演算の結果をラップします。saturate および wrap の詳細については、固定小数点演算のオーバーフロー モードを参照してください。
漏れ係数とステップ サイズの語長と小数部の長さの指定方法を選択します。
1 番目の入力と同じ語長— 漏れ係数とステップ サイズの語長がブロックへの最初の入力の語長と一致します。このモードでは、漏れ係数とステップ サイズの小数部の長さは 2 進小数点のみのスケーリングに自動的に設定されます。このスケーリングは、与えられた係数の値と語長で可能な限り最高の精度を提供します。語長の指定— 漏れ係数とステップ サイズの語長をビット数で入力できます。このモードでは、漏れ係数とステップ サイズの小数部の長さは 2 進小数点のみのスケーリングに自動的に設定されます。このスケーリングは、与えられた係数の値と語長で可能な限り最高の精度を提供します。2 進小数点スケーリング— 漏れ係数とステップ サイズの語長と小数部の長さをビット数で入力できます。漏れ係数とステップ サイズの語長は同じでなければなりませんが、小数部の長さは異なっても構いません。
Specify step size via パラメーターで [入力端子] を選択する場合、漏れ係数の語長は Step-size 端子でのステップ サイズ入力の語長と同じになります。漏れ係数の小数部の長さは、漏れ係数の語長に基づいて可能な限り最高の精度に自動的に設定されます。
依存関係
このパラメーターは、[ステップ サイズの指定方法] パラメーターを [ダイアログ] に設定した場合にのみ表示されます。
ブロックのフィルターの重みの語長と小数部の長さを指定する方法を選択します。
1 番目の入力と同じ— フィルターの重みの語長と小数部の長さがブロックへの 1 番目の入力のそれらと一致します。2 進小数点スケーリング— フィルターの重みの語長と小数部の長さをビット数で入力できます。
u'u、W'u、、 および商 Q の語長と小数部の長さを指定する方法を選択します。ここで、u は入力ベクトル、W はフィルターの重みのベクトル、μ はステップ サイズ、e は誤差、Q は商で、次のように定義できます。
1 番目の入力と同じ— これらの量の語長と小数部の長さがブロックへの 1 番目の入力のそれらと一致します。2 進小数点スケーリング— これらの量の語長と小数部の長さをビット数で入力できます。これらの量の語長は同じでなければなりませんが、小数部の長さは異なっても構いません。
このパラメーターを使用して、u'u および W'u 演算のアキュムレータの語長と小数部の長さの指定方法を指定します。
メモ
このパラメーターは、 演算のアキュムレータの語長と小数部の長さを指定するためには使用しません。この量のアキュムレータのデータ型は積のデータ型と同じになるように自動的に設定されます。このアキュムレータの最小、最大およびオーバーフロー情報は積の情報の一部としてログ記録されます。オートスケーリングは、この積とアキュムレータを 1 つのデータ型として扱います。
1 番目の入力と同じ— これらの特性はブロックへの入力の特性と一致します。2 進小数点スケーリング— アキュムレータの語長と小数部の長さをビット数で入力できます。両方のアキュムレータの語長は同じでなければなりませんが、小数部の長さは異なっても構いません。
このブロックのアキュムレータ データ型の使い方を示す図については、固定小数点データ型および乗算のデータ型を参照してください。
ブロック ダイアログ ボックスで指定するデータ型が固定小数点ツールによってオーバーライドされないようにするには、このパラメーターを選択します。
ブロックの特性
データ型 |
|
直達 |
|
多次元信号 |
|
可変サイズの信号 |
|
ゼロクロッシング検出 |
|
詳細
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) |
ε | 重みの更新時に数値が不安定になる可能性を修正する定数。 |
次の図は、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 つが実数の場合、乗算器の出力は積の出力データ型になります。乗算器への入力が両方とも複素数の場合、乗算の結果はアキュムレータのデータ型になります。詳細については、乗算のデータ型を参照してください。
参照
[1] Hayes, M.H. Statistical Digital Signal Processing and Modeling. New York: John Wiley & Sons, 1996.
拡張機能
生成されたコードは特定の条件下で関数 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 プラットフォーム、ARM® Cortex®-A プロセッサ、および Apple シリコン プロセッサ上で LMS Filter ブロックの SIMD コードを生成できます。
[アルゴリズム] を
[符号-誤差 LMS]、[符号-データ LMS]、[符号-符号 LMS]、[LMS]、または[正規化 LMS]に設定した。入力信号は、実数フィルター係数を使用する場合、実数値である。
入力信号が実数または複素数のフィルター係数をもつ複素数値である。
入力信号のデータ型が
singleである (ARM Cortex-A プロセッサ)入力信号のデータ型が
singleまたはdoubleである (Intel プラットフォーム)
さらに、モデルを適切に構成します。Simulink モデル ウィンドウの [モデル化] タブで [モデル設定] をクリックし、[コード生成] でこれらのパラメーターを設定します。
[最適化] ペインで以下を行います。
[ターゲット ハードウェアの命令セット拡張を活用] パラメーターで特定の命令セットを指定する。
[リダクションの最適化] パラメーターを選択する。
[最適化レベル] で、[レベル] を
[最大]に設定し、[優先度] を[実行速度を最大化]に設定する。
[インターフェイス] ペインの [ソフトウェア環境] で [非有限数] をクリアする。
このワークフローを使用してこのブロックから SIMD コードを生成するには、Generate SIMD Code from Simulink Blocks for Intel Platforms、Generate SIMD Code from Simulink Blocks for Apple silicon、およびGenerate SIMD Code from Simulink Blocks for ARM Cortex-A Processorsを参照してください。
サポートされているブロック上での計算量が多い演算の場合、SIMD 内部パラメーターは Intel プラットフォーム上で生成されたコードのパフォーマンスを大幅に向上させることができます。詳細については、リダクションの最適化 (Simulink Coder)を参照してください。
DSP System Toolbox™ での SIMD コード生成の詳細については、SIMD コード生成を参照してください。
HDL Coder™ は、HDL の実装および合成ロジックに影響を与える、追加の構成オプションを提供します。
メモ
ハードウェアと親和性の高い制御信号を備えた LMS フィルターを設計し、Simulink で HDL レイテンシのシミュレーションを行う場合、または複素係数をもつ複素数データの場合は、このブロックの代わりに LMS Filter (DSP HDL Toolbox) ブロックを使用します。
既定では、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 以上でなければなりません。
バージョン履歴
R2006a より前に導入R2024b 以降、Embedded Coder がある場合、モデル コンフィギュレーション パラメーター [ターゲット ハードウェアの命令セット拡張を活用] を使用して、Apple シリコン プロセッサ用に LMS Filter ブロックの SIMD コードを生成できます。詳細については、Generate SIMD Code from Simulink Blocks for Apple siliconを参照してください。
R2023b 以降、Embedded Coder がある場合、入力信号が複素数値のときに、モデル コンフィギュレーション パラメーター [ターゲット ハードウェアの命令セット拡張を活用] を使用して LMS Filter ブロックの SIMD コードを生成できます。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)

