i would like to extract some ridges from an spectrogram:
I would like to extract, as cleanly as posible, the three separate red ridges that you can see in the previous espectrogram.
Working with matlab I have some results using the ‘edge’ (Edge detection function) function over a specific bandwidth:
But I would prefer not to filter because I don’t know exactly where the signal is going to be and also because when you zoom you can see that there are “two” ridges instead of just one:
Any clues or directions to explore on how to solve this problem or improve this solution?
I’m not an image processing expert but I have some expertise on matlab and python signal processing.
Related code:
win=round(0.01*fs);%round(0.025890625*fs);
over=round(0.009*fs);%round(0.01875*fs);
[s,f,t,p] =spectrogram(song,hamming(win),over,fs,fs,'yaxis');
BW=edge(p(6000:22000,:),[],'vertical');
imagesc(BW); axis xy
All the best