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 <math.h>
  13. #include <string.h>
  14. #include "descrambler.h"
  15. /* Function Definitions */
  16. void descramble(double *value, double t, const double B1[9], const double A1[9],
  17. const double B2[19], const double A2[19], double Z1[8], double
  18. Z2[18])
  19. {
  20. double b[9];
  21. double a[9];
  22. double a1;
  23. int k;
  24. double zf[8];
  25. double b_b[19];
  26. double b_a[19];
  27. double b_zf[18];
  28. /* Filter to remove 8kHz tone */
  29. memcpy(&b[0], &B1[0], 9U * sizeof(double));
  30. memcpy(&a[0], &A1[0], 9U * sizeof(double));
  31. a1 = A1[0];
  32. if ((!(A1[0] == 0.0)) && (A1[0] != 1.0)) {
  33. for (k = 0; k < 9; k++) {
  34. b[k] /= a1;
  35. }
  36. for (k = 0; k < 8; k++) {
  37. a[k + 1] /= a1;
  38. }
  39. a[0] = 1.0;
  40. }
  41. memset(&zf[0], 0, sizeof(double) << 3);
  42. a1 = Z1[0] + *value * b[0];
  43. for (k = 0; k < 7; k++) {
  44. zf[k] = Z1[k + 1];
  45. }
  46. for (k = 0; k < 8; k++) {
  47. Z1[k] = (zf[k] + *value * b[k + 1]) + -a1 * a[k + 1];
  48. }
  49. /* Shifting by 7kHz */
  50. *value = a1 * 2.0 * sin(6.2831853071795862 * t * 7000.0);
  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. memset(&b_zf[0], 0, 18U * sizeof(double));
  65. a1 = Z2[0] + *value * b_b[0];
  66. memcpy(&b_zf[0], &Z2[1], 17U * sizeof(double));
  67. for (k = 0; k < 18; k++) {
  68. Z2[k] = (b_zf[k] + *value * b_b[k + 1]) + -a1 * b_a[k + 1];
  69. }
  70. *value = a1;
  71. }
  72. /* End of code generation (descrambler.c) */