/// <summary> /// Calculate autocorrelation data and reflection coefficients. /// Can be used to incrementaly compute coefficients for higher orders, /// because it caches them. /// </summary> /// <param name="order">Maximum order</param> /// <param name="samples">Samples pointer</param> /// <param name="blocksize">Block size</param> /// <param name="window">Window function</param> public void GetReflection(int order, int *samples, int blocksize, float *window) { if (autocorr_order > order) return; fixed(double *reff = Reflection, autoc = autocorr_values, err = prediction_error) { Lpc.Compute_autocorr(samples, blocksize, autocorr_order, order, autoc, window); Lpc.Compute_schur_reflection(autoc, (uint)order, reff, err); autocorr_order = order + 1; } }
public void ComputeReflection(int order, double *autocorr) { fixed(double *reff = Reflection, autoc = autocorr_values, err = prediction_error) { for (int i = 0; i <= order; i++) { autoc[i] = autocorr[i]; } Lpc.Compute_schur_reflection(autoc, (uint)order, reff, err); autocorr_order = order + 1; } }
/// <summary> /// Produces LPC coefficients from autocorrelation data. /// </summary> /// <param name="lpcs">LPC coefficients buffer (for all orders)</param> public void ComputeLPC(float *lpcs) { fixed(double *reff = Reflection) Lpc.Compute_lpc_coefs((uint)autocorr_order - 1, reff, lpcs); }