Audio Project Amplifier Speaker Loudspeaker Kit
diyAudio.com diyAudio Forums Archive > Top > Source > Digital
 
DIY Digital Parametric EQ - Click HERE for Original Thread
macboy
I have found mention of a few projects using TI's TAS3xxx series audio DSPs here, but none that implement an actual fully parametric EQ. I am thinking a multi-band EQ with frequency, Q, and gain for each filter all adjustable on-the-fly.

Typically, the filter coefficients for these DSPs are calculated using an offline tool like MATLAB, or the filterbuilder tool from TI, based on a previously determined desired filter response. But that doesn't allow the filter response to be changed at will. That would of course require a user interface (input controls and a display) but more importantly, it would require a method of calculating the bi-quad filter coefficients in real time, from those 3 familar parameters: frequency, Q, and gain.

Of course the real trick to such a system is calculating those coefficients. Though the math itself isn't terribly complicated, implementing it on an 8-bit microcontroller is not trivial. It requires 32-bit floating point math including multiply, divide, add, subtract, log, exponential, sine and cosine. All of these operations are possible to do on an 8-bit microcontroller, and various code libraries are freely available on the 'net. And of course you also need the equations to calculate the biquad coefficients. And you need an algorithm to convert the floating point results into the fixed-point format used by the DSPs. And... you get the idea. There is a lot of work involved in converting a twist of a rotary encoder into a new filter with the corresponding response. And, it all must happen quickly enough that it seems instantaneous to the user, otherwise the EQ cannot be adjusted "by ear".

I am currently building a prototype consisting of a PIC microcontroller, an LCD, a few pushbuttons, and a TAS3004 DSP, which was chosen for ease of prototyping rather than for audio quality. I plan to build a final version with TAS3103's for use in my hi-fi system. I estimate that required cacluations can be performed in a few ms, plenty fast enough.

Of course there is no reason to limit oneself to EQ filters; a bi-quad can emulate virtually any analog filter: low pass, high pass, bandpass, shelving, notch (bandstop), EQ, allpass (phase change only). This broadens the possible applications to include adjustable digital crossovers and speaker correction systems. Even the rather complicated Linkwitz Orion crossover/EQ could be 100% implemented digitally (including the all-pass phase correction sections) with excellent accuracy.

If anyone else has built such a project, or is interested in such a project, or interested in the math involved, or any other part of the implementation, join the discussion...
Neil Davis
Apogee has an app note that provides all of the filter equations. TI's filterbuilder has the floating point to hex conversions. I put together these pieces in the spreadsheet at this link: http://neilrdavis.home.comcast.net/...verbuilder.xls.

You will need to have the analysis toolpak and the analysis VBA toolpak add-ins.

Doing the math in a PC is easy, but for a micro you will want to load precalculated coefficients
blu_line
Hello Neil,

Interesting !
Unfortunatly parts of your site can not be found.

grtz

Simon
Neil Davis
remove the "dot" that is after xls in the link
macboy
quote:
Originally posted by Neil Davis
Apogee has an app note that provides all of the filter equations. TI's filterbuilder has the floating point to hex conversions. I put together these pieces in the spreadsheet at this link: http://neilrdavis.home.comcast.net/...overbuilder.xls

You will need to have the analysis toolpak and the analysis VBA toolpak add-ins.

Doing the math in a PC is easy, but for a micro you will want to load precalculated coefficients

Thanks. I already have the filter coefficient equations in a spiffy spreadsheet complete with a amplitude vs. frequency plot for the filters. And as I had said, the math isn't terribly complicated, but doing it on a micro is not easy. I firmly believe however that it can (and must) be done, in real time. I am not at all interested in loading precalculated coefficients, mostly because that would limit the range of values that could be used for Fc and Q. I want this to be truly parametric, with frequency and Q adjustable in a fine granularity. I will have frequency adjustable to within 1% and at least 20 values for Q. Storing pre-canned coefficients for that many combinations would be impossible, and I also do not want to do interpolations, which results in inaccurate filters.

