このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
固定小数点データを使用したローパス フィルターの作成
この例では、固定小数点データを使用してローパス バタワース フィルターを実装する 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)
b0
、b1
および a1
の値はローパス バタワース フィルターの係数です。
Low-Pass Filter チャートを作成するには、次を行います。
MATLAB® コマンド プロンプトで
sfnew
と入力することにより、空の Stateflow チャートをもつ Simulink® モデルを作成します。Stateflow チャートで、
y
、x_n1
およびy_n1
に値を割り当てる、1 つの分岐をもつフロー チャートを追加します。Stateflow データの追加の説明に従って、入力、出力、ローカル、およびパラメーターのデータをチャートに追加します。
モデル コールバック関数の定義
モデルを読み込む前に、MATLAB は関数 butter
(Signal Processing Toolbox) を呼び出して、パラメーター b0
、b1
および 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);
モデルのプリロード コールバックを定義するには、次を行います。
[モデル化] タブの [設定] で、[モデル設定]、[モデル プロパティ] を選択します。
[モデル プロパティ] ダイアログ ボックスの [コールバック] タブで、[PreLoadFcn] を選択します。
プリロード関数呼び出し用の MATLAB コードを入力します。
[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
モデルを構成するには、以下を行います。
[モデル化] タブの [設定] で、[モデル設定] を選択します。
[ソルバー] ペインで、離散ソルバーのパラメーターを設定します。
[OK] をクリックします。
モデルの実行
モデルをシミュレートすると、Scope ブロックには 2 つの信号が表示されます。一番上の信号はチャートへの正弦波入力の固定小数点バージョンを示します。下位の信号は、チャートからのフィルター処理された出力に対応します。フィルターによって、高周波数の値は除去されますが、低周波数の値は変更されずにチャートを通過します。
参考
sfnew
| butter
(Signal Processing Toolbox) | Sine Wave (Simulink) | Data Type Conversion (Simulink) | Scope (Simulink)