Esempio n. 1
0
        public void LowPass()
        {
            const double passbandFreq        = 2000 / _SamplingFrequency;
            const double stopbandFreq        = 2500 / _SamplingFrequency;
            const double passbandRipple      = 5;
            const double stopbandAttenuation = 6;

            var(eb, ea) = IirCoefficients.LowPass(passbandFreq, stopbandFreq, passbandRipple, stopbandAttenuation);

            var b = eb.ToArray();
            var a = ea.ToArray();

            var desiredB = new double[] { 0.09723679451225617, 0.09723679451225617 };
            var desiredA = new double[] { 1, -0.8055264109754877 };

            Assert.AreEqual(desiredB.Length, b.Length);
            Assert.AreEqual(desiredA.Length, a.Length);

            for (int i = 0; i < b.Length; i++)
            {
                Assert.AreEqual(desiredB[i], b[i], _Tolerance);
            }

            for (int i = 0; i < a.Length; i++)
            {
                Assert.AreEqual(desiredA[i], a[i], _Tolerance);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Create a filter to remove high frequencies in online processing scenarios.
        /// </summary>
        public static OnlineFilter CreateLowpass(ImpulseResponse mode, double sampleRate, double cutoffRate, int order)
        {
            if (mode == ImpulseResponse.Finite)
            {
                double[] c = FirCoefficients.LowPass(sampleRate, cutoffRate, order >> 1);
                return(new OnlineFirFilter(c));
            }

            if (mode == ImpulseResponse.Infinite)
            {
                // TODO: investigate (bandwidth)
                double[] c = IirCoefficients.LowPass(sampleRate, cutoffRate, cutoffRate);
                return(new OnlineIirFilter(c));
            }

            throw new ArgumentException("mode");
        }