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 Signal Visualizer ( The nice thing about this is that it is a IP based client-server package that allows the DSP client to run on an embedded machine and display the graphs on a remote Windows or Linux computer.
Other tools that I have used for back-end display of data are GnuPlot ( and XMGrace (

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.

1 comment:

  1. Hi, Great.. Tutorial is just awesome..It is really helpful for a newbie like me.. I am a regular follower of your blog. Really very informative post you shared here. Kindly keep blogging. If anyone wants to become a .Net developer learn from Dot Net Training in Chennai. or learn thru ASP.NET Essential Training Online . Nowadays Dot Net has tons of job opportunities on various vertical industry.