Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
 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);
 }