Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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));
        }