Apogee's calculations for a EQ filter are very different than mine. Theirs are much simpler in that they do not use any trig math (sin/cos/tan) and they are the same for both boost and cut. Mine use cos() and tan() and there is a difference between boost and cut. They don't say what method they used to derive their equations, but they seem to be using a few assumptions and approximations to make the calculations simpler. I just plugged the Apogee equations into my spreadsheet to compare the response curves. At low frequencies, the boost curve is similar to mine, but the cut curve is very different. The cut (using the Apogee method) is highly assymetric to the boost. As the amount of cut is increased, the filter becomes narrower and narrower, so the Q is not accurate any longer. Also as the frequency approaches Nyquist (fs/2) there is a significant amount of frequency error introduced. For example, a filter at 20 kHz (with 48 kHz fs) will actually be centered at 13.9 kHz! My equations will result in accurate frequencies (however the shape of the filter's 'bell' is distorted at very high frequencies due to this effect... this is unavoidable).

My equations are:
b0 = 1+((1+alpha)*H/2)
b1 = d*(1-alpha)
b2 = (-alpha-((1+alpha)*H/2))
a0 = 1
a1 = b1
a2 = -alpha

where:
alpha = (tan(wc/2)-Gf)/(tan(wc/2)+Gf) for Gf<1, OR
alpha = (tan(wc/2)-1)/(tan(wc/2)+1) for Gf>=1
H = Gf-1
d = -cos(wc)
Gf = 10^(G/20) (Gain Factor, linear)
wc = 2*Pi*fc/fs

G is gain of filter in dB
fc is center frequency of filter
fs is sampling frequency
Q is filter Q (quality) factor

The trig functions are necessary to compensate for the frequency distortion which occurs as fc approaches Nyquist. Feel free to plug the above into your spreadsheet to compare the magnitude response to that derived using Apogee's method. You will see that when playing with gain and frequency using my method, you get what you expect, but using Apogee's method, you can get some strange results.

The float to hex conversions in Ti's filterbuilder actually convert a decimal number to the Hex format needed. It does not operate on hexadecimal floating point data directly, and so is not suitable for use on the micro. A more suitable algorithm is required, and I have devised one.
rfbrw
Why prototype using a PIC when the '3103A has an onboard 8051?
Neil Davis
Then I don't understand what you are trying to do. The coefficients MUST be calculated using at least 32-bit arithmetic, and if you have that capability why bother using a TAS3004? Just upgrade the processor to a DSP processor and do the biquads in real-time in the DSP. I don't understand why you want to do complex math in a microcontroller.

There is a more complete version of that spreadsheet that generates the EEPROM file for the TAS3004, and I'm trying to finish off the version that writes directly to the I2C bus from the parallel port (requires a small board on the parallel port, which I have). After that, I will work on a USB version. With the USB version, you could implement the GUI and coefficient calculation in the PC and interact with the TAS3004/microcontroller via USB.

There are some discussions to make the USB/microcontroller/TAS3004 into a low-budget digital crossover product, but nothing concrete yet.
excetara2
Totally agree with Neil Davis no need to use that microcontroller would be a lot smarter to upgrade to a DSP chip.
macboy
quote:
Originally posted by Neil Davis
Then I don't understand what you are trying to do. The coefficients MUST be calculated using at least 32-bit arithmetic, and if you have that capability why bother using a TAS3004? ...
I fail to see your point. Are you suggesting that if I am able to calculate the coefficients on processor X then I should be able to do the DSP on processor X as well, and skip the TAS? Then you really don't understand what I am trying to do. I am trying to make a system to control the TAS chip in a useful way, rather than just loading a preset EQ set.
quote:
... Just upgrade the processor to a DSP processor and do the biquads in real-time in the DSP. I don't understand why you want to do complex math in a microcontroller...
Part of the reason is, because it is a challenge (but frankly not that big of one). Part of the reason is, because I do not need to, nor do I want to implement something as simple as an EQ on a general purpose DSP, which is way overkill for that application. The final device will be based on the TAS3103 which maintains 48 bits of resolution for samples, and has a 72 bit accumulator. That kind of accuracy is not readily available on inexpensive general purpose DSP chips. Besides, I already know for fact that I can calculate the Biquad coefficients on the PIC in real time (on the order of milliseconds) so switching to a DSP for that task is entirely unecessary.
quote:
...There is a more complete version of that spreadsheet that generates the EEPROM file for the TAS3004,...
Useless for two reasons: 1. The '3004 is for prototyping only and will be trashed in favour of a TAS3103, and 2. A static coefficient set is not what I want. I want a realtime user-adjustable parametric EQ.
quote:
...and I'm trying to finish off the version that writes directly to the I2C bus from the parallel port (requires a small board on the parallel port, which I have). After that, I will work on a USB version. With the USB version, you could implement the GUI and coefficient calculation in the PC and interact with the TAS3004/microcontroller via USB...
That all still requires a PC. Again it is outside the scope of what I am trying to accompish.
quote:
...There are some discussions to make the USB/microcontroller/TAS3004 into a low-budget digital crossover product, but nothing concrete yet.
Well perhaps the PC/USB part of that will become unecessary soon.

quote:
Originally posted by excetara2
Totally agree with Neil Davis no need to use that microcontroller would be a lot smarter to upgrade to a DSP chip.
Define "smarter". Would it be "smarter" to go out and spend hundreds of dollars (at least) on development tools for general purpose DSPs? To learn new development environments and languages? To write all the DSP code necessary to perform the necessary filters and other functions which are "free" on the TAS3xxx (only need to load coefficients... no code whatsoever). As an engineer, I find it offensive when people think that they can solve a problem "better" or "smarter" by throwing more powerful hardware at the problem. A smarter solution is always less complex, and less costly, not more.
macboy
quote:
Originally posted by rfbrw
Why prototype using a PIC when the '3103A has an onboard 8051?
The internal micro is used to control various functions inside the DSP. It is not reprogrammable or in any way accessible to the end user. The DSP must be interfaced to another device to load up the coefficients and other operating parameters via the I2C bus.
len_scanlan
I've been following this thread with interest, have been toying with the idea of trying these TAS3xxx chips myself - after all you can develop your s/w on something as simple as a PIC and don't have to outlay $100s on DSP eval boards with licenses locked to that board - can't give it away to friends then build another!

Just out of interest, it looks like TI have another audio processor in the TASxxxx family about to be released:

Download their "Performance Audio Quick Reference Guide 2Q 2006" (slyb122.pdf) and look on page 2 for the TAS3108.

Still unreleased, but the specs are 8 channels, 25 biquads per channel, and TSSOP-38 package (small but usable for prototyping - not BGA!!)

I'll give my TI rep a call tomorrow and try to get some more info on this beast, and when it's likely to be released. If this is truly an 8 channel device then that's a complete crossover on a chip! Hopefully they've included some delay memory as I want to time-align some horns - but hey one thing at a time.

Would be great to have a digital xover design done here, we have some very clever people contributing. Anyway it's late, will post again when I've heard back from TI.

regards,

Len.
Neil Davis
quote:
Originally posted by macboy
I fail to see your point. Are you suggesting that if I am able to calculate the coefficients on processor X then I should be able to do the DSP on processor X as well, and skip the TAS? Then you really don't understand what I am trying to do.

You're right--I didn't quite understand what you were trying to do, and it just looked odd to be doing all of that complex arithmetic in a PIC. I assumed that it required a fairly large amount of memory and development tools to get the precision that was needed, so it seemed to make more sense to just run some simple biquad code in one of the new low-cost DSP's. But that freeware code for 32-bit floating point looks promising--if you can use it to calculate the coefficients then it looks like a good way to use the power of these biquad chips.

That math precision is important. For low frequency 2-pole filters, the A2 coefficient is very close to "1", with values like .9999x. A2 < 1 is a stability criterion, so roundoff errors can be a problem.

The spreadsheet that I posted includes a math model of the TAS3004, but it can be adapted to model a TAS3103 or the AD1954 (which is a nice chip!). It also lets you ingest loudspeaker measurements (FRD or Laud) and view the results of the various filter types in building a crossover or doing EQ on a system. So it may help you in setting up your equalizer by visualizing the results, or help in verifying your design. I pointed out these features of the spreadsheet because your original post was a general request for information on what other people had done with the TAS3004, and I was simply trying to provide some helpful information per your request. To be honest with you, I didn't expect a point-for-point rebuttal and harsh evaluations like "useless".
Neil Davis
quote:
Originally posted by len_scanlan

Still unreleased, but the specs are 8 channels, 25 biquads per channel, and TSSOP-38 package (small but usable for prototyping - not BGA!!)


Wow--that looks great. The AD1954 is also nice for certain applications, such as stereo or bi-amped speakers.

I've been trying to get info on availability of the STA328--it looks ideal for a small 2-channel plate amp for computer speakers. Not too many biquads, but 2 80W digital amps and a 4-pole crossover on one small chip is pretty cool! Like the TI amps, it requires a regulated power, but I think I've got a good solution for that already prototyped. This is fun stuff.
macboy
quote:
Originally posted by Neil Davis


You're right--I didn't quite understand what you were trying to do, and it just looked odd to be doing all of that complex arithmetic in a PIC. I assumed that it required a fairly large amount of memory and development tools to get the precision that was needed, so it seemed to make more sense to just run some simple biquad code in one of the new low-cost DSP's. But that freeware code for 32-bit floating point looks promising--if you can use it to calculate the coefficients then it looks like a good way to use the power of these biquad chips.

That math precision is important. For low frequency 2-pole filters, the A2 coefficient is very close to "1", with values like .9999x. A2 < 1 is a stability criterion, so roundoff errors can be a problem.

The spreadsheet that I posted includes a math model of the TAS3004, but it can be adapted to model a TAS3103 or the AD1954 (which is a nice chip!). It also lets you ingest loudspeaker measurements (FRD or Laud) and view the results of the various filter types in building a crossover or doing EQ on a system. So it may help you in setting up your equalizer by visualizing the results, or help in verifying your design. I pointed out these features of the spreadsheet because your original post was a general request for information on what other people had done with the TAS3004, and I was simply trying to provide some helpful information per your request. To be honest with you, I didn't expect a point-for-point rebuttal and harsh evaluations like "useless".


Ok, "useless" really was way too harsh. The spreadsheet actually sounds quite useful... just not in this particular application. And it is interesting to see that other DIY'ers really are using these devices.

The accuracy of the coefficient calculation should not be an issue. Microchip claims that their 32 bit math library is within +-0.5 LSB the majority of the time and +-1 LSB worst case. Consider that the TAS3103 uses a 5.23 fixed-point format (23 bits following the decimal point, er, radix point), and IEEE float has a 23 bit mantissa (fractional part) with 1 additional implied "1" at the beginning, for 24 significant bits. After converting it to the 5.23 format, we will actually need to drop one of those significant bits (in the case of ~=0.99). For any coefficient less than |0.5|, we will drop 2 or more significant bits. The TAS3004 uses 4.20 format fixed point, so we will drop even more significant bits from the 32 bit FP result. Of course when I say drop I mean round off.
macboy
quote:
Originally posted by len_scanlan
...Would be great to have a digital xover design done here, we have some very clever people contributing. Anyway it's late, will post again when I've heard back from TI.

Please do let us in on any new information on the TAS3108. It looks like it could be very useful.

A digital crossover would be entirely possible and would not require much additional work once the EQ is functional. After all, the biquad filters are just generic 2nd order filters and they could easily do low pass and high pass functions. The calculation of the coefficients is only slightly different for any 2nd order filter. Of course you will need multiple channels. Being able to tweak the crossover on-the-fly is something that is virtually impossible to do with analog crossovers. Imagine the beast of a ganged pot you would need to adjust 2 channels with 4th order crossovers... that's 4 pots per speaker driver * 2 drivers per channel * 2 channels = a 16-gang pot, with superb tracking of course, so that your filters don't fall out of alignment. With digital, one twist of the wrist can change all those filters simutaneously, and with great accuracy. You could also experiement with slope, and filter alignment (L-W, butterworth, bessel), phase correction, time alignment, rumble filters, all without any circuit mods. And if you wanted to, once you dial in the crossover, you can build an analog version (minus time alignment) for use with your vinyl or SACD sources.
RCBandwidth
I designed a digitally controlled 2 way Linkwitz Riley(24dB/oct).All frequency determining resistors have been replaced with quad digital pots from Analog Devices,all under software control from a PicMicro,I can change crossover points with about 100 hz step resolution,the unit has been in use for about a year and I am quite pleased with the performance.I am working on a 3-way design with some additional features(Eq in the passbands).

I am also very interested with the new TI 3108 device,it looks like it's almost ready for production.

Regards
Bob C.
Neil Davis
quote:
Originally posted by macboy
A digital crossover would be entirely possible ...

I've been playing with 8-pole crossovers plus EQ with the TAS3004 for quite a while. With 25 biquads you can do brick wall filters plus a LOT of EQ. Unfortunately, using the TI tools (DCT and ALE) to design the crossovers is non-intuitive and clumsy--that's why I decided to work on that "crossover builder" spreadsheet.

I assume that the TAS3108 will have versatile input switching like the TAS5518. That's another one of the limitations of the TAS3004 for multi-driver use in a single speaker. In order to use the digital inputs (SPDIF), you need some external logic to pick off either the left or right SPDIF channels (its the logic on the yellow board). The Analog Devices chip (AD1954) appears to have the same limitation.

The picture shows a "quick and dirty" plate amp based on one of the TI evaluation boards. It's just been sitting around for at least a year and a half, waiting for some better tools to configure the TAS3004. I need to retire so I can work on this stuff!!
len_scanlan
Just heard back from my TI rep, he's still looking for the datasheet, oh well we wait a little longer..

I was thinking that it would be very useful to be able to control an EQ / Crossover board from your PC via serial or USB. Even though many would want a 'stand alone' box (including me!) nothing beats a nice little app running on a laptop for all the initial tweaking. When I finally get around to designing a board I'm definitely going to build in this capability and hopefully someone can pick up the PC application eventually - I've got to admit it's been years since I did any programming on a PC..

I'm gonna have a look at Neil's spreadsheet over the weekend and catch up on my maths - about time I got back into this!

Thanks,

Len.
len_scanlan
Hi All,

TAS3108 datasheet has appeared on the TI website over the weekend!

http://focus.ti.com/docs/prod/folde...nt/tas3108.html

Its an audio DSP, similar in concept to the Analog Devices SigmaDSP parts. Looks like they've kept the IIR 'core' of the TAS3103A and added a basic CPU / sequencer.

You get 4 stereo input channels, 4 stereo output channels. Part will run with sample rates up to 192KHz, you get less instructions per audio sample as the sample rate goes up.

Again like Analog Devices there will be development software available with a graphical 'cut and paste' code generation tool.

The interesting part is that there is an on-board 8051 micro, but this time there is user code space so it may be possible to use this for your own code and eliminate the PIC. Not too many details on the preliminary datasheet yet.

This looks great for my project, but I'm going to wait for full details to be published. Still up in the air whether to wait for this part or use the Analog Devices SigmaDSP parts.

cheers,
Neil Davis
quote:
Originally posted by len_scanlan
Its an audio DSP, similar in concept to the Analog Devices SigmaDSP parts. Looks like they've kept the IIR 'core' of the TAS3103A and added a basic CPU / sequencer.

Interesting, but intimidating! I'm not convinced it has the biquads, but it's hard to tell from the data sheet. Looks like you might have to buy some development tools to make this work.

I had a lot of trouble hacking the I2C interface, but things are looking much better for that spreadsheet. I can use the Excel TAS3004 model to develop crossovers, and (finally) I can write to the EEPROM from Excel and reset the TAS3004 from Excel. After reset the TAS3004 loads itself from the EEPROM, so I've got all the pieces I need now to build a smart plate amp with the TAS3004 (it's the chip on the right, in the front). Now on to the TAS3103 and digital amps instead of the LM3886's. I think I'll pass on the TAS3108 for now.

