As we've watched the world cup matches over the past weeks everyone has been annoyed by the droning hum of the vuvuzela. Everyone in the crowd blowing on one of these pipes makes life for our ears unpleasant. What can you do though?
While at SciPy 2010 this week we saw a tutorial about signals with Python. Another student and I talked about filtering out the drone and after several late nights of hacking it worked! The principle is simple, block the frequency of the horn and it's harmonics. To do this we use a notch filter that rejects the signal from a certain frequency range.
The code (waves.py) is available and is a short script to read in, filter, display, and write out the files. Below I show an example of the signal and power spectral density before filtering (left) and after filtering (right). There are also links to the audio files. I found three example files and filtered them with three different filter widths (5,10,25 Hz). All runs are available at http://leemanwebb.org/vuvu/ , but that link will disappear and I'll then post a more permanent page after some tweaking with the project. Be sure to listen to example 3 before and after the 5Hz width filter.