|
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") |
|
|