def test_simulateSNR_1(self): """Test function for simulateSNR() 1/4""" # first test: f0 = 0 # Load test references fname = pkg_resources.resource_filename(__name__, "test_data/test_snr_amp.mat") amp_ref = scipy.io.loadmat(fname)['amp'].reshape((-1, )) snr_ref = scipy.io.loadmat(fname)['snr'].reshape((-1, )) amp_user_ref = scipy.io.loadmat(fname)['amp_user'].reshape((-1, )) snr_user_ref = scipy.io.loadmat(fname)['snr_user'].reshape((-1, )) order = 4 osr = 256 nlev = 2 f0 = 0.22 Hinf = 1.25 form = 'CRFB' ntf = ds.synthesizeNTF(order, osr, 2, Hinf, f0) a1, g1, b1, c1 = ds.realizeNTF(ntf, form) ABCD = ds.stuffABCD(a1, g1, b1, c1, form) ABCD_ref = np.array([[1., -1.6252, 0, 0, -0.0789, 0.0789], [1., -0.6252, 0, 0, -0.0756, 0.0756], [0, 1., 1., -1.6252, -0.2758, 0.2758], [0, 1., 1., -0.6252, 0.0843, -0.0843], [0, 0, 0, 1., 1., 0]]) self.assertTrue(np.allclose(ABCD, ABCD_ref, atol=9e-5, rtol=1e-4)) # bonus test, mapABCD - realizeNTF - stuffABCD a2, g2, b2, c2 = ds.mapABCD(ABCD, form) self.assertTrue(np.allclose(a1, a2, atol=1e-5, rtol=1e-5)) self.assertTrue(np.allclose(g1, g2, atol=1e-5, rtol=1e-5)) self.assertTrue(np.allclose(b1, b2, atol=1e-5, rtol=1e-5)) self.assertTrue(np.allclose(c1, c2, atol=1e-5, rtol=1e-5)) # We do three tests: # SNR from ABCD matrix # SNR from NTF # SNR from LTI obj with user specified amplitudes snr, amp = ds.simulateSNR(ABCD, osr, None, f0, nlev) self.assertTrue(np.allclose(snr, snr_ref, atol=1, rtol=5e-2)) self.assertTrue(np.allclose(amp, amp_ref, atol=5e-1, rtol=1e-2)) snr2, amp2 = ds.simulateSNR(ntf, osr, None, f0, nlev) self.assertTrue(np.allclose(snr2, snr_ref, atol=1e-5, rtol=1e-5)) self.assertTrue(np.allclose(amp2, amp_ref, atol=1e-5, rtol=1e-5)) amp_user = np.linspace(-100, 0, 200)[::10] snr_user, amp_user = ds.simulateSNR(lti(*ntf), osr=osr, amp=amp_user, f0=f0, nlev=nlev) self.assertTrue( np.allclose(snr_user, snr_user_ref[::10], atol=1e-5, rtol=1e-5)) self.assertTrue( np.allclose(amp_user, amp_user_ref[::10], atol=1e-5, rtol=1e-5))
def test_simulateSNR_1(self): """Test function for simulateSNR() 1/4""" # first test: f0 = 0 # Load test references fname = pkg_resources.resource_filename(__name__, "test_data/test_snr_amp.mat") amp_ref = scipy.io.loadmat(fname)['amp'].reshape((-1,)) snr_ref = scipy.io.loadmat(fname)['snr'].reshape((-1,)) amp_user_ref = scipy.io.loadmat(fname)['amp_user'].reshape((-1,)) snr_user_ref = scipy.io.loadmat(fname)['snr_user'].reshape((-1,)) order = 4 osr = 256 nlev = 2 f0 = 0.22 Hinf = 1.25 form = 'CRFB' ntf = ds.synthesizeNTF(order, osr, 2, Hinf, f0) a1, g1, b1, c1 = ds.realizeNTF(ntf, form) ABCD = ds.stuffABCD(a1, g1, b1, c1, form) ABCD_ref = np.array([[1., -1.6252, 0, 0, -0.0789, 0.0789], [1., -0.6252, 0, 0, -0.0756, 0.0756], [0, 1., 1., -1.6252, -0.2758, 0.2758], [0, 1., 1., -0.6252, 0.0843, -0.0843], [0, 0, 0, 1., 1., 0]]) self.assertTrue(np.allclose(ABCD, ABCD_ref, atol=9e-5, rtol=1e-4)) # bonus test, mapABCD - realizeNTF - stuffABCD a2, g2, b2, c2 = ds.mapABCD(ABCD, form) self.assertTrue(np.allclose(a1, a2, atol=1e-5, rtol=1e-5)) self.assertTrue(np.allclose(g1, g2, atol=1e-5, rtol=1e-5)) self.assertTrue(np.allclose(b1, b2, atol=1e-5, rtol=1e-5)) self.assertTrue(np.allclose(c1, c2, atol=1e-5, rtol=1e-5)) # We do three tests: # SNR from ABCD matrix # SNR from NTF # SNR from LTI obj with user specified amplitudes snr, amp = ds.simulateSNR(ABCD, osr, None, f0, nlev) self.assertTrue(np.allclose(snr, snr_ref, atol=1, rtol=5e-2)) self.assertTrue(np.allclose(amp, amp_ref, atol=5e-1, rtol=1e-2)) snr2, amp2 = ds.simulateSNR(ntf, osr, None, f0, nlev) self.assertTrue(np.allclose(snr2, snr_ref, atol=1e-5, rtol=1e-5)) self.assertTrue(np.allclose(amp2, amp_ref, atol=1e-5, rtol=1e-5)) amp_user = np.linspace(-100, 0, 200)[::10] snr_user, amp_user = ds.simulateSNR(lti(*ntf), osr=osr, amp=amp_user, f0=f0, nlev=nlev) self.assertTrue(np.allclose(snr_user, snr_user_ref[::10], atol=1e-5, rtol=1e-5)) self.assertTrue(np.allclose(amp_user, amp_user_ref[::10], atol=1e-5, rtol=1e-5))
def test_simulateSNR_2(self): """Test function for simulateSNR() 2/4""" # next test: f0 = 0 # Load test references fname = pkg_resources.resource_filename(__name__, "test_data/test_snr_amp2.mat") amp_ref = scipy.io.loadmat(fname)['amp'].reshape((-1,)) snr_ref = scipy.io.loadmat(fname)['snr'].reshape((-1,)) ABCD_ref = scipy.io.loadmat(fname)['ABCD'].reshape((4, 5)) order = 3 osr = 256 nlev = 2 f0 = 0. Hinf = 1.25 form = 'CIFB' ntf = ds.synthesizeNTF(order, osr, 2, Hinf, f0) a1, g1, b1, c1 = ds.realizeNTF(ntf, form) a1_ref = [0.008863535715733, 0.093216950269955, 0.444473912607388] g1_ref = [9.035620546615189e-05] b1_ref = [0.008863535715733, 0.093216950269955, 0.444473912607388, 1.] c1_ref = [1., 1., 1.] self.assertTrue(np.allclose(a1, a1_ref, atol=1e-9, rtol=5e-5)) self.assertTrue(np.allclose(g1, g1_ref, atol=1e-9, rtol=5e-5)) self.assertTrue(np.allclose(b1, b1_ref, atol=1e-9, rtol=1e-4)) self.assertTrue(np.allclose(c1, c1_ref, atol=1e-9, rtol=2e-5)) ABCD = ds.stuffABCD(a1, g1, b1, c1, form) self.assertTrue(np.allclose(ABCD, ABCD_ref, atol=9e-5, rtol=1e-4)) snr, amp = ds.simulateSNR(ABCD, osr, None, f0, nlev) self.assertTrue(np.allclose(snr, snr_ref, atol=1e-5, rtol=1e-5)) self.assertTrue(np.allclose(amp, amp_ref, atol=1e-5, rtol=1e-5))
def test_simulateSNR_4(self): """Test function for simulateSNR() 4/4""" SNR_ref = np.array([23.0421, 32.1100, 43.3758, 53.1791, 65.5504, 70.5023, 73.4608, 76.2416, 77.8770, 78.2733, 79.3729, 79.5728, 80.8729, 82.7461, 83.0723, 84.8488, 84.3327]) AMP_ref = np.array([-70, -60, -50, -40, -30, -20, -15, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0]) order = 4 osr = 32 M = 8 NG = -50 ING = -10 f0 = 1./ 16 quadrature = 1 form = 'PFB' nlev = M + 1 z0 = np.exp(1j*2*np.pi*f0) bw = 1./ osr delta = 2 FullScale = M ntf0 = ds.synthesizeQNTF(order, osr, f0, NG, ING) ABCD = ds.realizeQNTF(ntf0, form, True) #print(ABCD) #ds.PlotExampleSpectrum(ntf0, M, osr, f0, quadrature=True) a, b = ds.simulateSNR(ABCD, osr, None, f0, nlev); assert np.allclose(a[6:], SNR_ref, atol=10, rtol=1e-3) assert np.allclose(b[5:], AMP_ref, atol=1)
def test_simulateSNR_2(self): """Test function for simulateSNR() 2/4""" # next test: f0 = 0 # Load test references fname = pkg_resources.resource_filename(__name__, "test_data/test_snr_amp2.mat") amp_ref = scipy.io.loadmat(fname)['amp'].reshape((-1, )) snr_ref = scipy.io.loadmat(fname)['snr'].reshape((-1, )) ABCD_ref = scipy.io.loadmat(fname)['ABCD'].reshape((4, 5)) order = 3 osr = 256 nlev = 2 f0 = 0. Hinf = 1.25 form = 'CIFB' ntf = ds.synthesizeNTF(order, osr, 2, Hinf, f0) a1, g1, b1, c1 = ds.realizeNTF(ntf, form) a1_ref = [0.008863535715733, 0.093216950269955, 0.444473912607388] g1_ref = [9.035620546615189e-05] b1_ref = [0.008863535715733, 0.093216950269955, 0.444473912607388, 1.] c1_ref = [1., 1., 1.] self.assertTrue(np.allclose(a1, a1_ref, atol=1e-9, rtol=5e-5)) self.assertTrue(np.allclose(g1, g1_ref, atol=1e-9, rtol=5e-5)) self.assertTrue(np.allclose(b1, b1_ref, atol=1e-9, rtol=1e-4)) self.assertTrue(np.allclose(c1, c1_ref, atol=1e-9, rtol=2e-5)) ABCD = ds.stuffABCD(a1, g1, b1, c1, form) self.assertTrue(np.allclose(ABCD, ABCD_ref, atol=9e-5, rtol=1e-4)) snr, amp = ds.simulateSNR(ABCD, osr, None, f0, nlev) self.assertTrue(np.allclose(snr, snr_ref, atol=1e-5, rtol=1e-5)) self.assertTrue(np.allclose(amp, amp_ref, atol=1e-5, rtol=1e-5))
def test_simulateSNR_4(self): """Test function for simulateSNR() 4/4""" SNR_ref = np.array([ 23.0421, 32.1100, 43.3758, 53.1791, 65.5504, 70.5023, 73.4608, 76.2416, 77.8770, 78.2733, 79.3729, 79.5728, 80.8729, 82.7461, 83.0723, 84.8488, 84.3327 ]) AMP_ref = np.array([ -70, -60, -50, -40, -30, -20, -15, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0 ]) order = 4 osr = 32 M = 8 NG = -50 ING = -10 f0 = 1. / 16 quadrature = 1 form = 'PFB' nlev = M + 1 z0 = np.exp(1j * 2 * np.pi * f0) bw = 1. / osr delta = 2 FullScale = M ntf0 = ds.synthesizeQNTF(order, osr, f0, NG, ING) ABCD = ds.realizeQNTF(ntf0, form, True) #print(ABCD) #ds.PlotExampleSpectrum(ntf0, M, osr, f0, quadrature=True) a, b = ds.simulateSNR(ABCD, osr, None, f0, nlev) assert np.allclose(a[6:], SNR_ref, atol=10, rtol=1e-3) assert np.allclose(b[5:], AMP_ref, atol=1)
def test_simulateSNR_3(self): """Test function for simulateSNR() 3/4""" # next test: amp is a scalar fname = pkg_resources.resource_filename(__name__, "test_data/test_snr_amp2.mat") amp_ref = scipy.io.loadmat(fname)['amp'].reshape((-1,))[0] snr_ref = scipy.io.loadmat(fname)['snr'].reshape((-1,))[0] ABCD = scipy.io.loadmat(fname)['ABCD'].reshape((4, 5)) order = 3 osr = 256 nlev = 2 f0 = 0. Hinf = 1.25 form = 'CIFB' ntf = ds.synthesizeNTF(order, osr, 2, Hinf, f0) snr, amp = ds.simulateSNR(ABCD, osr, amp_ref, f0, nlev) self.assertTrue(np.allclose(snr, snr_ref, atol=1e-5, rtol=1e-5)) self.assertTrue(np.allclose(amp, amp_ref, atol=1e-5, rtol=1e-5))
def test_simulateSNR_3(self): """Test function for simulateSNR() 3/4""" # next test: amp is a scalar fname = pkg_resources.resource_filename(__name__, "test_data/test_snr_amp2.mat") amp_ref = scipy.io.loadmat(fname)['amp'].reshape((-1, ))[0] snr_ref = scipy.io.loadmat(fname)['snr'].reshape((-1, ))[0] ABCD = scipy.io.loadmat(fname)['ABCD'].reshape((4, 5)) order = 3 osr = 256 nlev = 2 f0 = 0. Hinf = 1.25 form = 'CIFB' ntf = ds.synthesizeNTF(order, osr, 2, Hinf, f0) snr, amp = ds.simulateSNR(ABCD, osr, amp_ref, f0, nlev) self.assertTrue(np.allclose(snr, snr_ref, atol=1e-5, rtol=1e-5)) self.assertTrue(np.allclose(amp, amp_ref, atol=1e-5, rtol=1e-5))