/// <summary> /// Design a Nyquist FIR filter /// </summary> /// <param name="type">filter type (e.g. kaiser, rrc etc.)</param> /// <param name="_k">samples/symbol</param> /// <param name="_m">symbol delay</param> /// <param name="_beta">rolloff factor (0 < beta < 1)</param> /// <param name="_dt">fractional sample delay</param> /// <returns>returns FIR filter having co-efficient vector of length (2*_k*_m+1)</returns> public static Filters.FIRFilter DesignFIR(FIR_Filter_Type type, int _k, int _m, float _beta, float _dt) { float[] h = new float[(2 * _k * _m + 1)]; unsafe { float *_h = stackalloc float[h.Length]; libliquid.liquid_firdes_prototype(type, _k, _m, _beta, _dt, _h); for (int i = 0; i < h.Length; i++) { h[i] = _h[i]; } } Filters.FIRFilter f = new Filters.FIRFilter(h); return(f); }
/// <summary> /// Design a Nyquist FIR filter /// </summary> /// <param name="int">filter type</param> /// <param name="_k">samples/symbol</param> /// <param name="_m">symbol delay</param> /// <param name="_beta">rolloff factor (0 < beta < 1)</param> /// <param name="_dt">fractional sample delay</param> /// <returns>returns FIR filter having co-efficient vector of length (2*_k*_m+1)</returns> public static Filters.FIRFilter DesignFIR(int type, int _k, int _m, float _beta, float _dt) { FIR_Filter_Type f = (FIR_Filter_Type)type; return(DesignFIR(f, _k, _m, _beta, _dt)); }