Exemplo n.º 1
0
        private static void FeedbackTest1()
        {
            var lp = new AudioLib.TF.Lowpass1(10000);
            lp.SetParam(0, 1000);

            double omega = 0.008;
            double gain = 10;
            double bias = 0.00;
            double feedb = 0.1;
            Func<double, double> Amp = x => 0.8 * gain * Math.Tanh(gain * (x + bias)) + 0.2 * gain * x;

            var inp = Utils.Linspace(0, 1000, 1001);
            inp = inp.Select(x => Math.Sin(x * omega * 2 * Math.PI)).ToArray();

            var amped = inp.Select(x => Amp(x)).ToArray();

            var dxline = new double[inp.Length];
            var adjusted = new double[inp.Length];
            for (int i = 1; i < adjusted.Length; i++)
            {
                var dx = inp[i] - feedb * lp.Process(adjusted[i - 1]);
                //var dx = inp[i] - feedb * adjusted[i-1];
                dxline[i] = dx;
                adjusted[i] = Amp(dx);
                //adjusted[i] = lp.process(adjusted[i]);
            }

            var line = new Line(inp);

            var line2 = new Line(amped);
            line2.LinePen = System.Drawing.Pens.Red;
            line2.DotBrush = System.Drawing.Brushes.Red;

            var line3 = new Line(adjusted);
            line3.LinePen = System.Drawing.Pens.Blue;
            line3.DotBrush = System.Drawing.Brushes.Blue;

            var line4 = new Line(dxline);
            line4.LinePen = System.Drawing.Pens.Green;
            line4.DotBrush = System.Drawing.Brushes.Green;
            /*
            line.DrawDot = true;
            line.DrawLine = false;

            line2.DrawDot = true;
            line2.DrawLine = false;

            line3.DrawDot = true;
            line3.DrawLine = false;

            line4.DrawDot = true;
            line4.DrawLine = false;*/

            Plot.Plot.ShowPlot(new List<Line>() { line, line2, line3, line4 });
        }
Exemplo n.º 2
0
        private static void FeedbackTest1()
        {
            var lp = new AudioLib.TF.Lowpass1(10000);

            lp.SetParam(0, 1000);

            double omega = 0.008;
            double gain  = 10;
            double bias  = 0.00;
            double feedb = 0.1;
            Func <double, double> Amp = x => 0.8 * gain * Math.Tanh(gain * (x + bias)) + 0.2 * gain * x;


            var inp = Utils.Linspace(0, 1000, 1001);

            inp = inp.Select(x => Math.Sin(x * omega * 2 * Math.PI)).ToArray();

            var amped = inp.Select(x => Amp(x)).ToArray();

            var dxline   = new double[inp.Length];
            var adjusted = new double[inp.Length];

            for (int i = 1; i < adjusted.Length; i++)
            {
                var dx = inp[i] - feedb * lp.Process(adjusted[i - 1]);
                //var dx = inp[i] - feedb * adjusted[i-1];
                dxline[i]   = dx;
                adjusted[i] = Amp(dx);
                //adjusted[i] = lp.process(adjusted[i]);
            }

            var line = new Line(inp);

            var line2 = new Line(amped);

            line2.LinePen  = System.Drawing.Pens.Red;
            line2.DotBrush = System.Drawing.Brushes.Red;

            var line3 = new Line(adjusted);

            line3.LinePen  = System.Drawing.Pens.Blue;
            line3.DotBrush = System.Drawing.Brushes.Blue;

            var line4 = new Line(dxline);

            line4.LinePen  = System.Drawing.Pens.Green;
            line4.DotBrush = System.Drawing.Brushes.Green;

            /*
             * line.DrawDot = true;
             * line.DrawLine = false;
             *
             * line2.DrawDot = true;
             * line2.DrawLine = false;
             *
             * line3.DrawDot = true;
             * line3.DrawLine = false;
             *
             * line4.DrawDot = true;
             * line4.DrawLine = false;*/

            Plot.Plot.ShowPlot(new List <Line>()
            {
                line, line2, line3, line4
            });
        }