Ejemplo n.º 1
0
 /// <summary>
 /// Apply FIR filter on signal
 /// </summary>
 /// <param name="filter">FIR filter object</param>
 /// <param name="input">input signal</param>
 /// <returns>array of floating-point samples of filtered signal</returns>
 public static float[] ApplyFilter(this Filters.FIRFilter filter, float[] input)
 {
     float[] output = new float[input.Length];
     unsafe
     {
         float *y = stackalloc float[input.Length];
         libliquid.firfilt_apply(filter.Coefficients, filter.Coefficients.Length, input, input.Length, y);
         for (int i = 0; i < output.Length; i++)
         {
             output[i] = y[i];
         }
     }
     return(output);
 }
Ejemplo n.º 2
0
 /// <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 &lt; beta &lt; 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);
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Designs a Kaiser FIR filter
 /// </summary>
 /// <param name="n">filter length</param>
 /// <param name="fc">cut-off frequency</param>
 /// <param name="As">Stopband attenuation</param>
 /// <param name="mu">Fractional time delay</param>
 /// <returns>FIRFilter object containing prototype co-efficients</returns>
 public static Filters.FIRFilter DesignFIRKaiser(int n, float fc, float As, float mu, float _scale = 2)
 {
     float[] h = new float[n];
     unsafe
     {
         float *_h = stackalloc float[n];
         libliquid.liquid_firdes_kaiser(n, fc / _scale, As, mu, _h);
         for (int i = 0; i < n; i++)
         {
             h[i] = _h[i];
         }
     }
     Filters.FIRFilter f = new Filters.FIRFilter(h);
     return(f);
 }