Main Content

Access zero-pole-gain data

`[z,p,k] = zpkdata(sys) `

[z,p,k,Ts] = zpkdata(sys)

[z,p,k,Ts,covz,covp,covk] = zpkdata(sys)

`[z,p,k] = zpkdata(sys) `

returns the zeros `z`

, poles `p`

,
and gain(s) `k`

of the zero-pole-gain model `sys`

.
The outputs `z`

and `p`

are cell
arrays with the following characteristics:

`z`

and`p`

have as many rows as outputs and as many columns as inputs.The

`(i,j)`

entries`z{i,j}`

and`p{i,j}`

are the (column) vectors of zeros and poles of the transfer function from input`j`

to output`i`

.

The output `k`

is a matrix with as many rows
as outputs and as many columns as inputs such that `k(i,j)`

is
the gain of the transfer function from input `j`

to
output `i`

. If `sys`

is a transfer
function or state-space model, it is first converted to zero-pole-gain
form using `zpk`

.

For SISO zero-pole-gain models, the syntax

[z,p,k] = zpkdata(sys,'v')

forces `zpkdata`

to return the zeros and poles
directly as column vectors rather than as cell arrays (see example
below).

`[z,p,k,Ts] = zpkdata(sys) `

also returns the sample time `Ts`

.

`[z,p,k,Ts,covz,covp,covk] = zpkdata(sys) `

also returns the covariances of the zeros, poles and gain of the identified
model `sys`

. `covz`

is a cell array
such that `covz{ky,ku}`

contains the covariance information
about the zeros in the vector `z{ky,ku}`

. `covz{ky,ku}`

is
a 3-D array of dimension 2-by-2-by-Nz, where `Nz`

is
the length of `z{ky,ku}`

, so that the `(1,1)`

element
is the variance of the real part, the `(2,2)`

element
is the variance of the imaginary part, and the `(1,2)`

and `(2,1)`

elements
contain the covariance between the real and imaginary parts. `covp`

has
a similar relationship to `p.covk`

is a matrix containing
the variances of the elements of `k`

.

You can access the remaining LTI properties of `sys`

with `get`

or
by direct referencing, for example,

sys.Ts sys.inputname

Given a zero-pole-gain model with two outputs and one input

H = zpk({[0];[-0.5]},{[0.3];[0.1+i 0.1-i]},[1;2],-1) Zero/pole/gain from input to output... z #1: ------- (z-0.3) 2 (z+0.5) #2: ------------------- (z^2 - 0.2z + 1.01) Sample time: unspecified

you can extract the zero/pole/gain data embedded in `H`

with

[z,p,k] = zpkdata(H) z = [ 0] [-0.5000] p = [ 0.3000] [2x1 double] k = 1 2

To access the zeros and poles of the second output channel of `H`

,
get the content of the second cell in `z`

and `p`

by
typing

z{2,1} ans = -0.5000 p{2,1} ans = 0.1000+ 1.0000i 0.1000- 1.0000i

Extract the ZPK matrices and their standard deviations for a 2-input, 1 output identified transfer function.

load iddata7

transfer function model

sys1 = tfest(z7, 2, 1, 'InputDelay',[1 0]);

an equivalent process model

sys2 = procest(z7, {'P2UZ', 'P2UZ'}, 'InputDelay',[1 0]); 1, p1, k1, ~, dz1, dp1, dk1] = zpkdata(sys1); [z2, p2, k2, ~, dz2, dp2, dk2] = zpkdata(sys2);

Use `iopzplot`

to visualize the pole-zero locations
and their covariances

h = iopzplot(sys1, sys2); showConfidence(h)