The Math Forum

Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Math Forum » Discussions » Software » comp.soft-sys.matlab

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

Topic: [Matlab Question] Converting H(s) to H(z) using derivative approximation?
Replies: 8   Last Post: Dec 7, 2013 3:13 AM

Advanced Search

Back to Topic List Back to Topic List Jump to Tree View Jump to Tree View   Messages: [ Previous | Next ]
Nasser Abbasi

Posts: 6,677
Registered: 2/7/05
Re: [Matlab Question] Converting H(s) to H(z) using derivative approximation?
Posted: Oct 24, 2010 4:30 PM
  Click to see the message monospaced in plain text Plain Text   Click to reply to this topic Reply

On 10/24/2010 12:11 PM, frodonet wrote:
> Hi Nasser,
> thanks for your help.
> Sorry i didn't post my workings before. Here is what i actually did in my matlab.
> 1) I found out the s-roots by using the roots(p) command.
> 2) then i use the relationship for derivate approximation where z^-1 = 1 - sT.
> 3) So from s roots, i get the z roots and then i contruct the polynomial from z-roots using the poly(A) command.
> 4) Then from the polynomial coefficients, i just use freqz to plot the magnitude vs freq response.
> Not sure it's 100% right, but when i plot it the shape is correct which is a low pass filter but the
> magnitude might be a little off.
> After seeing your solution, i need to give it a try.
> But do you know that the relationship between s and z is as such :
> z^-1 = 1 - sT
> So when you have such relationship, does your method still holds?

Your method looks correct for first order derivative method.

The methods I know of are:

1. first order derivative approx: z=1/(1-sT), requires very large
sampling to work ok, good only for low pass filter design

2. higher order derivative approximations from (1). Do not know much
about it.

3. impulse invariance: z=exp(sT), zeros do not get mapped correctly,
only poles. Aliasing problems.

4. matched-z: factor H(s) into (s-sz)/(s-sp) form, where sz are the
zeros of the numerator and sp are zeros of the denominator (ie. pols of
H(s), then replace all the (s-sp) by (1-exp(sp*T) z^-1) and replace all
the (s-sz) by (1-exp(sz*T) z^-1) to obtain H(z). Requires small T also,
like (1)

5. bilinear transformation: z= (1+(T/2)*z) / (1-(T/2)*z )
requires frequency wrapping, but is the best one of all, when in doubt
use. no aliasing.

Now as far is which one is which in Matlab, I just had a look at help on
c2d, and it says:

'zoh' Zero-order hold on the inputs
'foh' Linear interpolation of inputs (triangle appx.)
'impulse' Impulse-invariant discretization
'tustin' Bilinear (Tustin) approximation.
'matched' Matched pole-zero method (for SISO systems only).

Clearly the last 3 we now know what they are, the description is clear.

We just need to figure if zoh or foh are the first first order
derivative or not? I am not sure now without spending more time on it.

My guess is that 'foh' is the first order approximation. But a Matlab
expert on these might have a better answer. It could be something
completely different.

You can try your method and compare with Matlab's zoh or foh and see
which gives the same result.

Use 'tustin', it is supposed to be the best method, this is the bilinear


Point your RSS reader here for a feed of the latest messages in this topic.

[Privacy Policy] [Terms of Use]

© The Math Forum at NCTM 1994-2018. All Rights Reserved.