시스템 인식을 위한 ToolBox

개시하다


가벼운 시스템 인식용 툴박스를 원하기 때문에 하려고 했으나 실제 활용을 위해 다양한 기능(후술)을 탑재해야 해 제작을 중단했지만, 시스템 인식 학습용으로 좋은 교재가 될 수 있도록 공개하고자 했다.
위에서 말한 바와 같이 칼만 필터를 설계하는 데 있어 시스템 식별도 매우 중요한 준비이다.시스템 식별의 원리 등은 상술한 보도에 있다.
Qt를 사용하여 응용 프로그램을 만들고 있습니다.실행 가능한 파일과 원본 코드는 다음과 같습니다.
https://qiita.com/wcrvt/items/cd1930598ef72055d20b
Mac에서 개발한 것이기 때문에 Mac만 실행할 수 있습니다.Win을 사용하여 소스 파일을 컴파일하는 경우 (FFTW 필요)시스템 인식으로 FFT 코드가 소스에 있으니 그것만 원하시는 분은 가져가세요.
* 이 응용 프로그램에서 실제 측정된 데이터 세트를 사용하는 경우 좋은 모델이 나타날 수 있습니다.도대체 공부용이래.

액션


응용 프로그램을 열면 다음과 같은 화면이 상승합니다.
https://github.com/wcrvt/SystemIdentification
시간 서열의 데이터를 여기에 전달합니다.데이터 형식은 입니다.dat 또는.csv를 읽을 수 있습니다.데이터가 제대로 읽히지 않을 경우 데이터 구분자를 변경하고 Load를 수정한 후 복구하십시오.이번에는 학습용으로 이상적인 조건으로 데이터를 입력하고 관측할 때의 데이터 집합을 제작하여 응용 프로그램에 맡긴다(소스 코드에 데이터 집합을 생성하는 프로그램이 있다).
dataset.py
import numpy as np
import math

#Time
time=0.0
time_sampling=1e-4

#Motion
position=0
velocity=0
acceleration=0
force=0

#For Intefgration with Tastin Transformation
velocity_z1=0
acceleration_z1=0

#Environment
env_k=3400
env_d=2.35
env_m=1.3

#Input and Sensor
force_ref=0
position_get=0

#simulator
sim_loop=100

#make data set
f=open("b.dat","w")
while time <= 50:
    force_ref=10.0*math.sin(5.0*time*time) if time>0.1 else 0.0
    force=force_ref+np.random.normal(0.0, 0.001)
    for i in range(sim_loop):
        #Position
        position+=(velocity+velocity_z1)*time_sampling/sim_loop/2.0 
        velocity_z1=velocity
        #Velocity
        velocity+=(acceleration+acceleration_z1)*time_sampling/sim_loop/2.0
        acceleration_z1=acceleration
        #Acceleration
        acceleration=(-env_k*position-velocity*env_d+force)/env_m
    position_get=position+np.random.normal(0.0, 50e-9)
    result = "{:.7f} {:.7f} {:.7f}\n".format(time, force_ref,position_get)
    f.write(result)
    time+=time_sampling
f.close() 

모터로 물체를 누르는 상황을 구상하고 있다.연속 시간의 추진력에서 위치 응답에 대한 전달 함수 $G(s)$입력
G(s)=\frac{1}{1.3s^2+2.35s+3400}
의 공장 시뮬레이터가 데이터를 생성했다.스캔 신호를 사용하도록 입력하십시오.이 데이터를 읽으면 시간 파형과 주파수 성분이 자동으로 그려집니다.

그 다음에 Identification의 라벨에 데이터 내의 입력과 출력의 행수를 기입하고 모델의 단계(극과 영점의 수)를 만든 다음에 Identify 단추를 누르면 이산시간 전달 함수, 연속시간 전달 함수, 극, 영점, 안정적 이득, 고유 주파수를 계산한다.

제작된 설비 시뮬레이터와 같은 결과를 얻었다.그리고 맨 아래 도표에는 입력과 출력의 주파수 분량에서 얻은 이득선도와 시스템 식별을 통해 얻은 이득선도가 표시되어 있다.만약 이곳의 파형이 일치한다면 시스템 식별이 성공할 것 같다.

