DSPRelated.com
Forums

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

Started by Jeff Brower May 16, 2006
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
> >
> >