5
$\begingroup$

I have been given a sound file of a plane passing over a rain forest filled with birds. I am supposed to filter out the sound of the plane as it flies over. I've accomplished this with various types of filters in MATLAB, but I always run into one problem. I can either cut out all of the plane and lose some of the background rain forest noise, or leave (almost) all of the rainforest noise and leave a decent amount of airplane noise. This is the frequency spectrum of the original sound file: Frequency Spectrum (Sorry for the crappy image.) Note the different colors represent left and right channels. From the plot, the majority of the plane's frequency is in the 0-1000 Hz range. The plane is clearly heard however until I use a high pass filter to remove everything from around 1700 Hz to 0 like so: enter image description here I suspect that the plane is causing that spike around 1700 Hz but evidently the rain forest is still producing lower frequency noise than that.

What would be the best method to remove that spike while keeping all that extra rain forest frequency?

EDIT:

Here is the plot of the time domain. Note how the plane gradually gets louder than fades away. enter image description here

The sampling frequency is 22050 samples/sec.

And the spectrogram. enter image description here

$\endgroup$
  • $\begingroup$ How do the signals look in the time domain ? $\endgroup$ – Gilles Dec 6 '14 at 0:21
  • 1
    $\begingroup$ @Gilles added the time domain plot $\endgroup$ – codedude Dec 6 '14 at 4:20
  • $\begingroup$ Perhaps Time-Frequency filtering can help. Can you include a spectrogram? $\endgroup$ – ThP Dec 6 '14 at 8:23
  • $\begingroup$ @jollypianoman Is that the number of samples or time on the x-axis ? What's your sampling frequency? $\endgroup$ – Gilles Dec 6 '14 at 11:01
  • 1
    $\begingroup$ @ThP I'm not familiar with that technique. Is it something that could be implemented easily in MATLAB? I've included my spectrogram. $\endgroup$ – codedude Dec 6 '14 at 15:22
2
$\begingroup$

In my opinion, the best approach for this kind of spectrally-overlapping noise is to use blind source separation techniques, like independent component analysis (ICA) or time-frequency masking, or sparse source decomposition. Look up the work of Emmanuel Vincent, Kostas Kokkinakis, or Philipos Loizou. These methods work best when some statistics of the noise are time-independent, and the SNR is small or negative, as appears to be the case in your example. Vincent has some MATLAB code available on the web.

$\endgroup$
0
$\begingroup$

Get Adobe Audition. In the spectrogram mode, find the noise you want to remove. Copy unwanted-noise-free blocks from similar areas (copy, paste, undo, mute, mix-paste) and adjust the volume of some areas by a few decibels to make it look smooth.

enter image description here

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.