/* * Academic License - for use in teaching, academic research, and meeting * course requirements at degree granting institutions only. Not for * government, commercial, or other organizational use. * * descrambler.c * * Code generation for function 'descrambler' * */ /* Include files */ #include #include #include "descrambler.h" /* Function Definitions */ void descramble(double *value, double t, const double B1[9], const double A1[9], const double B2[19], const double A2[19], double Z1[8], double Z2[18]) { double b[9]; double a[9]; double a1; int k; double zf[8]; double b_b[19]; double b_a[19]; double b_zf[18]; /* Filter to remove 8kHz tone */ memcpy(&b[0], &B1[0], 9U * sizeof(double)); memcpy(&a[0], &A1[0], 9U * sizeof(double)); a1 = A1[0]; if ((!(A1[0] == 0.0)) && (A1[0] != 1.0)) { for (k = 0; k < 9; k++) { b[k] /= a1; } for (k = 0; k < 8; k++) { a[k + 1] /= a1; } a[0] = 1.0; } memset(&zf[0], 0, sizeof(double) << 3); a1 = Z1[0] + *value * b[0]; for (k = 0; k < 7; k++) { zf[k] = Z1[k + 1]; } for (k = 0; k < 8; k++) { Z1[k] = (zf[k] + *value * b[k + 1]) + -a1 * a[k + 1]; } /* Shifting by 7kHz */ *value = a1 * 2.0 * sin(6.2831853071795862 * t * 7000.0); /* Low pass filter */ memcpy(&b_b[0], &B2[0], 19U * sizeof(double)); memcpy(&b_a[0], &A2[0], 19U * sizeof(double)); a1 = A2[0]; if ((!(A2[0] == 0.0)) && (A2[0] != 1.0)) { for (k = 0; k < 19; k++) { b_b[k] /= a1; } for (k = 0; k < 18; k++) { b_a[k + 1] /= a1; } b_a[0] = 1.0; } memset(&b_zf[0], 0, 18U * sizeof(double)); a1 = Z2[0] + *value * b_b[0]; memcpy(&b_zf[0], &Z2[1], 17U * sizeof(double)); for (k = 0; k < 18; k++) { Z2[k] = (b_zf[k] + *value * b_b[k + 1]) + -a1 * b_a[k + 1]; } *value = a1; } /* End of code generation (descrambler.c) */