/* * 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 "descrambler.h" /* Function Definitions */ static float b[9]; static float a[9]; static float a1; static int k; static float zf[8]; //static double b_b[19]; //static double b_a[19]; //static double b_zf[18]; void descramble(float *value, float sine, const float B1[9], const float A1[9], const float B2[19], const float A2[19], float Z1[8], float Z2[18]) { /* Filter to remove 8kHz tone */ memcpy(&b[0], &B1[0], 9U * sizeof(float)); memcpy(&a[0], &A1[0], 9U * sizeof(float)); 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(float) << 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]; } *value = a1; /* Shifting by 7kHz */ // *value = a1 * sine; // // /* 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) */