Exemple #1
0
 def test_harmonic_to_sinusoidal_removes_nyquist_harmonics(self):
     f0_hz = np.asarray([50, 3001, 4001, 3001, 50])[np.newaxis, :,
                                                    np.newaxis]
     orig_harm_amps = np.ones(shape=(1, 5, 3))
     harm_amps = orig_harm_amps / np.sum(
         orig_harm_amps, axis=-1, keepdims=True)
     amps, sin_freqs = core.harmonic_to_sinusoidal(10, harm_amps, f0_hz)
     sin_freqs = np.squeeze(sin_freqs)
     f0_hz = np.squeeze(f0_hz)
     expected_amps = orig_harm_amps * 10
     # f1 > nyquist
     expected_amps[:, 2, 1] = 0
     # f2 > nyquist
     expected_amps[:, 1:4, 2] = 0
     # normalize
     expected_amps[:, 0] /= 3
     expected_amps[:, 1] /= 2
     expected_amps[:, 3] /= 2
     expected_amps[:, 4] /= 3
     self.assertAllClose(amps[..., 0], expected_amps[..., 0])
     self.assertAllClose(amps[..., 1], expected_amps[..., 1])
     self.assertAllClose(amps[..., 2], expected_amps[..., 2])
     self.assertAllClose(sin_freqs[..., 0], f0_hz)
     self.assertAllClose(sin_freqs[..., 1], f0_hz * 2)
     self.assertAllClose(sin_freqs[..., 2], f0_hz * 3)
Exemple #2
0
 def test_harmonic_to_sinusoidal(self):
   f0_hz = core.midi_to_hz([80, 81, 82, 81, 80])[np.newaxis, :, np.newaxis]
   harm_amps = np.ones(shape=(1, 5, 3))
   harm_amps /= np.sum(harm_amps, axis=-1, keepdims=True)
   amps, sin_freqs = core.harmonic_to_sinusoidal(10, harm_amps, f0_hz)
   sin_freqs = np.squeeze(sin_freqs)
   f0_hz = np.squeeze(f0_hz)
   self.assertAllClose(amps, harm_amps * 10)
   self.assertAllClose(sin_freqs[..., 0], f0_hz)
   self.assertAllClose(sin_freqs[..., 1], f0_hz * 2)
   self.assertAllClose(sin_freqs[..., 2], f0_hz * 3)
Exemple #3
0
 def test_harmonic_to_sinusoidal_removes_nyquist_f0(self):
   f0_hz = np.asarray([200, 400, 8001])[np.newaxis, :, np.newaxis]
   harm_amps = np.ones(shape=(1, 3, 3))
   harm_amps /= np.sum(harm_amps, axis=-1, keepdims=True)
   amps, sin_freqs = core.harmonic_to_sinusoidal(10, harm_amps, f0_hz)
   sin_freqs = np.squeeze(sin_freqs)
   f0_hz = np.squeeze(f0_hz)
   expected_amps_f0 = harm_amps[..., 0] * 10
   expected_amps_f0[:, 2] = 0
   self.assertAllClose(amps[..., 0], expected_amps_f0)
   self.assertAllClose(sin_freqs[..., 0], f0_hz)
   self.assertAllClose(sin_freqs[..., 1], f0_hz * 2)
   self.assertAllClose(sin_freqs[..., 2], f0_hz * 3)