2 DURBIN Name: DURBIN Type: Assembler Program Version: 1.0 Date Entered: 10-Nov-87 Last Change: 10-Nov-87 Description: Durbin Solution for LPC Coefficients in Floating Point This program uses the the DURBIN algorithm to find a set of linear predictive coefficients (LPC) given an autocorrelation vector. This program uses the floating point library (FPLIB) to perform the calculations. LPC coefficients can be used in speech analysis/synthesis systems such as: vocoding, stochastic speech coding, multipulse speech coding, speech recognition, etc. Approximate execution time for ten LPC coefficients on DURBIN using a 20.5 Mhz DSP56000/1 is 855 microseconds. Since the description of the DURBIN algorithm is beyond the scope of this help file, only the method of coding the algorithm from a FORTRAN program is given. A complete description of the DURBIN algorithm is given in ref. 1 and a FORTRAN program is shown below: DIMENSION R(0:10),ALPHA(10) DOUBLE PRECISION Q DATA R/1.0,.65,.6,.5,.1,.1,-.05,-.03,-.05,-.07,.01/ CALL DURBIN(R,ALPHA,10) PRINT *,ALPHA END C C DURBINS RECURSIVE SOLUTION OF AR ESTIMATE C SUBROUTINE DURBIN(RN,ALPHA,NCOEF) DIMENSION RN(0:*),ALPHA(*),ANEW(100) REAL K E=RN(0) ALPHA(1)=RN(1)/E E=(1.0-ALPHA(1)*ALPHA(1))*E DO 1000 I=2,NCOEF SUM=0 DO 10 J=1,I-1 10 SUM=SUM+ALPHA(J)*RN(I-J) K=(RN(I)-SUM)/E ALPHA(I)=K DO 40 J=1,I-1 40 ANEW(J)=ALPHA(J)-K*ALPHA(I-J) DO 70 J=1,I-1 70 ALPHA(J)=ANEW(J) E=(1.0-K*K)*E 1000 CONTINUE RETURN END The program can be slightly rearranged as shown below: DIMENSION R(0:10),ALPHA(10) DOUBLE PRECISION Q DATA R/1.0,.65,.6,.5,.1,.1,-.05,-.03,-.05,-.07,.01/ CALL DURBIN(R,ALPHA,10) PRINT *,ALPHA END C C DURBINS RECURSIVE SOLUTION OF AR ESTIMATE C SUBROUTINE DURBIN(RN,ALPHA,NCOEF) DIMENSION RN(0:*),ALPHA(*),ANEW(100) REAL K E=RN(0) ALPHA(1)=RN(1)/E E=(1.0-ALPHA(1)*ALPHA(1))*E I=2 M=1 DO 1000 IXX=1,NCOEF-1 SUM=0 IPTR=M DO 10 J=1,M SUM=SUM+ALPHA(J)*RN(IPTR) IPTR=IPTR-1 10 CONTINUE K=(RN(I)-SUM)/E ALPHA(I)=K IPTR=M DO 40 J=1,M ANEW(J)=ALPHA(J)-K*ALPHA(IPTR) IPTR=IPTR-1 40 CONTINUE DO 70 J=1,M 70 ALPHA(J)=ANEW(J) E=(1.0-K*K)*E I=I+1 M=M+1 1000 CONTINUE RETURN END The second version is easier to implement on the DSP56000. The assembly program DURBIN.ASM is directly coded from the second FORTRAN program. References ---------- 1. "Digital Processing of Speech Signals", L.R. Rabiner,R.W.Schafer