public void SerialConnectionTest() { const double fd = 100; const double dt = 1 / fd; const double f0RC = 40; const double f0CR = 5; var RC = new LowPassRC(f0RC, dt); var CR = new HighPassRC(f0CR, dt); var filter = RC.ConnectionSerialTo(CR); var A = filter.A; var B = filter.B; double[] expected_a = { 1.53476636079571, -0.33307051181674, -0.568158087680825 }; double[] expected_b = { 1, 0, -1 }; CollectionAssert.AreEqual(expected_b, B); CollectionAssert.AreEqual(expected_a, A, GetComparer(1e-15)); void CheckTransmissionCoefficient(double f) { var H = filter.GetTransmissionCoefficient(f, dt); var HRC = RC.GetTransmissionCoefficient(f, dt); var HCR = CR.GetTransmissionCoefficient(f, dt); var delta = HRC * HCR - H; const double eps = 1.25e-15; Assert.That.Value(delta.Abs).IsEqual(0, eps); } CheckTransmissionCoefficient(0); CheckTransmissionCoefficient(f0RC); CheckTransmissionCoefficient(f0CR); CheckTransmissionCoefficient(fd / 2); var H0 = filter.GetTransmissionCoefficient(0, dt); var Hf0RC = filter.GetTransmissionCoefficient(f0RC, dt); var Hf0CR = filter.GetTransmissionCoefficient(f0CR, dt); var Hfd05 = filter.GetTransmissionCoefficient(fd / 2, dt); Assert.AreEqual(0, H0.Abs); Assert.AreEqual(0, Hfd05.Abs, 1.89e-16); Assert.AreEqual(0, H0.Arg); Assert.AreEqual(-Math.PI / 2, Hfd05.Arg); Assert.That.Value(Hf0RC.Abs).IsEqual(Consts.sqrt_2_inv, 9.35e-4); Assert.That.Value(Hf0CR.Abs).IsEqual(Consts.sqrt_2_inv, 9.35e-4); }
public void TransmissionCoefficientAtZerroFrequency() { const double fd = 100; const double dt = 1 / fd; const double f0 = 10; //const double eps = 3.02e-4; const double f = 0; var rc = new HighPassRC(f0, dt); var c = rc.GetTransmissionCoefficient(f, dt); Assert.That.Value(c.Abs).IsEqual(0); }
public void TransmissionCoefficientAtCutoffFrequency() { const double fd = 100; const double dt = 1 / fd; const double f0 = 10; //const double eps = 3.02e-4; const double f = f0; var rc = new HighPassRC(f0, dt); var c = rc.GetTransmissionCoefficient(f, dt); Assert.That.Value(c.Abs).IsEqual(Consts.sqrt_2_inv, 1e-14); Assert.That.Value(c.Arg * Consts.ToDeg).IsEqual(45); }
public void ParallelConnectionTest() { const double fd = 100; const double dt = 1 / fd; const double f0RC = 40; const double f0CR = 5; var RC = new LowPassRC(f0RC, dt); var CR = new HighPassRC(f0CR, dt); var filter = RC.ConnectionParallelTo(CR); var A = filter.A; var B = filter.B; double[] expected_a = { 1.53476636079571, -0.33307051181674, -0.568158087680825 }; double[] expected_b = { 1.241652068278721, -0.16653525590837, -0.758347931721279 }; CollectionAssert.AreEqual(expected_b, B, GetComparer(1e-15)); CollectionAssert.AreEqual(expected_a, A, GetComparer(1e-15)); void CheckTransmissionCoefficient(double f) { var H = filter.GetTransmissionCoefficient(f, dt); var HRC = RC.GetTransmissionCoefficient(f, dt); var HCR = CR.GetTransmissionCoefficient(f, dt); var delta = (HRC + HCR) / 2 - H; const double eps = 1.25e-15; Assert.That.Value(delta.Abs).IsEqual(0, eps); } CheckTransmissionCoefficient(0); CheckTransmissionCoefficient(f0RC); CheckTransmissionCoefficient(f0CR); CheckTransmissionCoefficient(fd / 2); }