I'll document the TAS3004 plate amp project once I've got a pair of finished prototypes. One amp is built, both cabinets are done, but lots of clean-up still.

tinitus
From "country fellowmen"

http://groundsound.com/products.html
Neil Davis
quote:
Originally posted by tinitus
From "country fellowmen"

http://groundsound.com/products.html

Thanks for the link--very good stuff. I bought the TI TAS3004 evaluation boards, but couldn't bring myself to shell out $799 for the TAS3103 EVM. I wish I had seen the Groundsound stuff earlier--the tools look very good. It's not as DIY as I like, but at those prices who cares.
macboy
Correction to the equations that I posted earlier:
alpha = (tan(wc/2Q)-Gf)/(tan(wc/2Q)+Gf) for Gf<1, OR
alpha = (tan(wc/2Q)-1)/(tan(wc/2Q)+1) for Gf>=1

I guess that since nobody pointed out the mistake, nobody is playing with the math. Still it is nice to see a lot of interest here in something that isn't yet-another-DAC. Keep the discussion going.
blu_line
If you like more control, consider using the Wavefront semiconductors AL3101. It's a small 24x18bit DSP core.

A Belgian group made a very nice drag & drop system builder for it !


grtz

Simon
macboy
quote:
If you like more control, consider using the Wavefront semiconductors AL3101. It's a small 24x18bit DSP core.
I have looked into the AL3101 in the past. It is an interesting device. It has a 1024-instruction code memory and a 1024-sample RAM, and can perform every instruction on every sample (giving about 50 MIPS at 48 kHz Fs). A bi-quad filter can be implemented on this device in only 5 instructions, meaning that you can do over 200 IIR filters on one little chip. The problem that I have with it is its accuracy/resolution. It performs 28x22 bit multiplies into a 28 bit result, which is very limited. (The TAS3103 by comparison performs 48x28 bit multiplies into a 76 bit result). Because the output samples of an IIR filter (bi-quad) form part of the input for the next sample, any error in calculation (due to limited resolution and rounding errors or anything else) will be compounded. This error is a source of noise, so compounded calculation/rounding errors can introduce unwanted noise into the signal. When higher resolution is used, the level of the noise is kept to much much lower than the least significant output bit (usually 24 bits are output).

