biterror.f
上传用户:szhypcb168
上传日期:2007-01-06
资源大小:2187k
文件大小:2k
源码类别:

语音压缩

开发平台:

Unix_Linux

  1. c==========================================================================
  2. c
  3. c ROUTINE
  4. c               biterror
  5. c
  6. c FUNCTION
  7. c                
  8. c               introduce random errors in CELP bitstream
  9. c
  10. c SYNOPSIS
  11. c               biterror(ber,mask,frame,stream,streambits,error,total)
  12. c
  13. c   formal 
  14. c
  15. c                       data    I/O
  16. c       name            type    type    function
  17. c       -------------------------------------------------------------------
  18. c       ber real i bit error rate
  19. c mask int i error mask
  20. c frame int i frame number
  21. c stream int*2 i/o array of binary bits to be corrupted
  22. c streambits int i number of bits in stream
  23. c error int o number of bits corrputed
  24. c total int o total number of bits through coder
  25. c
  26. c==========================================================================
  27. c
  28. c DESCRIPTION
  29. c Bit errors are introduced into the array "stream" at a rate
  30. c "ber".  Individual bits may be reversed while protecting others by
  31. c setting bits of the mask array which is read at the beginning of 
  32. c execution.  
  33. c To protect a bit set mask(bit) = 1.  If this is 
  34. c left at 0, the bit is subjected to reversal at the rate specified
  35. c by "ber".  (The protection scheme above is NOT a function of the 
  36. c Hamming error control coding.)
  37. c
  38. c**************************************************************************
  39. c
  40. subroutine biterror(ber,mask,frame,stream,streambits,error,total)
  41. c
  42. implicit undefined(a-z)
  43. integer streambits
  44. integer frame,error,total
  45. integer*2 stream(streambits)
  46. real ber
  47. integer i, mask(172), random
  48. real xx, realrate, rate
  49. c
  50. c *** protection mask: read in
  51. c
  52. rate=ber/100.
  53. do 10 i=1, streambits
  54.    xx=(float(random()+32768))/65535.
  55.    if (mask(i) .eq. 0) then
  56.       total=total+1
  57.       if (xx .lt. rate) then
  58.  stream(i)=stream(i) .xor. 1
  59.          if (stream(i) .ne. 0 .and. stream(i) .ne. 1) then
  60.             stop ' biterror:  bit stream not ones and zeros'
  61.          end if
  62.          error=error+1
  63.          realrate=100.*float(error)/float(total)
  64. c          type 20,frame,i,realrate
  65. c20  format(' In frame number ',i5, ' error at bit ',
  66. c     1          i3,', current BER = ',f8.4,' %')
  67.       end if
  68.    end if
  69. 10 continue
  70. return
  71. end
  72.