2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

制御工学Advent Calendar 2017

Day 6

PythonControlで正弦波に対する応答を求める。

Last updated at Posted at 2017-12-05

###目的
Python Controlで、1自由度系(バネマスダンバ系)の伝達関数の任意の正弦波に対する応答を求める。

###事前準備
PythonControlをインストールする

###システムのモデル化
以下の伝達関数について考える。

G(s)=\frac{Y(s)}{U(s)}=\frac{1}{ms^2+cs+k}

m:質量[kg]
k:ばね定数[N/m]
c:粘性減衰係数[N・s/m]
f:力[N]

###Python Controlでの任意入力応答
Python Controlは任意の入力に対する応答は以下の関数で求めることができる。

control.matlab.lsim(sys, U=0.0, T=None, X0=0.0)

  • Parameters:
    • sys:LTIシステム(線型時不変システム)の状態空間or伝達関数
    • U:各時刻での入力配列(デフォルト= 0)。UがNoneまたは0の場合、特殊なアルゴリズムが使用されます。この特別なアルゴリズムは、他の方法で使用される一般的なアルゴリズムより高速です。
    • T:時刻配列。数値は単調増加しなければなりません。
    • X0: 初期値(default=0)、数値は配列に自動変換。

control.matlab.lsimは線形システムの任意の応答を求めることができる。
パラメータU、X0の便宜として、数値(スカラー)は正しい形状の行列に変換されます。
正しい行列は、引数sysとTから推測されます。

引用元:
control.matlab.lsim

####正弦波
正弦波は、numpyの関数を使用して、以下の関数で生成できる。

u = ampnp.sin(2np.pifreqt)

  • Parameters
  • np.pi:円周率
  • freq:正弦波の周波数
  • t:時刻配列

###サンプルコード
responce_lsim_sincurve.py

#!/usr/bin/env python
from control.matlab import *
from matplotlib import pyplot as plt
from scipy import arange 
import numpy as np

def main():
    k=1.0
    m=0.1
    c=0.1
    num = [0, 0,1] 
    den = [m, c, k]
    x0 = [0, 0]				
    t =np.linspace(0, 10, 1024)	
    freq=1.0	
    amp=1.0
    u = amp*np.sin(2*np.pi*freq*t)		

    sys1 = tf(num, den) 		
    print sys1

    (y1a, T1a, x1a )= lsim(sys1, U=u, T=t, X0=x0)

    plt.axhline(0, color="b", linestyle="--")
    plt.plot(T1a, u, label="$X_2$")
   # plt.plot(T1a, x1a[:,1], label="$X_1$")
   # plt.plot(T1a, x1a[:,0], label="$X_2$")
    plt.plot(T1a, y1a, label="Output")
    plt.show()
    
if __name__ == "__main__":
  main()

sincurve.jpg

サンプルコードは以下に格納。
https://github.com/nnn112358/python-control_test

###参考
PythonControlをインストールする

PythonControlで1自由度系の伝達関数を求める。

PythonControlで2自由度系の伝達関数を求める。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?