10

Simulink で行うように、いくつかの基本的なシステム シミュレーションに Yampa を使用しようとしています。この場合、この simulink チュートリアルで導入されたスプリングとダンパー システムをシミュレートしたいと考えています。システムを表すために、次の信号関数を作成しました。

system = time >>> force >>> displacement

force = constant (m * g)

displacement = feedback (-) (velocity >>> integral) (gain $ k / m) 0
velocity     = feedback (-) integral                (gain $ c / m) 0

関数は基本的なフィードバック ループfeedbackを作成し、次のように実装されます。

feedback op a b b0 = loopPre b0 inner
    where inner = arr (uncurry op) >>> a >>> (identity &&& b)

ああ、そして:

gain x = arr (*x)

賢明な正の定数を使用すると、非常に不安定なシステムが得られます。

変位/時間のプロット

フィードバック ループを構築したり、統合を適用したりする方法に明らかに問題がありますか?

4

1 に答える 1

7

integralに変更imIntegral 0

displacement = feedback (-) (velocity >>> imIntegral 0) (gain $ k / m) 0
velocity     = feedback (-) (imIntegral 0)            (gain $ c / m) 0

spring.hs から:

やんぱ

Simulink の使用:

シミュレーション

積分関数で何かおかしなことが起こっています。変更するimIntegral 0と、matlab と同じ曲線が得られます。

私の推測ではIntegral、開始値がなく、ループの動作が変化するため、1 サンプル遅れていると思います。

于 2013-10-20T19:40:08.230 に答える