home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l455 / 8.ddi / SIGNAL.DI$ / REMEZFG.F < prev    next >
Encoding:
Text File  |  1992-12-07  |  2.5 KB  |  97 lines

  1. C REMEZFG.FOR FRONT-END FOR REMEZ FILTER DESIGN PROGRAM
  2. C
  3. C This is an example of the FORTRAN code required for interfacing
  4. C a .MEX file to MATLAB.
  5. C
  6. C The calling syntax from an M file is:
  7. C
  8. C        h = remezf(nfilt, edge, fx, wtx, jtype)
  9. C
  10. C
  11. C Marc Ullman  June 22, 1987
  12. C Loren Shure  Oct. 5, 1987 revised
  13. C Copyright (C)  The Mathworks Inc.
  14. C All Rights Reserved
  15. C
  16. C This subroutine is the main gateway to MATLAB.  When a MEX function
  17. C  is executed MATLAB calls the USRFCN subroutine in the corresponding
  18. C  MEX file.
  19. C
  20. C DO NOT modify this subroutine declaration.
  21.  
  22.       SUBROUTINE MEXFUNCTION(NLHS, PLHS, NRHS, PRHS)
  23.       INTEGER NLHS, NRHS
  24.       INTEGER PLHS(*), PRHS(*)
  25.  
  26.       INTEGER*4 MXCREATEFULL, MXGETPR, MXGETM, MXGETN
  27.       REAL*8    MXGETSCALAR
  28.  
  29. C User should modify the following code to fit his requirements.
  30.  
  31.       INTEGER NFILT,JTYPE, NBANDS, LGRID, NFCNS
  32.       INTEGER EDGE, FX, WTX, H
  33.       REAL*8 EP(20), FP(10), WP(10), HP(66)
  34.       INTEGER M,N,MM,NN
  35.  
  36.       IF (NRHS .NE. 5) THEN
  37.         CALL MEXERRMSGTXT('REMEZF requires five input arguments')
  38.       ELSEIF (NLHS .NE. 1) THEN
  39.         CALL MEXERRMSGTXT('REMEZF requires one output argument')
  40.       ENDIF
  41.  
  42.       NFILT = INT(MXGETSCALAR(PRHS(1)))
  43.  
  44.       JTYPE = INT(MXGETSCALAR(PRHS(5)))
  45.  
  46.       M = MXGETM(PRHS(3))
  47.       N = MXGETN(PRHS(3))
  48.       NBANDS = MAX(M,N)
  49.       IF (MIN(M,N) .NE. 1) THEN
  50.         CALL MEXERRMSGTXT('REMEZF requires vector inputs')
  51.       ENDIF
  52.  
  53.       LGRID = 16
  54.  
  55.       MM = MXGETM(PRHS(4))
  56.       NN = MXGETN(PRHS(4))
  57.       IF ((MM .NE. M) .OR. (NN .NE. N)) THEN
  58.         CALL MEXERRMSGTXT(
  59.      x 'REMEZF requires that FX and WTX be consistent')
  60.       ENDIF
  61.  
  62.       MM = MXGETM(PRHS(2))
  63.       NN = MXGETN(PRHS(2))
  64.       IF ((MM .NE. M*2) .AND. (NN .NE. N*2)) THEN
  65.         CALL MEXERRMSGTXT(
  66.      x 'REMEZF requires that EDGE be consistent with FX')
  67.       ENDIF
  68.  
  69. C    PUT RHS INTO POINTERS
  70.  
  71.       EDGE = MXGETPR(PRHS(2))
  72.       FX   = MXGETPR(PRHS(3))
  73.       WTX  = MXGETPR(PRHS(4))
  74.  
  75. C    PUT POINTERS INTO FORTRAN ARRAYS
  76.  
  77.       CALL MXCOPYPTRTOREAL8(EDGE,EP,MM*NN)
  78.       MM = MXGETM(PRHS(3))
  79.       NN = MXGETN(PRHS(3))
  80.       CALL MXCOPYPTRTOREAL8(FX,FP,MM*NN)
  81.       MM = MXGETM(PRHS(4))
  82.       NN = MXGETN(PRHS(4))
  83.       CALL MXCOPYPTRTOREAL8(WTX,WP,MM*NN)
  84.  
  85.       NFCNS = NFILT/2
  86.       IF((NFILT - 2*NFCNS).EQ.1) NFCNS = NFCNS + 1
  87.       PLHS(1) = MXCREATEFULL(NFCNS, 1, 0)
  88.       H = MXGETPR(PLHS(1))
  89.  
  90.       CALL REMEZF (NFILT, JTYPE, NBANDS, LGRID, 
  91.      1        EP, FP, WP, HP)
  92.  
  93.       CALL MXCOPYREAL8TOPTR(HP, H, NFCNS)
  94.  
  95.       RETURN
  96.       END
  97.