I was wondering what DSP chip would be appropriate for a guitar pedal effect. I need to sample the incoming signal preferably at 96kHz perform a simple numeric function upon each sample and output he result.
The function will be floating point and contain trig functions. Each sample is run through the function once and outputed.
ADC and DAC convertion will need to either be contained in the chip or sorted out separately.
I understand there are PICs out there and other similar things that can do this, I'm just unfamiliar with there devices and trying to wade though the websites to figure out what would work is kinda rough when your clueless. :)
Are you going to build one or a million? If the latter, the cost of the silicon is important. If you only build a few, the silicon is free. The expense is the time to develop the software so you should look for an software environment you like.
You said 96kHz. Call that 100 kHz, or 10 microseconds per sample. You need a CPU that is fast enough to run your algorithim in the alloted time. Trig functions can be messy. I'd suggest getting a development board and timing things. (If you might buy a million, the FEs will be helpful. If not...)
Why do you think you need floating point? The input isn't floating. The output isn't floating.
As a (probably crazy) straw-man, you could consider table lookup. It doesn't take much time, but it sure eats memory. It might be worthwhile to implement the algorithim on a PC and look at it on a graph. Can you compress that graph? Think interpolation, or curve fitting. A cheap CPU with external memory might be less expensive than a CPU fast enough to do the trig functions.
--
These are my opinions, not necessarily my employer\'s. I hate spam.
I need to look at the different ways possible to do this, and hardware to implement it.
Cordic looks interesting, I still need to figure out how to get the ADC and DAC conversion done and the chip to run the function,
I also need to be able to have one user variable parameter a setting knob that the the micro-controller would track in real time.along with the input signal.
On a sunny day (Sun, 25 Oct 2009 19:46:54 -0700 (PDT)) it happened Fred wrote in :
Whatever you choose, keep in mind that digital processing introduces delays. 'Latency' is the word. That may cause very undesirable effects in the end result.
So a bleeding fast DSP should be at an advantage here (read power guzzling). Or maybe do some of the processing in hardware, say use an FPGA. Depends on all you want to do. Maybe an analog circuit makes more sense for a guitar... But then again if your name or preference in Jimmy Hendrix., maybe all the artefacts will help a bit ;-) grin
If you must do this with floating point you'll need a floating-point DSP chip like an Analog Devices Sharc or a TI 6000 series ($$$, but maybe not too much of a differential for a one-off). I'd see if I couldn't do this with a fixed-point chip and some sort of approximation, or clever fixed- point math. The design work is harder, but it may be worth it.
A lookup table for sin / cos is much faster and may allow the use of a cheap micro, rather than a dsp and you can generate the table with a page of C utility.
You only need to store one quadrant, so a 16k x 16 bit table gives
16bits + sign sin() or cos() function. 32 Kbytes of rom space...
The other point being avoidance of floating point and do it in fixed point if at all possible. If you use a cheap micro, fp will be too much of a performance hog with many C libraries, not to mention the amount of code space it takes up...
Dunno about cordic -- to get that kind of speed from an inexpensive DSP you probably need to go with something like a polynomial best-fit. This would make the "knob" adjustment easy, as you'd just change the coefficients of the polynomial.
I've written everything in C since the early 90's, even stuff like interrupt handlers. The only assembler is in the startup and that's kept as short as possible. It's the only way to get maintainable and portable code and modern compilers and cpu's are very good. Even keil C for 8051 can keep up with the later 8051 derivatives from Silicon labs and others. For example, a 400 Hz pwm sine wave inverter where the timers are reloaded every pwm cycle, 10 or so lines of C and an interrupt handler time of approx 60 uS.
You write it all in C to start with, then dip down and look at the compiler entrails and optimise the assembler *only* if it's not fast enough :-)...
I used an LPC2103 from NXP for a DSP project (partially floating point). Worked like a charm without a single line of assembly. I doubt you need 96kHz though. 44KHz will be more than enough.
--
Failure does not prove something is impossible, failure simply
indicates you are not using the right tools...
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.