Another possible result of low resolution is that under certain conditions, the filter's response will not trail off to zero after "infinite" time as it should, but instead it can oscilllate forever at a low amplitude, sometimes actually resulting in audible tones. The high mathematical resolution of the TAS3103 should avoid this, and any possible remaining oscillation will certainly be truncated off when the sample is reduced and dithered to 24 bits for output to the DAC. Samples are calculated to 48 bits within the TAS3103 filters, so noise, oscillations, and other uglies are well below the even the LSb of the signal. With the AL3101, you do not have the luxury of those additional "resolution bits", so any filter oscillation near the LSb could show up on the output. Of course, this is only a possibility, not sure thing.

So for implementing bi-quads I would pick the TAS3103. The AL3101 is capable of doing more generic tasks (including FIRs), so if I had an application that could not be done on the TAS3103 I might choose it instead.
macboy
I just wanted to give a brief update on my actual project status, since I did start this thread on the premise of building a project.

My PIC code is incomplete, but coming along. Most substantially, I have completed the section to calculate the filter coefficients in 32-bit floating point. First I had to create a custom math library by copying and pasting only exactly what I needed from Microchip's math libraries, since they are too big to be included in whole. After including the necessary 32-bit FP functions (Mult, Div, Add, Sub, sin(), cos(), and exp10()) and their dependancies, I ended up with code that just fit inside on code page (2k of code), which was a big relief. Then I wrote the algorithms to do the calculations. After fixing a few bugs, they work great, calculating the coefficients in 32 bit floating point to within +-1 LSb, even at very low and very high frequencies, which are the most difficult. A PIC16 at 20 MHz (5 MIPS) takes merely 5 ms to calculate all 5 coefficients. That is not bad considering the only math the PIC can do in hardware is add and subtract 8 bit integers! If run on a PIC18, it should reduce to less than 1 ms due to its ability to multiply (8x8) in hardware, and higher clock speed.

I still have a lot of work to do, notably the I2C interface to the DSP. I have a good start on the UI but is also is incomplete. All of that is more or less trivial, now that I have proven that the filter coefficients can be accurately and quickly calculated on a lowly little 8-bit microcontroller.
Robert GS
Hey guys.

I think it's nice that you are very interest in digital active crossover, just like myself.
I have posted an introduction of me and my company Ground Sound under Introductions .;)

In a weeks time you can download the XOverWizard software controlling the DCN23 from the homepage. This gives an idea of which results can be achieved by imported measurement files.
bimbla
These are best used with the software that comes with its eval board.
You don't need to calculate anything.

Regards,

bimbla.
Robert GS
quote:
These are best used with the software that comes with its eval board
What are you refering to? :confused:
quote:
You don't need to calculate anything.
Why not? :confused:

I'm sure that our XOverWizard is much easier to use than the software that comes with the TAS3103EVM - I started out with it and it's damn hard to work with, but of course XOW only works with our digital crossover DCN23. Sorry.. :D

