Skip to content
Snippets Groups Projects
Commit ad9b7cca authored by Paul Best's avatar Paul Best
Browse files

clip spectrum when substracting noise in saliency computation

parent a00e3ff3
No related branches found
No related tags found
No related merge requests found
...@@ -6,13 +6,13 @@ import librosa ...@@ -6,13 +6,13 @@ import librosa
np.seterr(divide = 'ignore') np.seterr(divide = 'ignore')
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument('specie', type=str, help="Species to treat specifically", default=None) parser.add_argument('specie', type=str, help="Species to treat specifically", default='all')
args = parser.parse_args() args = parser.parse_args()
for specie in species if args.specie is None else [args.specie]: for specie in species if args.specie == 'all' else [args.specie]:
wavpath, FS, nfft, downsample = species[specie].values() wavpath, FS, nfft, downsample, step = species[specie].values()
Hz2bin = lambda f: np.floor(f / FS * nfft).astype(int) # f in _preds.csv are already downsamples Hz2bin = lambda f: np.floor(f / FS * nfft).astype(int) # f in _preds.csv are already downsamples
dt = nfft / 8 # winsize / 8 dt = nfft *step
hann = np.hanning(nfft) hann = np.hanning(nfft)
get_spectrum = lambda x : 10 * np.log10(np.abs(np.fft.rfft(hann * x))**2 / (nfft/FS*1.5) +1) +1e-10 # density scaling, log1p get_spectrum = lambda x : 10 * np.log10(np.abs(np.fft.rfft(hann * x))**2 / (nfft/FS*1.5) +1) +1e-10 # density scaling, log1p
...@@ -35,7 +35,7 @@ for specie in species if args.specie is None else [args.specie]: ...@@ -35,7 +35,7 @@ for specie in species if args.specie is None else [args.specie]:
if FS*r.time < nfft//2 or FS*r.time > len(sig) - nfft//2 or (sig[int(FS*r.time) - nfft//2 : int(FS*r.time) + nfft//2] == 0).all(): if FS*r.time < nfft//2 or FS*r.time > len(sig) - nfft//2 or (sig[int(FS*r.time) - nfft//2 : int(FS*r.time) + nfft//2] == 0).all():
continue continue
spec = get_spectrum(sig[int(FS*r.time) - nfft//2 : int(FS*r.time) + nfft//2]) spec = get_spectrum(sig[int(FS*r.time) - nfft//2 : int(FS*r.time) + nfft//2])
spec -= noise spec = np.clip(spec-noise, 0, 10)
f0 = r.annot f0 = r.annot
df.loc[i, 'salience'] = sum(spec[Hz2bin(f0*2**(-1/12)):Hz2bin(f0*2**(1/12))+1]) / sum(spec[Hz2bin(f0*2**(-6/12)):Hz2bin(f0*2**(6/12))+1]) df.loc[i, 'salience'] = sum(spec[Hz2bin(f0*2**(-1/12)):Hz2bin(f0*2**(1/12))+1]) / sum(spec[Hz2bin(f0*2**(-6/12)):Hz2bin(f0*2**(6/12))+1])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment