Make your own free website on Tripod.com
Linear Prediction Analysis Programs

Return to Main Software Page

C
C-----------------------------------------------------------------------
C  MAIN PROGRAM: TEST PROGRAM FOR COVAR AND AUTO
C  AUTHORS:      A. H. GRAY, JR.  AND J. D. MARKEL
C      GRAY -    UNIV. OF CALIF., SANTA BARBARA, CA 93109
C      BOTH -    SIGNAL TECHNOLOGY, INC., 15 W. DE LA GUERRA STREET
C                SANTA BARBARA, CA 93101
C-----------------------------------------------------------------------
C
      DIMENSION X(100), A(21), RC(21)
      IOUTD = I1MACH(2)
      X(1) = 1.
      X(2) = 1.44
      X(3) = 1.44*X(2) - 1.26
      DO 10 J=4,40
        X(J) = 1.44*X(J-1) - 1.26*X(J-2) + .81*X(J-3)
  10  CONTINUE
9999  FORMAT (1X, I3, 2E15.6)
9998  FORMAT (1X, E12.6/)
      N = 40
      DO 20 M=2,3
        CALL COVAR(N, X, M, A, ALPHA, RC)
        MP = M + 1
        WRITE (IOUTD,9999) (I,A(I),RC(I),I=1,MP)
        WRITE (IOUTD,9998) ALPHA
        CALL AUTO(N, X, M, A, ALPHA, RC)
        WRITE (IOUTD,9999) (I,A(I),RC(I),I=1,MP)
        WRITE (IOUTD,9998) ALPHA
  20  CONTINUE
      DO 30 JB=1,40
        J = 44 - JB
        X(J) = X(J-3)
  30  CONTINUE
      DO 40 J=1,3
        JB = 43 + J
        X(J) = 0.
        X(JB) = 0.
  40  CONTINUE
      M = 3
      N = 46
      CALL COVAR(N, X, M, A, ALPHA, RC)
      MP = M + 1
      WRITE (IOUTD,9999) (I,A(I),RC(I),I=1,MP)
      WRITE (IOUTD,9998) ALPHA
      CALL AUTO(N, X, M, A, ALPHA, RC)
      WRITE (IOUTD,9999) (I,A(I),RC(I),I=1,MP)
      WRITE (IOUTD,9998) ALPHA
      STOP
      END
C
C-----------------------------------------------------------------------
C SUBROUTINE:  COVAR
C A SUBROUTINE FOR IMPLEMENTING THE COVARIANCE
C METHOD OF LINEAR PREDICTION ANALYSIS
C-----------------------------------------------------------------------
C
      SUBROUTINE COVAR(N, X, M, A, ALPHA, GRC)