Robert
HawkStudio
macboy
I've read with interest the various posts about your project. Im getting ready to start something similar. I'll be using the TAS3103 along with a dsPIC6014 controller to design a fully parametric EQ. The dsPIC may seem like overkill but it will also support a 320x240 multi grey level LCD display, full spectral readout, rotary encoders, midi interface etc etc etc. The DSP math core should make filter calculations easier and faster.
This leads me to my weakness.... I have been working with microcontrollers since the late 70s and can do quite well with them. I am not well versed in DSP filter design though and am trying to draw help where I can.

This DSP will make a really nice DIY addition to my studio rack, so Im both focused and determined.

Best of luck with your project.

MarkE
macboy
quote:
Originally posted by HawkStudio
macboy
I've read with interest the various posts about your project. Im getting ready to start something similar. I'll be using the TAS3103 along with a dsPIC6014 controller to design a fully parametric EQ. The dsPIC may seem like overkill but it will also support a 320x240 multi grey level LCD display, full spectral readout, rotary encoders, midi interface etc etc etc. The DSP math core should make filter calculations easier and faster.
This leads me to my weakness.... I have been working with microcontrollers since the late 70s and can do quite well with them. I am not well versed in DSP filter design though and am trying to draw help where I can.

This DSP will make a really nice DIY addition to my studio rack, so Im both focused and determined.

Best of luck with your project.

MarkE

Thanks. My project like so many others has gone stale waiting for me to find time to finish it, which I still hope to do. I think I have too many projects in the works.

In the meantime I would be happy to help you. You mentioned that you are not strong in DSP filter design. You don't have to be if you use the TAS3103 or similar devices. They do all the hard work. You just have to provide the filter coefficients. And I have generously given you all the math needed to calculate those (see post 5 and 23). You just need to plug in the three parameters that define a parametric EQ filter: Gain (in dB, + or -), Q, and Frequency (in Hz), as well as the sampling frequency your digital system uses. How you do the math is up to you, but I have successfully done it on everything from an Excel spreadsheet down to a lowly 8 bit micro.

You mention a "full spectral readout", by which I assume you mean a real-time spectrum analyser (RTA). The TAS3103 has the capability to do about 90% of the work for a 10-band RTA. If you wanted say 30 bands (for a 1/3 octave display) then you could use 3 TAS3103 devices. Each band of the RTA requires a band-pass filter, for which you need to calculate the coefficients. The calculations are very similar to the ones for an EQ filter, just ask and I'll post them. You also need to configure the response of the RMS estimators, to get the desired attack and decay times for the display. After that you just need to periodically read some data out of the TAS3103 and update your display based on it.

Good luck.
HawkStudio
Many thanks. Its appreciated.
Im just getting my feet wet now, and there are so many directions that I could take. I wanted to start with the TAS3103 as the basis for this first project. This chip kept jumping out at me during various phases of my initial research. On this first pass I plan to combine it with a TLV320AIC23B codec and just use the micro to compute coefficients and do housekeeping, thanks to your formulas!

Then there are many directions that I could take. I could let the TAS, or multiple TASs handle the spectrum readout, or let the dsPIC monitor the data stream and handle the FFT itself. I could also monitor the audio output of the codec with an onboard A/D in the dsPIC.

Luckily, I am using MikroElectronica's C compiler which has a decent DSP library. It will execute FIR/IIR/FFT easily so I could even eliminate the TAS3103, or do additional DSP functions to add other effects. Im not really sure right now. I just want to get everything up and running.

About the spectrum readout....Im hoping for 10 bands for both left and right channels. After playing with so many DSP plugins available for studio programs like Sonar, I would like to design some sort of graphical interface controlled by rotary encoders that would allow the adjustment of parameters on screen against the spectrum to see the effects in real time. I eventually would like to place this device at the output of my mixer panel for mastering and other purposes.

Thanks again for your help. I may have a question here or there on the filter stuff but Im well on my way. I'll post any results I accumulate on this thread in case it is of benefit to others.

MarkE
HawkStudio
This project is well underway. I decided to base it around the TAS3103. I have the main processor (dsPIC60F3014), LCD display, encoder board, codec and TAS3103 up and running with the preliminary firmware. I started a thread on the new forum linked below with preliminary schematics etc, along with a blow by blow as its being constructed.

Home Studio Projects

No problems so far. The encode board is interfaced through a pair of IO expanders which generate interrupts for the processor. Its fully debounced in firmware and works great! I have converted the 2 bit gray code into something usable by the firmware, and also wrote "slider" graphics for the display. its really cool.

Macboy...have you continued on your project or is it stalled for another?

Now that I have most of the hardware up and running I am beginning to focus on all the little things I need write. I started flowcharting a float to 5.23 conversion routine so I can send the variables down to the mixer channels via I2C. Do yu by any chance have anything prewritten in C for this? I hate reinventing the wheel. Any help would be appreciated.

Thanks

Mark
macboy
quote:
Originally posted by HawkStudio
...Macboy...have you continued on your project or is it stalled for another?
It is stalled, while I build my home theatre in my basement.
quote:
Now that I have most of the hardware up and running I am beginning to focus on all the little things I need write. I started flowcharting a float to 5.23 conversion routine so I can send the variables down to the mixer channels via I2C. Do yu by any chance have anything prewritten in C for this? I hate reinventing the wheel. Any help would be appreciated.

Well, not in C, but I did write something in PIC assembly!

This is actually quite easy once you take a look at the two formats. The 32 bits in IEEE float are used like this:
SEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFF
where S=sign (0=positive), E (8 bits) is the exponent and F (23 bits) is the fraction, or the 'significant' digits. Really there are 24 significant digits because there is an assumed "1" as the first digit (so it is 1.F). The exponent is 'biased' by 127. That is, for an exponent of 0, E is set to 127; for 2, it is 129; for -3, it is 124, and so on (it is not simply a signed integer byte).

PIC float is only slightly different, where the Exponent is separated to its own 8-bit number, and the sign is placed at the beginning of the Fraction. This is easier to manipulate for 8-bit microcontrollers. Other than this minor re-arrangement, it is identical to IEEE. I would recommend ensuring that your data is in PIC float format, not IEEE format before converting to 5.23 format. You might have to dig around in your compiler documentation to figure out which it is. I use assembly so I don't need to worry about that.

The 5.23 format is not "floating point", but it is close. Technically it is fixed point, with 5 integer digits (actually 4+sign) and 23 fractional digits.

Read over that again if you need to.

Got that? good. That was the hard part. Now the easy part.