사용 시 주의사항


이 프로그램에서 이루어진 시스템 식별 사용 문장에 기재된 최소 2승법.상술한 바와 같이 저는 PE(Persistent Excitation)성과 티프리츠 행렬의 정정치성을 조금 언급했지만 시스템 식별에서 입력을 선택하는 것이 매우 중요합니다.간단히 말하면 연립 방정식을 풀듯이 여러 주파수의 입력과 출력 관계가 없으면 연립 방정식을 풀 정보가 부족하다.입력할 때 스캔 신호와 M 시리즈 신호를 사용하지만 각각의 특징이 있으니 확인하세요.나는 위상 정보를 보기 위해 자주 스캔 신호를 사용한다.
이외에도 실제 운용에는 아직도 많은 문제점이 있다.
  • 최소 2승법을 집행하기 위해서는 정정된 티프리츠 행렬의 역 행렬을 정확하게 도출해야 한다.관측값이 DC값이 크거나 샘플링 빈도가 높아 샘플값이 매우 가깝다면 러시아 블록 매트릭스의 원소 간 값이 가까워 컴퓨터 반올림의 영향을 받아 정확한 역행렬을 계산할 수 없을 수 있다.경응의숙대학 족립선생님의 경험 규정에 따라 관심 주파수가 10배인 샘플링 주파수를 사용하는 것이 좋다(선생님 저서인 에서 발췌한 것).상술한 응용 프로그램은 설계 기능을 탑재하지 않았다.
  • 실제 데이터를 얻고 시스템 식별을 할 때 관측할 때 소음과 위상 지연의 영향을 고려해야 한다.만약에 관측 값이 소음에 덮이면 (고주파 구역에서 발생하기 쉽다. 이것은 시스템 구동 대역폭의 제한이 고주파 구역의 응답을 자극하지 않기 때문이다) 시스템 식별이 왕왕 순조롭게 진행되지 못한다.이런 상황에서 가능한 한 큰 폭의 입력을 입력하는 것이 더욱 좋다.또한 시스템 식별은 입력과 출력의 인과 관계를 바탕으로 하기 때문에 위상 지연은 매우 큰 오차 요인이다.특히 샘플링 빈도가 높은 경우 입력과 출력 사이의 시간 지연도 뚜렷하기 때문에 이산시간 표시에 시간 편이 작용소를 넣어야 한다.위의 애플리케이션에는 시간 오프셋 기능이 없습니다.
  • 극과 영점의 수량을 결정할 때 실제 기기의 시간 응답과 주파수 응답을 확인해야 하며 일정한 틀이 있지만 경험적으로 결정해야 한다.모델링이란 어떤 일을 하는데 필요한 부분(본질)만 기술하지만 시스템 설계를 제어하는 데 필요한 부분의 대역폭을 잘 보고 순서를 결정하는 것을 말한다.만약에 고급 모델을 만들어서 제어 시스템을 실현하지 못하면 의미가 없고 저급 모델을 사용하여 제어 시스템의 불안정을 야기할 수도 없다.저급 지연 시스템에 고급극 모델을 설치하면 제어극은 시스템의 대부분 특성을 기술하고 나머지는 제어극의 기술에 지장을 주지 않는다.아주 적은 사람부터 선택해서 입어보기 좋은 곳에서 멈추는 게 좋아요.
  • 위에서 말한 바와 같이 시스템 식별의 알고리즘, 시스템의 설비 특성, 입력 신호의 선택 방법 등을 모르면 시스템 식별을 하기 전의 문제가 될 것이다.나는 이것이 Matlab 등을 사용하는 것도 같은 일이라고 생각한다.이렇게 하면 툴박스를 만들어도 쓸 사람을 골라 실제 활용한 기능 설치가 번거로워 제작을 중단하게 된다.관심 있는 사람은 원본 코드를 자유롭게 사용하세요.

    좋은 웹페이지 즐겨찾기