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

Sine Wave

連続正弦波または離散正弦波の生成

ライブラリ

Sources

dspsrcs4

説明

Sine Wave ブロックはマルチチャネルの実数または複素数の正弦波信号を生成し、各出力チャネルに独立した振幅と周波数および位相があります。実数の正弦波信号は、[Output complexity] パラメーターが [Real] に設定されている場合に生成され、次のような式で定義されます。

y=Asin(2πft+ϕ)

ここで、A[Amplitude] パラメーター、f (Hz 単位) は [Frequency] パラメーター、ϕ (ラジアン単位) は [Phase offset] パラメーターでそれぞれ指定します。複素指数信号は、[Output complexity] パラメーターが [Complex] に設定されている場合に生成され、次のような式で定義されます。

y=Aej(2πft+ϕ)=A{cos(2πft+ϕ)+jsin(2πft+ϕ)}

マルチチャネル出力の生成

実数と複素数の両方の正弦波では、[Amplitude][Frequency] および [Phase offset] の各パラメーター値 (Af および ϕ) はスカラーまたは長さ N のベクトルにすることができます。ここで、N は出力に望ましいチャネル数です。これらのパラメーターの少なくとも 1 つを長さ N のベクトルとして指定すると、他のパラメーターで指定されたスカラー値が各チャネルに適用されます。

たとえば、以下のような実数正弦波を含む 3 チャネルの出力を生成するには、[Output complexity][Real] に設定し、他のパラメーターは次のように設定します。

  • [Amplitude] = [1 2 3]

  • [Frequency] = [1000 500 250]

  • [Phase offset] = [0 0 pi/2]

