Technical discussions about the TI C54x DSPs (including the c5401, c5402, c5402a, c5404, c5407, c5409, c5409a, c5410, c5410a, c5416, c5420, c5421, c5441, c549, c5470 and c5471).
Megha- > Are you saying that I should divide all my coefficients by max coeff (2.0085) in > this case Yes. > and provide first 3 as "b" and last 2 as "a"? That I don't know. You have to study MATLAB docs and figure out which are numerator and which are demoninator coefficients, and compare to TI docs. A good problem for new DSP students. > Another thing I didnt understand is u said at output apply 1/k. Shouldnt we apply k > instead of 1/k? We are dividing our coeffs by k and hence to get the output should > we now multiply by k? Yes -- sorry if I was confusing. To scale the coefficients, divide by k. To restore correct gain on D/A output, multiply by k. > And from your statement : "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." I understand > that u are saying I should apply the factor to the output i am writing on the > device. Ex : > PEPwrite15(bufferxmt, hcodec); > Then I should write it as ; > PEPwrite15(k*bufferxmt,hcodec); > But in the above I can only write 16 bit data and if it exceeds that it will > overflow. At first, don't multiply by k, just check with tone generator input to verify you get the correct filter response. Then, you can look inside PEPwrite15() to see if you can output 20-bit or 24-bit values to the AIC23B. Another alternative is to multiply by k anyway, even though values are Q15, but keep the AIC input (filter input) very low and hopefully avoid overflow. -Jeff > Jeff Brower <j...@signalogic.com> 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 <j...@signalogic.com> 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...@yahoogroups.com 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 > >