Beispiel #1
0
    def test_apply_frequency_mask_stereo(self):
        np.random.seed(42)
        sample_len = 1024
        samples_in = np.random.uniform(low=-0.5, high=0.5, size=(2, sample_len)).astype(
            np.float32
        )
        samples_in_copy = np.copy(samples_in)
        sample_rate = 16000
        augmenter = FrequencyMask(min_frequency_band=0.3, max_frequency_band=0.3, p=1.0)

        samples_out = augmenter(samples=samples_in, sample_rate=sample_rate)
        self.assertEqual(samples_out.dtype, np.float32)
        self.assertEqual(samples_out.shape, samples_in.shape)

        # Check that the input is left untouched
        assert_array_equal(samples_in, samples_in_copy)

        std_in = np.mean(np.abs(samples_in))
        std_out = np.mean(np.abs(samples_out))
        self.assertLess(std_out, std_in)

        augmenter.freeze_parameters()
        samples_only_1st_channel = augmenter(
            samples=samples_in[0, :], sample_rate=sample_rate
        )

        assert_array_equal(samples_out[0, :], samples_only_1st_channel)
    def test_dynamic_length(self):
        sample_len = 1024
        samples_in = np.random.normal(0, 1, size=sample_len).astype(np.float32)
        sample_rate = 16000
        augmenter = Compose(
            [FrequencyMask(min_frequency_band=0.3, max_frequency_band=0.5, p=1.0)]
        )

        samples_out = augmenter(samples=samples_in, sample_rate=sample_rate)
        self.assertEqual(samples_out.dtype, np.float32)
        self.assertEqual(len(samples_out), sample_len)

        std_in = np.mean(np.abs(samples_in))
        std_out = np.mean(np.abs(samples_out))
        self.assertLess(std_out, std_in)
Beispiel #3
0
    def test_apply_frequency_mask(self):
        sample_len = 1024
        samples_in = np.random.normal(0, 1, size=sample_len).astype(np.float32)
        samples_in_copy = np.copy(samples_in)
        sample_rate = 16000
        augmenter = Compose(
            [FrequencyMask(min_frequency_band=0.3, max_frequency_band=0.5, p=1.0)]
        )

        samples_out = augmenter(samples=samples_in, sample_rate=sample_rate)
        self.assertEqual(samples_out.dtype, np.float32)
        self.assertEqual(len(samples_out), sample_len)

        # Check that the input is left untouched
        assert_array_equal(samples_in, samples_in_copy)

        std_in = np.mean(np.abs(samples_in))
        std_out = np.mean(np.abs(samples_out))
        self.assertLess(std_out, std_in)
Beispiel #4
0
    def test_filter_instability(self):
        """
        An early implementation of FrequencyMask had a problem with filter instability
        sometimes. That would lead to NaN values in the result. This test checks whether or not
        the problem currently exists.
        """
        np.random.seed(42)
        sample_len = 32000
        samples_in = np.random.uniform(-1, 1, size=sample_len).astype(np.float32)

        sample_rate = 16000
        augmenter = Compose([FrequencyMask(p=1.0)])

        augmenter.transforms[0].randomize_parameters(samples_in, sample_rate)
        augmenter.transforms[0].parameters["bandwidth"] = 600
        augmenter.transforms[0].parameters["freq_start"] = 17
        augmenter.freeze_parameters()

        samples_out = augmenter(samples=samples_in, sample_rate=sample_rate)
        self.assertFalse(np.isnan(samples_out).any())
Beispiel #5
0
    def test_randomize_parameters_and_apply(self):
        samples = 1.0 / np.arange(1, 21, dtype=np.float32)
        sample_rate = 44100

        augmenter = Compose([
            AddBackgroundNoise(
                sounds_path=os.path.join(DEMO_DIR, "background_noises"),
                min_snr_in_db=15,
                max_snr_in_db=35,
                p=1.0,
            ),
            ClippingDistortion(p=0.5),
            FrequencyMask(min_frequency_band=0.3,
                          max_frequency_band=0.5,
                          p=0.5),
            TimeMask(min_band_part=0.2, max_band_part=0.5, p=0.5),
            Shift(min_fraction=0.5, max_fraction=0.5, p=0.5),
        ])
        augmenter.freeze_parameters()
        augmenter.randomize_parameters(samples=samples,
                                       sample_rate=sample_rate)

        parameters = [
            transform.parameters for transform in augmenter.transforms
        ]

        perturbed_samples1 = augmenter(samples=samples,
                                       sample_rate=sample_rate)
        perturbed_samples2 = augmenter(samples=samples,
                                       sample_rate=sample_rate)

        assert_array_equal(perturbed_samples1, perturbed_samples2)

        augmenter.unfreeze_parameters()

        for transform_parameters, transform in zip(parameters,
                                                   augmenter.transforms):
            self.assertTrue(transform_parameters == transform.parameters)
            self.assertFalse(transform.are_parameters_frozen)