Main Content

Sine Wave Function

時間のソースとして外部信号を使用し、正弦波を生成

  • Sine Wave Function block

ライブラリ:
Simulink / Math Operations

説明

Sine Wave Function ブロックは正弦波を出力します。このブロックは、時間ベース モードまたはサンプルベース モードで動作します。

メモ

このブロックは、Math Operations ライブラリに表示される Sine Wave ブロックと同じです。ブロックのダイアログ ボックスで [時間] パラメーターとして [シミュレーション時間を使用] を選択すると Sine Wave Function ブロックが得られます。

時間ベース モード

ブロックは出力波形を計算します。

y=amplitude×sin(frequency×time+phase)+bias.

時間ベース モードでは、[サンプル時間] パラメーターの値により、ブロックが連続モードで動作するか、離散モードで動作するかが決まります。

  • 0 (既定の設定) では、ブロックは連続モードで動作します。

  • >0 では、ブロックは離散モードで動作します。

詳細については、サンプル時間の指定を参照してください。

連続モードでのブロックの動作

Sine Wave ブロックは、連続モードで動作すると、時間が極めて大きくなるため、精度の損失により不正確になる可能性があります。

離散モードでのブロックの動作

[サンプル時間] パラメーターの値をゼロよりも大きく設定すると、ブロックはサンプル時間をその値に設定した Zero-Order Hold ブロックを駆動している場合と同様に動作します。

この方法では、連続/離散システムのハイブリッドであるモデルではなく、純粋に離散的な正弦波を使ってモデルをビルドできます。ハイブリッド システムは本質的により複雑であり、その結果、シミュレーションにかかる時間が長くなります。

このモードでは、絶対時間に基づくアルゴリズムではなく、インクリメンタル アルゴリズムを使用します。結果として、このブロックは、振動解析や疲労解析のような、不定長時間の実行を目的としたモデルで有効になります。

この異なるインクリメンタル アルゴリズムでは、前のサンプル時間のときに計算された値に基づいて正弦値を計算します。この方法は、次の三角恒等式を使用します。

sin(t+Δt)=sin(t)cos(Δt)+sin(Δt)cos(t)cos(t+Δt)=cos(t)cos(Δt)sin(t)sin(Δt)

これらの恒等式は、次の行列形式で記述できます。

[sin(t+Δt)cos(t+Δt)]=[cos(Δt)sin(Δt)sin(Δt)cos(Δt)][sin(t)cos(t)]

Δt は定数であるため、次の式は定数になります。

[cos(Δt)sin(Δt)sin(Δt)cos(Δt)]

したがって、問題は sin(t+Δt) を取得するために、sin(t) の値と定数行列による行列乗算の 1 つで発生します。

離散モードは丸めの誤差の累積を減らしますが、たとえば (4*eps) のように、ゼロとなることはありません。誤差の累積は、各タイム ステップのブロックの出力計算が前のタイム ステップの出力の値に基づくからです。

離散モードにおける丸め誤差の取り扱い

Sine Wave block ブロックが時間ベースの離散モードで動作している場合の丸め誤差は、次のいずれかの方法で対処します。

メソッド理由

Sine Wave ブロックの直下となる位置に Saturation ブロックを挿入します。

Sine Wave ブロックの出力に飽和の制限を設定することで、丸めの誤差の累積に基づいたオーバーシュートを削除できます。

Sine Wave ブロックを、ブロック出力の計算用に数学ライブラリ関数 sin() を使うように設定します。

  1. Sine Wave ブロックのダイアログ ボックスで、[時間][外部信号を使用] に設定し、ブロック アイコンに入力端子が現れるようにします。

  2. Digital Clock ブロックを使用してこの入力端子にクロック信号を接続します。

  3. クロック信号のサンプル時間を、Sine Wave ブロックのサンプル時間に設定します。

数学ライブラリの関数 sin() は、他のタイム ステップの出力値とは "無関係に" 各タイム ステップでブロック出力を計算し、丸め誤差の累積を防止します。

サンプルベース モード

サンプルベース モードでは、次の式を使用して Sine Wave ブロックの出力を計算します。

y=Asin(2π(k+o)/p)+b

  • A は、正弦波の振幅です。

  • p は、正弦波の周期です。

  • k は、0 から p-1 の範囲の繰り返し整数値です。

  • o は、信号のオフセット (位相ずれ) です。

  • b は、信号バイアスです。

このモードで、Simulink® は式を使って最初のタイム ステップで k を 0 に設定し、ブロックの出力を計算します。次のタイム ステップでは、Simulink は k を増分してブロックの出力を再計算します。k が p に達すると、Simulink は k を 0 にリセットしてからブロックの出力を計算します。このプロセスは、シミュレーションの終わりまで続行されます。

