+ Post New Thread
Results 1 to 7 of 7

14th June 2019, 13:36 #1
 Join Date
 Oct 2006
 Location
 Real Homeless
 Posts
 2,689
 Helped
 729 / 729
 Points
 17,492
 Level
 32
Rational Approximation of Gaussian LPF
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 ?

Advertisement

14th June 2019, 14:15 #2
 Join Date
 Jan 2008
 Location
 Bochum, Germany
 Posts
 46,058
 Helped
 14007 / 14007
 Points
 263,617
 Level
 100
Re: Rational Approximation of Gaussian LPF
Nuhertz Filter Solutions does a good approximation, slightly lower pole pair Q than Bessel, unfortunately I have no access right now.

14th June 2019, 22:20 #3
 Join Date
 Jun 2013
 Location
 Norway
 Posts
 764
 Helped
 326 / 326
 Points
 5,905
 Level
 18
Re: Rational Approximation of Gaussian LPF
The quassigaussian filter (bandpass, with quassigaussian 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)

Advertisement

20th June 2019, 14:44 #4
 Join Date
 Oct 2006
 Location
 Real Homeless
 Posts
 2,689
 Helped
 729 / 729
 Points
 17,492
 Level
 32
Re: Rational Approximation of Gaussian LPF
Attached figures show characteristics of GaussianLPF and BesselLPF in Keysight ADS.
S(2,1), delay(2,1) : GaussianLPF
S(4,3), delay(4,3) : BesselLPF
I know what polynomials are used for BesselLPF.
However I don't know about GaussianLPF.
What polynomials are used for GaussianLPF in Keysight ADS ?

20th June 2019, 21:38 #5
 Join Date
 Jun 2013
 Location
 Norway
 Posts
 764
 Helped
 326 / 326
 Points
 5,905
 Level
 18
Re: Rational Approximation of Gaussian LPF
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):
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:
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 by Dominik Przyborowski; 20th June 2019 at 21:44.
1 members found this post helpful.

Advertisement

21st June 2019, 15:22 #6
 Join Date
 Oct 2006
 Location
 Real Homeless
 Posts
 2,689
 Helped
 729 / 729
 Points
 17,492
 Level
 32
Re: Rational Approximation of Gaussian LPF
Thanks for good clue.
I think they are opposite.
Why does top(odd order case) have zero at s=0 ?
I can calculate Taylor series expansion of exp(p^2), as eq. (1373) 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)
Last edited by pancho_hideboo; 21st June 2019 at 15:39.

21st June 2019, 19:02 #7
 Join Date
 Oct 2006
 Location
 Real Homeless
 Posts
 2,689
 Helped
 729 / 729
 Points
 17,492
 Level
 32
Re: Rational Approximation of Gaussian LPF
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) ) );
Last edited by pancho_hideboo; 21st June 2019 at 19:15.
+ Post New Thread
Please login