descrambler.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * Academic License - for use in teaching, academic research, and meeting
  3. * course requirements at degree granting institutions only. Not for
  4. * government, commercial, or other organizational use.
  5. *
  6. * descrambler.c
  7. *
  8. * Code generation for function 'descrambler'
  9. *
  10. */
  11. /* Include files */
  12. #include "descrambler.h"
  13. /* Function Definitions */
  14. static float b[9];
  15. static float a[9];
  16. static float a1;
  17. static int k;
  18. static float zf[8];
  19. //static double b_b[19];
  20. //static double b_a[19];
  21. //static double b_zf[18];
  22. void descramble(float *value, float sine, const float B1[9], const float A1[9],
  23. const float B2[19], const float A2[19], float Z1[8], float
  24. Z2[18])
  25. {
  26. /* Filter to remove 8kHz tone */
  27. memcpy(&b[0], &B1[0], 9U * sizeof(float));
  28. memcpy(&a[0], &A1[0], 9U * sizeof(float));
  29. a1 = A1[0];
  30. if ((!(A1[0] == 0.0)) && (A1[0] != 1.0)) {
  31. for (k = 0; k < 9; k++) {
  32. b[k] /= a1;
  33. }
  34. for (k = 0; k < 8; k++) {
  35. a[k + 1] /= a1;
  36. }
  37. a[0] = 1.0;
  38. }
  39. memset(&zf[0], 0, sizeof(float) << 3);
  40. a1 = Z1[0] + *value * b[0];
  41. for (k = 0; k < 7; k++) {
  42. zf[k] = Z1[k + 1];
  43. }
  44. for (k = 0; k < 8; k++) {
  45. Z1[k] = (zf[k] + *value * b[k + 1]) + -a1 * a[k + 1];
  46. }
  47. *value = a1;
  48. /* Shifting by 7kHz */
  49. // *value = a1 * sine;
  50. //
  51. // /* Low pass filter */
  52. // memcpy(&b_b[0], &B2[0], 19U * sizeof(double));
  53. // memcpy(&b_a[0], &A2[0], 19U * sizeof(double));
  54. // a1 = A2[0];
  55. // if ((!(A2[0] == 0.0)) && (A2[0] != 1.0)) {
  56. // for (k = 0; k < 19; k++) {
  57. // b_b[k] /= a1;
  58. // }
  59. // for (k = 0; k < 18; k++) {
  60. // b_a[k + 1] /= a1;
  61. // }
  62. // b_a[0] = 1.0;
  63. // }
  64. //
  65. // memset(&b_zf[0], 0, 18U * sizeof(double));
  66. // a1 = Z2[0] + *value * b_b[0];
  67. // memcpy(&b_zf[0], &Z2[1], 17U * sizeof(double));
  68. // for (k = 0; k < 18; k++) {
  69. // Z2[k] = (b_zf[k] + *value * b_b[k + 1]) + -a1 * b_a[k + 1];
  70. // }
  71. // *value = a1;
  72. }
  73. /* End of code generation (descrambler.c) */