y={sin(2000πt)  (channel 1)2sin(1000πt)   (channel 2)3sin(500πt+π2)   (channel 3)             

出力サンプル時間とフレームごとのサンプル数

すべての離散モードでは、ブロックはサンプリングされた正弦波をサイズ M のフレームにバッファーします。M は [Samples per frame] パラメーターで指定します。出力はフレーム周期 M*Ts をもつ M 行 N 列の行列となります。Ts[Sample time] パラメーターで指定します。

サンプル モード

[Sample mode] パラメーターはブロックのサンプリング プロパティを指定します。これは、[Continuous] または [Discrete] のいずれかになります。

  • Continuous

    連続モードでは、i 番目のチャネルの正弦波 yi が連続関数として計算されます。

    yi=Aisin(2πfit+ϕi)(real)oryi=Aiej(2πfit+ϕi)(complex)

    また、ブロックの出力は連続になります。このモードでは、ブロックの演算は [Sample time]0 に設定された Simulink® Sine Wave ブロックの演算と同じになります。このモードでは精度が高くなりますが、各シミュレーション ステップで三角関数評価が必要になり、計算量が増大します。さらに、この手法では絶対シミュレーション時間が追跡されるため、時間値が上限に達したときに、最終的には不連続点が発生してしまいます。

    多くの DSP System Toolbox™ ブロックは連続時間の入力を受け入れないことにも注意してください。

  • Discrete

    離散モードでは、三角関数の直接評価、テーブル ルックアップまたは微分法によって、ブロックの離散時間出力を生成することができます。これら 3 つのオプションについて以下で説明します。

離散計算法

[Sample mode] パラメーターで [Discrete] を選択すると、その下にある [Computation method] パラメーターで、離散正弦波を生成するための 3 つのオプションが提供されます。

メモ

固定小数点正弦波を生成するには、[Table Lookup] を選択しなければなりません。

三角関数

三角関数法は、以下の連続関数をサンプリングすることによって i 番目のチャネル yi にある正弦波を計算します。

yi=Aisin(2πfit+ϕi)(real)oryi=Aiej(2πfit+ϕi)(complex)

周期は Ts を使用します。Ts[Sample time] パラメーターで指定します。この演算モードは、前述した [Continuous] サンプル モードと同じ利点と欠点を共有します。

各サンプル時間で、ブロックは正弦波の "最初のサイクル内" の適切な時間値で正弦波関数を評価します。三角評価を各正弦波の最初のサイクルに制限することにより、ブロックは非常に大きな数値の正弦波を計算するときに生じる不正確さを回避し、拡張演算中に不連続が発生する可能性を除去します (絶対時間変数がオーバーフローする可能性があるとき)。したがって、テーブル ルックアップ法に必要なメモリを回避しますが、より多くの浮動小数点演算の負荷がかかります。

テーブル ルックアップ

テーブル ルックアップ法はシミュレーションの開始時に各出力正弦波の "一意の" サンプルを事前計算し、必要に応じてサンプルをメモリから呼び出します。有限長のテーブルはすべての出力シーケンスが繰り返されるときにのみ作成できるため、この手法では出力の各正弦波の周期をサンプル周期で等分割できる必要があります。すなわち、1/(fiTs) = ki は各チャネル i = 1, 2, ..., N について整数値でなければなりません。

[Optimize table for] パラメーターを [Speed] に設定すると、各チャネルに作成したテーブルには ki 要素が含まれます。[Optimize table for] パラメーターを [Memory] に設定すると、各チャネルに作成したテーブルには ki/4 要素が含まれます。

長い出力シーケンスの場合、テーブル ルックアップ法では、必要となる浮動小数点演算は他のどの手法よりもはるかに少なくなりますが、特に高いサンプルレート (長いテーブル) の場合に非常に大量のメモリが要求されます。この手法は DSP ハードウェアのコードのエミュレートまたは生成を目的としたモデルに推奨されるため、実行速度を最適化する必要があります。

メモ

このブロックのルックアップ テーブルは倍精度浮動小数点値から作成されます。したがって、[Table lookup] 計算モードを使用する場合、出力で得られる精度の最大値は 53 ビットです。[Output] または [User-defined] データ型の語長を 53 ビットより大きい値に設定しても出力の精度は上がりません。

微分

微分法はインクリメンタル アルゴリズムを使用します。このアルゴリズムは、次の恒等式を使用して、前のサンプル時間 (および事前計算された更新項目) で計算された出力値に基づいて出力サンプルを計算します。

sin(t+Ts)=sin(t)cos(Ts)+cos(t)sin(Ts)cos(t+Ts)=cos(t)cos(Ts)sin(t)sin(Ts)

したがって、i 番目のチャネルの正弦波の更新方程式 yi は行列形式で次のように記述することができます。

[sin{2πfi(t+Ts)+ϕi}cos{2πfi(t+Ts)+ϕi}]=[cos(2πfiTs)sin(2πfiTs)sin(2πfiTs)cos(2πfiTs)][sin(2πfit+ϕi)cos(2πfit+ϕi)]

Ts[Sample time] パラメーターで指定します。Ts は定数のため、右側の行列は定数となり、シミュレーションの開始時に 1 回計算できます。その後、各タイム ステップでの単純な行列の乗算によって、Aisin[2πfi(t+Ts)+ϕi] の値を sin(2πfit+ϕi) と cos(2πfit+ϕi) の値から計算します。

このモードでは計算負荷が減少しますが、累積量子化誤差により、時間の経過と共にドリフトする可能性があります。この手法は絶対時間値に依存しないので、(絶対時間変数がオーバーフローする可能性がある) 拡張演算中に不連続が発生する危険性はありません。

ex_dspsinecomp および ex_dspsinecomp_frame の例は、それぞれサンプルベース モードとフレームベース モードで使用可能なすべての正弦波生成法の比較を行います。

ダイアログ ボックス

Sine Wave ブロック ダイアログの [Main] ペインは次のように表示されます。

Amplitude

N 出力チャネルそれぞれに正弦波の振幅を含む長さ N のベクトル、またはすべての N チャネルに適用するスカラーです。ベクトルの長さは [Frequency] パラメーターと [Phase offset] パラメーターで指定した長さと同じでなければなりません。[Computation method][Trigonometric fcn] または [Differential] に設定されている場合、調整可能 (Simulink)です。

Frequency

N 出力チャネルそれぞれに正弦波の周波数 (Hz 単位) を含む長さ N のベクトル、またはすべての N チャネルに適用するスカラーです。ベクトルの長さは [Amplitude] パラメーターと [Phase offset] パラメーターで指定した長さと同じでなければなりません。正、ゼロまたは負の周波数を指定できます。[Sample mode][Continuous] に設定されているか、または [Computation method][Trigonometric fcn] に設定されている場合、調整可能 (Simulink)です。

Phase offset

N 出力チャネルそれぞれに正弦波の位相オフセット (ラジアン単位) を含む長さ N のベクトル、またはすべての N チャネルに適用するスカラーです。ベクトルの長さは [Amplitude] パラメーターと [Frequency] パラメーターで指定した長さと同じでなければなりません。[Sample mode][Continuous] に設定されているか、または [Computation method][Trigonometric fcn] に設定されている場合、調整可能 (Simulink)です。

Sample mode

ブロックのサンプリング動作。[Continuous] または [Discrete] になります。このパラメーターは調整できません。

Output complexity

生成する波形のタイプ。[Real] は実数の正弦波を指定し、[Complex] は複素指数を指定します。このパラメーターは調整できません。

Computation method

離散時間正弦波が生成される方法。[Trigonometric fcn][Table lookup] または [Differential] になります。このパラメーターは調整できません。使用可能な各オプションの詳細については、「説明」の節の離散計算法を参照してください。

このパラメーターは、[Sample mode][Discrete] に設定した場合にのみ表示されます。

メモ

固定小数点正弦波を生成するには、[Computation method][Table lookup] に設定しなければなりません。

Optimize table for

[Speed] または [Memory] で正弦値のテーブルを最適化します (このパラメーターは、[Computation method] パラメーターが [Table lookup] に設定されている場合にのみ表示されます)。速度で最適化すると、テーブルには k 要素が含まれ、メモリで最適化すると、テーブルには k/4 要素が含まれます。ここで、k は正弦波の 1 完全周期での入力サンプル数です。

Sample time

正弦波がサンプリングされる周期 Ts です。ブロックの出力フレーム周期は M*Ts で、M[Samples per frame] パラメーターで指定します。このパラメーターは、[Sample mode] パラメーターで [Continuous] を選択すると無効になります。このパラメーターは調整できません。

Samples per frame

出力フレームにバッファーする各正弦波からの連続サンプル数 M です。

このパラメーターは、[Sample mode] パラメーターで [Continuous] を選択すると無効になります。

Resetting states when re-enabled

このパラメーターは、Sine Wave ブロックが Enabled Subsystem 内にあり、Enable ブロックの [イネーブル時の状態] パラメーターが [リセット] に設定されている場合にのみ適用されます。このパラメーターは、サブシステムが再度イネーブルになるときの Sine Wave ブロックの動作を決定します。ブロックは、自身を開始状態にリセットする ([Restart at time zero]) か、または現在のシミュレーション時間に基づいて正弦波の生成を再開 ([Catch up to simulation time]) することができます。このパラメーターは、[Sample mode] パラメーターで [Continuous] を選択すると無効になります。

Sine Wave ブロック ダイアログの [Data Types] ペインは次のように表示されます。

Output data type

このブロックの出力データ型を指定します。以下のいずれかを選択します。

  • データ型継承ルール (例: [Inherit: Inherit via back propagation])このオプションを選択すると、出力データ型とスケーリングが次の下流ブロックでそれぞれ一致します。

  • 組み込みデータ型 (例: double)

  • 有効なデータ型として評価する式 (例: fixdt(1,16))

[データ型アシスタントを表示] ボタン をクリックして、[Output data type] パラメーターの設定を行うための [データ型アシスタント] を表示します。

詳細については、信号のデータ型の制御 (Simulink)を参照してください。

メモ

このブロックのルックアップ テーブルは倍精度浮動小数点値から作成されます。したがって、[Table lookup] 計算モードを使用する場合、出力で得られる精度の最大値は 53 ビットです。[Output] または [User-defined] データ型の語長を 53 ビットより大きい値に設定しても出力の精度は上がりません。

HDL コード生成

このブロックは、HDL Coder™ を使用した HDL コードの生成をサポートします。HDL Coder は、HDL の実装および合成ロジックに影響を与える、追加の構成オプションを提供します。HDL コード生成の実装、プロパティおよび制限の詳細については、Sine Wave を参照してください。

サポートされているデータ型

  • 倍精度浮動小数点

  • 単精度浮動小数点

  • 固定小数点 (符号付きのみ)

  • 8、16、32 ビット符号付き整数

参考

ChirpDSP System Toolbox
Signal From WorkspaceDSP System Toolbox
Signal GeneratorSimulink
Sine WaveSimulink
sinMATLAB

R2006a より前に導入