Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

[SOLVED] Rational Approximation of Gaussian LPF

Status
Not open for further replies.

pancho_hideboo

Advanced Member level 5
Joined
Oct 21, 2006
Messages
2,847
Helped
767
Reputation
1,536
Reaction score
733
Trophy points
1,393
Location
Real Homeless
Activity points
17,490
I know 5th order Bessel LPF is close to Gaussian LPF.

But I want to get more close aaproximation as rational function expression.
My book shows only hint for it.

Is there anyone who know it ?
 

Attachments

  • 190614-211316.png
    190614-211316.png
    16 KB · Views: 160

Nuhertz Filter Solutions does a good approximation, slightly lower pole pair Q than Bessel, unfortunately I have no access right now.
 

The quassi-gaussian filter (bandpass, with quassi-gaussian impuls response) is CR-(RC) ^n, and for n>4 is no big difference.
The mentioned by you Hurwitz approximation is the only one close to gauss which I know. It might be realized by complex pole 4th order guy. Unfortunately, I have literature to this only in Polish (my colleague master thesis with implementation)
 

Attached figures show characteristics of Gaussian-LPF and Bessel-LPF in Keysight ADS.
S(2,1), delay(2,1) : Gaussian-LPF
S(4,3), delay(4,3) : Bessel-LPF

I know what polynomials are used for Bessel-LPF.
However I don't know about Gaussian-LPF.

What polynomials are used for Gaussian-LPF in Keysight ADS ?
 

Attachments

  • 2019-0620-0952-18.png
    2019-0620-0952-18.png
    59.2 KB · Views: 137
  • 2019-0620-0946-55.png
    2019-0620-0946-55.png
    57.5 KB · Views: 132
  • 2019-0620-1008-35.png
    2019-0620-1008-35.png
    61.4 KB · Views: 133

I have no idea what is used by ADS (i have not touched it even). As I mentioned, the only known for me case is an approximation of Hurwitz polynomials. The odd order polynomials has only complex poles, while even number has an additional real pole. The general formula is as follow (top is odd order, bottom even order):
hurwitz_general.png
where: k is a number of complex poles pairs (for order n=2 and 3 k=1, for n=4,5 k=2, et cetera), σ is related to time constant (or natural frequency of filter), A_i and W_i are polynomial coefficients given for n<5 as following:
hurwitz_coeff.png
for n=1:
H(s)=1/(1+s)
for n=2:
H(s)=sqrt(2)/[sqrt(2)+sqrt((2)+2·sqrt(2))·σ·s+σ²·s²]
For higher order I am not sure whether there is a simple values for poles.

Try to look implement above, maybe it is what you need?

Good luck!
 
Last edited:
Thanks for good clue.

The odd order polynomials has only complex poles,
while even number has an additional real pole.
I think they are opposite.

The general formula is as follow (top is odd order, bottom even order):
Why does top(odd order case) have zero at s=0 ?

For higher order I am not sure whether there is a simple values for poles.
Try to look implement above, maybe it is what you need?
I can calculate Taylor series expansion of exp(p^2), as eq. (13-73) in start of this thread by MATLAB.
Then I can get zeros of it.
I choose real(zeros) <= 0.0.
These are poles for transfer function.

Later I will build my own custom function for MATLAB.
Code:
function [z, p, k] = my_gaussianap(order, wc, Ac_dB)
Then I will compare it with ADS results.
 
Last edited:

I can get same result as ADS.
Code:
function [z, p, k] = my_gaussianap(order, wp, Ap_dB)
s = tf('s');
T2 = 0;
for n = 0:order
    T2 = T2 + (-1)^n * s^(2*n) / factorial(n);
end

z = zero(T2);
p = z( find(real(z) <= 0.0) );
z = [];
k = polyval(poly(p), 0);

s21 = zpk(z, p, k);

[wc, fval] = fzero(@(wc) dbv( freqresp(s21, wc) ) + Ap_dB, 1.0);
fprintf(1, 'order=%d, ', order);
fprintf(1, 'wc=%g, ', wc);
fprintf( 1, 'Ac_dB=%g, ', -20*log10( freqresp(s21, wc) ) );

z = (wp/wc) * z;
p = (wp/wc) * p;
k = k * (wp/wc)^( length(p)-length(z) );

s21 = zpk(z, p, k);
fprintf(1, 'wp=%g, ', wp);
fprintf( 1, 'Ap_dB=%g\n', -20*log10( freqresp(s21, wp) ) );
 

Attachments

  • 190622-025010.png
    190622-025010.png
    14.4 KB · Views: 141
  • 190622-025623.png
    190622-025623.png
    11.6 KB · Views: 130
  • 190622-024952.png
    190622-024952.png
    13.8 KB · Views: 145
Last edited:

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top