⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pitsyn.f

📁 是个是LPC源代码
💻 F
字号:
********************************************************************	PITSYN Version 53*********************************************************************   Synthesize a single pitch epoch** Inputs:*  ORDER  - Synthesis order (number of RC's)*  VOICE  - Half frame voicing decisions*  PITCH  - Pitch*  RMS    - Energy*  RC     - Reflection coefficients*  LFRAME - Length of speech buffer* Outputs:*  IVUV   - Pitch epoch voicing decisions*  IPITI  - Pitch epoch length*  RMSI   - Pitch epoch energy*  RCI    - Pitch epoch RC's*  NOUT   - Number of pitch periods in this frame*  RATIO  - Previous to present energy ratio*  	SUBROUTINE PITSYN( ORDER, VOICE, PITCH, RMS, RC, LFRAME,     1  		   IVUV, IPITI, RMSI, RCI, NOUT, RATIO )	INCLUDE 'config.fh'	INTEGER ORDER, VOICE(2), PITCH, LFRAME	INTEGER IVUV(11), IPITI(11), NOUT	REAL RMS, RC(ORDER), RMSI(11), RCI(ORDER,11), RATIO	REAL RCO(MAXORD), YARC(MAXORD)	INTEGER I, J, LSAMP, IP, IPITO, ISTART, IVOICE, IVOICO	INTEGER JSAMP, JUSED, NL	REAL ALRN, ALRO, PROP	REAL RMSO, SLOPE, UVPIT, VFLAG, XXY	LOGICAL FIRST	DATA FIRST/.TRUE./	IF (RMS.LT.1) RMS = 1	IF (RMSO.LT.1) RMSO = 1	UVPIT = 0.0	RATIO = RMS/(RMSO+8.)	IF (FIRST) THEN	   LSAMP = 0	   IVOICE = VOICE(2)	   IF (IVOICE.EQ.0) PITCH = LFRAME/4	   NOUT = LFRAME/PITCH	   JSAMP = LFRAME - NOUT*PITCH	   DO I = 1,NOUT	      DO J = 1,ORDER	         RCI(J,I) = RC(J)	      END DO	      IVUV(I) = IVOICE	      IPITI(I) = PITCH	      RMSI(I) = RMS	   END DO	   FIRST = .FALSE.	ELSE	   VFLAG = 0	   LSAMP = LFRAME + JSAMP	   SLOPE = (PITCH-IPITO)/FLOAT(LSAMP)	   NOUT = 0	   JUSED = 0	   ISTART = 1	   IF ((VOICE(1).EQ.IVOICO).AND.(VOICE(2).EQ.VOICE(1))) THEN	      IF (VOICE(2).EQ.0) THEN* SSUV - -   0  ,  0  ,  0	         PITCH = LFRAME/4	         IPITO = PITCH	         IF( RATIO.GT.8 ) RMSO = RMS	      END IF* SSVC - -   1  ,  1  ,  1	      SLOPE = (PITCH-IPITO)/FLOAT(LSAMP)	      IVOICE = VOICE(2)	   ELSE	      IF (IVOICO.NE.1) THEN	         IF (IVOICO.EQ.VOICE(1)) THEN* UV2VC2 - -  0  ,  0  ,  1	            NL = LSAMP - LFRAME/4	         ELSE* UV2VC1 - -  0  ,  1  ,  1	            NL = LSAMP - 3*LFRAME/4	         ENDIF	         IPITI(1) = NL/2	         IPITI(2) = NL - IPITI(1)	         IVUV(1) = 0	         IVUV(2) = 0	         RMSI(1) = RMSO	         RMSI(2) = RMSO	         DO I = 1,ORDER	            RCI(I,1) = RCO(I)	            RCI(I,2) = RCO(I)	            RCO(I)   = RC(I)	         END DO	         SLOPE = 0	         NOUT = 2	         IPITO = PITCH	         JUSED = NL	         ISTART = NL + 1	         IVOICE = 1	      ELSE	         IF (IVOICO.NE.VOICE(1)) THEN* VC2UV1 - -   1  ,  0  ,  0	            LSAMP = LFRAME/4 + JSAMP	         ELSE* VC2UV2 - -   1  ,  1  ,  0	            LSAMP = 3*LFRAME/4 + JSAMP	         END IF	         DO I = 1,ORDER	            YARC(I) = RC(I)	            RC(I) = RCO(I)	         END DO	         IVOICE = 1	         SLOPE = 0.	         VFLAG = 1	      END IF	   END IF	   DO WHILE (.TRUE.)	      DO I = ISTART,LSAMP	         IP = IPITO + SLOPE*I + .5	         IF (UVPIT.NE.0.0) IP = UVPIT	         IF (IP.LE.I-JUSED) THEN	            NOUT = NOUT + 1		    IF (NOUT .GT. 11) STOP 'PITSYN: too many epochs'	            IPITI(NOUT) = IP	            PITCH = IP	            IVUV(NOUT) = IVOICE	            JUSED = JUSED + IP	            PROP = (JUSED-IP/2)/FLOAT(LSAMP)	            DO J = 1,ORDER	               ALRO = ALOG((1+RCO(J))/(1-RCO(J)))	               ALRN = ALOG((1+RC(J))/(1-RC(J)))	               XXY = ALRO + PROP*(ALRN-ALRO)	               XXY = EXP(XXY)	               RCI(J,NOUT) = (XXY-1)/(XXY+1)	            END DO	            RMSI(NOUT) = ALOG(RMSO) + PROP*(ALOG(RMS)-ALOG(RMSO))	            RMSI(NOUT) = EXP(RMSI(NOUT))	         END IF	      END DO	      IF (VFLAG.NE.1) GOTO 100	      VFLAG = 0	      ISTART = JUSED + 1	      LSAMP = LFRAME + JSAMP	      SLOPE = 0	      IVOICE = 0	      UVPIT = (LSAMP-ISTART)/2	      IF(UVPIT.GT.90) UVPIT = UVPIT/2	      RMSO = RMS	      DO I = 1,ORDER	         RC(I) = YARC(I)	         RCO(I) = YARC(I)	      END DO	   END DO100	   JSAMP = LSAMP - JUSED	END IF	IF (NOUT.NE.0) THEN	   IVOICO = VOICE(2)	   IPITO = PITCH	   RMSO = RMS	   DO I = 1,ORDER	      RCO(I) = RC(I)	   END DO	END IF	RETURN	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -