nara_wpe.tf_wpe module

tf_wpe.batched_block_wpe_step(Y, inverse_power, num_frames, taps=10, delay=3, mode='inv', block_length_in_seconds=2.0, forgetting_factor=0.7, fft_shift=256, sampling_rate=16000)[source]

Batched single WPE step. More suited for backpropagation.

Parameters:
  • Y (tf.Tensor) – Complex valued STFT signal with shape (B, F, D, T)
  • inverse_power (tf.Tensor) – Power signal with shape (B, F, T)
  • num_frames (tf.Tensor) – Number of frames for each signal in the batch
  • taps (int, optional) – Filter order
  • delay (int, optional) – Delay as a guard interval, such that X does not become zero.
  • mode (str, optional) – Specifies how R^-1@r is calculate: “inv” calculates the inverse of R directly and then uses matmul “solve” solves Rx=r for x
  • block_length_in_seconds (float, optional) – Length of each block in seconds
  • forgetting_factor (float, optional) – Forgetting factor for the signal statistics between the blocks
  • fft_shift (int, optional) – Shift used for the STFT.
  • sampling_rate (int, optional) – Sampling rate of the observed signal.
Returns:

Dereverberated signal of shape B, (F, D, T)

tf_wpe.batched_recursive_wpe(Y, power_estimate, alpha, num_frames, taps=10, delay=2, only_use_final_filters=False)[source]

Batched single WPE step. More suited for backpropagation.

Parameters:
  • Y (tf.Tensor) – Observed signal of shape (B, T, F, D)
  • power_estimate (tf.Tensor) – Estimate for the clean signal PSD of shape (B, T, F)
  • alpha (float) – Smoothing factor for the recursion
  • num_frames (tf.Tensor) – Number of frames for each signal in the batch
  • K (int, optional) – Number of filter taps.
  • delay (int, optional) – Delay
  • only_use_final_filters (bool, optional) – Applies only the final estimated filter coefficients to the whole signal. This is for debugging purposes only and makes this method a offline one.
Returns:

Dereverberated signal of shape (B, T, F, D)

tf_wpe.batched_wpe(Y, num_frames, taps=10, delay=3, iterations=3, mode='inv')[source]

Batched version of iterative WPE.

Parameters:
  • Y (tf.Tensor) – Observed signal with shape (B, F, D, T)
  • num_frames (tf.Tensor) – Number of frames for each signal in the batch
  • taps (int, optional) – Defaults to 10. Number of filter taps.
  • delay (int, optional) – Defaults to 3.
  • iterations (int, optional) – Defaults to 3.
  • mode (str, optional) – Specifies how R^-1@r is calculate: “inv” calculates the inverse of R directly and then uses matmul “solve” solves Rx=r for x
Returns:

Dereverberated signal of shape (B, F, D, T).

Return type:

tf.Tensor

tf_wpe.batched_wpe_step(Y, inverse_power, num_frames, taps=10, delay=3, mode='inv', Y_stats=None)[source]

Batched single WPE step. More suited for backpropagation.

Parameters:
  • Y (tf.Tensor) – Complex valued STFT signal with shape (B, F, D, T)
  • inverse_power (tf.Tensor) – Power signal with shape (B, F, T)
  • num_frames (tf.Tensor) – Number of frames for each signal in the batch
  • taps (int, optional) – Filter order
  • delay (int, optional) – Delay as a guard interval, such that X does not become zero.
  • mode (str, optional) – Specifies how R^-1@r is calculate: “inv” calculates the inverse of R directly and then uses matmul “solve” solves Rx=r for x
  • Y_stats (tf.Tensor or None, optional) – Complex valued STFT signal with shape (F, D, T) use to calculate the signal statistics (i.e. correlation matrix/vector). If None, Y is used. Otherwise it’s usually a segment of Y
Returns:

Dereverberated signal of shape B, (F, D, T)

tf_wpe.block_wpe_step(Y, inverse_power, taps=10, delay=3, mode='inv', block_length_in_seconds=2.0, forgetting_factor=0.7, fft_shift=256, sampling_rate=16000)[source]

