Main Content

ss2tf

상태공간 표현식(State-Space Representation)을 전달 함수로 변환하기

설명

예제

[b,a] = ss2tf(A,B,C,D)는 시스템의 상태공간 표현식을 이에 상응하는 전달 함수로 변환합니다. ss2tf는 연속시간 시스템에서는 라플라스 변환(Laplace-transform) 전달 함수를 반환하고 이산시간 시스템에서는 Z 변환 전달 함수를 반환합니다.

예제

[b,a] = ss2tf(A,B,C,D,ni)는 입력값이 여러 개 있는 시스템에서 ni번째 입력값에 단위 임펄스가 가해지면 그 결과로 발생하는 전달 함수를 반환합니다.

예제

모두 축소

1차원의 이산시간 진동 시스템은 단위 탄성 상수를 갖는 스프링으로 벽에 연결된 단위 질량 m으로 구성됩니다. 센서가 질량의 가속도 aFs=5Hz로 샘플링합니다.

50개의 시간 샘플을 생성합니다. 샘플링 간격 Δt=1/Fs을 정의합니다.

Fs = 5;
dt = 1/Fs;
N = 50;
t = dt*(0:N-1);

진동자는 상태공간 방정식(State-Space Equation)으로 설명할 수 있습니다.

x(k+1)=Ax(k)+Bu(k),y(k)=Cx(k)+Du(k),

여기서 x=(rv)T은 상태 벡터로, rv는 질량의 위치와 속도를 각각 나타내고, 행렬은 다음과 같습니다.

A=(cosΔtsinΔt-sinΔtcosΔt),B=(1-cosΔtsinΔt),C=(-10),D=(1).

A = [cos(dt) sin(dt);-sin(dt) cos(dt)];
B = [1-cos(dt);sin(dt)];
C = [-1 0];
D = 1;

시스템에 양의 방향으로 단위 임펄스를 가합니다. 상태공간 모델을 사용하여 모든 초기 상태값이 0인 시공간 시스템의 변화를 계산합니다.

u = [1 zeros(1,N-1)];

x = [0;0];
for k = 1:N
    y(k) = C*x + D*u(k);
    x = A*x + B*u(k);
end

질량의 가속도를 시간 함수로 플로팅합니다.

stem(t,y,'filled')
xlabel('t')

Figure contains an axes object. The axes object with xlabel t contains an object of type stem.

전달 함수 H(z)를 사용하여 시간 종속 가속도를 계산하여 입력값을 필터링합니다. 결과를 플로팅합니다.

[b,a] = ss2tf(A,B,C,D);
yt = filter(b,a,u);

stem(t,yt,'filled')
xlabel('t')

Figure contains an axes object. The axes object with xlabel t contains an object of type stem.

시스템의 전달 함수는 다음과 같은 해석적 표현을 갖습니다.

H(z)=1-z-1(1+cosΔt)+z-2cosΔt1-2z-1cosΔt+z-2.

표현식을 사용하여 입력값을 필터링합니다. 응답을 플로팅합니다.

bf = [1 -(1+cos(dt)) cos(dt)];
af = [1 -2*cos(dt) 1];
yf = filter(bf,af,u);

stem(t,yf,'filled')
xlabel('t')

Figure contains an axes object. The axes object with xlabel t contains an object of type stem.

결과는 세 가지 경우 모두 동일합니다.

이상적인 1차원 진동 시스템은 두 벽 사이에 있는 두 개의 단위 질량 m1m2로 구성됩니다. 각 질량은 단위 탄성 상수를 갖는 스프링으로 가장 가까운 벽에 연결됩니다. 이러한 또 다른 스프링이 두 질량을 연결합니다. 센서가 질량의 가속도인 a1a2Fs=16Hz로 샘플링합니다.

총 측정 시간을 16초로 지정합니다. 샘플링 간격 Δt=1/Fs을 정의합니다.

Fs = 16;
dt = 1/Fs;
N = 257;
t = dt*(0:N-1);

시스템은 다음 상태공간 모델로 설명할 수 있습니다.

x(n+1)=Ax(n)+Bu(n),y(n)=Cx(n)+Du(n),

여기서 x=(r1v1r2v2)T은 상태 벡터로, rivi는 각각 i번째 질량의 위치와 속도를 나타냅니다. 입력 벡터 u=(u1u2)T이고 출력 벡터 y=(a1a2)T입니다. 상태공간 행렬은 다음과 같습니다.

A=exp(AcΔt),B=Ac-1(A-I)Bc,C=(-201010-20),D=I,

연속시간 상태공간 행렬은 다음과 같습니다.

Ac=(0100-2010000110-20),Bc=(00100001),

I는 적절한 크기의 단위 행렬을 나타냅니다.

Ac = [0 1 0 0; -2 0 1 0; 0 0 0 1; 1 0 -2 0];
A = expm(Ac*dt);
Bc = [0 0; 1 0; 0 0; 0 1];
B = Ac\(A-eye(4))*Bc;
C = [-2 0 1 0; 1 0 -2 0];
D = eye(2);

첫 번째 질량 m1이 양의 방향으로 단위 임펄스를 받습니다.

ux = [1 zeros(1,N-1)];
u0 = zeros(1,N);
u = [ux;u0];

모델을 사용하여 모든 항목이 0인 초기 상태에서 시스템의 시간 변화를 계산합니다.

x = [0 0 0 0]';
y = zeros(2,N);

for k = 1:N
    y(:,k) = C*x + D*u(:,k);
    x = A*x + B*u(:,k);
end

두 질량의 가속도를 시간 함수로 플로팅합니다.

