Exemple #1
0
        /// <summary>
        /// FFT inverse
        /// </summary>
        /// <param name="data">half-complex frequency series</param>
        /// <returns>real time series</returns>
        public static double[] Inverse(IEnumerable <double> data)
        {
            uint numDp = (uint)data.Count();
            var  trans = data.ToArray();

            //buffer
            var work = new real_workspace(numDp);
            //real_wavetable real = new real_wavetable();
            var real = new real_wavetable(numDp);

            //transform
            var error = halfcomplex_inverse(trans, 1, numDp, real.IntPtr, work.IntPtr);

            checkError(error, nameof(Inverse));

            return(trans);
        }
Exemple #2
0
        /// <summary>
        /// Example Application - low pass filtering on square wave
        /// </summary>
        /// <param name="dataPrinter"></param>
        /// <returns></returns>
        public static double[] Test_Real(Action <double[], string> dataPrinter)
        {
            const uint n = 101;

            double[] data = new double[n];

            //build time domain real data
            for (int j = 0; j < n; j++)
            {
                data[j] = 0;
            }
            for (uint j = n / 3; j < 2 * n / 3; j++)
            {
                data[j] = 1;
            }
            //print data
            dataPrinter?.Invoke(data, "Input");

            //buffer
            var work = new real_workspace(n);
            //real_wavetable real = new real_wavetable();
            var real = new real_wavetable(n);

            //transform
            var error = real_transform(data, 1, n, real.IntPtr, work.IntPtr);

            checkError(error, nameof(Test_Real));

            //<<---- TEST ----
            //var dataC = new double[data.Length * 2];
            //halfcomplex_unpack(data, dataC, 1, n);

            //var z = new string[data.Length];
            //for (int i = 0; i < data.Length; i++) z[i] = $"{dataC[2 * i]} + {dataC[2 * i + 1]}I";
            //---- TEST ---->>


            //low pass
            for (int j = 11; j < n; j++)
            {
                data[j] = 0;
            }
            //<<---- TEST ----
            //var dataC = new double[data.Length * 2];
            //halfcomplex_unpack(data, dataC, 1, n);
            //var z = new string[data.Length];
            //for (int i = 0; i < data.Length; i++) z[i] = $"{dataC[2 * i]} + {dataC[2 * i + 1]}I";
            //---- TEST ---->>

            var hc = new halfcomplex_wavetable(n);

            //inverse transform
            error = halfcomplex_inverse(data, 1, n, hc.IntPtr, work.IntPtr);
            checkError(error, nameof(Test_Real));

            //print data
            dataPrinter?.Invoke(data, "Output");

            //
            //work.Dispose();

            return(data);
        }