Bireciprocal lattice wave digital filter

Mar 12, 2014 5 Replies

Hello



I am trying to model a bireciprocal Cauer filter in LTspice but I don't get the expected results. More precisely, using ?=(re(s)?1)/(re(s)+1)



where re(s) is the realpart of the pole, gives this result:



formatting link



Among the few references I have, one that gives a numerical example is a th esis, "Design and Realization Methods for IIR Multiple Notch Filters and Hi gh Speed Narrow-band and Wide-band Filters, L. Barbara Dai" and, simply by looking at the numbers and comparing them with what I had, it seemd as if t he poles need to be "normalized" to the single real pole, s[(N+1)/2]. That' s what I did:



?=(re(s)/s[(N+1)/2]?1)/(re(s)/s[(N+1)2]+1)



so, even if the numerical values still differed, but a not as before, I got this result:



formatting link



The example used here is not the one used in the thesis, but I seem to get good results (I cannot verify them) with either stop-band, or transition-ba nd optimizations and for any (odd) order.



So, my question is: is this the way to do it, "normalize" poles by dividing each to the single, real pole?


Just for the sake of comparison, here are 3 results using the same settings as in the thesis (As=68=>Ap,?s=23=>?p,f0=2), between a normal Cauer IIR filter (V(o3)), Barbara Dai's non-quantized coefficients (V(o1)) and my coefficients used with the "normalizing" described above (V( y1), ?1=?0.0912405,?2=?0.3412645,?3= ?0.729655): http://s27.postimg.org/nicvinueb/comp.png While not there (too may traces makes comparison difficult), if the 11 bit quantized values are used for V(o1), the response actually gets closer to t he IIR. Anticipated thanks, Vlad

Beats me what you are trying to do, but if you want magnitude, why wouldn't your model be the sqrt of the complex conjugate multiplied?

|(a + j*b )| = sqrt ((a + j*b)*(a-j*b))

But you have the filter topology, so why not just run it in LTspice?

I'm referring to the calculation of the coefficients, it's suposed to be th e simplified version of the "normal" lattice wave digital filter:

?=(Ai-2)/(Ai+2)

where Ai=2*re(s) and s=?+j?, which simplifies to the first eq uation in the OP.

As the pictures show, if run in LTspice with the coefficients calculated af ter the 1st eq. in the OP, I get the results shown in the 1st picture, whic h is obviously wrong. But if I divide re(s) to the single, real pole at (N+

1)/2, given the odd order, I get the results in the 2nd picture, only this isn't supposed to be the normal way of doing it, is it?

---

I'll try again, using the example in the mentioned thesis as a reference. I n doing this I will impose As, Ap, ?p and ?s and determine N (as according to the equations 2.51, 2.52a and 2.52b from the thesis) and with As=68 and ?s=2/3 (as in the example from p.36 in the pdf). This wi ll result in a stop-band attenuation optimization, rather than a transition

-band or a pass-band optimization. I say this because I don't know what app roach Barbara Dai has.

The first simulation is with the raw values from the thesis for ? (bla ck trace) and the quantized values (blue trace):

formatting link

5djaw3/thesis.png

If I calculate the values for ? according to the equation from p.26 fr om the thesis, I get these values:

?1=?0.098365443613057, ?2=?0.34760115224764, ?3=?0.7329991130665

where A[i]=2*?[i] (the real part of the complex poles s[i]=?[ i]+j?[i]) and the values for ?[i] are:

?1=0.15406868065906, ?2=0.48411864791316, ?3=0.8208875

8493805

The results of the simulation with LTspice is this:

formatting link

8h40dsfnr/test1.png , where the black trace is with these coefficients and the blue trace is with BarbaraDai's unquantized.

Transforming back the values for ?[1,2,3] from the thesis, I get these values for the poles:

?1=0.15537305159045, ?2=0.48869842253758, ?3=0.8312795

7288835

which are different than mine. At a glance, it seemed that I could try to d ivide each real pole (my calculations) to the value of ?4=0.98572364

533093, (the single, real pole s4=?4+j*0) in order to calculate the values for the lattice coefficients (the 2nd eq. from the OP), and I got th ese:

?1=?0.091240471459003, ?2=?0.34126450145251, ?3=?0.72965482018797

and the result of the simulation is this:

formatting link
test2.png , which seems even better than Barbara Dai's, even if the lobes i n the stop-band aren't quite equiripple (
formatting link
lobes.png ).

---

So I'll reformulate my question: are the values for the terms Ai (from the thesis) defined as A[i]=2*?[i] or somehow else? If else, how?

In the meantime someone gave me the answer: the first formula, ?=(re (s)?1)/(re(s)+1) is correct, but the determination of the po les in the s-domain is wrong, in that all the four parameters, As, A p, ?s and ?p, need to be specified such that the resulting N is c losest to integer, without using ceil(). In other words, the best approach is to impose N and deduce one of the four parameters from the other three.

With the same example from the thesis (p.27) and a quick change in my formu las, I get this result:

![evrika!]

formatting link

where the blue trace is from the thesis and the black one - mine. Even if t here still are differences, they are minor, closer to the truth and probabl y due to one of the other 2 possible optimizations (which are too difficult to achieve with LTspice). Either way, this is the right path.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required