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

瞬時周波数推定器用 System object の作成

この例は、離散エネルギー分離アルゴリズムに基づく瞬時周波数推定器を作成する MATLAB 開発者の視点から書かれています。また、カスタム DSP アルゴリズム用の System object の作成についても説明しています。

離散エネルギー分離アルゴリズム

DESA (離散エネルギー分離アルゴリズム) は正弦波信号の振幅と周波数の瞬間的な推定を提供します。DESA の基本構成は非線形 TKEO (ティーガ・カイザ エネルギー演算子) です。

特に、DESA-2 アルゴリズムは次の式を通じて振幅 (つまり、関数 AM) と周波数 (つまり、関数 FM) の瞬間的な推定を提供します。

新開発のアルゴリズムを単純なテスト ベンチ内で使用する

最初に、最終結果の例を実行しましょう。これは、新開発の DESA-2 周波数推定器 (dspdemo.DesaTwo) を単純なテスト ベンチで使用した、単純なシステム シミュレーションです。このテスト ベンチには、FM 変調されたトーン発生器 (dspdemo.RandomFMToneGenerator)、信号可視化用の 2 つのスコープ、シミュレーション中に複数のシステム パラメーターを調整する機能が含まれています。具体的には、FM 変調されたトーンのテスト入力の周波数変動に影響を与える次の 3 つのパラメーターを変更して実験できます。

  • 周波数オフセット

  • 周波数の標準偏差

  • ランダムな周波数変動の帯域幅。略して周波数変動とも呼ぶ

シグナル ジェネレーターと周波数推定器は、いずれもカスタム System object として実装します。シミュレーション スクリプト HelperDesa2Sysobj を調べると、主に以下の 3 つのタスクがあることがわかります。

  • パラメーターの初期値の定義

  • シミュレーションに使用するすべてのオブジェクトの作成

  • 実際のシミュレーション ループの実行

システムレベルの表示

シミュレーションされたシステムは、以下のように図に表すことができます。

上の図は、さまざまなアルゴリズム コンポーネントがシステム シミュレーションの中でどのように連携して動作するかを理解するのに役立ちます。また、システムのさまざまな部分がパッケージ化および使用される方法を可視化するのにも役立ちます。具体的には、すべてのオレンジのブロックは DSP System Toolbox 内で使用可能な System object を表し、すべてのシアンのブロックは、この例のために開発された、MATLAB で独自に作成された System object を表します。

上位レベルでは、このシミュレーションは、以下に示すカスタム System object の 2 つのインスタンスを使用します。どちらも MATLAB で作成されています。

dspdemo.DesaTwo 内では、たとえば dspdemo.TeagerKaiserOperator に 2 つのインスタンスがあることに注意してください。1 つは 用で、もう 1 つは 用です。

dspdemo.RandomFMToneGenerator のコードとアーキテクチャ

RandomFMToneGenerator は、内部的に他の 2 つのクラスで構成されています。1 つは組み込み System object である dsp.NCO、もう 1 つは別のカスタム System object である dspdemo.BandlimitedNoiseGenerator です。

UML に精通している場合は、次の図で dspdemo.RandomFMToneGenerator のアーキテクチャの詳細な全体像を理解できます。

dspdemo.RandomFMToneGenerator のコードを確認すると、下位コンポーネントが連携する方法をさらに明確に知ることができます。

具体的には、stepImpl メソッドが、パブリックの step() メソッドのコア機能を実装します。ここで役割を分離し、他のクラス内部の複雑さを隠すことで、コードを簡略化できます。stepImpl が他の 2 つの System object の step() メソッドをどのように呼び出しているかに注意してください。

DESA-2 周波数推定演算子のコードとアーキテクチャ

DESA-2 周波数推定演算子 (dspdemo.DesaTwo) も、カスタム System object として実装されます。ただし、ここでは step メソッドはサンプルのバッファーを入力として受け入れ、トーンの振幅と周波数の局所的な推定を返します。演算子の式とクラス ダイアグラムを比較してみると、DESA-2 演算子は、システムレベルの図を見て予想されるとおり、TeagerKeiserEnergyOperator 型の 2 つのティーガ・カイザ エネルギー演算子で構成されています。

サブコンポーネントの再利用性 - dspdemo.BandlimitedNoiseGenerator

サブコンポーネントを個別の System object としてパッケージ化することも、再利用とテストに役立ちます。

たとえば、dspdemo.RandomFMToneGenerator の主要コンポーネントは dspdemo.BandlimitedNoiseGenerator です。dspdemo.BandlimitedNoiseGenerator は指定された帯域幅と RMS 振幅をもつ、平均がゼロのランダム信号を生成します。ここでこれを使用して、オフセット値周囲におけるテスト信号の周波数変動を定義します。

メイン オブジェクトである dspdemo.DesaTwo と同様、dspdemo.BandlimitedNoiseGenerator は、インスタンスを作成し、パラメーターを設定してシミュレーション ループ内で step メソッドを呼び出すことにより、独立して使用できます。シミュレーション スクリプトの例は HelperDesa2SysobjTestBLNG (run) で示します。

カスタム アルゴリズム用の System object のオーサリングの詳細については、System object の作成を参照してください。

参考文献

P. Maragos, J.F. Kaiser, T.F. Quartieri, Energy Separation in Signal Modulations with Application to Speech Analysis, IEEE Transactions on Signal Processing, vol. 41, No. 10, October 1993