public void CreationTest() { const double fd = 100; const double dt = 1 / fd; const double f0 = 10; var rc = new HighPassRC(f0, dt); var a = rc.A; var b = rc.B; Assert.AreEqual(2, a.Count); Assert.AreEqual(2, b.Count); var a0 = a[0]; var a1 = a[1]; var b0 = b[0]; var b1 = b[1]; var w0 = Tan(PI * f0 * dt); Assert.AreEqual(1 / (w0 + 1), b0 / a0); Assert.AreEqual(-1 / (w0 + 1), b1 / a0); //Assert.AreEqual(1, a0 / a0); Assert.AreEqual((w0 - 1) / (w0 + 1), a1 / a0); Assert.That.Value(b0).IsEqual(1); Assert.That.Value(b1).IsEqual(-1); Assert.That.Value(a0).IsEqual(w0 + 1); Assert.That.Value(a1).IsEqual(w0 - 1); }
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); }
public void ProcessSignalAtCutOffFrequencyTestTest() { const double fd = 100; const double dt = 1 / fd; const double f0 = 10; const double eps = 3.02e-4; const double A0 = Consts.sqrt_2; var x0 = new SamplesDigitalSignal(dt, 1024, t => A0 * Cos(2 * PI * f0 * t)); var x0_power = x0.Power; Assert.AreEqual(1, x0_power, eps); var rc = new HighPassRC(f0, dt); var y0 = rc.Process(x0); var y0_power = y0.Power; Assert.AreEqual(x0_power / 2, y0_power, eps); }
public void ImpulseResponseTest() { const double fd = 100; const double dt = 1 / fd; const double f0 = 10; var rc = new HighPassRC(f0, dt); var a = rc.A; var b = rc.B; var a0 = a[0]; var a1 = a[1] / a0; var b0 = b[0] / a0; var b1 = b[1] / a0; var expected_impulse_response = new List <double> { b0, b0 * -a1 + b1, b0 * -a1 * -a1 + b1 * -a1, b0 * -a1 * -a1 * -a1 + b1 * -a1 * -a1, b0 * -a1 * -a1 * -a1 * -a1 + b1 * -a1 * -a1 * -a1, b0 * -a1 * -a1 * -a1 * -a1 * -a1 + b1 * -a1 * -a1 * -a1 * -a1, }; var delta = new double[expected_impulse_response.Count]; delta[0] = 1; var impulse_response = rc.Process(delta).ToArray(); const double eps = 1.11023e-16; CollectionAssert.AreEqual(expected_impulse_response, impulse_response, GetComparer(eps)); }