Core Utils (libnmfd.utils.core_utils)

libnmfd.utils.core_utils.colored_components(comp_A, col_vec=None)[source]

Maps a list containing parallel component spectrograms into a color-coded spectrogram image, similar to Fig. 10 in [1]. Works best for three components corresponding to RGB.

References

[1] Christian Dittmar and Meinard Müller “Reverse Engineering the Amen Break - Score-informed Separation and Restoration applied to Drum Recordings” IEEE/ACM Transactions on Audio, Speech, and Language Processing, 24(9): 1531-1543, 2016.

Parameters
  • comp_A (list) – List with the component spectrograms, all should have the same dimensions

  • col_vec (list) – List with color codes given externally, if not provided some defaults will be used

Returns

rgbA (np.ndarray) – Color-coded spectrogram

libnmfd.utils.core_utils.diagonality_soft_constraints_nmf(H: numpy.ndarray, kern_ord: int)numpy.ndarray[source]

Implements a simplified version of the soft constraints in [1]

References

[1] Jonathan Driedger, Thomas Prätzlich, and Meinard Müller Let It Bee – Towards NMF-Inspired Audio Mosaicing In Proceedings of the International Conference on Music Information Retrieval (ISMIR): 350-356, 2015.

Parameters
  • H (np.ndarray) – NMF activations given as matrix

  • kern_ord (int) – Order of smoothing operation

Returns

H (np.ndarray) – Processed NMF activations

libnmfd.utils.core_utils.drum_specific_soft_constraints_nmf(W: numpy.ndarray, H: numpy.ndarray, decay: Union[numpy.ndarray, float], kern: int)Tuple[numpy.ndarray, numpy.ndarray][source]

Implements the drum specific soft constraints that can be applied during NMF or NMFD iterations. These constraints affect the activation vectors only and are described in sec.23 of [1].

References

[1] Christian Dittmar, Patricio López-Serrano, and Meinard Müller Unifying Local and Global Methods for Harmonic-Percussive Source Separation In Proceedings of the IEEE International Conference on Acoustics, Speech, and Signal Processing (ICASSP), 2018.

Parameters
  • W (np.ndarray) – NMF templates given in matrix/tensor form

  • H (np.ndarray) – NMF activations given as matrix

  • decay (list of np.ndarray) – Optional list of decay values per component.

  • kern (int) – Width of the smoothing kernel

Returns
  • W (np.ndarray) – Processed NMF templates

  • H_out (np.ndarray) – Processed NMF activations

libnmfd.utils.core_utils.percussiveness_estimation(W: numpy.ndarray)numpy.ndarray[source]

This function takes a matrix or tensor of NMF templates and estimates the percussiveness by assuming that the lower part explains percussive and the upper part explains harmonic components. This is explained in sec. 2.4, especially eq. (4) in [1].

References

[1] Christian Dittmar, Patricio López-Serrano, and Meinard Müller Unifying Local and Global Methods for Harmonic-Percussive Source Separation In Proceedings of the IEEE International Conference on Acoustics, Speech, and Signal Processing (ICASSP), 2018.

Parameters

W (np.ndarray) – K x R matrix (or K x R x T tensor) of NMF (NMFD) templates

Returns

perc_weight (np.ndarray) – The resulting percussiveness estimate per component

libnmfd.utils.core_utils.visualize_components_kam(comp_A: List, time_res: float, freq_res: float, start_sec: Optional[float] = None, end_sec: Optional[float] = None, font_size: float = 11)matplotlib.figure.Figure[source]

Given a non-negative matrix V, and its non non-negative NMF or NMFD components, this function provides a visualization.

Parameters
  • comp_A (list) – List with R individual component magnitude spectrograms.

  • time_res (float) – Temporal resolution

  • freq_res (float) – Spectral resolution

  • start_sec (float) – Where to zoom in on the time axis

  • end_sec (float) – Where to zoom in on the time axis

  • font_size (float) – Font size of the figure.

Returns

fh (matplotlib.figure.Figure) – The figure handle

libnmfd.utils.core_utils.visualize_components_nmf(V: numpy.ndarray, W: numpy.ndarray, H: numpy.ndarray, comp_V: numpy.ndarray, log_comp: float = 1.0, time_res: Optional[float] = None, freq_res: Optional[numpy.ndarray] = None, start_sec: Optional[float] = None, end_sec: Optional[float] = None, font_size: float = 11)Tuple[matplotlib.figure.Figure, numpy.ndarray][source]

Given a non-negative matrix V, and its non non-negative NMF or NMFD components, this function provides a visualization.

Parameters
  • V (np.ndarray) – K x M non-negative target matrix, in our case, this is usually a magnitude spectrogram

  • W (np.ndarray) – K X R matrix of learned template matrices

  • H (np.ndarray) – R X M matrix of learned activations

  • comp_V (np.ndarray) – Matrix with R individual component magnitude spectrograms

  • log_comp (float) – Factor to control the logarithmic magnitude compression

  • time_res (float) – Temporal resolution

  • freq_res (float) – Spectral resolution

  • start_sec (float) – Where to zoom in on the time axis

  • end_sec (float) – Where to zoom in on the time axis

  • font_size (float) – Font size of the figure

Returns
  • fh (matplotlib.figure.Figure) – The figure handle

  • log_freq_axis (np.ndarray) – Log frequency axis