Hi everyone. I hope I'm posting in the right forum. I'm currently doing a course on DSP in my uni and am interested in modelling analog effects and creating convolvers for guitars and other instruments (think cab sims) but my course ends with realization of digital filters (iir) and removal of artefacts and interference. I've worked with a dsp like twice and that was to generate a sine wave and realize design an fir filter as part of my lab. What else should I learn? I have decent experience with C and C++ and Matlab. Thanks!
Once you understand the difference in the digital domain between an iir and fir you can pretty much do any kind of analog model you want. Filters are subtractive synthesis, sine waves are additive synthesis. There is also FM and then filter which some keyboards do. Learn the guts of the processor and the theory behind signal processing so you can make the DSP do what ever you want. The more you get stuck, the more questions you ask, the more you will learn and the more you can accomplish in the long run. I bet you will have a lot of fun in that class and outside of it as well. Good luck!
the question is mainly : what kind of effect do you want to implement? There are hundreds if not thousands of analog effects, with totally different algorithms to be used.
Simply said, if you only know what is a FIR and how to generate a sine, it's like you say "I want to build a car but I only have a hammer and a screwdriver".
Once you have selected an effect to emulate, the first thing is to understand how this effect works in analog world (is it based on a delay line, filter, etc...). Then you will need to see how the same processing is done in digital world (use of biquad, modulated delay line, etc...)
C and C++ will come much later, they are only tools to implement an algorithm. Knowing a programming language is not the key to audio processing, it's the understanding of how the algorithms works to perform an effect which is important. Once you know how an algorithm works, you can implement it in any language (switching from a language to another is just a question of the performances you want to reach)
In addition to the above, rather than try to do simulations directly in DSP hardware, you would probably enjoy the process more if you were experimenting in a numeric environment like MATLAB or the open source variants SCILAB or Octave. You'll find source code for plenty of effects (flangers, etc) on the MATLAB forum. You may need to edit them to conform with the language particulars of SCILAB or Octave, but the changes will be minimal.
You can read in WAV files (music, riffs, ...), process them, and then play them into headphones using the sound() command. Then, when you have an effect that you like, cast it into DSP code for real time processing.
It's analogous to the analog domain doing simulation using Electronics Workbench/TINA/etc and, then, a breadboard.
There is more to the various "analog effects" than filters and convolution. If you're trying to simulate a guitar amplifier with different cabinets, perhaps the acoustic behavior of the cabinet is somewhat linear and time-invariant (LTI) and i wouldn't insist that is the case, but the behavior of the guitar amp most certainly is not LTI if you crank the amp up enough to sound good.
So you need to learn a little about non-linearities and how to model them in a DSP environment.
There's a bit more for you to learn or, perhaps, self-learn.
* filters - lowpass/bandpass/highpass/shelving/EQ/peaking/etc.
* dynamic processors - Limiter, RMS compression, Distortion, Enhancers, etc.
* Spacial Effects — Panning, Reverb, Surround Sound, Pitch shifter
* Delays and variable delay — Vibrato, Flanger, Chorus, Echo