Monday 31 December 2012

What Software Is Good For Learning Or Implementing Digital Signal Processing On A Desktop or Laptop Computer ?

I nearly always start out at the C level and then port to Assembly code, as required.

Under Linux, GCC is the obvious choice but under Windows I use Microsoft Visual C++ V10.0 Express Edition that can be downloaded for free (

For audio I/O I use the standard sound card and PortAudio ( PortAudio is a great open-source API for audio I/O and runs on a number of different operating systems so software written with this is very portable.
A great example of what can be done with PortAudio is Audacity ( As an aside, Audacity is also a great tool to use for analyzing sampled waveforms and I have used it for analyzing all sorts of signals from radar to gas turbine (jet engine) vibration.
PortAudio supports several different host-APIs and the main one I use under Windows is Microsoft DirectX SDK (
See my earlier blog ( for further details on using PortAudio under Windows. I have found WDM/KS to have a very low (and predictable) latency but I have also found that it often supports less sample rate options than MME or DS.

If you wish to do some signal processing with the above software then a very simple way to generate data graphs direct from a C program is Gnuplot/C
GnuPlot can be downloaded from here : another really useful graphing package is XMGrace, which can be downloaded from here :

If you want to write a complete GUI application for processing signals then for a host API I almost exclusively use C++ and wxWidgets (, which is an open source API that supports portability on a number of OSs in the same way that PortAudio does for audio I/O. When using wxWidgets, you should also install Bakefile ( which makes building wxWidgets examples much easier.

If you want to hack an application that puts all of these together and allows you to process signals via a soundcard then you can download System Analyzer ( This uses the Numerix Graphical Library ( and the free version of the Numerix SigLib DSP Library (

What about if you want to use a different language other than C/C++ ?
I write nearly all of my DSP code in C or Assembly so rather than rewrite the functions in the target language for a particular project I typically use SWIG ( to allow access to these C/ASM functions from other languages such as C#, Perl, PHP, Python etc.

If you have found this solution useful then please do hit the Google (+1) button so that others may be able to find it as well.

Numerix-DSP Libraries :

No comments:

Post a Comment