DSPRelated.com
Forums

Re: [Fwd: Re: code working on simulator but not on device?]

Started by Jeff Brower May 18, 2006
Megha-
> wont the scaling of coefficients effect the filter response?

Scaling all coefficients changes the overall filter gain, but the not the shape of
the frequency response.

-Jeff
>
> Jeff Brower wrote:
>
> Megha-
> > Thanks for the reply. But I guess I need the format in Q15 to use it in
> > the command iircas51. Even if I convert it to Q13, it wont work.
> > Can you suggest a method so that I can quantize/normalize my whole data
> > between 1 and -1. After that I can convert it into Q15 and I guess that
> > should work.
> iircas51() uses 5 coefficients per biquad, so it makes no assumption that
> one coefficient = 1 (see iircas4 function). In that case, you can try
> dividing all coefficients by the magnitude of your largest coefficient.
> Call this a scale factor k. Then apply 1/k to final output before it
> goes to the AIC to allow correct overall gain for filter output. Note
> that you should *not* apply 1/k to y[n] values -- only to D/A output,
> which I think can be more than 16 bits on the DSK 5510 board.Hopefully
> your IIR filter can then work in Q15 without overflow. If not, then
> trying increasing k.-Jeff
> > Jeff Brower wrote:
> >
> > Megha-> I had a query in Q format. I am using iircas51 for
> > IIR filter. In that
> > > the coefficient data type should be DATA thats defined as
> > short. So my
> > > query is its not necessary to use Q15 format. I can aswell
> > use Q2.13
> > > format. But jeff is there any function to convert float to
> > Q2.13 as
> > > there is for float to Q15.To convert floating-point
> > coefficients to Q13, multiply by 8192 (instead
> > of 32768 for Q15).I.e. multiplier = 2 ^^ QThis assumes all of
> > your coefficients are less than +/- 4.0-Jeff> Jeff Brower
> > wrote: Megha- I had one question.
> > > In functions like butter (for filters) we declare a
> > variable Wn (the cut
> > > off frequency). ex: [B,A] = BUTTER(N,Wn). In this Wn value
> > is between 0
> > > and 1, where 1 means half of sampling rate. What I am not
> > understanding is
> > > where is it getting sample rate value from. I saw some
> > codes and in that
> > > the sample rate value is not declared before using the
> > command. Directly
> > > the command is used. Where is it getting sample rate value
> > from?
> > > What I understand is suppose I have to run that filter
> > design on an AIC.
> > > And AIC is set at some sampling rate ex 48KHz. Then the
> > code is
> > > understanding that sample rate and setting Wn accordingly.
> > Kindly correct
> > > me if I am wrong.
> > > If your actual sampling rate is 48 kHz, and you want
> > lowpass Butterworth
> > > filter with 2 kHz cutoff, then set Wn = 0.0833.
> > > Digital filters don't "know" the actual analog sampling
> > rate; they only
> > > know the Z-plane unit circle, or 0 to 1 as you mention. In
> > this example,
> > > if you vary the sampling rate (reprogram the AIC) then the
> > filter cutoff
> > > is always 0.0833*fs/2.
> > > -Jeff
> > >
> > > Jeff Brower wrote: Megha-
> > > I tried getting more material on maxflat but I am not
> > getting much. I am
> > > not understanding what exactly SOS and G stand for.
> > > If I want coeff for IIRCAS51 (cascaded IIR filter design
> > with biquads qith
> > > 5 coefficients) I want 3 coeff for zero (numerator) and 2
> > for poles
> > > (denominator). I am not getting how to get those. i am not
> > understanding
> > > what does what stand for.
> > > Maxflat() is for Butterworth IIR filter design. It's one
> > option -- you
> > > also might want Chebyshev or elliptic design.Another MATLAB
> > function for
> > > converting direct-form transfer function to cascade of
> > biquad sections is
> > > tf2sos(). Here are some pages that might give you some
> > clues:
> > >
> > http://www.math.psu.edu/local_doc/matlab/toolbox/signal/tf2sos.html
> >
> > >
> > http://www.ee.ic.ac.uk/pcheung/teaching/ee3_Study_Project/iir_lab2.pdf-Jeff
> >
> > > Jeff Brower wrote: Megha-
> > > > This is in continuation to my previous mail. I also tried
> > with a
> > > breakpoint at my
> > >> next statement after fltoq15. If I run that. It stops in
> > between and
> > >> gives the
> > >> error:
> > >> Trouble running Target CPU: Attempted write to ROM at
> > Addr:0x00ffff,
> > >> Page:0
> > >> I guess it is because of the infinite loop thing. Kindly
> > reply and
> > >> suggest
> > >> something.Waiting for your reply.Your code is trying to
> > write somwhere
> > >> in mem locations 0x8000-0xffff, which are
> > > external Flash as you mentioned before. Writing directly to
> > Flash area
> > > won't work
> > > (although there is a way, which involves a series of Flash
> > chip-specific
> > > commands).
> > > You have to check the C code ptr and array address values
> > just before the
> > > breakpoint
> > > to see why they are not pointing at onchip or offchip
> > SRAM.Also, did you
> > > see the c55x group thread about IIR cascade fixed-point
> > filters? I've
> > > included a copy of the latest message below. If you're not
> > subscribed to
> > > the c55x
> > > group, you should. C55xx devices are the next generation
> > after C54xx --
> > > both 16-bit
> > > fixed-point.-Jeff
> > > -------- Original Message --------
> > > Subject: Re: [c55x] IIR filter coefficients in iircas5
> > dsplib
> > > Date: Tue, 16 May 2006 08:37:25 +0200
> > > From: Christian Narvaez
> > > To: c... thanks Misan, thanks RK:
> > > indeed this was the problem... I have successfully
> > implemented the
> > > filter now.CNnasim ahmed ha scritto:
> > >> hi christian,
> > >> u r trying to get q14 fixed point format but dsplib
> > >> has q15 format, i suggest u to use both in same format . u
> > can
> > >> multiply with 2^15 . And two q15 multiplication results
> > q2.30. here 2
> > >> sign bit presents so u hav to modify that according to ur
> > desired
> > >> output format. i hope it will help u , if u hav any prob u
> > can send me
> > >> message.
> > >>
> > >> regards misan
> > >>
> > >> */Christian Narvaez /* wrote:
> > >>
> > >> Hi,
> > >> I am having a problem trying to implement an IIR filter on
> > an TI c55x.
> > >> I have calculated the filter on matlab getting the
> > following
> > >> coefficients for 2 second order sections:
> > >>
> > >> SOS
> > >> 1.0000 1.6854 1.0000 1.0000 -1.7197 0.8565
> > >> 1.0000 -1.9999 1.0000 1.0000 -1.8899 0.9250
> > >> G
> > >> 1.0000
> > >> 0.1041
> > >> 1.0000
> > >>
> > >> Simulations perform as expected.
> > >> Since the coefficients are between ]-2..2[ I transform the
> > SOS matrix
> > >> as SOS_fix = SOS*2^14:
> > >>
> > >> SOS_fix
> > >> 16384 27614 16384 16384 -28175 14033
> > >> 16384 -32766 16384 16384 -30964 15155
> > >>
> > >> The question is: can I run this coefficients on iircas5 of
> > the TI
> > >> dsplib? I know dsplib is Q.15 while my coefficients are
> > Q.14, but I
> > >> suppose this is not a problem if the filter's input is
> > small
> > >> enough not
> > >> to cause any overflow. Unfortunately this does not work,
> > the
> > >> output is
> > >> completely wrong.
> > >>
> > >> The second think I tried was to multiply the numerator
> > >> coefficients of
> > >> the second section of the filter by 0.1041 (according to
> > G), before
> > >> converting them to Q.14, getting this:
> > >>
> > >> SOS_fix_G
> > >> 16384 27614 16384 16384 -28175 14033
> > >> 1706 -3412 1706 16384 -30964 15155
> > >>
> > >> But this also does not work.
> > >>
> > >> Does anyone have any idea how I should convert my
> > coefficients in
> > >> order
> > >> to work with iircas5?
> > >>
> > >> Thanks.
> > >>
> > >> Christian
> >