Relational Operatorブロ​ックで「==」を認識​しない場合があるが、​どうしたら良いですか​?

2 次查看(过去 30 天)
Simulinkの”Relatioanal Operator”ブロックを用いて位相をずらした2つの正弦波の等値演算を行いたいのですが、値が等しい時に正しく検知しません。
どうしたら良いですか?

采纳的回答

MathWorks Support Team
浮動小数点による計算では、僅かな数値誤差により等値演算等の比較演算が正しく動作しない場合があります。
そのような場合に以下の方法を用いて問題に対処すること可能です。
1. 数値を丸め整数化する
2. 信号の差分の絶対値をとり、許容誤差範囲を定めて比較判定を行う
1の方法は、数値の丸め込みを行い、整数化した値を比較演算する方法です。
2の方法は、比較する2つ信号の差分を計算し、その絶対値が事前に設けた許容誤差(例 0.001など)の範囲内かどうかを判定し、範囲内であれば信号は等しいと判断する方法です。
以下は、Simulinkにて2.の方法によって位相の異なる二つの正弦波を等値判定する一例です。
入力である"Sine Wave2 "は、同じく入力である"Sine Wave1"に対して位相が45度(pi/4)だけずれています。
10秒間シミュレーションを行うと、下図の通り、"Sine Wave1"と"Sine Wave2" は約1秒、4秒、7秒の付近で重なっています。
これに対し、”Relatioanal Operator”ブロックにて関係演算子を「==」と設定して比較演算を行った結果が下図の通りです。
最初の一致点は検出されていますが、残りの一致点は不検出となり、意図した動作となっていません。
一方、2.の方法を用いて比較演算を行った結果は下図の通りです。
すべての一致点を正しく検出できていることが確認できます。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Logic and Bit Operations 的更多信息

标签

尚未输入任何标签。

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!