Applies wpe in a block-wise fashion.

Parameters:
  • Y (tf.Tensor) – Complex valued STFT signal with shape (F, D, T)
  • inverse_power (tf.Tensor) – Power signal with shape (F, T)
  • taps (int, optional) – Defaults to 10.
  • delay (int, optional) – Defaults to 3.
  • mode (str, optional) – Specifies how R^-1@r is calculate: “inv” calculates the inverse of R directly and then uses matmul “solve” solves Rx=r for x
  • block_length_in_seconds (float, optional) – Length of each block in seconds
  • forgetting_factor (float, optional) – Forgetting factor for the signal statistics between the blocks
  • fft_shift (int, optional) – Shift used for the STFT.
  • sampling_rate (int, optional) – Sampling rate of the observed signal.
tf_wpe.get_correlations(Y, inverse_power, taps, delay)[source]

Calculates weighted correlations of a window of length taps

Parameters:
  • Y (tf.Ttensor) – Complex-valued STFT signal with shape (F, D, T)
  • inverse_power (tf.Tensor) – Weighting factor with shape (F, T)
  • taps (int) – Lenghts of correlation window
  • delay (int) – Delay for the weighting factor
Returns:

Correlation matrix of shape (F, taps*D, taps*D) tf.Tensor: Correlation vector of shape (F, taps*D)

Return type:

tf.Tensor

tf_wpe.get_correlations_for_single_frequency(Y, inverse_power, taps, delay)[source]

Calculates weighted correlations of a window of length taps for one freq.

Parameters:
  • Y (tf.Ttensor) – Complex-valued STFT signal with shape (D, T)
  • inverse_power (tf.Tensor) – Weighting factor with shape (T)
  • K (int) – Lenghts of correlation window
  • delay (int) – Delay for the weighting factor
Returns:

Correlation matrix of shape (taps*D, taps*D) tf.Tensor: Correlation vector of shape (D, taps*D)

Return type:

tf.Tensor

tf_wpe.get_filter_matrix_conj(Y, correlation_matrix, correlation_vector, taps, delay, mode='solve')[source]

Calculate (conjugate) filter matrix based on correlations for one freq.

Parameters:
  • Y (tf.Tensor) – Complex-valued STFT signal of shape (D, T)
  • correlation_matrix (tf.Tensor) – Correlation matrix (taps*D, taps*D)
  • correlation_vector (tf.Tensor) – Correlation vector (D, taps*D)
  • K (int) – Number of filter taps
  • delay (int) – Delay
  • mode (str, optional) – Specifies how R^-1@r is calculate: “inv” calculates the inverse of R directly and then uses matmul “solve” solves Rx=r for x
Raises:

ValueError – Unknown mode specified

Returns:

(Conjugate) filter Matrix

Return type:

tf.Tensor

tf_wpe.get_power(signal, axis=-2)[source]

Calculates power for signal

Parameters:
  • signal (tf.Tensor) – Single frequency signal with shape (D, T) or (F, D, T).
  • axis – reduce_mean axis
Returns:

Power with shape (T,) or (F, T)

Return type:

tf.Tensor

tf_wpe.get_power_inverse(signal)[source]

Calculates inverse power for signal

Parameters:
  • signal (tf.Tensor) – Single frequency signal with shape (D, T).
  • psd_context – context for power estimation
Returns:

Inverse power with shape (T,)

Return type:

tf.Tensor

tf_wpe.get_power_online(signal)[source]

Calculates power for signal

Parameters:signal (tf.Tensor) – Signal with shape (F, D, T).
Returns:Power with shape (F,)
Return type:tf.Tensor
tf_wpe.online_wpe_step(input_buffer, power_estimate, inv_cov, filter_taps, alpha, taps, delay)[source]

One step of online dereverberation

