import matplotlib.pyplot as plt import numpy as np def plot_spectrogram(signal, title): fig, ax = plt.subplots(figsize=(20, 4)) cax = ax.matshow( signal, origin="lower", aspect="auto", cmap=plt.cm.afmhot, vmin=-1 * np.max(np.abs(signal)), vmax=np.max(np.abs(signal)), ) fig.colorbar(cax) ax.set_title(title) plt.tight_layout() plt.show() def plot_statistics_and_filter( mean_freq_noise, std_freq_noise, noise_thresh, smoothing_filter ): """Plots basic statistics of noise reduction Arguments: mean_freq_noise {[type]} -- [description] std_freq_noise {[type]} -- [description] noise_thresh {[type]} -- [description] smoothing_filter {[type]} -- [description] """ fig, ax = plt.subplots(ncols=2, figsize=(20, 4)) (plt_mean,) = ax[0].plot(mean_freq_noise, label="Mean power of noise") (plt_std,) = ax[0].plot(std_freq_noise, label="Std. power of noise") (plt_std,) = ax[0].plot(noise_thresh, label="Noise threshold (by frequency)") ax[0].set_title("Threshold for mask") ax[0].legend() cax = ax[1].matshow(smoothing_filter, origin="lower") fig.colorbar(cax) ax[1].set_title("Filter for smoothing Mask") plt.show() def plot_reduction_steps( noise_stft_db, mean_freq_noise, std_freq_noise, noise_thresh, smoothing_filter, sig_stft_db, sig_mask, recovered_spec, ): plot_spectrogram(noise_stft_db, title="Noise") plot_statistics_and_filter( mean_freq_noise, std_freq_noise, noise_thresh, smoothing_filter ) plot_spectrogram(sig_stft_db, title="Signal") plot_spectrogram(sig_mask, title="Mask applied") plot_spectrogram(recovered_spec, title="Recovered spectrogram")