본문 바로가기
전공 관련 (Major)/제어 (Control)

제어공학 - Poles and Zeros (극점과 영점)

by Jayce_choi 2022. 12. 29.
반응형

Recap

시스템의 전달 함수 (Transfer function)를 라플라스 변환을 통해서 얻을 수가 있었습니다. 그리고 전달 함수의 분모, 분자를 우리는 다항식 및 인수분해 형태로 표현을 할 수가 있습니다. 

G(s) = 전달함수

이때 z_i는 영점이라고 부르며, p_i는 극점이라고 부릅니다. 

 

Zeros

만약 s의 값이 영점값들중 하나와 동일하게 된다면 전달 함수의 분자는 0이 되어버려서 G(s) = 0이 되어버립니다. 즉, 영점에 도달하게 되면 신호 전달이 막혀버리는 (Signal transmission blocking) 현상이 발생하게 되며 주파수가 사라지게 됩니다 (Transmission zeros of the system) 

 

Poles

반대로 s의 값이 극점값들중 하나와 동일하게 된다면 분모가 0이 되어버려서 전달 함수 G(s) = `무한`이 되게 됩니다. 출력이 무한이 되게 되면 당연히 시스템에 문제가 발생하기 때문에 시스템의 stability를 결정하는 역할을 합니다. 

 

*if zeros = poles ... -> Pole-Zero Cancellation

만약 영점과 극점값이 동일한 값을 가지게 된다면 분모, 분자에서 서로 약분되는 term이 생기게 되며 이는 곧 바람직하지 않은 결과를 가져오게 됩니다 (undesirable properties). right plane에 위치한 극점을 제거하기 위해서 상쇄시키는 영점을 추가한다고 한다고 해도 시스템의 응답은 발산해버릴 수가 있기 때문입니다.

만약 시스템의 설계를 하기가 너무나 어렵다면, pole-zero cancellation을 해도 되지만 이때 완벽하게 동일한 값을 사용하는게 아닌 pole=5 라면 zero=4.9999로 설정함으로써 설계를 할 수가 있습니다. 그러나 이와 같은 접근법도 미세한 진동을 남길 수 있기에 추천하지는 않습니다.

 

 

Number of poles and zeros 

전달함수에서 분모, 분자의 다항식은 시스템에 따라서 차수가 다를 수가 있습니다. 분자에 위치한 다항식의 최고 차수가 M이며 분모에 위치한 다항식의 최고 차수가 N일 때 다음과 같이 상황을 나눠서 생각할 수 있습니다. 

 

1) M <= N (분모의 차수가 더 크거나 같을때) 

N이 더 큰상황이며 시스템이 무한대까지 응답하는 상황일 때 전달 함수는 아래와 같이 근사할 수 있습니다. 이때 s는 무한대로 가기에 결국은 G(s)=0이 되어버립니다. 

즉, 영점과 같은 역할을 한것이며 만약 N=5, M=3일 때 N-M=2이므로 s가 무한대일 때 영점이 2개가 있다는 것을 알 수가 있습니다. 그리고 해당 영점들은 `infinite zero`라고 부릅니다.  

이때 우리는 시스템을 `strictly proper system`한 시스템이라고 부르며 차수가 동일할때는 `proper system`이라고 부릅니다. 

 

2) M > N (분자의 차수가 더 클때) 

분자의 차수가 더 크다면 전달함수는 위와 같이 표현이 됩니다. 그러나 s가 무한대로 갈 때 (w=∞) 전달함수도 마찬가지로 매우 무한한 값을 가지게 되며, physical 한 상황에서 시스템을 건드렸을 때 순간적으로 날아가게 되는 시스템이 되게 됩니다.

해당 시스템은 현실적으로 존재할 수 없는 시스템이므로 이때 시스템을 `non-proper system (non-causality)` 이라고 부릅니다. 

 

Example (MATLAB)

2가지 인풋이 주어진 예제를 살펴보겠습니다.

인공위성이 자세 제어를 위해서 엔진에서 추력을 분출해야합니다. 이때 input1은 한 방향으로 주는 것이고 input2는 한 방향으로 주었다가 반대 방향으로도 동일한 크기로 주었을 때 어떠한 시스템의 응답을 보이는지에 대해 표현한 예제입니다.  

%추가 코드 (극점, 영점 계산하기)
num = [0 0 0.001];
den = [1 0.05 0];
[z,p,k] = tf2zp(num,den); 

% input 1에 대해서 sysG (전달함수)의 output
s = tf('s');
sysG = 0.0002/s^2;
t = 0:0.01:10;
u1 = [zeros(1,500) 25*ones(1,10) zeros(1,491)];
[y1] = lsim(sysG, u1, t);
y1 = y1 * 180/pi;

% input 2에 대해서 sysG (전달함수)의 output
u2 = [zeros(1,500) 25*ones(1,10) zeros(1,100) -25*ones(1,10) zeros(1,381)];
[y2] = lsim(sysG, u2, t);
y2 = y2 * 180/pi;

figure()
subplot(2,2,1)
plot(t,u1)
title('input 1')
xlabel('Time (sec)')
ylabel('Thrust, Fc (input 1)')
grid on

subplot(2,2,2)
plot(t,y1)
title('output (input 1)')
xlabel('Time (sec)')
ylabel('Theta (radian)')
grid on

subplot(2,2,3)
plot(t,u2)
title('input 2')
xlabel('Time (sec)')
ylabel('Thrust, Fc (input 2)')
grid on

subplot(2,2,4)
plot(t,y2)
title('output 2 (input 2)')
xlabel('Time (sec)')
ylabel('theta (radian)')
grid on

반응형

댓글