MATLAB Function ブロックを使用した固定小数点 FIR コードの生成
MATLAB Function ブロックのプログラム
以下の例では、固定小数点のローパス直接型 FIR フィルターを Simulink® で作成する方法を説明します。FIR フィルターを作成するには、Fixed-Point Designer™ ソフトウェアと MATLAB Function ブロックを使用します。この例では、以下に示す手順で次のタスクを実行します。
新しいモデルに MATLAB Function ブロックを配置します。このブロックは Simulink User-Defined Functions ライブラリにあります。
cgen_fi
としてモデルを保存します。モデル内で MATLAB Function ブロックをダブルクリックして、MATLAB Function ブロック エディターを開きます。コメントも含めて、次の MATLAB® コードをエディターに入力するか、コピーして貼り付けます。
function [yout,zf] = dffirdemo(b, x, zi) %#codegen %codegen_fi doc model example %Initialize the output signal yout and the final conditions zf Ty = numerictype(1,12,8); yout = fi(zeros(size(x)),'numerictype',Ty); zf = zi; % FIR filter code for k=1:length(x); % Update the states: z = [x(k);z(1:end-1)] zf(:) = [x(k);zf(1:end-1)]; % Form the output: y(k) = b*z yout(k) = b*zf; end % Plot the outputs only in simulation. % This does not generate C code. figure; subplot(211);plot(x); title('Noisy Signal');grid; subplot(212);plot(yout); title('Filtered Signal');grid;
入力の準備
MATLAB コマンド ラインで次のコードを入力し、フィルターの係数 b、ノイズ x、および初期条件 zi を定義します。
b=fidemo.fi_fir_coefficients; load mtlb x = mtlb; n = length(x); noise = sin(2*pi*2140*(0:n-1)'./Fs); x = x + noise; zi = zeros(length(b),1);
モデルの作成
モデルにブロックを追加して次のシステムを作成します。
モデルのブロック パラメーターをこれらの固定小数点 FIR コードの例のパラメーター値に設定します。
[モデル化] タブで、[モデル設定] をクリックします。次の構成パラメーターを設定します。
パラメーター 値 終了時間 0
種類 固定ステップ
ソルバー 離散 (連続状態なし)
[適用] をクリックして、変更を保存します。
モデル エクスプローラーを使用した fimath オブジェクトの定義
モデルに対応するモデル エクスプローラー ツールを開きます。
[モデルの階層構造] ペインで、[cgen_fi]、[MATLAB Function] ノードをクリックします。モデル エクスプローラーの [ダイアログ] ペインに MATLAB Function ブロックのダイアログ ボックスが表示されます。
MATLAB Function ブロックのダイアログ ボックスで、[MATLAB Function ブロックの fimath] パラメーターに [それ以外を指定] を選択します。その後、エディット ボックスで以下の
fimath
オブジェクトを作成できます。fimath('RoundingMethod','Floor','OverflowAction','Wrap',... 'ProductMode','KeepLSB','ProductWordLength',32,... 'SumMode','KeepLSB','SumWordLength',32)
ここで定義する
fimath
オブジェクトは、ブロック内で作成するfi
オブジェクトと、 MATLAB Function ブロックへの固定小数点入力と関連付けられます。[MATLAB Function ブロックの fimath] に [それ以外を指定] を選択すると、指定した
fimath
プロパティを常にモデルで使用できるようになります。
シミュレーションの実行
モデルを選択し Ctrl + T キーを押してシミュレーションを実行します。シミュレーションの実行中、MATLAB コマンド ラインに情報が出力されます。ノイズを含んだ信号とフィルター処理された信号のプロットが表示されます。
次に、モデルを選択し Ctrl + B キーを押して、モデルに組み込み可能な C コードを作成します。コードの作成中、MATLAB コマンド ラインに情報が出力されます。現在の作業フォルダーに
coder_fi_grt_rtw
という名前のフォルダーが作成されます。coder_fi_grt_rtw
>cgen_fi.c
へ移動します。このファイルにはモデルから生成されたコードがあります。コード内で次のコメントを検索します。この検索で、MATLAB Function ブロックで生成されたコードの開始セクションを見つけることができます。/* codegen_fi doc model example */