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

语音压缩

开发平台:

Unix_Linux

  1. C==========================================================================
  2. C
  3. C ROUTINE
  4. C               csub
  5. C
  6. C FUNCTION
  7. C               control routine to find optimal excitation
  8. C (adaptive and stochastic code book searches)
  9. C
  10. C SYNOPSIS
  11. C               subroutine csub(s,v,l,lp)
  12. C
  13. C   formal 
  14. C
  15. C                       data    I/O
  16. C       name            type    type    function
  17. C       -------------------------------------------------------------------
  18. C       s(l)            real    i       speech or residual segment
  19. C       v(l)            real    o       optimum excitation vector
  20. C       l               int     i       stochastic analysis frame size
  21. C lp int i adaptive (pitch) analysis frame size
  22. C
  23. C   global 
  24. C                       data    I/O
  25. C       name            type    type    function
  26. C       -------------------------------------------------------------------
  27. C  /ccsub/        see description include file
  28. #ifdef SUNGRAPH
  29. C  /sungraph_var/
  30. #endif
  31. C
  32. C==========================================================================
  33. C*-
  34.         subroutine csub(s,v,l,lp)
  35. implicit undefined(a-z)
  36. integer l, lp
  37. real s(l), v(l)
  38. include 'ccsub.com'
  39. convex #include "ccsub.com"
  40. #ifdef SUNGRAPH
  41. include 'sungraph_var.com'
  42. convex #include "sungraph_var.com"
  43. #endif
  44. c
  45. c *find the initial error without pitch VQ
  46. call setr(l,0.0,e0)
  47. call confg(s,l,d1a,d2a,d3a,d4a,0,1,1,1)
  48. call movefr(no+1,d2b,d2a)
  49. call movefr(no+1,d3b,d3a)
  50. call movefr(no+1,d4b,d4a)
  51. c
  52. c *find impulse response (h) of
  53. c *perceptual weighting filter
  54. call impulse(l)
  55. c
  56. c *norm of first error signal for const. exc.
  57. if (mxsw) call mexcite1(l)
  58. c
  59. c *pitch (adaptive code book) search
  60. c Get pp parameters every segment if lp = l.
  61. c If lp <> l then get pp parameters on odd segments.
  62. c
  63. if(lp .eq. l) then
  64.    call psearch(s, l)
  65. else
  66.    if(mod(nseg, 2) .eq. 1) call psearch(s, lp)
  67. end if
  68. #ifdef SUNGRAPH
  69. call save_sg(fndpp_e0_vid, e0, l,'save fndpp_e0_vid')
  70. #endif
  71. c
  72. c *find initial error with pitch VQ
  73.         call setr(l,0.0,e0)
  74.         call confg(s,l,d1a,d2a,d3a,d4a,1,1,1,1)
  75. #ifdef SUNGRAPH
  76. call save_sg(fndex_e0_vid, e0, l,'save fndex_e0_vid')
  77. #endif
  78. c
  79. c *norm of second error signal for const. exc.
  80. if (mxsw) call mexcite2(l)
  81. c
  82. c *stochastic code book search
  83.         call cbsearch(s,l,v)
  84. c
  85. c *update filter states
  86.         call movefr(l,v,e0)
  87.         call confg(s,l,d1b,d2b,d3b,d4b,1,1,1,1)
  88.         call movefr(idb,d1b,d1a)
  89.         call movefr(no+1,d2b,d2a)
  90.         call movefr(no+1,d3b,d3a)
  91.         call movefr(no+1,d4b,d4a)
  92.         return
  93.         end