Main Content

System object を使用した MATLAB でのシステム設計

MATLAB でのシステム設計とシミュレーション

System object を使用すると、MATLAB® でのシステムの設計とシミュレーションが可能になります。System object は MATLAB で下の図のように使用します。

The process of using System object. First create individual components, followed by configure components, then assemble components into system and finally run the system

  1. 個々のコンポーネントの作成 — システムで使用する System object を作成します。個々のコンポーネントの作成。ツールボックスで提供される System object に加えて、独自の System object も作成できます。System object の作成を参照してください。

  2. コンポーネントの構成 — 必要に応じてオブジェクトのプロパティ値を変更して特定のシステムをモデル化します。すべての System object™ のプロパティには既定値があり、既定値をそのまま使用できる場合もあります。コンポーネントの構成を参照してください。

  3. コンポーネントのシステムへの組み立て — これらの System object を含む MATLAB プログラムを作成し、MATLAB 変数を入出力として使用して System object を接続し、システムをシミュレーションします。System object の接続を参照してください。

  4. システムの実行 — プログラムを実行します。システムの実行中に調整可能なプロパティを変更できます。システムの実行オブジェクトの再設定を参照してください。

個々のコンポーネントの作成

この節の例では、ソフトウェアで事前定義されている System object の使用方法を説明します。関数を使用して System object を作成して使用するには、条件付きコードを使用したオブジェクトの作成を指定します。条件付きの作成により、ループ内でその関数が呼び出された場合にエラーが回避されます。また、独自の System object を作成することもできます。System object の作成を参照してください。

ここでは、DSP System Toolbox™ および Audio Toolbox™ の事前定義されたコンポーネントを使用してシステムを設定する方法を説明します。

  • dsp.AudioFileReader — オーディオ データのファイルの読み取り

  • dsp.FIRFilter — オーディオ データのフィルター処理

  • audioDeviceWriter — フィルター処理されたオーディオ データの再生

最初に、既定のプロパティ設定を使用してコンポーネント オブジェクトを作成します。

audioIn = dsp.AudioFileReader;
filtLP = dsp.FIRFilter;
audioOut = audioDeviceWriter;

コンポーネントの構成

コンポーネントの構成が必要な場合

オブジェクトのプロパティを作成時に設定しなかった場合に既定値以外の値を使用するには、これらのプロパティを明示的に設定しなければなりません。一部のプロパティはシステムの実行中に値を変更できます。詳細は、オブジェクトの再設定を参照してください。

ほとんどのプロパティは互いに独立しています。ただし、一部の System object プロパティによって他のプロパティが有効または無効になったり、他のプロパティの値が制限されたりすることがあります。エラーや警告を避けるために、dependent プロパティを設定する前にコントロール プロパティを設定するようにしてください。

コンポーネントのプロパティ値の表示

オブジェクトの現在のプロパティ値を表示するには、オブジェクトのハンドル名 (たとえば audioIn) をコマンド ラインに入力します。特定のプロパティの値を表示するには objecthandle.propertyname (たとえば audioIn.FileName) と入力します。

コンポーネントのプロパティ値の構成

ここでは、コンポーネント オブジェクトのプロパティを設定して、システムのコンポーネントを構成する方法について示します。

コンポーネントを作成済みでまだ構成していない場合は、次の手順を実行します。後の例で説明するように、コンポーネントの作成と構成を同時に行うこともできます。

ファイル リーダー オブジェクトでは、読み取るファイルを指定して出力データ型を設定します。

フィルター オブジェクトでは、ローパス フィルターの次数とカットオフ周波数を指定する関数 fir1 を使用してフィルターの分子係数を指定します。

オーディオ デバイス ライター オブジェクトでは、サンプル レートを指定します。この場合は、入力データと同じサンプル レートを使用します。

audioIn.Filename = "speech_dft_8kHz.wav";
audioIn.OutputDataType = "single";
filtLP.Numerator = fir1(160,.15);
audioOut.SampleRate = audioIn.SampleRate;

コンポーネントの作成と構成の同時実行

この例では、System object コンポーネントの作成と必要なプロパティの構成を同時に行う方法を示します。各プロパティを 'Name' と Value 引数のペアで指定します。

ファイル リーダー オブジェクトを作成し、読み取るファイルを指定して出力データ型を設定します。

