Convert transfer function filter parameters to zero-pole-gain form
[z,p,k] = tf2zp(b,a)
tf2zp finds the zeros, poles, and gains of a continuous-time transfer function.
Note You should use tf2zp when working with positive powers (s2 + s + 1), such as in continuous-time transfer functions. A similar function, tf2zpk, is more useful when working with transfer functions expressed in inverse powers (1 + z-1 + z-2), which is how transfer functions are usually expressed in DSP.
The numerator polynomials are represented as columns of the matrix b.
The denominator polynomial is represented in the vector a.
Given a SIMO continuous-time system in polynomial transfer function form
you can use the output of tf2zp to produce the single-input, multi-output (SIMO) factored transfer function form
The following describes the input and output arguments for tf2zp:
The vector a specifies the coefficients of the denominator polynomial A(s) (or A(z)) in descending powers of s (z-1).
The ith row of the matrix b represents the coefficients of the ith numerator polynomial (the ith row of B(s) or B(z)). Specify as many rows of b as there are outputs.
For continuous-time systems, choose the number nb of columns of b to be less than or equal to the length na of the vector a.
For discrete-time systems, choose the number nb of columns of b to be equal to the length na of the vector a. You can use the function eqtflength to provide equal length vectors in the case that b and a are vectors of unequal lengths. Otherwise, pad the numerators in the matrix b (and, possibly, the denominator vector a) with zeros.
The zero locations are returned in the columns of the matrix z, with as many columns as there are rows in b.
The pole locations are returned in the column vector p and the gains for each numerator transfer function in the vector k.
The tf2zp function is part of the standard MATLAB® language.
Generate a system with the following transfer function.
Find the zeros, poles, and gain of the system. Use eqtflength to ensure the numerator and denominator have the same length. Plot the poles and zeros to verify that they are in the expected locations.
b = [2 3]; a = [1 1/sqrt(2) 1/4]; fvtool(b,a,'polezero') [b,a] = eqtflength(b,a); [z,p,k] = tf2zp(b,a) text(real(z)+.1,imag(z),'Zero') text(real(p)+.1,imag(p),'Pole')
z = 0 -1.5000 p = -0.3536 + 0.3536i -0.3536 - 0.3536i k = 2