def test_predictSNR_1(self):
        """Test function for predictSNR() 1/3"""
        snr_ref = [-32.3447, -22.3447, -12.3447, -2.3447, 7.6553, 17.6553,
                   27.6553, 37.6552, 47.6545, 57.6475, 67.5768, 72.4043,
                   76.8266, 77.5913, 78.2773, 78.8451, 79.2116, 79.0974,
                   -np.Inf, -np.Inf, -np.Inf, -np.Inf, -np.Inf]
        amp_ref = [-120., -110., -100., -90., -80., -70., -60., -50., -40.,
                   -30, -20, -15, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1,
                   0]
        k0_ref = [1.6289, 1.6289, 1.6289, 1.6289, 1.6289, 1.6289,
                  1.6289, 1.6289, 1.6288, 1.6283, 1.6227, 1.6088,
                  1.5596, 1.5383, 1.5088, 1.4663, 1.4003, 1.2747,
                  0., 0., 0., 0., 0.]
        k1_ref = [1.6289, 1.6289, 1.6289, 1.6289, 1.6289, 1.6289,
                  1.6289, 1.6289, 1.6287, 1.6274, 1.6142, 1.5819,
                  1.4752, 1.4326, 1.3768, 1.3025, 1.1995, 1.0387,
                  0.3706, 0., 0., 0., 0.]
        sigma_e2_ref = [0.3634, 0.3634, 0.3634, 0.3634, 0.3634, 0.3634,
                   0.3634, 0.3634, 0.3634, 0.3634, 0.3634, 0.3631,
                   0.3607, 0.3591, 0.3566, 0.3525, 0.3459, 0.3352,
                   0.3178, 0., 0., 0., 0.]
        order = 5
        osr = 32
        f0 = 0
        Hinf = 1.5
        ntf = ds.synthesizeNTF(order, osr, 2, Hinf, f0)
        snr_pred, amp_pred, k0, k1, sigma_e2 = ds.predictSNR(ntf, osr, None, f0)

        # Delete garbage data
        for check in (np.isinf, np.isnan):
            i = check(snr_ref)
            snr_ref = np.delete(snr_ref, np.where(i))
            amp_ref = np.delete(amp_ref, np.where(i))
            i = check(snr_pred)
            snr_pred = np.delete(snr_pred, np.where(i))
            amp_pred = np.delete(amp_pred, np.where(i))

        self.assertTrue(np.allclose(snr_pred, snr_ref, atol=1e-2, rtol=1e-3))
        self.assertTrue(np.allclose(amp_pred, amp_ref, atol=1e-2, rtol=5e-4))
        self.assertTrue(np.allclose(k0, k0_ref, atol=1e-3, rtol=1e-2))
        self.assertTrue(np.allclose(k1, k1_ref, atol=1e-3, rtol=50e-2))
        self.assertTrue(np.allclose(sigma_e2, sigma_e2_ref, atol=1e-3, rtol=1e-2))
    def test_predictSNR_2(self):
        """Test function for predictSNR() 2/2"""
        snr_ref = [-54.7270, -53.5149, -52.3028, -51.0907, -49.8786, -48.6664,
                   -47.4543, -46.2422, -45.0301, -43.8180, -42.6058, -41.3937,
                   -40.1816, -38.9695, -37.7574, -36.5452, -35.3331, -34.1210,
                   -32.9089, -31.6967, -30.4846, -29.2725, -28.0604, -26.8483,
                   -25.6361, -24.4240, -23.2119, -21.9998, -20.7877, -19.5755,
                   -18.3634, -17.1513, -15.9392, -14.7270, -13.5149, -12.3028,
                   -11.0907, -9.8786, -8.6664, -7.4543, -6.2422, -5.0301,
                   -3.8180, -2.6058, -1.3937, -0.1816, 1.0305, 2.2426,
                   +3.4548, 4.6669, 5.8790, 7.0911, 8.3032, 9.5154,
                   +10.7275, 11.9396, 13.1517, 14.3638, 15.5759, 16.7881,
                   +18.0002, 19.2123, 20.4244, 21.6365, 22.8485, 24.0606,
                   +25.2727, 26.4847, 27.6967, 28.9087, 30.1206, 31.3324,
                   +32.5442, 33.7558, 34.9673, 36.1785, 37.3895, 38.6002,
                   +39.8103, 41.0198, 42.2285, 43.4360, 44.6421, 45.8462,
                   +47.0478, 48.2458, 49.4393, 50.6266, 51.8058, 52.9741,
                   +54.1277, 55.2617, 56.3694, 57.4405, 58.4607, 59.4074,
                   +60.2442, 60.9031, 61.2360, 60.8103]
        amp_ref = [-120.0000, -118.7879, -117.5758, -116.3636, -115.1515, -113.9394,
                   -112.7273, -111.5152, -110.3030, -109.0909, -107.8788, -106.6667,
                   -105.4545, -104.2424, -103.0303, -101.8182, -100.6061, -99.3939,
                    -98.1818, -96.9697, -95.7576, -94.5455, -93.3333, -92.1212,
                    -90.9091, -89.6970, -88.4848, -87.2727, -86.0606, -84.8485,
                    -83.6364, -82.4242, -81.2121, -80.0000, -78.7879, -77.5758,
                    -76.3636, -75.1515, -73.9394, -72.7273, -71.5152, -70.3030,
                    -69.0909, -67.8788, -66.6667, -65.4545, -64.2424, -63.0303,
                    -61.8182, -60.6061, -59.3939, -58.1818, -56.9697, -55.7576,
                    -54.5455, -53.3333, -52.1212, -50.9091, -49.6970, -48.4848,
                    -47.2727, -46.0606, -44.8485, -43.6364, -42.4242, -41.2121,
                    -40.0000, -38.7879, -37.5758, -36.3636, -35.1515, -33.9394,
                    -32.7273, -31.5152, -30.3030, -29.0909, -27.8788, -26.6667,
                    -25.4545, -24.2424, -23.0303, -21.8182, -20.6061, -19.3939,
                    -18.1818, -16.9697, -15.7576, -14.5455, -13.3333, -12.1212,
                    -10.9091, -9.6970, -8.4848, -7.2727, -6.0606, -4.8485,
                     -3.6364, -2.4242, -1.2121, 0.]
        k0_ref = [3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6300, 3.6300, 3.6300, 3.6300, 3.6299, 3.6299,
                  3.6298, 3.6298, 3.6297, 3.6295, 3.6293, 3.6291,
                  3.6287, 3.6283, 3.6277, 3.6270, 3.6260, 3.6246,
                  3.6228, 3.6205, 3.6173, 3.6131, 3.6075, 3.6000,
                  3.5899, 3.5762, 3.5576, 3.5320, 3.4961, 3.4447,
                  3.3690, 3.2518, 3.0562, 2.6817]
        k1_ref = [3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6301, 3.6301, 3.6301,
                  3.6301, 3.6301, 3.6301, 3.6300, 3.6300, 3.6300,
                  3.6300, 3.6299, 3.6299, 3.6298, 3.6297, 3.6296,
                  3.6295, 3.6293, 3.6290, 3.6286, 3.6282, 3.6275,
                  3.6267, 3.6256, 3.6242, 3.6223, 3.6198, 3.6164,
                  3.6120, 3.6062, 3.5984, 3.5881, 3.5744, 3.5561,
                  3.5318, 3.4993, 3.4557, 3.3969, 3.3171, 3.2075,
                  3.0547, 2.8367, 2.5142, 2.0040]
        sigma_e2_ref = [0.3634, 0.3634, 0.3634, 0.3634, 0.3634, 0.3634,
                        0.3634, 0.3634, 0.3634, 0.3634, 0.3634, 0.3634,
                        0.3634, 0.3634, 0.3634, 0.3634, 0.3634, 0.3634,
                        0.3634, 0.3634, 0.3634, 0.3634, 0.3634, 0.3634,
                        0.3634, 0.3634, 0.3634, 0.3634, 0.3634, 0.3634,
                        0.3634, 0.3634, 0.3634, 0.3634, 0.3634, 0.3634,
                        0.3634, 0.3634, 0.3634, 0.3634, 0.3634, 0.3634,
                        0.3634, 0.3634, 0.3634, 0.3634, 0.3634, 0.3634,
                        0.3634, 0.3634, 0.3634, 0.3634, 0.3634, 0.3634,
                        0.3634, 0.3634, 0.3634, 0.3634, 0.3634, 0.3634,
                        0.3634, 0.3634, 0.3634, 0.3634, 0.3634, 0.3634,
                        0.3634, 0.3634, 0.3634, 0.3634, 0.3634, 0.3634,
                        0.3634, 0.3634, 0.3634, 0.3634, 0.3634, 0.3634,
                        0.3634, 0.3634, 0.3634, 0.3634, 0.3634, 0.3634,
                        0.3634, 0.3633, 0.3633, 0.3633, 0.3633, 0.3632,
                        0.3630, 0.3628, 0.3624, 0.3616, 0.3603, 0.3579,
                        0.3536, 0.3459, 0.3319, 0.3059]

        amp = np.linspace(-120, 0, 100)
        order = 4
        osr = 64
        f0 = 0.333
        Hinf = 1.2

        ntf = ds.synthesizeNTF(order, osr, 2, Hinf, f0)
        snr_pred, amp_pred, k0, k1, sigma_e2 = ds.predictSNR(ntf, osr, amp, f0)

        # Delete garbage data
        for check in (np.isinf, np.isnan):
            i = check(snr_ref)
            snr_ref = np.delete(snr_ref, np.where(i))
            amp_ref = np.delete(amp_ref, np.where(i))
            i = check(snr_pred)
            snr_pred = np.delete(snr_pred, np.where(i))
            amp_pred = np.delete(amp_pred, np.where(i))

        self.assertTrue(np.allclose(snr_pred, snr_ref, atol=1e-2, rtol=1e-3))
        self.assertTrue(np.allclose(amp_pred, amp_ref, atol=1e-2, rtol=5e-4))
        self.assertTrue(np.allclose(k0, k0_ref, atol=1e-3, rtol=1e-2))
        self.assertTrue(np.allclose(k1, k1_ref, atol=1e-3, rtol=50e-2))
        self.assertTrue(np.allclose(sigma_e2, sigma_e2_ref, atol=1e-3, rtol=1e-2))