/// <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); }
protected static extern void halfcomplex_wavetable_free(ref halfcomplex_wavetable wavetable);