Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MATLAB クラスを使用した残響のための高速化された MEX コードの生成

この例では、MATLAB クラスを使用する MATLAB® アルゴリズムの実行を高速化する方法を説明します。これらのクラスは、反響効果、つまり広い空き部屋で聞こえるような "エコー" を生み出します。

簡単な反響効果の実装

異なる特性をもつ反響効果を実装するには、さまざまな方法があります。オーディオ音質の観点からすると、これは高度な効果ではありませんが、MATLAB Coder™ で MATLAB クラスを使用する機能を説明します。

この反響効果は、次のブロック線に基づいて実装されています。

図には、最初の遅延線のみが表示されています。別の 7 本の遅延線がブロック線図の中で繰り返され、各遅延線には、個別の遅延と関連するフィードバック ゲイン ブロックが含まれると想定します。ハウスホルダー反射 (すなわち関数 hhreflect) は、基本的に総信号のエネルギーを変化させずに信号を混合/置換しています。したがって、基本的には入力信号を複製し、わずかな時間の変位でそれをフィードバックしています。その結果が反響効果になります。

使用するファイル

  • reverb_test.m:反響効果をテストするためのメイン ファイル

  • do_reverb.m:Reverb クラスの関数抽象化

  • Reverb.m:MATLAB クラスとして実装された効果の実装

  • Delay.m:MATLAB クラスとして実装された Reverb.m の遅延の効果

  • hhreflect.m:Reverb.m のハウスホルダー反射

  • get_prime.m:素数を計算する関数 (Reverb.m 用)

  • speech_dft.mat:テスト サンプル ファイル

MEX 関数の生成

codegen do_reverb
Code generation successful.

MEX 関数の実行

これは、サンプル ファイル (speech_dft.mat) を処理し、反響効果を適用し、コンピューターのオーディオ出力に結果を出力します。

reverb_test;
Running time = 10 milliseconds

MEX 関数のより高速な生成

整合性チェック (行列の範囲外チェックなど) を無効にして処理を高速化しますが、MEX 関数の安全性が低下する可能性があります。

cfg = coder.config;
cfg.IntegrityChecks = false;
codegen -config cfg do_reverb
Code generation successful.

MEX 関数の再実行

reverb_test;
Running time = 4 milliseconds