Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        public void TransmissionCoefficientAtZeroFrequency()
        {
            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 LowPassRC(f0, dt);

            var c = rc.GetTransmissionCoefficient(f, dt);

            Assert.That.Value(c.Abs).IsEqual(1);
        }
Esempio n. 3
0
        public void TransmissionCoefficientAtCutoffFrequency()
        {
            const double fd  = 100;
            const double dt  = 1 / fd;
            const double f0  = 10;
            const double eps = 1e-14;
            const double f   = f0;

            var rc = new LowPassRC(f0, dt);

            var c = rc.GetTransmissionCoefficient(f, dt);

            Assert.That.Value(c.Abs).IsEqual(sqrt_2_inv, eps);
            Assert.That.Value(c.Arg * ToDeg).IsEqual(-45, eps);
        }
Esempio n. 4
0
        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);
        }