# than the second threshold value. # First we remove the stationary background in order to increase the contrast [1] # Then we convert the spectrogram into dB Sxx_power_noNoise = sound.median_equalizer(Sxx_power, display=True, **{'extent': ext}) Sxx_db_noNoise = power2dB(Sxx_power_noNoise) # Then we smooth the spectrogram in order to facilitate the creation of masks as # small sparse details are merged if they are close to each other Sxx_db_noNoise_smooth = sound.smooth(Sxx_db_noNoise, std=0.5, display=True, savefig=None, **{ 'vmin': 0, 'vmax': dB_max, 'extent': ext }) # Then we create a mask (i.e. binarization of the spectrogram) by using the # double thresholding technique im_mask = rois.create_mask(im=Sxx_db_noNoise_smooth, mode_bin='relative', bin_std=8, bin_per=0.5, verbose=False, display=False) # Finaly, we put together pixels that belong to the same acoustic event, and
s, fs = sound.load('../../data/rock_savanna.wav') s_filt = sound.select_bandwidth(s, fs, fcut=100, forder=3, ftype='highpass') db_max = 70 # used to define the range of the spectrogram Sxx, tn, fn, ext = sound.spectrogram(s_filt, fs, nperseg=1024, noverlap=512) Sxx_db = power2dB(Sxx, db_range=db_max) + db_max plot2d(Sxx_db, **{'extent': ext}) #%% # 1. Find regions of interest # --------------------------- # To find regions of interest in the spectrogram, we will remove stationary background noise and then find isolated sounds using a double threshold method. Small ROIs due to noise in the signal will be removed. Sxx_db_rmbg, _, _ = sound.remove_background(Sxx_db) Sxx_db_smooth = sound.smooth(Sxx_db_rmbg, std=1.2) im_mask = rois.create_mask(im=Sxx_db_smooth, mode_bin='relative', bin_std=2, bin_per=0.25) im_rois, df_rois = rois.select_rois(im_mask, min_roi=50, max_roi=None) # Format ROIs and visualize the bounding box on the audio spectrogram. df_rois = format_features(df_rois, tn, fn) ax0, fig0 = overlay_rois(Sxx_db, df_rois, **{ 'vmin': 0, 'vmax': 60, 'extent': ext }) #%%