home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l292 / 2.ddi / FIR.FOR < prev    next >
Encoding:
Text File  |  1990-02-20  |  3.7 KB  |  125 lines

  1.       INCLUDE 'STDHDR.FOR'
  2.       REAL xdata(0:maxv), ydata(0:maxv)
  3.       REAL filtcoef(0:maxv), gain(0:maxv),  fp
  4.       INTEGER i, n, k, dc, w, filtType
  5.       LOGICAL BW
  6.  
  7.  
  8.       DO i = 1, 100
  9.         filtcoef(i) = 0.0
  10.       END DO
  11.  
  12.       PRINT *, 'N  FP  DC  TYPE  Window  K'
  13.       READ *, n, fp, dc, filtType, w, k
  14.       !  n = 21:   fp = 0.25:   dc = 0: filtType = 0: w = 2: k = 200
  15.  
  16.  
  17.       CALL FIRFreqSample(filtcoef, fp, n, dc, filtType, w)
  18.       CALL WindowData(filtcoef, n, w)
  19.       PRINT *, 'Writing results to FREQDATA.TXT'
  20.       OPEN (2, FILE = 'FREQDATA.TXT', STATUS = 'UNKNOWN')
  21.       DO  i = 0, n - 1
  22.         WRITE (2,401) i, filtcoef(i)
  23.       END DO
  24. 401   FORMAT (I2,2x,F10.5)
  25.       CALL InitSEGraphics(-1, 'c:\FOR\LIB\*.FON')
  26.       CALL BlackAndWhite(BW)
  27.       DO i = 0, n - 1
  28.         xdata(i) = i
  29.         ydata(i) = filtcoef(i)
  30.       END DO
  31.       CALL SetCurrentWindow(2)
  32.       CALL SetAxesType(0, 0)
  33.       CALL ScalePlotArea(0.0, -0.2, 25.0, 0.61)
  34.       CALL SetXYIntercepts(0.0, -0.2)
  35.       IF (.NOT. BW)  CALL SetViewBackground(9)
  36.       CALL SelectColor(15)
  37.       CALL DrawYAxis(0.1, 0)
  38.       CALL LabelYAxis(2, 0)
  39.       CALL DrawXAxis(1.0, 0)
  40.       CALL LabelXAxis(5, 0)
  41.       CALL SetLineStyleXX(1, 1, 1)
  42.       CALL DrawGridX(5)
  43.       CALL DrawGridY(1)
  44.       CALL SetLineStyleXX(0, 1, 1)
  45.  
  46.       CALL BarGraphData(xdata, ydata, n, 0.3, 2, 2)
  47.       CALL SelectColor(15)
  48.       CALL SetTextStyleXX(0, 0, 14, 16)
  49.       CALL TitleWindow('FIR Filter Coefficients')
  50.       CALL TitleXAxis('Filter Coefficient (n)')
  51.       CALL TitleYAxis('Magnitude h(n)')
  52.       CALL SetTextStyleXX(0, 0, 10, 12)
  53.       READ(*,*)
  54.       CALL ClearWindow
  55.  
  56.  
  57.       CALL FreqResponse(filtcoef, ydata, n, k)
  58.       DO i = 0, k
  59.         xdata(i) = 0.5 * i / (k * 1.0)
  60.         ydata(i) = ABS(ydata(i))
  61.         gain(i) = ydata(i)
  62.       END DO
  63.       CALL SetCurrentWindow(3)
  64.       IF (.NOT. BW) CALL SetViewBackground(1)
  65.       CALL BorderCurrentWindow(4)
  66.       CALL SetAxesType(0, 0)
  67.       CALL ScalePlotArea(0.0, 0.0, 0.501, 1.21)
  68.       CALL SetXYIntercepts(0.0, 0.0)
  69.       CALL SelectColor(15)
  70.       CALL DrawYAxis(.05, 0)
  71.       CALL LabelYAxis(4, 0)
  72.       CALL DrawXAxis(.1, 0)
  73.       CALL LabelXAxis(1, 0)
  74.       CALL SelectColor(9)
  75.       CALL SetLineStyleXX(1, 1, 1)
  76.       CALL DrawGridX(1)
  77.       CALL DrawGridY(2)
  78.       CALL SetLineStyleXX(0, 1, 1)
  79.       CALL LinePlotData(xdata, ydata, k, 15, 0)
  80.       CALL SelectColor(14)
  81.       CALL TitleWindow('FIR Low Pass Filter Design')
  82.       CALL TitleXAxis('Frequency in Hz')
  83.       CALL TitleYAxis('Gain')
  84.  
  85.       DO i = 0, k
  86.         ydata(i) = 20 * log10(ydata(i))
  87.       END DO
  88.       CALL SetCurrentWindow(4)
  89.       IF (.NOT. BW) CALL SetViewBackground(1)
  90.       CALL BorderCurrentWindow(4)
  91.       CALL SetAxesType(0, 0)
  92.       CALL ScalePlotArea(0.0, -100.0, 0.501, 20.01)
  93.       CALL SetXYIntercepts(0.0, -100.0)
  94.       CALL SelectColor(15)
  95.       CALL DrawYAxis(10.0, 0)
  96.       CALL LabelYAxis(2, 0)
  97.       CALL DrawXAxis(0.1, 0)
  98.       CALL LabelXAxis(1, 0)
  99.       CALL SetLineStyleXX(1, 1, 1)
  100.       CALL SelectColor(9)
  101.       CALL DrawGridX(1)
  102.       CALL DrawGridY(2)
  103.  
  104.       CALL LinePlotData(xdata, ydata, k, 15, 0)
  105.       CALL SelectColor(14)
  106.       CALL TitleWindow('FIR Low Pass Filter Design')
  107.       CALL TitleXAxis('Frequency in Hz')
  108.       CALL TitleYAxis('DB')
  109.  
  110.       WRITE (2,*)
  111.       WRITE (2,*) 'Filter Response  '
  112.       WRITE (2,*) 'Frequency          Gain        20*Log(Gain) '
  113.  
  114.       DO i = 0, k - 1
  115.         xdata(i) = 0.5 * (i * 1.0) / (k * 1.0)
  116.         WRITE(2,402) xdata(i), gain(i), ydata(i)
  117.       END DO
  118. 402   FORMAT ( 3(F10.5, 2X))
  119.       READ(*,*)
  120.       CALL CloseSEGraphics
  121.       CLOSE (2)
  122.  
  123.       END
  124.  
  125.