public SDL_Timer() { double tfreq = 1000000.0 / FrameTicks; loop_error = Calc.recfilter_init(tfreq, 0.1); Calc.PFD_init(ref phase_detector, 0.0); }
public static void recfilter_setlast(ref recfilter f, double val) { f.lastval = val; if (f.peak_detect != 0) { _recfilter_peak_detect(ref f); } }
public static double recfilter_apply_int(ref recfilter f, int x) { f.lastval = f.a * (double)(x) + f.b * f.lastval; if (f.peak_detect != 0) { _recfilter_peak_detect(ref f); } return(f.lastval); }
public static double recfilter_apply(ref recfilter f, double x) { f.lastval = f.a * x + f.b * f.lastval; if (f.peak_detect != 0) { _recfilter_peak_detect(ref f); } return(f.lastval); }
private static void _recfilter_peak_detect(ref recfilter f) { if (f.lastval > f.maxval) { f.maxval = f.lastval; } if (f.lastval < f.minval) { f.minval = f.maxval; } }
public static recfilter recfilter_init(double Fs, double Fc) { recfilter f = new recfilter(); if (Fs < Fc * 2.0) { throw new InvalidOperationException($"recfilter_init: cutoff frequency ({Fc:N1}) should be less than half of the sampling rate ({Fs:N1})"); } f.b = Math.Exp(-2.0 * Math.PI * Fc / Fs); f.a = 1.0 - f.b; return(f); }
public static void recfilter_peak_detect(ref recfilter f) { f.peak_detect = 1; f.maxval = f.lastval; f.minval = f.lastval; }
public static double recfilter_getlast(ref recfilter f) { return(f.lastval); }