stem(t,y','.')
xlabel('t')
legend('a_1','a_2')
title('Mass 1 Excited')
grid

Figure contains an axes object. The axes object with title Mass 1 Excited, xlabel t contains 2 objects of type stem. These objects represent a_1, a_2.

시스템을 전달 함수 표현식으로 변환합니다. 시스템이 첫 번째 질량에 양의 단위 임펄스를 받아 어떤 반응을 하는지 알아봅니다.

[b1,a1] = ss2tf(A,B,C,D,1);
y1u1 = filter(b1(1,:),a1,ux);
y1u2 = filter(b1(2,:),a1,ux);

결과를 플로팅합니다. 전달 함수를 사용해도 상태공간 모델을 사용한 것과 반응이 동일합니다.

stem(t,[y1u1;y1u2]','.')
xlabel('t')
legend('a_1','a_2')
title('Mass 1 Excited')
grid

Figure contains an axes object. The axes object with title Mass 1 Excited, xlabel t contains 2 objects of type stem. These objects represent a_1, a_2.

시스템이 초기 구성으로 초기화됩니다. 이제 다른 질량 m2가 양의 방향으로 단위 임펄스를 받습니다. 시스템의 시간 변화를 계산합니다.

u = [u0;ux];

x = [0;0;0;0];
for k = 1:N
    y(:,k) = C*x + D*u(:,k);
    x = A*x + B*u(:,k);
end

가속도를 플로팅합니다. 각 질량의 반응이 바뀝니다.

stem(t,y','.')
xlabel('t')
legend('a_1','a_2')
title('Mass 2 Excited')
grid

Figure contains an axes object. The axes object with title Mass 2 Excited, xlabel t contains 2 objects of type stem. These objects represent a_1, a_2.

시스템이 두 번째 질량에 양의 단위 임펄스를 받아 어떤 반응을 하는지 알아봅니다.

[b2,a2] = ss2tf(A,B,C,D,2);
y2u1 = filter(b2(1,:),a2,ux);
y2u2 = filter(b2(2,:),a2,ux);

결과를 플로팅합니다. 전달 함수를 사용해도 상태공간 모델을 사용한 것과 반응이 동일합니다.

stem(t,[y2u1;y2u2]','.')
xlabel('t')
legend('a_1','a_2')
title('Mass 2 Excited')
grid

Figure contains an axes object. The axes object with title Mass 2 Excited, xlabel t contains 2 objects of type stem. These objects represent a_1, a_2.

입력 인수

모두 축소

상태 행렬로, 행렬로 지정됩니다. 시스템이 p개 입력값과 q개 출력값을 갖고 n 상태 변수로 설명될 경우 A는 n×n입니다.

데이터형: single | double

입력-상태 행렬로, 행렬로 지정됩니다. 시스템이 p개 입력값과 q개 출력값을 갖고 n 상태 변수로 설명될 경우 B는 n×p입니다.

데이터형: single | double

상태-출력 행렬로, 행렬로 지정됩니다. 시스템이 p개 입력값과 q개 출력값을 갖고 n 상태 변수로 설명될 경우 C는 q×n입니다.

데이터형: single | double

피드스루 행렬로, 행렬로 지정됩니다. 시스템이 p개 입력값과 q개 출력값을 갖고 n 상태 변수로 설명될 경우 D는 q×p입니다.

데이터형: single | double

입력 인덱스로, 정수 스칼라로 지정됩니다. 시스템이 p개 입력값을 가지면 ss2tf에 후행 인수 ni = 1, …, p를 사용하여 ni번째 입력값에 적용된 단위 임펄스에 대한 응답을 계산합니다.

데이터형: single | double

출력 인수

모두 축소

전달 함수의 분자 계수로, 벡터나 행렬로 반환됩니다. 시스템이 p개 입력값과 q개 출력값을 갖고 n 상태 변수로 설명될 경우, 각 입력값에 대해 b는 q×(n+1)입니다. 계수는 내림차순으로 정렬된 s 또는 z로 반환됩니다.

전달 함수의 분모 계수로, 벡터로 반환됩니다. 시스템이 p개 입력값과 q개 출력값을 갖고 n 상태 변수로 설명될 경우 각 입력값에 대해 a는 1×(n+1)입니다. 계수는 내림차순으로 정렬된 s 또는 z로 반환됩니다.

세부 정보

모두 축소

전달 함수

  • 이산시간 시스템에서 상태공간 행렬은 상태 벡터 x, 입력값 u, 출력값 y의 관계를 다음과 같이 규정합니다.

    x(k+1)=Ax(k)+Bu(k)y(k)=Cx(k)+Du(k).

    전달 함수는 시스템의 임펄스 반응에 대한 Z 변환입니다. 또한 상태공간 행렬로 다음과 같이 표현할 수 있습니다.

    H(z)=C(zIA)1B+D.

  • 연속시간 시스템에서 상태공간 행렬은 상태 벡터 x, 입력값 u, 출력값 y의 관계를 다음과 같이 규정합니다.

    x˙=Ax+Buy=Cx+Du.

    전달 함수는 시스템의 임펄스 반응에 대한 라플라스 변환입니다. 또한 상태공간 행렬로 다음과 같이 표현할 수 있습니다.

    H(s)=C(sIA)1B+D.

버전 내역

R2006a 이전에 개발됨

참고 항목

(Signal Processing Toolbox) | (Signal Processing Toolbox) | (Signal Processing Toolbox) | (Signal Processing Toolbox) | (Signal Processing Toolbox) | (Signal Processing Toolbox)