Parameters:
  • input_buffer (tf.Tensor) – Buffer of shape (taps+delay+1, F, D)
  • power_estimate (tf.Tensor) – Estimate for the current PSD
  • inv_cov (tf.Tensor) – Current estimate of R^-1
  • filter_taps (tf.Tensor) – Current estimate of filter taps (F, taps*D, taps)
  • alpha (float) – Smoothing factor
  • taps (int) – Number of filter taps
  • delay (int) – Delay in frames
Returns:

Dereverberated frame of shape (F, D) tf.Tensor: Updated estimate of R^-1 tf.Tensor: Updated estimate of the filter taps

Return type:

tf.Tensor

tf_wpe.perform_filter_operation(Y, filter_matrix_conj, taps, delay)[source]
>>> D, T, taps, delay = 1, 10, 2, 1
>>> tf.enable_eager_execution()
>>> Y = tf.ones([D, T])
>>> filter_matrix_conj = tf.ones([taps, D, D])
>>> X = perform_filter_operation_v2(Y, filter_matrix_conj, taps, delay)
>>> X.shape
TensorShape([Dimension(1), Dimension(10)])
>>> X.numpy()
array([[ 1.,  0., -1., -1., -1., -1., -1., -1., -1., -1.]], dtype=float32)
tf_wpe.recursive_wpe(Y, power_estimate, alpha, taps=10, delay=2, only_use_final_filters=False)[source]

Applies WPE in a framewise recursive fashion.

Parameters:
  • Y (tf.Tensor) – Observed signal of shape (T, F, D)
  • power_estimate (tf.Tensor) – Estimate for the clean signal PSD of shape (T, F)
  • alpha (float) – Smoothing factor for the recursion
  • taps (int, optional) – Number of filter taps.
  • delay (int, optional) – Delay
  • only_use_final_filters (bool, optional) – Applies only the final estimated filter coefficients to the whole signal. This is for debugging purposes only and makes this method a offline one.
Returns:

Enhanced signal

Return type:

tf.Tensor

tf_wpe.single_frequency_wpe(Y, taps=10, delay=3, iterations=3, mode='inv')[source]

WPE for a single frequency.

Parameters:
  • Y – Complex valued STFT signal with shape (D, T)
  • taps – Number of filter taps
  • delay – Delay as a guard interval, such that X does not become zero.
  • iterations
  • mode (str, optional) – Specifies how R^-1@r is calculate: “inv” calculates the inverse of R directly and then uses matmul “solve” solves Rx=r for x

Returns:

tf_wpe.wpe(Y, taps=10, delay=3, iterations=3, mode='inv')[source]

WPE for all frequencies at once. Use this for regular processing.

Parameters:
  • Y (tf.Tensor) – Observed signal with shape (F, D, T)
  • num_frames (tf.Tensor) – Number of frames for each signal in the batch
  • taps (int, optional) – Defaults to 10. Number of filter taps.
  • delay (int, optional) – Defaults to 3.
  • iterations (int, optional) – Defaults to 3.
  • mode (str, optional) – Specifies how R^-1@r is calculated: “inv” calculates the inverse of R directly and then uses matmul “solve” solves Rx=r for x
Returns:

Dereverberated signal tf.Tensor: Latest estimation of the clean speech PSD

Return type:

tf.Tensor

tf_wpe.wpe_step(Y, inverse_power, taps=10, delay=3, mode='inv', Y_stats=None)[source]

Single step of ‘wpe’. More suited for backpropagation.

Parameters:
  • Y (tf.Tensor) – Complex valued STFT signal with shape (F, D, T)
  • inverse_power (tf.Tensor) – Power signal with shape (F, T)
  • taps (int, optional) – Filter order
  • delay (int, optional) – Delay as a guard interval, such that X does not become zero.
  • mode (str, optional) – Specifies how R^-1@r is calculate: “inv” calculates the inverse of R directly and then uses matmul “solve” solves Rx=r for x
  • Y_stats (tf.Tensor or None, optional) – Complex valued STFT signal with shape (F, D, T) use to calculate the signal statistics (i.e. correlation matrix/vector). If None, Y is used. Otherwise it’s usually a segment of Y
Returns:

Dereverberated signal of shape (F, D, T)