Main Content

MATLAB Function ブロックを使用した固定小数点 FIR コードの生成

MATLAB Function ブロックのプログラム

以下の例では、固定小数点のローパス直接型 FIR フィルターを Simulink® で作成する方法を説明します。FIR フィルターを作成するには、Fixed-Point Designer™ ソフトウェアと MATLAB Function ブロックを使用します。この例では、以下に示す手順で次のタスクを実行します。

  1. 新しいモデルに MATLAB Function ブロックを配置します。このブロックは Simulink User-Defined Functions ライブラリにあります。

  2. cgen_fi としてモデルを保存します。

  3. モデル内で 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);

モデルの作成

  1. モデルにブロックを追加して次のシステムを作成します。

  2. モデルのブロック パラメーターをこれらの固定小数点 FIR コードの例のパラメーター値に設定します。

  3. [モデル化] タブで、[モデル設定] をクリックします。次の構成パラメーターを設定します。

    パラメーター
    終了時間0
    種類固定ステップ
    ソルバー離散 (連続状態なし)

    [適用] をクリックして、変更を保存します。

モデル エクスプローラーを使用した fimath オブジェクトの定義

  1. モデルに対応するモデル エクスプローラー ツールを開きます。

  2. [モデルの階層構造] ペインで、[cgen_fi][MATLAB Function] ノードをクリックします。モデル エクスプローラーの [ダイアログ] ペインに MATLAB Function ブロックのダイアログ ボックスが表示されます。

  3. 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 プロパティを常にモデルで使用できるようになります。

シミュレーションの実行

  1. モデルを選択し Ctrl + T キーを押してシミュレーションを実行します。シミュレーションの実行中、MATLAB コマンド ラインに情報が出力されます。ノイズを含んだ信号とフィルター処理された信号のプロットが表示されます。

  2. 次に、モデルを選択し Ctrl + B キーを押して、モデルに組み込み可能な C コードを作成します。コードの作成中、MATLAB コマンド ラインに情報が出力されます。現在の作業フォルダーに coder_fi_grt_rtw という名前のフォルダーが作成されます。

  3. coder_fi_grt_rtw > cgen_fi.c へ移動します。このファイルにはモデルから生成されたコードがあります。コード内で次のコメントを検索します。

    /* codegen_fi doc model example */
    この検索で、MATLAB Function ブロックで生成されたコードの開始セクションを見つけることができます。