public static Complex[] fft2(float[] input, int N = 1024) { Complex[] retval = new Complex[N]; unsafe { libliquid.Complex *outPtr = stackalloc libliquid.Complex[N]; libliquid.fft2(input, input.Length, N, outPtr); for (int i = 0; i < N; i++) { retval[i] = new Complex(outPtr[i].real, outPtr[i].imag); } } return(retval); }
public static Dictionary <float, ComplexTypes.Complex> FrequencyResponse(FIRFilter filt, int Length = 512) { Dictionary <float, ComplexTypes.Complex> retval = new Dictionary <float, ComplexTypes.Complex>(); float[] f = new float[Length]; unsafe { libliquid.Complex *res = stackalloc libliquid.Complex[Length]; libliquid.fir_response(filt.Coefficients, filt.Coefficients.Length, f, res, Length); for (int i = 0; i < Length; i++) { retval.Add(f[i], libliquid.ToOSLComplex(res[i])); } } return(retval); }
public ComplexTypes.Complex[] Modulate(int[] symbols) { bool[] _cnt = symbols.Select(isValid).ToArray(); if (_cnt.Contains(true)) { throw new Exception("symbol value exceeds constellation size"); } ComplexTypes.Complex[] _out = new ComplexTypes.Complex[symbols.Length]; unsafe { libliquid.Complex *_out_tmp = stackalloc libliquid.Complex[symbols.Length]; libliquid.digital_modulate(this._scheme, symbols, symbols.Length, _out_tmp); for (int i = 0; i < symbols.Length; i++) { _out[i] = libliquid.ToOSLComplex(_out_tmp[i]); } } return(_out); }