# which is the maximum dB range value for a 16bits audio recording. We add # 96dB in order to get have only positive values in the spectrogram. s, fs = load('../../data/tropical_forest_morning.wav') Sxx, tn, fn, ext = spectrogram(s, fs, fcrop=[0,20000], tcrop=[0,60]) Sxx_dB = power2dB(Sxx, db_range=96) + 96 plot2d(Sxx_dB, extent=ext, title='original', vmin=np.median(Sxx_dB), vmax=np.median(Sxx_dB)+40) print ("Original sharpness : %2.3f" % sharpness(Sxx_dB)) #%% # Test different methods to remove stationary background noise # ------------------------------------------------------------ # Test the function "remove_background" start = timer() X1, noise_profile1, _ = remove_background(Sxx_dB) elapsed_time = timer() - start print("---- test remove_background -----") print("duration %2.3f s" % elapsed_time) print ("sharpness : %2.3f" % sharpness(X1)) plot2d(X1, extent=ext, title='remove_background', vmin=np.median(X1), vmax=np.median(X1)+40) #%% # Test the function "median_equalizer" start = timer() X2 = median_equalizer(Sxx) X2 = power2dB(X2) elapsed_time = timer() - start print("---- test median_equalizer -----")
# Start by loading an example audio file. We will remove low frequency ambient noise with a lowpass filter and then compute the spectrogram. 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 })