So, to convert float to 5.23 'fixed', what you need to do is take the 23, err, 24 fractional bits (remember to add that extra '1' bit to the 23 "F" bits stored in the float; so you start with 1.F), and appropriately increase or decrease it by the exponent. For an exponent of +1 (don't forget the bias, E=128 here), you would neet to multiply by 2. That means shifting left once. For an exponent of -2, you shift right twice. And so on. Remember, there is a limit on the exponent of +3 since you have only 4 bits to work with (plus sign). This shouldn't be a problem if you have normalised your coefficients. Also remember that shifting right (negative exponent) causes you to lose some significant digits. You may want to round up/down after shifting right. Now set the sign bit. You're done.

So here's a more algorithmic view:
1. copy the 32 bit float data to a new 32 bit var.
2. zero the upper 8 bits (i.e. sign and exponent).
3. Set bit 23 (zero-based) to "1".
(you now have 00000000 1FFFFFFF FFFFFFFF FFFFFFFF)
4. Determine the sign and magnitude of the exponent in the float.
5. Shift left (+) or right (-), magnitude number of times. (check the limits)
6. Set the sign bit (bit 27) the same as that in the float (bit 31).
(congrats, you now have 0000SIII IFFFFFFF FFFFFFFF FFFFFFFF)
See, that was easy.

I think TI had a spreadsheet that calculated filter coeficients and gave the conversion to 5.23 format. You can use it to verifiy your algorithm. Here is an excel formula to do the conversion:
RIGHT(DEC2HEX(anyNumber*2^23,8),8)
HawkStudio
Thank you for the detailed explanation. I had something similar planned, and also another algorithm that would handle both the 5.23 and the 25.23 conversions with the same function. I like your idea and will probably try it.

By the way, the 3103 really is some chip. Im impressed with its ability to route signals around through the various mixers. I also like the DRC and Im sure it will be beneficial.

Im anxious to try your math on the biquads, but I wont get there for a while. Our group currently has 5 songs in production and they are keeping me pretty busy. I also have a new carvin bass on the way and Im SURE that will provide a bit of a distraction too.

This is a fun and interesting project though. I'll let you know when I post the first pictures on Home Studio Projects. Its been about three years since I worked in my field and it feels good to be back in the saddle.

Thanks again

Mark
HawkStudio
Macboy
I have the i2c up and running on the TAS3101 in i2c slave mode and no problems to report. Im exploring my way around the chip and writing necessary firmware along the way.

I have a single function, written in C, for both float to 5.23 and float to 25.23. It seems to work using test values. It wasnt difficult at all. Thanks for the suggestions there.


I just wanted you to know that I started working with the biquads today using the formulas that you posted earllier in this thread. I've written a function around it called set_biquad(), which I pass a center freq, Q, gain factor and biquad address. Sample rate is set, fixed at 48000 with a macro.

When I upload a single biquad to the chip the audio cuts out. I obviously have a problem somewhere. Im fairly certain that the 5.23 conversion is working properly so Im focused on the filter parameters as the culprit. I have a few questions if I may....

You are using Tan and Cos as part of your equations. Do your formulas expect radians or degrees? As you know, C outputs radians in most compilers so Im converting it to degrees using .. degrees=radians*180/PI.

Also, if you have a scrap of paper lying around with some example values that you used in testing....lets say a bandwith filter with Fc=5000, Q=.5, G=2 or some other reference that you may have used to test your formulas I could really use it to test the output of set_biquad(). I guess you know how finicky micros can be with math of this type. I want to check the values of a1, a2, b0, b1, b2 for some known filter setup. The TAS doesnt need a0.

Thanks!
HawkStudio
Im currently designing a DSP using TI’s TAS3103. Everything is going well but I am having a bit of trouble with the biquad coefficients.

Does anyone have a spreadsheet or set of formulas to calculate a1, a2, b0, b1 and b2 given Fc, Q and Gain (in db)? I have used others posted here on this thread and on other boards but when I upload any biquad to the chip the audio simply cuts out.

I have verified the following in my design…

---I2C communication with the chip operates perfectly. I can read, write and verify values.

---My mixer paths within the chip are correct and verified.

---My float to 5.23 format function is operating properly and verified for positive and negative numbers.

I’m fairly certain that I’m simply not calculating the coefficients correctly. My sample rate is fixed at 48000 for now.

If anyone can help it would be greatly appreciated. My response may be slow because, for some reason, I am still under moderation on this board even after posting several messages.

Thanks!
macboy
Hi. Sorry for not replying earlier. I must have missed the post. I have attached an excel spreadsheet I use. I contains all calculations for many types of filters (EQ, bandpass, high pass, shelving, etc. etc.) and even plots their frequency response. It gives you the coefficients in both float and 5.23 hex format, so you can confirm not only the coefficients but the conversions to 5.23 fixed point. The equations use radians, this is virtually always the case for trig equations in audio. Some of this (frequency response plotting stuff) was copied from TI's spreadsheet. Do you have that? Anyway, I hope it helps.
HawkStudio
Thank you very much! I have been fighting with this for a few days now but I'm getting closer. I'm fairly convinced that I'm missing one step somewhere and having trouble putting my finger on it.

The spreadsheet is nice. I need to dig into it deeper when I wake up but Im sure that I can verify my formulas and results using it.

I have been looking for the TI spreadsheet but it seems that they may have posted it for a while and removed it.

During the time that I have been fighting with the biquads I have been writing firmware to get the rest of the project running. It's coming along very nicely. Im using the rotary encoders to control mixer volumes and other variables in real time. Driving the encoders through an interrupt structure was certainly the way to go. I have the BT (bass/treble) section up and running as well as some preliminary reverb/delay stuff. Once I get the biquads working reliably I will move on to getting the spectrum analyser/VU working.

Its funny...the most difficult decision Im currently facing is coming up with a comfortable user interface. Im planning to save presets through a menu structure (written for a previous project). I already have the EEPROM map written out for most of it.

Mark
macboy
Mark, just wondering how the project is going.
HawkStudio
Hi macboy
Thanks for asking. I haven't worked on it for a few weeks. I was still having a difficult time with the coefficients, then I had to change jobs so I took a short break from it.

Thanks for the spreadsheet. It was a huge help. It allowed me to verify that I was calculating everything properly and getting the correct coefficients. The chip isn't behaving the way I would expect though. The center frequency seems way off (to my ear) and Q is quirky. It takes extremely low values of Q for it to work at all. I've tried many other formulas (cookbook etc) and get the same results with them. I'm just missing something.....I'll get to the bottom of it eventually.

The rest of the chip is up and running perfectly. The mixers, bass/treble and all other modules seem to behave properly. Once I get the biquads worked out I can bring the rest of it online including the spectrum analyzer.

Thanks again

MarkE
HawkStudio
Macboy (and others)

I’ve finally gotten around to working on the parametric EQ project again. I’m hoping that you might be able to help with a snag that Im in. First, here are pictures of the prototype unit sitting in a rack case….







I am still having substantial problems with the biquad coefficients. The rest of the design seems to work fine. Macboy, first let me thank you for your help on this. Your spreadsheet was extremely helpful. I have recreated it in C code and can adjust the input parameters ( G, Fc and Q) via rotary encoders. My problem is that the sound cuts out when I take Fc below about 5khz. Above that it seems to work properly.

Image 1 shows the unit in case you are curious. The second image is a zoom on the screen showing a setup causing the audio to cut out. On the upper right you can see G=+6db, Fc=5K and Q=1. On the left are sliders that helped me troubleshoot the encoders along with their internal values.

The middle section shows the results of the computations. They agree perfectly with your spreadsheet.

Below that are the coefficients for the biquad (in base 10 format) displayed in the same order. 255 is represented as 15 because the upper nibble is stripped off.

Your name is at the top because I have a lot of other computations that can be selected including all of the usual cookbook filters. Your’s is selected here.


I have checked, and rechecked everything. I have read values back out and they are exactly as written. Im convinced that the TAS3103 is set up properly. By the way, I2S, Fs=48000, 24 bit.

I was wondering if you might have any thoughts as to what might be going on. I know that Im still missing something here. Any help or thoughts would be appreciated.

Mark
Carl_Huff
Mark,

Is there schematics and project details on your website? Cuz I went looking and didn't find any. I am really interested in what you are doing. I've only recently discovered the TI TAS3103 and TAS3108 dsp chips.

It's unclear to me, are the development tools free to download or does TI expect you to pay for them? I am a proficient PIC and micro programmer as well as audiophile. This project looks interesting to me.

Hey, is that an aging Sabtronics multimeter that I see on your bench? Good kit in it's time. I used to have one of those ...

Carl
HawkStudio
Carl
You have a keen eye! yes, thats a Sabtronics meter from about 1979. I keep it around for sentimental purposes.

I plan on writing articles for the Hawk website in the future but for now I just have hand drawn schematics. If you care to you can look back in this thread for more detailed info about what Im trying to do.
Once I get most of the firmware worked out I will be changing the codec out for different chips and also completing the analog section. Right now Im stuck on this biquad business and cant really proceed forward until I get it worked out.

This is all just a hobby project for one of my studio racks. Its based around a dsPic 30F6014A. If you need any help just ask. As far as I know there are no free development tools for the TAS, except of course the fine people on this board and others like it.

Mark
HawkStudio
Here are some links to the hand drawn schematics. They probably wont be very useful as Im just using them to keep track of what Im doing. I'll do something more formal when I get further along.

Codec Schematic

DSP Schematic

Encoder Board Schematic

Processor Schematic


I'll do a pcb when the design is finalized. I'm also thinking of adding a low voltage tube front end as an instrument input. Thats what you see to the left of the DSP in the top picture.
Carl_Huff
Mark,

I still can't find the programming tools for the TI chips. Can I just download them from the TI site or are they something that TI expects me to pay for?

Carl
HawkStudio
Someone here can correct me if I'm wrong but I don't believe that there are any free development tools available. I've looked high and low for one but to no avail.

Programming the chip is pretty straight forward. You will need to communicate with the various mixers in the chip using I2C in either 5.23 or 25.23 format. macboy provided plenty of help in that regard in this thread and also with the spreadsheet he posted here. If you have any trouble there I can help also.

The real trick is computing the correct coefficients for the biquad filters. This is the part that Im stuck on. If you manage to locate something please let me know.

You will have to plan out a clocking scheme and set register f9 accordingly. Word length, sample rate and other clocking parameters are set there. I'm painfully familiar with that so I can help there also.
Carl_Huff
Mark,

Thanks for the quick response. I am gonna go study the docs and app notes and go from there.

Carl
macboy
Mark,
I am glad to see that you are making some progress.
I am afraid that I probably won't be of much help. I did double-check your coefficients, and they look fine to me. The only thing that comes to mind right now, is to make sure that you are performing the I2C transactions properly. Make sure to transfer the full 32 bits and not just 28 bits (see section 3.1.1 in the datasheet), and transmit all 5 32-bit coefficients in one shot, in the right order. That means that you will transmit 22 bytes in a single shot. Don't forget the stop bit.
HawkStudio
Thank you. I am pretty sure that I am communicating with the chip correctly. I can even read out the same values that I wrote to it. Also, my communications with all other areas on the chip are working flawlessly and as expected.

I'll get it worked out eventually. In the meantime I decided to go ahead and complete the firmware by writing a pleasing user interface. This is going to be pretty nice when I complete it. I'll be using just about all of the chip's resources including a fully configurable DRC, reverb, treble/bass, soft volume and loudness function.

The interface has a screen to setup each section, and each group of setups can be saved in eeprom as a named preset. I'm also adding a single channel low voltage tube front end to process either active or passive pickups from a guitar or bass in addition to the normal line inputs. This should give me the flexibility to do just about anything with it.

I'm thinking about using the dsPICs internal resources for the spectrum readout. The TAS is currently setup to give me a VU readout. The dsPIC has power to spare so I may go with that setup or vice-versa. I already have a nice FFT spectrum readout from a previous project, I just need to copy the code in.

Anyway...back to the fight! Thanks again.
Carl_Huff
Mark,

Please tell us about your FFT routine. Did you base it on the one in the Microchip library? I ask because many people have struggled to use it. As result I have been slow to explore. How granular? (ie: 1/2 octave? 1/3 octave?). All very interesting stuff. I really like the PIC 30F series.

Carl
HawkStudio
Hi Carl
Thank you for taking an interest in the project. I know that you might start one too so I'm sure that we can crash heads on this.

About the FFT, it is part of MicroElectronika's C compiler library and I don't remember too much about it at this point. its been about a year since I've played with it. I'll get more detailed when I start experimenting with it again. If it doesn't work out I can always drop back and use the SA in the TAS3103, thats assuming I ever get the biquads working. :)

I started a thread on my site giving a blow by blow with a lot of detail on what I'm trying to do and accomplish. This is my band's web site but feel free to register and post comments there if you like.

Hawk Studio DSP thread

If you have any ideas or comments I love to hear them, especially where biquads are concerned. I've been programming micros since the late 70's doing digital control stuff. This is my first dip into digital audio and I'm learning along the way.

Mark
Carl_Huff
mark,

It sounds as tho you and I have similar backgrounds I started coding embedded machine control in the late 70's myself. I too have only recently gotten serious about embedded DSP. In the past the closest that I have come to building a digital parametric EQ was a half hearted attempt at using digital pots in place of pots (under PIC control) in a traditional 'British' analog parametric EQ circuit. That was a fun project that for no good reason I never quite completed.

I'll take a look at your web page.

Carl
HawkStudio
I'm still having considerable difficulty with the biquad operation of the TAS3103 and was hoping that someone could shed some light on the issues that Im having.

With the generous help of macboy and others I am convinced that I am computing the biquad coefficients correctly. I am also convinced that my transmission to and from the chip is working perfectly. If you have been following the thread you'll know that I stated that the biquads do not operate properly and the audio simply cuts out when I bring Fc below about 10khz. It also isnt filtering properly.

I have some interesting additional information that might help. I was working on other sections of the firmware installing code to allow me to change SAP format, Fs and bit length at will and I discovered that if I kick Fs up from 48000 to 96000 the audio cuts out at around 15khz rather than 9 or 10khz.

I also now have the VU meters up and running and noticed tonight that when the audio cuts out the VUs get pinned at max. I guessing now that the audio isnt cutting out but instead the biquad is saturating. After some internet research I learned a bit about scaling the coefficients to prevent that. The TAS is a fixed point system. I've read some where they say to simply divide all coefficients (a1,a2,b0,b1,b2) by a constant (usually a power of 2). Others have given long drawn out math for scaling.

I tried just dividing the coefficients, first by two, and then every power of 2 up to 256. The results were that the audio no longer cuts out but gets severely attenuated as Fc goes down. Also, the filter still isnt behaving properly.

I was wondering two things...has anyone here actually worked with the TAS3103 and successfully had the biquads operating properly? Also, any advice on scaling these coefficients would be helpful.
OzOnE_2k3
Hi all,

First of all, well done to Mark on the DSP project! It looks very professional and well engineered.

Sorry to hijack the thread a bit, but I've been searching for literally months for an affordable DSP unit, DSP board, or DSP project for doing Digital Room Correction (not to be confused with Dynamic Range Compression.)

The question is, would something like the TAS3103 have enough power to do FIR filtering (using impulse responses) on one or more channels, and if so, for how many milliseconds at say 48KHz?

I have a fair amount of experience with PIC programming, but mainy in assembly language. I've also had some experience with FPGAs, but limited knowledge of C programming / DSPs. I also don't know a great deal about digital filters, taps needed, and the maths involved would fry probably my brain....

How powerful would a DSP / FPGA need to be for 8-channel convolution? Would it be very expensive to do multi-channel convolution in a standalone box rather than just using a PC?

The ideal would be to make a stand-alone unit which would be an affordable and permanent addition to any home theater or hifi setup, and would rival much more expensive units.

(you can read more of my ramblings on DRC here: http://www.diyaudio.com/forums/show...872#post1131872 )

I've downloaded the service manual for my Denon AVC-A11SR amp (yes I know, it's not exactly audiophile) so I now have the pinouts for the I2S connections between it's two main DSP chips....

The amp (and most other digital amps) could now be modified to put the DRC / DSP unit in the loop so that room correction / EQ would be done digitally on any source material while still utilizing the amp's own DPLII / DD / DTS / THX processing. The sound quality improvement should be massive.

I'm also looking into modifying the amp with a muxit input to take uncompressed multi-channel digital audio from a similarly modified DVD / SACD player or sound card. This idea was from Brian Brown's fantastic thread.... http://www.diyaudio.com/forums/show...?threadid=22741

I'm currently using DRC with an Audiotrak Prodigy 7.1 HiFi and a Behringer FBQ2496 on the sub. I'm only really using the FBQ because 1) I wanted to see how much of an improvement the FBQ would make to the sub response with and without DRC, and 2) It's still a pain to work out the best way of using the PC with all source material, but the FBQ is in use all the time for taming the room modes.

