Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

固定小数点データを使用したローパス フィルターの作成

この例では、固定小数点データを使用してローパス バタワース フィルターを実装する Stateflow® チャートの作成方法を説明します。浮動小数点データではなく固定小数点データを使用してフィルターを設計することで、モデルのシミュレーション時に使用するメモリ量を削減できます。詳細については、Stateflow チャートの固定小数点データを参照してください。

固定小数点バタワース フィルターの作成

Low-Pass Filter チャートは、1 つの入力を受け入れて 1 つの出力を提供する、ステートのないフロー チャートです。チャートには、以下のデータ シンボルが含まれています。

  • xスコープ: Input: Inherit:Same as Simulink

  • yスコープ: Output: fixdt(1,16,10)

  • x_n1スコープ: Local: fixdt(1,16,12)

  • y_n1スコープ: Local: fixdt(1,16,10)

  • b0スコープ: Parameter: fixdt(1,16,15)

  • b1スコープ: Parameter: fixdt(1,16,15)

  • a1スコープ: Parameter: fixdt(1,16,15)

b0b1 および a1 の値はローパス バタワース フィルターの係数です。

Low-Pass Filter チャートを作成するには、次を行います。

  1. MATLAB® コマンド プロンプトで sfnew と入力することにより、空の Stateflow チャートをもつ Simulink® モデルを作成します。

  2. Stateflow チャートで、yx_n1 および y_n1 に値を割り当てる、1 つの分岐をもつフロー チャートを追加します。

  3. Stateflow データの追加の説明に従って、入力、出力、ローカル、およびパラメーターのデータをチャートに追加します。

モデル コールバック関数の定義

モデルを読み込む前に、MATLAB は関数 butter (Signal Processing Toolbox) を呼び出して、パラメーター b0b1 および a1 の値を計算します。この関数は、(2*pi*Fc/(Fs/2)) ラジアン/秒の正規化されたカットオフ周波数をもつ 1 次ローパス バタワース フィルターを作成します。ここで、

  • サンプリング周波数は Fs = 1000 Hz

  • カットオフ周波数は Fc = 50 Hz

関数出力 B は、z の降べきの順にフィルターの分子係数を含み、関数出力 A は、z の降べきの順にフィルターの分母係数を含みます。

Fs = 1000;
Fc = 50;
[B,A] = butter(1,2*pi*Fc/(Fs/2));
b0 = B(1);
b1 = B(2);
a1 = A(2);

モデルのプリロード コールバックを定義するには、次を行います。

  1. [モデル化] タブの [設定] で、[モデル設定][モデル プロパティ] を選択します。

  2. [モデル プロパティ] ダイアログ ボックスの [コールバック] タブで、[PreLoadFcn] を選択します。

  3. プリロード関数呼び出し用の MATLAB コードを入力します。

  4. [OK] をクリックします。

MATLAB ワークスペースにパラメーター値を読み込むには、モデルを保存し、閉じてから、再度開きます。

その他のブロックをモデルに追加

モデルを完成させるには、Sine Wave (Simulink) ブロック、Data Type Conversion (Simulink) ブロック、および Scope (Simulink) ブロックを追加します。次のブロック線図に従って、ブロックを接続し、ラベルを付けます。

Sine Wave ブロック

Sine Wave ブロックは、浮動小数点信号を出力します。このブロックには以下の設定があります。

  • 正弦波タイプ: Time based

  • 時間: Use simulation time

  • 振幅: 1

  • バイアス: 0

  • 周波数: 2*pi*Fc

  • 位相: 0

  • サンプル時間: 1/Fs

  • ベクトル パラメーターを 1 次元として解釈: On

Data Type Conversion ブロック

Data Type Conversion ブロックは浮動小数点信号を Sine Wave ブロックから固定小数点信号に変換します。信号を固定小数点型に変換することで、モデルのシミュレーションに使用するメモリ量を削減できます。このブロックには以下の設定があります。

  • 出力の最小値: []

  • 出力の最大値: []

  • 出力データ型: fixdt(1,16,14)

  • 固定小数点ツールによる変更に対して出力データ型の設定をロックする: Off

  • 等価な値をもつ入力と出力: Real World Value (RWV)

  • 整数丸めモード: Floor

  • 整数オーバーフローで飽和: Off

  • サンプル時間: -1

Scope ブロック

Scope ブロックには、Low-Pass Filter チャートの入力信号と出力信号に接続する 2 つの入力端子があります。2 つの信号を別々に表示するには、2 行 1 列のスコープ レイアウトを選択します。

モデル コンフィギュレーション パラメーターの設定

モデル内には連続サンプル時間をもつブロックがないため、以下のコンフィギュレーション パラメーターを指定して離散ソルバーを使用します。

  • 終了時間: 0.1

  • : Fixed-step

  • ソルバー: discrete (no continuous states)

  • 固定ステップ サイズ (基本サンプル時間): 1/Fs

モデルを構成するには、以下を行います。

  1. [モデル化] タブの [設定] で、[モデル設定] を選択します。

  2. [ソルバー] ペインで、離散ソルバーのパラメーターを設定します。

  3. [OK] をクリックします。

モデルの実行

モデルをシミュレートすると、Scope ブロックには 2 つの信号が表示されます。一番上の信号はチャートへの正弦波入力の固定小数点バージョンを示します。下位の信号は、チャートからのフィルター処理された出力に対応します。フィルターによって、高周波数の値は除去されますが、低周波数の値は変更されずにチャートを通過します。

参考

| (Signal Processing Toolbox) | (Simulink) | (Simulink) | (Simulink)

関連するトピック