audioIn = dsp.AudioFileReader("speech_dft_8kHz.wav",...
                              'OutputDataType',"single");

フィルター処理を行うオブジェクトを作成し、関数 fir1 を使用してフィルターの分子を指定します。関数 fir1 のローパス フィルターの次数とカットオフ周波数を指定します。

filtLP = dsp.FIRFilter('Numerator',fir1(160,.15));

オーディオ プレーヤー オブジェクトを作成し、サンプル レートを入力データと同じレートに設定します。

audioOut = audioDeviceWriter('SampleRate',audioIn.SampleRate);

コンポーネントのシステムへの組み立て

System object の接続

必要なコンポーネントを決定し、System object を作成および構成したら、システムを組み立てます。System object は他の MATLAB 変数と同様に使用して MATLAB コードに含めます。MATLAB 変数は System object との間で受け渡すことができます。

System object を使用することと関数を使用することの主な違いは、System object は 2 つの手順のプロセスを使用するということです。まず、オブジェクトを作成してそのパラメーターを設定してから、オブジェクトを実行します。オブジェクトを実行することでオブジェクトを初期化し、データ フローおよびシステムの状態管理を制御します。通常 System object はコード ループ内部で呼び出します。

あるオブジェクトからの出力を別のオブジェクトへの入力として使用します。一部の System object では、オブジェクトのプロパティを使用して入出力を変更できます。適切な数の入出力が使用されていることを検証するには、任意の System object に対して nargin および nargout を使用できます。使用可能なすべての System object 関数については、System object の関数を参照してください。

システムでのコンポーネントの接続

この節では、コンポーネントを接続して 1 つにまとめてオーディオ データのファイルを読み取り、フィルターおよび再生する方法を示します。while ループは関数 isDone を使用して、ファイル全体を読み取ります。

while ~isDone(audioIn)
    audio = audioIn();    % Read audio source file
    y = filtLP(audio);        % Filter the data
    audioOut(y);              % Play the filtered data
end

システムの実行

コードを実行するには、コマンド ラインに直接コードを入力するか、プログラムを含むファイルを実行します。システムに対してコードを実行すると、データはオブジェクトを介して処理されます。

システムの実行中に変更できないものについて

System object をはじめて呼び出すと、そのオブジェクトが初期化されてから実行されます。System object によるデータの処理が開始されたら、調整不可能なプロパティを変更できなくなります。

System object によっては、以下の追加の仕様が制限される場合もあります。

  • 入力サイズ

  • 入力の実数/複素数

  • 入力のデータ型

  • 調整可能なプロパティのデータ型

  • 離散状態のデータ型

System object の作成者がこれらの仕様を制限している場合、System object の使用中にこれらを変更しようとするとエラーが発生します。

オブジェクトの再設定

プロパティの変更

System object によるデータの処理が開始されたら、"調整不可能" なプロパティを変更できなくなります。任意の System object に対して isLocked を使用して、オブジェクトがデータの処理中かどうかを検証できます。処理が完了したら、関数 release を使用してリソースを解放し、調整不可能なプロパティへの変更を可能にします。

オブジェクトの一部のプロパティは "調整可能" で、オブジェクトが使用中であっても変更できます。System object の大半のプロパティは調整不可能です。個々のプロパティが調整可能かどうかを確認するには、オブジェクトのリファレンス ページを参照してください。

入力の実数/複素数、次元、またはデータ型の変更

オブジェクトの使用中、アルゴリズムを呼び出した後には、一部の System object では入力の実数/複素数、次元、またはデータ型の変更が許可されません。System object によってこれらの仕様が制限されている場合、release を呼び出して仕様を変更することができます。release を呼び出すと、状態や離散状態など、System object のその他の要素もリセットされます。

システムの調整可能なプロパティの変更

この例では、フィルター オブジェクトの Numerator プロパティを変更することによって、コードの実行中にフィルターのタイプをハイパス フィルターに変更する方法を説明します。変更は、オブジェクトが次に呼び出されるときに有効になります。

reset(audioIn);% Reset audio file
Wn = [0.05,0.1,0.15,0.2];
for x=1:4000
    Wn_X = ceil(x/1000);
    filtLP.Numerator = fir1(160,Wn(Wn_X),'high');
    audio = audioIn();    % Read audio source file
    y = filtLP(audio);    % Filter the data
    audioOut(y);          % Play the filtered data
end