Having the FBQ running on the sub all the time has reinforced my aim of having a separate unit for full-range room correction on all channels. The unit could completely replace the FBQ / BFD that people are using on their subs with something far more advanced. The unit could be almost infinitely tweakable and could possibly perform crossover / driver alignment / speaker delay / speaker repositioning duties as well.

I'm fully prepared to invest into this project and start making some PCB prototypes if only only it would be feasible to do this on 6 or 8 channels without the unit costing more than say £250 to build.

If it would be costly to do full DRC filtering, then I would still be very much interested in a basic mutli-channel parametric EQ.

I look forward to your replies and any help or suggestions.

OzOnE.
P.S. If this post could be better placed in another thread, please let me know.
Kevin_Murray
First of all hello everyone, this is my first post to this forum.:) I was very happy to find this thread because I'm planning a project of this type myself. I haven't even entered the design phase yet because I'm in the middle of a speaker project (TL, another great reason to be a member here) and well... the busy Christmas season will be here soon anyway.

OzOne: is this something you'd be interested in?
http://pcazeles.perso.cegetel.net/acxo.htm
It's for a PC but could help you get started. Near the bottom are links to digital filter generators and other useful stuff.

Mark, good progress! Hope you get the bugs worked out soon. Anyone else completed or currently working on a digital crossover/EQ project? I'm looking for collaborators. A year ago I took a job with a company specializing in embedded processing (which has taken me back to all the schooling in DSP that I've forgotten).:rolleyes: This is primarily why I'm interested in pursuing a mostly digital signal path, I've now got the tools to do it effectively. When (and if) I finish I plan to post all my info, code, schematics and PCB artwork online for anyone interested to see. I'm a firm believer in sharing knowledge.

Kevin
OzOnE_2k3
Hi, Kevin,

Thanks for the reply, please see the new thread.....

http://www.diyaudio.com/forums/show...threadid=113341

OzOnE.

Page generated in 0.21140289306641 seconds with 17 queries,
spending 0.00905132 doing MySQL queries and 0.20235157 doing PHP things.

Powered by: Search Engine Indexer and vBulletin
Copyright ©1999-2008 diyAudio.com