def test_can_take_fft_of_2d_stacked_signal(self): samples = SilenceSynthesizer(SR22050()).synthesize(Milliseconds(2500)) windowsize = TimeSlice(duration=Milliseconds(200)) stepsize = TimeSlice(duration=Milliseconds(100)) _, windowed = samples.sliding_window_with_leftovers( windowsize=windowsize, stepsize=stepsize, dopad=True) coeffs = fft(windowed) self.assertIsInstance(coeffs, ArrayWithUnits) self.assertEqual(2, len(coeffs.dimensions)) self.assertEqual(windowed.dimensions[0], coeffs.dimensions[0]) self.assertIsInstance(coeffs.dimensions[1], FrequencyDimension)
def test_can_pad_for_better_frequency_resolution(self): samples = SilenceSynthesizer(SR22050()).synthesize(Milliseconds(2500)) windowsize = TimeSlice(duration=Milliseconds(200)) stepsize = TimeSlice(duration=Milliseconds(100)) _, windowed = samples.sliding_window_with_leftovers( windowsize=windowsize, stepsize=stepsize, dopad=True) coeffs = fft(windowed, padding_samples=1024) self.assertIsInstance(coeffs, ArrayWithUnits) self.assertEqual(2, len(coeffs.dimensions)) self.assertEqual(windowed.dimensions[0], coeffs.dimensions[0]) self.assertIsInstance(coeffs.dimensions[1], FrequencyDimension) expected_size = ((windowed.shape[-1] + 1024) // 2) + 1 self.assertEqual(expected_size, coeffs.shape[-1])
def test_can_decompose(self): sr = SR22050() samples = SilenceSynthesizer(sr).synthesize(Milliseconds(9999)) wscheme = sr.windowing_scheme(8192, 4096) duration = TimeSlice(wscheme.duration) frequency = TimeSlice(wscheme.frequency) _, windowed = samples.sliding_window_with_leftovers(duration, frequency, dopad=True) fa = frequency_decomposition(windowed, [32, 64, 128, 256, 512, 1024, 2048, 4096]) self.assertEqual(windowed.dimensions[0], fa.dimensions[0]) self.assertIsInstance(fa.dimensions[1], ExplicitFrequencyDimension)
def test_can_decompose(self): sr = SR22050() samples = SilenceSynthesizer(sr).synthesize(Milliseconds(9999)) wscheme = sr.windowing_scheme(8192, 4096) duration = TimeSlice(wscheme.duration) frequency = TimeSlice(wscheme.frequency) _, windowed = samples.sliding_window_with_leftovers( duration, frequency, dopad=True) fa = frequency_decomposition( windowed, [32, 64, 128, 256, 512, 1024, 2048, 4096]) self.assertEqual(windowed.dimensions[0], fa.dimensions[0]) self.assertIsInstance( fa.dimensions[1], ExplicitFrequencyDimension)