- /*
- * This strange sum + shift is an optimization for iir_y[0] * 0.668.
- * iir * 0.668 ~= (iir * 21) / 32 =
- * = (iir * 16) / 32 + (iir * 4) / 32 + iir / 32 =
- * = iir / 2 + iir / 8 + iir / 32 =
- * = iir >> 1 + iir >> 3 + iir >> 5
- */
- iir_y[1] = iir_x[0] + iir_x[1] + (iir_y[0] >> 1) + (iir_y[0] >> 3) + (iir_y[0] >> 5);
+ #if (CONFIG_AFSK_FILTER == AFSK_BUTTERWORTH)
+ af->iir_x[1] = ((int8_t)fifo_pop(&af->delay_fifo) * curr_sample) >> 2;
+ //af->iir_x[1] = ((int8_t)fifo_pop(&af->delay_fifo) * curr_sample) / 6.027339492;
+ #elif (CONFIG_AFSK_FILTER == AFSK_CHEBYSHEV)
+ af->iir_x[1] = ((int8_t)fifo_pop(&af->delay_fifo) * curr_sample) >> 2;
+ //af->iir_x[1] = ((int8_t)fifo_pop(&af->delay_fifo) * curr_sample) / 3.558147322;
+ #else
+ #error Filter type not found!
+ #endif
+
+ af->iir_y[0] = af->iir_y[1];
+
+ #if CONFIG_AFSK_FILTER == AFSK_BUTTERWORTH
+ /*
+ * This strange sum + shift is an optimization for af->iir_y[0] * 0.668.
+ * iir * 0.668 ~= (iir * 21) / 32 =
+ * = (iir * 16) / 32 + (iir * 4) / 32 + iir / 32 =
+ * = iir / 2 + iir / 8 + iir / 32 =
+ * = iir >> 1 + iir >> 3 + iir >> 5
+ */
+ af->iir_y[1] = af->iir_x[0] + af->iir_x[1] + (af->iir_y[0] >> 1) + (af->iir_y[0] >> 3) + (af->iir_y[0] >> 5);
+ //af->iir_y[1] = af->iir_x[0] + af->iir_x[1] + af->iir_y[0] * 0.6681786379;
+ #elif CONFIG_AFSK_FILTER == AFSK_CHEBYSHEV
+ /*
+ * This should be (af->iir_y[0] * 0.438) but
+ * (af->iir_y[0] >> 1) is a faster approximation :-)
+ */
+ af->iir_y[1] = af->iir_x[0] + af->iir_x[1] + (af->iir_y[0] >> 1);
+ //af->iir_y[1] = af->iir_x[0] + af->iir_x[1] + af->iir_y[0] * 0.4379097269;
+ #endif