biterror.c
上传用户:tsjrly
上传日期:2021-02-19
资源大小:107k
文件大小:2k
源码类别:

语音压缩

开发平台:

C/C++

  1. /**************************************************************************
  2. *
  3. * ROUTINE
  4. *               biterror
  5. *
  6. * FUNCTION
  7. *
  8. *               introduce random errors in CELP bitstream
  9. *
  10. * SYNOPSIS
  11. *               biterror(ber,mask,stream,streambits,error,total)
  12. *
  13. *   formal
  14. *
  15. *                       data    I/O
  16. *       name            type    type    function
  17. *       -------------------------------------------------------------------
  18. *       ber float i bit error rate
  19. * mask int i error mask
  20. * stream short i/o array of binary bits to be corrupted
  21. * streambits int i number of bits in stream
  22. * error int o number of bits corrputed
  23. * total int o total number of bits through coder
  24. *
  25. ***************************************************************************
  26. *
  27. * CALLED BY
  28. *
  29. * celp
  30. *
  31. * CALLS
  32. *
  33. * random
  34. *
  35. ***************************************************************************
  36. *
  37. * DESCRIPTION
  38. * Bit errors are introduced into the array "stream" at a rate
  39. * "ber".  Individual bits may be reversed while protecting others by
  40. * setting bits of the mask array which is read at the beginning of
  41. * execution.
  42. * To protect a bit set mask(bit) = 1.  If this is
  43. * left at 0, the bit is subjected to reversal at the rate specified
  44. * by "ber".  (The protection scheme above is NOT a function of the
  45. * Hamming error control coding.)
  46. *
  47. **************************************************************************/
  48. #include <stdio.h>
  49. biterror(ber, mask, stream, streambits, error, total)
  50. float ber;
  51. int mask[], streambits, *error, *total;
  52. short stream[];
  53. {
  54.   float xx, rate;
  55.   int i;
  56. /* protection mask: read in */
  57.   rate = ber / 100.;
  58.   for (i = 0; i < streambits; i++)
  59.   {
  60.     xx = (random2() + 32768) / 65535.;
  61.     if (mask[i] == 0)
  62.     {
  63.       (*total)++;
  64.       if (xx < rate)
  65.       {
  66. stream[i] ^= 1;
  67. if (stream[i] != 0 && stream[i] != 1)
  68. {
  69.   fprintf(stderr, "biterror: bit stream not ones and zerosn");
  70.   exit(1);
  71. }
  72. (*error)++;
  73.       }
  74.     }
  75.   }
  76. }