ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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

システムのコンポーネントの作成

この例では、長時間にわたるオーディオ データのストリームを処理するシステムのコンポーネントを作成する方法を説明します。データをファイルから読み取り、フィルター処理して再生します。

System object™ は MATLAB でのシステムの作成に使用できるコンポーネントです。System object では固定サイズ データまたは可変サイズ データがサポートされています。"可変サイズ データ" は実行時にサイズを変更できるデータです。一方、固定サイズ データはサイズが既知で初期化時にロックされるため、実行時に変更することはできません。

ソフトウェアでは多くの System object が事前定義されています。また、独自の System object を作成することもできます (「新しい System Object の定義」を参照してください)。

必要な事前定義のコンポーネントは次のとおりです。

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

  • dsp.FIRFilter — オーディオ データをフィルター処理します。

  • dsp.AudioPlayer — フィルター処理されたオーディオ データを再生します。

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

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

次に、システムの各 System object を構成します。システムのコンポーネントの構成を参照してください。または、必要に応じてコンポーネントの作成と構成を同時に実行することもできます。

システムのコンポーネントの構成

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

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

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

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

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

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

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

この手順はシステムのコンポーネントの作成の説明に従ってコンポーネントを作成した場合に使用してください。まだコンポーネントを作成していない場合は、コンポーネントの作成と構成を同時に実行の手順に従ってください。

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

audioIn.Filename = 'speech_dft_8kHz.wav';
audioIn.OutputDataType = 'single';

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

filtLP.Numerator = fir1(160,.15);

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

audioOut.SampleRate = audioIn.SampleRate;

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

この例では、System object コンポーネントの作成と希望するプロパティの構成を同時に行う方法を説明します。依存するプロパティでのエラーや警告を避けるために、依存するプロパティを設定する前にコントロール プロパティを設定するようにしてください。この手順はまだコンポーネントを作成していない場合に使用してください。

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

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

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

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

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

audioOut = dsp.AudioPlayer('SampleRate',audioIn.SampleRate);

コンポーネントの作成が完了したら、コンポーネントを組み合わせてシステムを作成できます。システム作成のためのコンポーネントの組み立てを参照してください。

システム作成のためのコンポーネントの組み立て

入力と出力の接続

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

System object と関数を使用する場合の主な違いは step メソッドです。step メソッドは各 System object の処理コマンドで、特定の System object に対してカスタマイズされています。このメソッドではオブジェクトが初期化され、システムのデータ フローと状態管理が制御されます。通常 step はループ内で使用します。

あるオブジェクトの step メソッドからの出力は別のオブジェクトの step メソッドへの入力として使用します。一部の System object では、オブジェクトのプロパティを使用して入出力の数を変更できます。適切な数の入出力が使用されていることを確認するには、System object に対して getNumInputs および getNumOutputs を使用します。すべての使用可能な System object の詳細は、System Object メソッドを参照してください。

システム全体のコード

この例では、オーディオ データ ファイルの読み取り、フィルター処理、再生を行う完全なコードを作成する方法を説明します。

このコードはコマンド ラインに入力するか、プログラム ファイルに保存することができます。

audioIn = dsp.AudioFileReader('speech_dft_8kHz.wav',...
   'OutputDataType','single');
filtLP = dsp.FIRFilter('Numerator',fir1(160,.15));
audioOut = dsp.AudioPlayer('SampleRate',audioIn.SampleRate);

while ~isDone(audioIn)
    audio = step(audioIn);    % Read audio source file
    y = step(filtLP,audio);   % Filter the data
    step(audioOut,y);         % Play the filtered data
end
while ループは isDone メソッドを使用してファイル全体を読み取ります。ループ内の各オブジェクトには step メソッドを使用しています。

これで、システムを実行する準備が整いました。システムの実行を参照してください。

システムの実行

システムの実行方法

コードを実行するには、コマンド ラインに直接コードを入力するか、プログラムを含むファイルを実行します。システムのコードを実行すると、step メソッドが各オブジェクトにデータを処理するように指示します。

システムの実行中に変更不可能なもの

step メソッドが最初に呼び出されると、オブジェクトが初期化されてロックされます。System object でデータの処理が始まると、処理を中断させるような変更を防ぐために System object はロックされます。オブジェクトがロックされたかどうかを確認するには、isLocked メソッドを使用します。オブジェクトがロックされると、以下を変更することはできません。

  • 入力数または出力数

  • 入力または出力のデータ型

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

  • 可変サイズ データをサポートする System object 以外の入力の次元または調整可能なプロパティ

  • 調整不可能なプロパティの値

システムの実行中に変更を行う方法については、実行時におけるシステムの再構成を参照してください。

実行時におけるシステムの再構成

コンポーネントのプロパティを変更できる場合

System object でデータの処理が始まると、処理を中断させるような変更を防ぐために System object はロックされます。System object がロックされているかどうかを確認するには isLocked を使用します。処理の完了後は release メソッドを使用して System object のロックを解除できます。

オブジェクトの一部のプロパティは "調整可能" で、オブジェクトがロックされている場合でも変更できます。特に指定のない限り、System object のプロパティは調整不可能です。個々のプロパティが調整可能かどうかを確認するには、オブジェクトのリファレンス ページを参照してください。通常、調整可能なプロパティは、System object によるデータ処理には特に重要なものではありません。

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

この例では、調整可能なプロパティを変更する方法を説明します。

while ループを次のものに置き換えると、コードの実行中にフィルターの種類をハイパス フィルターに変更できます。この変更は step メソッドが次に呼び出される際 (while ループの次の反復など) に適用されます。

reset(audioIn);               % Reset audio file
filtLP.Numerator = fir1(160,0.15,'high'); 
while ~isDone(audioIn)
    audio = step(audioIn);    % Read audio source file
    y = step(filtLP,audio);   % Filter the data
    step(audioOut,y);         % Play the filtered data
end

入力の実数/複素数または次元の変更

オブジェクトが実数データで初期化された場合、一部の System object ではシミュレーション中に複素数データを使用できません。コード生成中には実数/複素数入力は変更できません。

調整可能なプロパティの値は、警告またはエラーなしで変更できます。実行時におけるその他の変更ではエラーが発生します。

この情報は役に立ちましたか?