/// <summary> /// Calculates IIR. /// </summary> /// <param name="sample">sample rate</param> /// <param name="pBiquad">BiquadCoefficients pointer</param> public void BiQuad(ref byte sample, BiquadCoefficients* pBiquad) { // compute result double result = pBiquad->a0 * sample + pBiquad->a1 * pBiquad->x1 + pBiquad->a2 * pBiquad->x2 - pBiquad->a3 * pBiquad->y1 - pBiquad->a4 * pBiquad->y2; // shift x1 to x2, sample to x1 pBiquad->x2 = pBiquad->x1; pBiquad->x1 = sample; // shift y1 to y2, result to y1 pBiquad->y2 = pBiquad->y1; pBiquad->y1 = result; sample = (byte)result; }
private static extern bool HeapFree(IntPtr hHeap, uint dwFlags, BiquadCoefficients* lpMem);
/// <summary>Release heap memory</summary> /// <param name="pmem">memory address</param> private void Free(BiquadCoefficients* b) { HeapFree(GetProcessHeap(), 0, b); }
/// <summary> /// /// </summary> /// <param name="b"></param> public void FreeMem(BiquadCoefficients* b) { Free(b); }