public void When_DecayingNegative_Expect_Reference() { var sweep = new OctaveSweep(-102.4, -0.1, 1); var expected = new[] { -102.4, -51.2, -25.6, -12.8, -6.4, -3.2, -1.6, -0.8, -0.4, -0.2, -0.1 }; var index = 0; foreach (var c in sweep) { Assert.AreEqual(expected[index++], c, 1e-9); } Assert.AreEqual(index, expected.Length); }
public void When_Exponential_Expect_Reference() { var sweep = new OctaveSweep(0.1, 102.4, 1); var expected = new[] { 0.1, 0.2, 0.4, 0.8, 1.6, 3.2, 6.4, 12.8, 25.6, 51.2, 102.4 }; var index = 0; foreach (var c in sweep) { Assert.AreEqual(expected[index++], c, 1e-9); } Assert.AreEqual(index, expected.Length); }
public void When_Decaying_Expect_Reference() { var sweep = new OctaveSweep(102.4, 0.1, 1); var expected = new[] { 102.4, 51.2, 25.6, 12.8, 6.4, 3.2, 1.6, 0.8, 0.4, 0.2, 0.1 }; var index = 0; foreach (var c in sweep) { Assert.AreEqual(expected[index++], c, 1e-9); } Assert.AreEqual(index, expected.Length); }
private Noise CreateNoiseSimulation(string name, Control statement, ICircuitContext context) { Noise noise = null; // Check parameter count switch (statement.Parameters.Count) { case 0: context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, "SpiceModel expected for .NOISE", statement.LineInfo)); return(null); case 1: context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, "Source expected", statement.LineInfo)); return(null); case 2: context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, "Step type expected", statement.LineInfo)); return(null); case 3: context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, "Number of points expected", statement.LineInfo)); return(null); case 4: context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, "Starting frequency expected", statement.LineInfo)); return(null); case 5: context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, "Stopping frequency expected", statement.LineInfo)); return(null); case 6: break; case 7: break; default: context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, "Too many parameters for .NOISE", statement.LineInfo)); return(null); } string type = statement.Parameters.Get(2).Image; var numberSteps = context.Evaluator.EvaluateDouble(statement.Parameters.Get(3)); var start = context.Evaluator.EvaluateDouble(statement.Parameters.Get(4)); var stop = context.Evaluator.EvaluateDouble(statement.Parameters.Get(5)); Sweep <double> sweep; switch (type) { case "lin": sweep = new LinearSweep(start, stop, (int)numberSteps); break; case "oct": sweep = new OctaveSweep(start, stop, (int)numberSteps); break; case "dec": sweep = new DecadeSweep(start, stop, (int)numberSteps); break; default: context.Result.Validation.Add(new ValidationEntry(ValidationEntrySource.Reader, ValidationEntryLevel.Warning, "LIN, DEC or OCT expected", statement.LineInfo)); return(null); } // The first parameters needs to specify the output voltage if (statement.Parameters[0] is BracketParameter bracket) { if (bracket.Name.ToLower() == "v") { switch (bracket.Parameters.Count) { // V(A, B) - V(vector) // V(A) - V(singleParameter) case 1: if (bracket.Parameters[0] is VectorParameter v && v.Elements.Count == 2) { var output = v.Elements[0].Image; var reference = v.Elements[1].Image; var input = statement.Parameters[2].Image; noise = new Noise(name, output, reference, input, sweep); } else if (bracket.Parameters[0] is SingleParameter s) { var output = s.Image; var input = statement.Parameters[1].Image; noise = new Noise(name, output, input, sweep); } break;