Пример #1
0
    def test_frequency_impulse_response_gives_correct_size(
            self, fft_size, window_size):
        """Tests generating impulse responses from a list of magnitudes.

    The output size should be determined by the window size, or fft_size if
    window size < 1.

    Args:
      fft_size: Size of the fft that generated the magnitudes.
      window_size: Size of window to apply to inverse fft.
    """
        # Create random signals to convolve.
        n_frequencies = fft_size // 2 + 1
        magnitudes = np.random.uniform(size=(1,
                                             n_frequencies)).astype(np.float32)

        impulse_response = core.frequency_impulse_response(
            magnitudes, window_size)

        target_size = fft_size
        if target_size > window_size >= 1:
            target_size = window_size
            is_even = target_size % 2 == 0
            target_size -= int(is_even)

        impulse_response_size = int(impulse_response.shape[-1])
        self.assertEqual(impulse_response_size, target_size)
Пример #2
0
    def test_delay_compensation_corrects_group_delay(self, gain):
        """Test automatically compensating for group delay of linear phase filter.

    Genearate filters to shift entire signal by a constant gain. Test that
    filtered signal is in phase with original signal.

    Args:
      gain: Amount to scale the input signal.
    """
        # Create random signal to filter.
        output_np = gain * self.audio[0]
        n_frequencies = 1025
        window_size = 257

        magnitudes = gain * tf.ones([1, n_frequencies], dtype=tf.float32)
        impulse_response = core.frequency_impulse_response(
            magnitudes, window_size)
        output_tf = core.fft_convolve(self.audio,
                                      impulse_response,
                                      padding='same')[0]

        difference = output_np - output_tf
        total_difference = np.abs(difference).mean()
        threshold = 1e-3
        self.assertLessEqual(total_difference, threshold)