public static void SetResonantLowpassCoefficients( ResonantLowpassRec Filter, double Cutoff, double Bandwidth, double Gain, double SamplingRate) { if ((Cutoff == Filter.OldCutoff) && (Bandwidth == Filter.OldBandwidth) && (Gain == Filter.OldGain)) { return; } Filter.OldCutoff = Cutoff; Filter.OldBandwidth = Bandwidth; Filter.OldGain = Gain; if (Filter.NumLowpassSections != 0) { /* initialize first one */ ButterworthLowpassRec.ComputeButterworthLowpassCoefficients( ref Filter.iir[0], Cutoff, SamplingRate); /* copy to the others */ for (int i = 1; i < Filter.NumLowpassSections; i += 1) { Filter.iir[i].A0 = Filter.iir[0].A0; Filter.iir[i].A1 = Filter.iir[0].A1; Filter.iir[i].A2 = Filter.iir[0].A2; Filter.iir[i].B1 = Filter.iir[0].B1; Filter.iir[i].B2 = Filter.iir[0].B2; } } if (Filter.NumBandpassSections != 0) { /* initialize first one */ ButterworthBandpassRec.ComputeButterworthBandpassCoefficients( ref Filter.iir[Filter.NumLowpassSections + 0], Cutoff, Bandwidth, SamplingRate); /* copy to the others */ for (int i = 1; i < Filter.NumBandpassSections; i += 1) { Filter.iir[Filter.NumLowpassSections + i].A0 = Filter.iir[Filter.NumLowpassSections + 0].A0; Filter.iir[Filter.NumLowpassSections + i].A1 = Filter.iir[Filter.NumLowpassSections + 0].A1; Filter.iir[Filter.NumLowpassSections + i].A2 = Filter.iir[Filter.NumLowpassSections + 0].A2; Filter.iir[Filter.NumLowpassSections + i].B1 = Filter.iir[Filter.NumLowpassSections + 0].B1; Filter.iir[Filter.NumLowpassSections + i].B2 = Filter.iir[Filter.NumLowpassSections + 0].B2; } } Filter.BandpassGain = (float)Gain; }
public static void SetButterworthLowpassCoefficients( ButterworthLowpassRec Filter, double Cutoff, double SamplingRate) { if (Cutoff == Filter.OldCutoff) { return; } Filter.OldCutoff = Cutoff; ComputeButterworthLowpassCoefficients( ref Filter.iir, Cutoff, SamplingRate); }
/* apply filter to an array of values, adding result to output array */ public void Apply( float[] XinVector, int XInVectorOffset, float[] YoutVector, int YoutVectorOffset, int VectorLength, float OutputScaling, SynthParamRec SynthParams) { ButterworthLowpassRec Filter = this; IIR2DirectIMAcc( ref Filter.iir, XinVector, XInVectorOffset, YoutVector, YoutVectorOffset, VectorLength, OutputScaling); }