protected static double GetTransmigrationCoefficient(AnalogBasedFilter Filter, double f0, int N) { var x = f0 is 0d ? MathEnumerableSignal.Const(Filter.dt, N) : MathEnumerableSignal.Sin(Filter.dt, f0, N); var y = Filter.ProcessIndividual(x); //var vv = y.Samples.Select(v => new Vector2D(v.Time, v.Value)); return(y.Power / x.Power); }
private static void CheckBandStop(AnalogBasedFilter Filter, AnalogBasedFilter.Specification Specification, int N) { var kps_05 = GetTransmigrationCoefficient(Filter, Specification.fp + (Specification.fs - Specification.fp) / 2, N).In_dB_byPower(); Assert.That.Value(kps_05).LessThan(-Specification.Rp); var ks = GetTransmigrationCoefficient(Filter, Specification.fs, N).In_dB_byPower(); Assert.That.Value(ks).LessOrEqualsThan(-Specification.Rs); var df = Specification.fp / 10; for (var f0 = Specification.fs; f0 < Specification.fd / 2; f0 += df) { var k = GetTransmigrationCoefficient(Filter, f0, N).In_dB_byPower(); Assert.That.Value(k).LessThan(-Specification.Rs); } }
/// <summary>Проверка фильтра в полосе пропускания</summary> /// <param name="Filter">Проверяемый фильтр</param> /// <param name="Specification"></param> /// <param name="N"></param> private static void CheckBandPass(AnalogBasedFilter Filter, AnalogBasedFilter.Specification Specification, int N) { var k0 = GetTransmigrationCoefficient(Filter, 0, N).In_dB_byPower(); Assert.That.Value(k0).GreaterThan(-Specification.Rp); var df = Specification.fp / 10; for (var f0 = df; Specification.fp - f0 > df; f0 += df) { var k = GetTransmigrationCoefficient(Filter, f0, N).In_dB_byPower(); Assert.That.Value(k).GreaterThan(-Specification.Rp, 0.5, $"f0:{f0} fp:{Specification.fp}"); } var kp = GetTransmigrationCoefficient(Filter, Specification.fp, N).In_dB_byPower(); Assert.That.Value(kp).IsEqual(-Specification.Rp, 0.1); var kps_01 = GetTransmigrationCoefficient(Filter, Specification.fp + (Specification.fs - Specification.fp) / 10, N).In_dB_byPower(); Assert.That.Value(kps_01).LessThan(-Specification.Rp).GreaterThan(-Specification.Rs); }
protected static void CheckTransmissionGreaterThan(AnalogBasedFilter Filter, double Gdb, Interval Freq, double Accuracy = 0, int M = 100, int N = 10000) => CheckTransmissionGreaterThan(Filter, Gdb, Freq.Min, Freq.Max, Accuracy, M, N);