[SI-LIST] Re: rational function approximation

  • From: "Joel R. Phillips" <jrp@xxxxxxxxxxx>
  • To: si-list@xxxxxxxxxxxxx
  • Date: Sat, 17 Apr 2004 12:27:11 -0700 (PDT)



>Date: Fri, 16 Apr 2004 13:38:56 -0700
>From: Ray Anderson <Raymond.Anderson@xxxxxxx>
>Subject: [SI-LIST] Re: rational function approximation
>
>
>After responding to Amitava's question regarding rational function 
>approximation macromodels I was prompted to think about the problem a 
>bit more which brought a couple items to mind that I'd like to throw 
>out to the list for comment.

Ray, 

Let me try to address some items and comment on some others that appeared
earlier in the thread. 

1.  Checking passivity by examining eigenvalues of Y/Z, or I-S*S'. 

Two warnings here. 

While this approach is quite widely used, it has a problem in that checking
positive realness at points does not actually insure the positive realness
of a rational function.   First, the PR condition must be established over
the entire frequency axis, up to "infinite" frequency, and this is hard to
do.  Second, there is the problem of what happens between the points at
which the check is performed.  In practice, using very dense samplings over
a wide frequency range often works, but I have seen some squirelly
counter-examples.   In particular, putting such a check inside an
optimization loop can result in the optimizer driving its approximation to
non-passivity in strange places you are unlikely to ever look.   There is a
paper by Anderson, Manrous, Kraus, "A new test for strict positive
realness", IEEE Trans CAS-I, p. 226, 1995, that discusses grid-based tests
that can be guaranteed to work. 

Second, I believe that, even if the entire axis can be covered, this check
as usually applied is, strictly speaking, not enough to insure passivity.
It is in addition necessary that the system under consideration be causal.
I believe that there is an early paper of Stephen Boyd's that discusses
this issue; it's probably up on his web site at Stanford.

In the case of rational functions, or any state-space model i.e finite
system of differential equations, a better approach is to use the positive
real lemma (or bounded-real lemma for S-parameters).  By examining the
eigenvalues of a single matrix constructed from the coefficients of the
rational function or state-space model, passivity of the model can be
determined definitively.  There is a discussion (fairly formidable
mathematics I'm afraid) of how to use such a check in an approximation
algorithm in "A convex programming approach for generating guaranteed
passive approximations to tabulated data", IEEE Trans. CAD, Feb 2004,
p293-301.  I have it on good authority that the authors are not only quite
intelligent but very nice guys as well :-)


Finally, let me point out that one may as well inspect the singular values
of the S-matrix, or the inf-norm of the S-function.   For this reason I
personally prefer to inspect S if I am doing work by hand -- you can get a
nice plot of the ||S|| function vs. frequency.  If it peaks above one,
there is a problem.   How much of a problem depends on the size of the
peak. 

2. Model checking, LHP poles/zeros. 

>A second related question that I hope may elicit some discussion is: 
>As just discussed we know how to determine if a set of measured or 
>synthesized s-parameter data indicates that the network from which it 
>was obtained is passive or not. However if we follow the process 
>through, i.e., take the s-parameter data and use it to create a 
>rational function approximation or even perhaps a lumped element 
>model, then in order to assure passivity of the synthesized model is 
>it necessary to turn around and extract the s-parameters from the 
>model and go through the eigenvalue process described above, or is the 
>process of assuring that both the poles AND zeros of the rational 
>function are in the left hand plane adequate to ensure passivity? (If 
>I remember correctly that is the criteria...)

I'm sure most members of this list do more measurements than I
do, but my experience is that much measured data has enough measurement
error to render it slightly non-positive-real. Solution to this is to use a
fitting procedure that is constrained positive real, and minimizes the
deviations from the actual measured data. 

Whatever process is used to generate the model, yes, you must check it for
passivity.  This is cheap and easy using the positive-real (or
bounded-real) lemma as discussed above.  What is harder is to fix the
problem.  Actually my opinion is that it is impossible to fix the problem
after the fact, passivity has to be built in by construction. See
previously reference paper.

About pole and zero locations.   It is a necessary condition that
passive models have poles and zeros in the LHP.   But it is a misconception
that this condition is sufficient.  For example, given a passive model in
S-parameter form, it can be rendered non-passive by multiplying by an 
appropriate constant, without moving either poles or zeros. Likewise, for
Y/Z parameter forms, just flip the sign.   More interesting counterexamples
can be constructed with some effort. 

3. Issues with Spectre simulator. 

I believe the current thread started with questions about the models the
Spectre circuit simulator generates internally.  It is a known problem that
the algorithm currently used often generates models that are not passive.
If Spectre claims the models are not passive, they aren't, as it checks the
bounded-real lemma equations which are definitive.  I'm afraid that at this
point there is not much that can be done about this problem from the user
side -- massaging the data, or changing the order of the rational model,
can sometimes help resolve the problem.  While I'm not in a position to
make promises, a future version of the product should contain a fix.  In
the meantime, the 'interp=spline' option to the nport component is a
reliable alternative to rational fitting with 'interp=rational'.

4. Generating your own models in MATLAB etc. 

The previously mentioned convex programming paper has a fairly extensive
bibliography that might be a good place to start.   There is a lot of code
around to perform rational approximation, system identification, etc. but
I'm not aware of any code publicly available that can guarantee passivity
(I welcome correction on this point). 

Regards, 

Joel Phillips 
------------------------------------------------------------------
To unsubscribe from si-list:
si-list-request@xxxxxxxxxxxxx with 'unsubscribe' in the Subject field

or to administer your membership from a web page, go to:
//www.freelists.org/webpage/si-list

For help:
si-list-request@xxxxxxxxxxxxx with 'help' in the Subject field

List FAQ wiki page is located at:
                http://si-list.org/wiki/wiki.pl?Si-List_FAQ

List technical documents are available at:
                http://www.si-list.org

List archives are viewable at:     
                //www.freelists.org/archives/si-list
or at our remote archives:
                http://groups.yahoo.com/group/si-list/messages
Old (prior to June 6, 2001) list archives are viewable at:
                http://www.qsl.net/wb6tpu
  

Other related posts: