Beispiel #1
0
 def test_fft_nofft(self):
     for _ in range(10):
         x = th.randn(1024)
         freq = random.uniform(0.01, 0.5)
         freq2 = random.uniform(freq, 0.5)
         y_fft = filters.bandpass_filter(x, freq, freq2, fft=True)
         y_ref = filters.bandpass_filter(x, freq, freq2, fft=False)
         self.assertSimilar(y_fft, y_ref, x, f"freq={freq}", tol=0.01)
Beispiel #2
0
    def test_stride(self):
        x = th.randn(1024)

        y = filters.bandpass_filter(x, 0.1, 0.2, stride=1)[::3]
        y2 = filters.bandpass_filter(x, 0.1, 0.2, stride=3)

        self.assertEqual(y.shape, y2.shape)
        self.assertSimilar(y, y2, x)

        y = filters.bandpass_filter(x, 0.1, 0.2, stride=1, pad=False)[::3]
        y2 = filters.bandpass_filter(x, 0.1, 0.2, stride=3, pad=False)

        self.assertEqual(y.shape, y2.shape)
        self.assertSimilar(y, y2, x)
Beispiel #3
0
    def test_keep_or_kill(self):
        for _ in range(10):
            freq = random.uniform(0.01, 0.4)
            sr = 1024
            tone = pure_tone(freq * sr, sr=sr, dur=10)

            # For this test we accept 5% tolerance in amplitude, or -26dB in power.
            tol = 5
            zeros = 16

            y_pass = filters.bandpass_filter(tone,
                                             0.9 * freq,
                                             1.1 * freq,
                                             zeros=zeros)
            self.assertSimilar(y_pass,
                               tone,
                               tone,
                               f"freq={freq}, pass",
                               tol=tol)

            y_killed = filters.bandpass_filter(tone,
                                               1.1 * freq,
                                               1.2 * freq,
                                               zeros=zeros)
            self.assertSimilar(y_killed,
                               0 * tone,
                               tone,
                               f"freq={freq}, kill",
                               tol=tol)

            y_killed = filters.bandpass_filter(tone,
                                               0.8 * freq,
                                               0.9 * freq,
                                               zeros=zeros)
            self.assertSimilar(y_killed,
                               0 * tone,
                               tone,
                               f"freq={freq}, kill",
                               tol=tol)
Beispiel #4
0
    def test_same_as_lowpass(self):
        x = th.randn(1024)

        y_ref = filters.lowpass_filter(x, 0.2)
        y = filters.bandpass_filter(x, 0., 0.2)
        self.assertSimilar(y, y_ref, x)
Beispiel #5
0
 def test_constant(self):
     x = th.ones(2048)
     for zeros in [4, 10]:
         for freq in [0.01, 0.1]:
             y = filters.bandpass_filter(x, freq, 1.2 * freq, zeros=zeros)
             self.assertLessEqual(y.abs().mean(), 1e-6, (zeros, freq))