Van der Pol Oscillator 의 상태방정식을 표현하면 다음과 같다.
$$ \left[ \matrix{\dot{x}_1 \\ \dot{x}_2} \right] = \left[ \matrix{0 && 1 \\ -1 && \mu (1-x_1^2 ) } \right] \left[\matrix{x_1 \\ x_2} \right] $$
수식만을 분석해보면 시스템 행렬의 $x_1^2$ 항이 커지면서 $x_2$ 상태를 안정하게 만들어주지만, 1보다 작게되면 $\mu$ 성분으로 인해 극점이 허수가 되므로, 안정과 불안정을 넘나들게 된다. 그래서 다음의 거동 분석과 같이 $mu$가 음수인 그래프와 같이 안정해지고, 아니라면 Limit Cycle을 그리면서 위상 평면 상에서 특정 패턴을 그리게 된다.
Van der Pol Oscillator 거동 분석
다음 식으로 항 별로 계수를 추가하고 항들에 따른 거동은 다음과 같다.
$$\ddot{x}_1 - \mu \left( 1- a x_1^2 \right) \dot{x}_1 + b x_1 = 0 $$
$$\cases{\dot{x}_1 = x_2 \\ \dot{x}_2 = \mu\left(1-a x_1^2 \right) \ddot{x}_1 - b x_1 } $$
mu가 0 이상이면 Limit Cycle이 생성되기 시작하며
mu > 0 이면 Limit Cycle 의 편향이 심해진다.
mu < 0 이면 Limit Cycle을 생성하지 않고 원점으로 수렴한다.
a > 0 이면 Limit Cycle의 크기가 역수배로 증가한다.
b > 0 이면 주기가 빨라진다.
a <= 0 혹은 b<=0 이면 발산한다.
다음의 식에서 c를 조절하면 다음과 같다.
$$ \dot{x}_1 =c x_2 $$
코드는 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
import numpy as np
import matplotlib.pyplot as plt
dt = 0.01
endtime = 5000
lists = [0, 0.01, 0.1, 0.5, 1, 2, 3]
legend_name = list()
for a in lists:
mu = 1
a = a
b = 1
x = [1, 1]
data = dict()
data['t'] = list()
data['x1'] = list()
data['x2'] = list()
t = 0
x1 = x[0]
x2 = x[1]
for idx in np.arange(0, endtime):
t = t + dt
dx1 = x2
dx2 = - b * x1 + mu * (1 - a * x1 * x1) * x2
x1 = x1 + dx1 * dt
x2 = x2 + dx2 * dt
data['t'].append(t)
data['x1'].append(x1)
data['x2'].append(x2)
plt.plot(data['x1'], data['x2'])
legend_name.append("a={}".format(a))
plt.grid()
plt.xlabel('x1')
plt.ylabel('x2')
plt.legend(legend_name)
plt.axis([-5, 5, -5, 5])
plt.title("Van der Pol Oscillator, mu=1, b=1\nx'' - mu (1-a*x*x)x' + b x = 0")
plt.show()
|
cs |
비교 : 1차 시스템의 PI 피드백 제어
1차 안정 시스템에 대한 PI 제어기로 음성 피드백을 구성한 시스템
$$\dot{x} = -a x + u$$
제어 입력은 다음과 같으며 상태 공간에서 정리할 수 있다.
$$u = k_p e + \int k_i e dt $$
$$\cases{\dot{e}_I = k_i e \\ u = e_i + k_p e} $$
피드백 시스템의 오차 동역학을 구하고자 다음과 같이 명령을 정의하면
$$\dot{x}_c = 0, x_c = \text{Const}$$
$$e = x_c - x$$
$$\dot{e} = \dot{x}_c - \dot{x} = 0 - \dot{x} = a x - u$$
$$\dot{e} = -a (e-x_c) - u$$
$$\dot{e} = -a (e-x_c) - k_p e - \int k_i e dt $$
$$\cases{\dot{e}_i = 0 + k_i e \\ \dot{e} = - e_i - (k_p + a) e} $$
$$\left[ \matrix{e_i \\ e} \right] = \left[ \matrix{0 && k_i \\ -1 && -(k_p + a) } \right] \left[\matrix{e_i \\ e} \right] $$
** EOF **
'G.N.C.' 카테고리의 다른 글
이산 선형 칼만 필터 중간 유도 정리 (0) | 2024.04.11 |
---|---|
PID, Anti-Windup 구현 (0) | 2023.10.16 |