指定されたタイム ステップでブロック出力を計算するサンプル ベースの方法は以前のタイム ステップの出力に依存しません。このようにしてこのモードでは、丸め誤差の累積が回避されます。サンプルベース モードはリセット セマンティクスを提供するサブシステム内でリセット セマンティクスをサポートします。たとえば Sine Wave ブロックがリセット トリガーを受信する Resettable Subsystem 内にある場合、繰り返し整数 k がリセットされ、ブロック出力は初期条件にリセットされます。

端子

入力

すべて展開する

正弦波の計算の時間ソースを表す入力信号。

データ型: double

出力

すべて展開する

作成された正弦波である出力信号。

データ型: double

パラメーター

すべて展開する

このブロックが生成する正弦波のタイプを指定します。時間ベースを選択したかサンプルベースを選択したかによって、ダイアログ ボックスの一部のパラメーターが表示されます。

プログラムでの使用

ブロック パラメーター: SineType
: 文字ベクトル
: 'Time based' | 'Sample based'
既定の設定: 'Time based'

時間変数の値のソースとしてシミュレーション時間を使用するか、外部時間ソースを使用するかを指定します。外部時間ソースを指定した場合、ブロックは時間ソースの入力端子を作成します。

プログラムでの使用

ブロック パラメーター: TimeSource
: 文字ベクトル
: 'Use simulation time' | 'Use external signal'
既定の設定: 'Use external signal'

出力正弦波信号の振幅を指定します。

プログラムでの使用

ブロック パラメーター: Amplitude
: 文字ベクトル
: スカラー
既定の設定: '1'

出力を生成するための正弦波に追加される定数値を指定します。

プログラムでの使用

ブロック パラメーター: Bias
: 文字ベクトル
: スカラー
既定の設定: '0'

周波数を秒あたりのラジアン単位で指定します。

依存関係

このパラメーターを有効にするには、[正弦波タイプ][時間ベース] に設定します。

プログラムでの使用

ブロック パラメーター: Frequence
: 文字ベクトル
: スカラー
既定の設定: '1'

正弦波の位相シフトを指定します。

[時間 (t)][シミュレーション時間を使用] に設定した場合、このパラメーターを生成コード内で調整可能なグローバル変数として表示されるように設定することはできません。たとえば、[既定のパラメーター動作][調整可能] に設定したり、ストレージ クラスを Simulink.Parameter オブジェクトに適用した場合、[位相] パラメーターは生成コード内で調整可能なグローバル変数として表示されません。

実行中に位相を調整できるようにコードを生成するには、[時間 (t)][外部信号を使用] に設定します。独自の時間入力信号を提供したり、Digital Clock ブロックを使用して時間信号を生成することができます。例については、コード実行中の Sine Wave ブロックの位相パラメーターの調整 (Simulink Coder)を参照してください。

依存関係

このパラメーターを有効にするには、[正弦波タイプ][時間ベース] に設定します。

プログラムでの使用

ブロック パラメーター: Phase
: 文字ベクトル
: スカラー
既定の設定: '0'

1 周期のサンプル数を指定します。

依存関係

このパラメーターを有効にするには、[正弦波タイプ][サンプル ベース] に設定します。

プログラムでの使用

ブロック パラメーター: Samples
: 文字ベクトル
: スカラー
既定の設定: '10'

サンプル時間数のオフセット (離散位相シフト) を指定します。

依存関係

このパラメーターを有効にするには、[正弦波タイプ][サンプル ベース] に設定します。

プログラムでの使用

ブロック パラメーター: Offset
: 文字ベクトル
: スカラー
既定の設定: '0'

サンプリング周期を秒単位で指定します。既定の設定は 0 です。正弦波のタイプがサンプルベースの場合、サンプル時間は 0 よりも大きくなければなりません。サンプル時間の指定を参照してください。

プログラムでの使用

ブロック パラメーター: SampleTime
: 文字ベクトル
: スカラー
既定の設定: '0'

他のパラメーターが 1 行 1 列の行列である場合、出力次元を 1 次元ベクトル信号にすることを指定します。このボックスをオンにしなかった場合、ブロックは数値パラメーターと同じ次元数の信号を出力します。ソース ブロックの出力の次元の決定を参照してください。このパラメーターは、外部信号が時間を指定する場合は使用できません。その場合、数値パラメーターが行列の列または行の値である場合は、出力は 1 次元ベクトルです。

プログラムでの使用

ブロック パラメーター: VectorParams1D
: 文字ベクトル
: 'off' | 'on'
既定の設定: 'on'

ブロックの特性

データ型

double

直達

はい

多次元信号

いいえ

可変サイズの信号

いいえ

ゼロクロッシング検出

いいえ

拡張機能

バージョン履歴

R2006a より前に導入