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 }); }
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 }); }