How to detect noise/interference in audio signal

10 views (last 30 days)
I have an audio signal that has loud high-pitched tones in it that I am supposed to filter out (using both Simulink and MATLAB). I am currently working on the Simulink solution. When playing the audio file with Windows Media Player you can really only hear the high-pitched sounds.
When I take the FFT of the audio signal and look at that plot, I see a lot of different frequencies and I don't know how to tell which ones are the noise I am hearing. I have been trying to google around to see what human speech looks like but I am really not sure.
The zip file is the .wav file I am supposed to process; MATLAB doesn't allow uploads of .wav files. In addition, the frequency domain plot y-axis is in dB not Amplitude like the plot suggests.
  1 Comment
Tamir Suliman
Tamir Suliman on 4 Dec 2016
I will take a look at it today it would help if you also upload your simulink model file.

Sign in to comment.

Answers (1)

Walter Roberson
Walter Roberson on 4 Dec 2016
Hint: if you subtract off the mean, fft the result, and zero out anything above a certain absolute magnitude, inverse transform, and play, then you will be able to get most of the way. Not all of the way because the pesky interfering frequencies will not be completely eliminated this way, but as you look at the plot of the fft() you will be able to see pretty clearly the range of frequencies that are causing the problem.
The equivalent of this is "low pass filter".
  1 Comment
Madeline Liccione
Madeline Liccione on 4 Dec 2016
Thanks for your response. I have some follow-up questions and findings.
Could you go into a bit more detail about what you mean by "zero out anything above a certain absolute magnitude?" Are you suggesting something like multiplying the data that corresponds to the n (in an n-point FFT) at which those frequencies reside? i.e. if a high-magnitude frequency peak occurs at n=197, I should be looking to create a function that will reduce the magnitude of that peak?
I was able to create a filter using the fdatool that blocks everything above 2500Hz and that worked okay. I can still hear some low-volume tones that shouldn't be there. So when I looked at the plot of the FFT of the filtered signal (where you can hear the human voice but there are still some underlying tones), all of the signals I thought I was suppressing were still there, just at about -60dB. I'm so confused. I was expecting to see the frequency content of the voice to appear. But then again I don't really know what I'm looking for; something between 300-3000Hz was suggested for the range of the spoken voice on the track.
In addition, I plotted the FFT of the signal with the mean subtracted and it looked identical to the unaltered FFT.

Sign in to comment.

Categories

Find more on Measurements and Spatial Audio in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!