Convert transfer function filter parameters to state-space form
[A,B,C,D] = tf2ss(b,a)
tf2ss converts the parameters of a transfer
function representation of a given system to those of an equivalent
[A,B,C,D] = tf2ss(b,a) returns
D matrices of a state space representation
for the single-input transfer function
in controller canonical form
The input vector
a contains the denominator
coefficients in descending powers of s. The rows
of the matrix
b contain the vectors of numerator
coefficients (each row corresponds to an output). In the discrete-time
case, you must supply
correspond to the numerator and denominator polynomials with coefficients
in descending powers of z.
For discrete-time systems you must make
the same number of columns as the length of
You can do this by padding each numerator represented in
possibly the denominator represented in the vector
with trailing zeros. You can use the function
accomplish this if
vectors of unequal lengths.
tf2ss function is part of the standard MATLAB® language.
Consider the system described by the transfer function
Convert it to state-space form using
b = [0 2 3; 1 2 1]; a = [1 0.4 1]; [A,B,C,D] = tf2ss(b,a)
A = -0.4000 -1.0000 1.0000 0 B = 1 0 C = 2.0000 3.0000 1.6000 0 D = 0 1
A one-dimensional discrete-time oscillating system consists of a unit mass, , attached to a wall by a spring of unit elastic constant. A sensor samples the acceleration, , of the mass at Hz.
Generate 50 time samples. Define the sampling interval .
Fs = 5; dt = 1/Fs; N = 50; t = dt*(0:N-1); u = [1 zeros(1,N-1)];
The transfer function of the system has an analytic expression:
The system is excited with a unit impulse in the positive direction. Compute the time evolution of the system using the transfer function. Plot the response.
bf = [1 -(1+cos(dt)) cos(dt)]; af = [1 -2*cos(dt) 1]; yf = filter(bf,af,u); stem(t,yf,'o') xlabel('t')
Find the state-space representation of the system. Compute the time evolution starting from an all-zero initial state. Compare it to the transfer-function prediction.
[A,B,C,D] = tf2ss(bf,af); x = [0;0]; for k = 1:N y(k) = C*x + D*u(k); x = A*x + B*u(k); end hold on stem(t,y,'*') hold off legend('tf','ss')