C
C   INPUTS:   N - NO. OF DATA POINTS
C             X(N) - INPUT DATA SEQUENCE
C             M - ORDER OF FILTER (M<21, SEE NOTE*)
C  OUTPUTS:   A - FILTER COEFFICIENTS
C             ALPHA - RESIDUAL "ENERGY"
C             A - FILTER COEFFICIENTS
C             GRC - "GENERALIZED REFLECTION COEFFICIENTS",
C
C *PROGRAM LIMITED TO M=20, BECAUSE OF THE DIMENSIONS
C B(M*(M-1)/2), BETA(M), AND CC(M+1)
C
      DIMENSION X(1), A(1), GRC(1)
      DIMENSION B(190), BETA(20), CC(21)
      MP = M + 1
      MT = (MP*M)/2
      DO 10 J=1,MT
        B(J) = 0.
  10  CONTINUE
      ALPHA = 0.
      CC(1) = 0.
      CC(2) = 0.
      DO 20 NP=MP,N
        NP1 = NP - 1
        ALPHA = ALPHA + X(NP)*X(NP)
        CC(1) = CC(1) + X(NP)*X(NP1)
        CC(2) = CC(2) + X(NP1)*X(NP1)
  20  CONTINUE
      B(1) = 1.
      BETA(1) = CC(2)
      GRC(1) = -CC(1)/CC(2)
      A(1) = 1.
      A(2) = GRC(1)
      ALPHA = ALPHA + GRC(1)*CC(1)
      MF = M
      DO 130 MINC=2,MF
        DO 30 J=1,MINC
          JP = MINC + 2 - J
          N1 = MP + 1 - JP
          N2 = N + 1 - MINC
          N3 = N + 2 - JP
          N4 = MP - MINC
          CC(JP) = CC(JP-1) + X(N4)*X(N1) - X(N2)*X(N3)
  30    CONTINUE
        CC(1) = 0.
        DO 40 NP=MP,N
          N1 = NP - MINC
          CC(1) = CC(1) + X(N1)*X(NP)
  40    CONTINUE
        MSUB = (MINC*MINC-MINC)/2
        MM1 = MINC - 1
        N1 = MSUB + MINC
        B(N1) = 1.
        DO 80 IP=1,MM1
          ISUB = (IP*IP-IP)/2
          IF (BETA(IP)) 150, 150, 50
  50      GAM = 0.
          DO 60 J=1,IP
            N1 = ISUB + J
            GAM = GAM + CC(J+1)*B(N1)
  60      CONTINUE
          GAM = GAM/BETA(IP)
          DO 70 JP=1,IP
            N1 = MSUB + JP
            N2 = ISUB + JP
            B(N1) = B(N1) - GAM*B(N2)
  70      CONTINUE
  80    CONTINUE
        BETA(MINC) = 0.
        DO 90 J=1,MINC
          N1 = MSUB + J
          BETA(MINC) = BETA(MINC) + CC(J+1)*B(N1)
  90    CONTINUE
        IF (BETA(MINC)) 150, 150, 100
 100    S = 0.
        DO 110 IP=1,MINC
          S = S + CC(IP)*A(IP)
 110    CONTINUE
        GRC(MINC) = -S/BETA(MINC)
        DO 120 IP=2,MINC
          M2 = MSUB + IP - 1
          A(IP) = A(IP) + GRC(MINC)*B(M2)
 120    CONTINUE
        A(MINC+1) = GRC(MINC)
        S = GRC(MINC)*GRC(MINC)*BETA(MINC)
        ALPHA = ALPHA - S
        IF (ALPHA) 150, 150, 130
 130  CONTINUE
 140  RETURN
 150  CONTINUE
C
C WARNING - SINGULAR MATRIX
C
      IOUTD = I1MACH(2)
      WRITE (IOUTD,9999)
9999  FORMAT (34H WARNING - SINGULAR MATRIX - COVAR)
      GO TO 140
      END
C
C-----------------------------------------------------------------------
C SUBROUTINE:  AUTO
C A SUBROUTINE FOR IMPLEMENTING THE AUTOCORRELATION
C METHOD OF LINEAR PREDICTION ANALYSIS
C-----------------------------------------------------------------------
C
      SUBROUTINE AUTO(N, X, M, A, ALPHA, RC)
C
C   INPUTS:   N - NO. OF DATA POINTS
C             X(N) - INPUT DATA SEQUENCE
C             M - ORDER OF FILTER (M<21, SEE NOTE*)
C  OUTPUTS:   A - FILTER COEFFICIENTS
C             ALPHA - RESIDUAL "ENERGY"
C             RC - REFLECTION COEFFICIENTS
C
C *PROGRAM LIMITED TO M<21 BECAUSE OF DIMENSIONS OF R(.)
C
      DIMENSION X(1), A(1), RC(1)
      DIMENSION R(21)
      MP = M + 1
      DO 20 K=1,MP
        R(K) = 0.
        NK = N - K + 1
        DO 10 NP=1,NK
          N1 = NP + K - 1
          R(K) = R(K) + X(NP)*X(N1)
  10    CONTINUE
  20  CONTINUE
      RC(1) = -R(2)/R(1)
      A(1) = 1.
      A(2) = RC(1)
      ALPHA = R(1) + R(2)*RC(1)
      DO 50 MINC=2,M
        S = 0.
        DO 30 IP=1,MINC
          N1 = MINC - IP + 2
          S = S + R(N1)*A(IP)
  30    CONTINUE
        RC(MINC) = -S/ALPHA
        MH = MINC/2 + 1
        DO 40 IP=2,MH
          IB = MINC - IP + 2
          AT = A(IP) + RC(MINC)*A(IB)
          A(IB) = A(IB) + RC(MINC)*A(IP)
          A(IP) = AT
  40    CONTINUE
        A(MINC+1) = RC(MINC)
        ALPHA = ALPHA + RC(MINC)*S
        IF (ALPHA) 70, 70, 50
  50  CONTINUE
  60  RETURN
  70  CONTINUE
C
C WARNING - SINGULAR MATRIX
C
      IOUTD = I1MACH(2)
      WRITE (IOUTD,9999)
9999  FORMAT (33H WARNING - SINGULAR MATRIX - AUTO)
      GO TO 60
      END
C
Return to Main Software Page