/// <summary> /// Apply IIR filter on a signal /// </summary> /// <param name="filter">IIR filter object</param> /// <param name="input">input signal</param> /// <returns>array of floating-point samples of filtered signal</returns> public static float[] ApplyFilter(this Filters.IIRFilter filter, float[] input) { float[] output = new float[input.Length]; int n = filter.Numerator.Length; int m = filter.Denominator.Length; unsafe { float[] y = new float[output.Length]; libliquid.iirfilt_apply(filter.Numerator, filter.Denominator, n, m, input, input.Length, y); for (int i = 0; i < output.Length; i++) { output[i] = y[i]; } } return(output); }
public static Sources.Signal ApplyFilter(this Filters.IIRFilter filter, Sources.Signal input) { double[] output = new double[input.Samples.Length]; int n = filter.Numerator.Length; int m = filter.Denominator.Length; unsafe { float[] y = new float[output.Length]; libliquid.iirfilt_apply(filter.Numerator, filter.Denominator, n, m, Misc.ToArray(input.Samples), input.Samples.Length, y); for (int i = 0; i < output.Length; i++) { if (float.IsInfinity(y[i]) || float.IsNaN(y[i])) { break; } output[i] = y[i]; } } return(new Sources.Signal(input.SamplingRate, output)); }