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;
            }
Example #2
0
            public static void SetButterworthLowpassCoefficients(
                ButterworthLowpassRec Filter,
                double Cutoff,
                double SamplingRate)
            {
                if (Cutoff == Filter.OldCutoff)
                {
                    return;
                }
                Filter.OldCutoff = Cutoff;

                ComputeButterworthLowpassCoefficients(
                    ref Filter.iir,
                    Cutoff,
                    SamplingRate);
            }
Example #3
0
            /* 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);
            }