Filter signals with variety in noise level

3 views (last 30 days)
Hello, i am working in a project where i track the fundamental frequency (f0) of a signal using autocorrelation. The algorithm works as follows:
  1. perform framming of the signal of 128 window size with 50%overlapping
  2. find the autocorrelation for each frame
  3. find the local maxima and the locations
  4. exclude the 1st lag because the autocorr will have the biggest similarity in that lag
  5. find differences of locations
  6. take the median for each difference (med)
  7. f0=fs./med
And it works fine, but where my signal have some noise i get wrong values of f0,here is an example take a look at the red marked parts, note that this signal is from bird with rapid frequency changes so i smoothed it , the signal has 44.1kHz sampling frequency.
I have many signals (400) and i can't for every one of them to clean the noise separatelly it's very time consuming. The noise level varies for everyone so i can't do it with only filter. I did a little search and i found adaptive filtering, so what are your opinion about my issue how to implement the adaptive filtering LMS? is there any other efficient way to deal with it? thank you in advance.

Answers (1)

Image Analyst
Image Analyst on 28 Jul 2015
Why is it time consuming? To smooth 400 128-element long 1-D signals with something like rsmooth() or sgolayfilt() should take just a fraction of a second.
  1 Comment
Manolis Michailidis
Manolis Michailidis on 28 Jul 2015
with these filters also i lose information, so i just will use endpoint detection to trim my signal , note that i don't want to filter whole signal but the parts where the signal stops thats where i get usually noise, thank you anyway

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!