home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c129 / 1.ddi / FIR.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-02-25  |  3.6 KB  |  143 lines

  1. /* Program FIR.C - Digital Filter Design Demo Program */
  2. /* Written by L. Papineau and R. Quinn 1/90 */
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <io.h>
  6. #include <dos.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9. #include <math.h>
  10. #include <graph.h>
  11. #include "fft.h"
  12. #include "worlddr.h"
  13. #include "segraph.h"
  14.  
  15.  
  16. float  xdata[500], ydata[500], filteredData[500];
  17. float  gain[500], dbgain[500], filtcoef[100];
  18. int n, k, i, dc, smoothnum, filttype, win, monoflag;
  19. float f,fp;
  20. FILE *filepointer;
  21. extern BlackAndWhite;
  22.  
  23. void main(){
  24.   for (i = 0; i <= 100; i++)
  25.     filtcoef[i] = 0.0;
  26.   printf("N  FP  DC FILTTYPE  WIN  K\n");
  27.   scanf("%d %f  %d  %d %d %d", &n,&fp,&dc,&filttype,&win,&k);
  28.   /* n = 21 fp = 0.25 dc = 0 filttype = 0 win = 0 k = 200 */
  29.   FIRFreqSample(filtcoef,fp,n,dc,filttype,win);
  30.   WindowData(filtcoef, n, win );
  31.  
  32.   printf( "Writing out data to FREQDATA.TXT \n");
  33.   filepointer = fopen("freqdata.txt","w");
  34.   fprintf(filepointer,   "Filter Coefficients  \n");
  35.   fprintf(filepointer,   "Filter Tap      Magnitude  \n");
  36.   for (i = 0; i<= n-1; i++)
  37.     fprintf(filepointer,"%4d      %15.7f\n",i,filtcoef[i]);
  38.   fprintf(filepointer,   "\n");
  39.  
  40.   InitSEGraphics(6);
  41.  
  42.   for (i = 0; i <= n-1; i ++)
  43.   {
  44.     xdata[i] = i;
  45.     ydata[i] = filtcoef[i];
  46.   }
  47.   SetCurrentWindow(2);
  48.   SetAxesType(0,0);
  49.   ScalePlotArea( 0.0, -0.2, 25, 0.61);
  50.   SetXYIntercepts(0.0,-0.20);
  51.   if (BlackAndWhite == 0) SetViewBackground(9);
  52.   SelectColor(15);
  53.   DrawYAxis(0.1,0);
  54.   LabelYAxis(2, 0);
  55.   DrawXAxis(1.0,0);
  56.   LabelXAxis(5, 0);
  57.   setlinestyleXX(1,1,1);
  58.   DrawGridX(5);
  59.   DrawGridY(1);
  60.   setlinestyleXX(0,1,1);
  61.  
  62.   BargraphData(xdata, ydata, n, 0.3, 1, 1);
  63.   SelectColor(15);
  64.   settextstyleXX(0,0,2);
  65.   TitleWindow("FIR Filter Coefficients");
  66.   TitleXAxis("Filter Coefficient (n)");
  67.   TitleYAxis("Magnitude h(n)");
  68.   settextstyleXX(0,0,1);
  69.   getch();
  70.   ClearWindow();
  71.  
  72.   FreqResponse(filtcoef, ydata, n, k);
  73.   for (i = 0; i <= k; i ++)
  74.   {
  75.     xdata[i] = 0.5 * (i* 1.0)/(k * 1.0);
  76.     ydata[i] = fabs(ydata[i]);
  77.     gain[i] = ydata[i];
  78.   }
  79.   SetCurrentWindow(3);
  80.   if (BlackAndWhite == 0) SetViewBackground(1);
  81.   BorderCurrentWindow(4);
  82.   SetAxesType(0,0);
  83.   ScalePlotArea( 0.0, 0.0, 0.501, 1.21);
  84.   SetXYIntercepts(0.0,0.0);
  85.   SelectColor(15);
  86.   DrawYAxis(0.05,0);
  87.   LabelYAxis(4, 0);
  88.   DrawXAxis(0.1,0);
  89.   LabelXAxis(1, 0);
  90.   SelectColor(9);
  91.   setlinestyleXX(1,1,1);
  92.   DrawGridX(1);
  93.   DrawGridY(2);
  94.   setlinestyleXX(0,1,1);
  95.   LinePlotData(xdata, ydata, k, 15, 0);
  96.   SelectColor(14);
  97.   TitleWindow("FIR Low Pass Filter Design");
  98.   TitleXAxis("Frequency in Hz");
  99.   TitleYAxis("DB");
  100.  
  101.   for (i = 0; i <= k; i ++)
  102.     ydata[i] = 20 * log(ydata[i]);
  103.   SetCurrentWindow(4);
  104.   if (BlackAndWhite == 0) SetViewBackground(1);
  105.   BorderCurrentWindow(4);
  106.   SetAxesType(0,0);
  107.   ScalePlotArea( 0.0, -100.0, 0.501, 20.01);
  108.   SetXYIntercepts(0.0,-100.0);
  109.   SelectColor(15);
  110.   DrawYAxis(10,0);
  111.   LabelYAxis(2, 0);
  112.   DrawXAxis(0.1,0);
  113.   LabelXAxis(1, 0);
  114.   setlinestyleXX(1,1,1);
  115.   SelectColor(9);
  116.   DrawGridX(1);
  117.   DrawGridY(2);
  118.  
  119.   LinePlotData(xdata, ydata, k, 15, 0);
  120.   SelectColor(14);
  121.   TitleWindow("FIR Low Pass Filter Design");
  122.   TitleXAxis("Frequency in Hz");
  123.   TitleYAxis("DB (20 Log Ampl.)");
  124.   getch();
  125.   CloseSEGraphics();
  126.  
  127.  
  128.  
  129.  
  130.   fprintf(filepointer,   "Filter Response  \n");
  131.   fprintf(filepointer,   "Frequency          Gain        20*Log(Gain) \n");
  132.   for (i = 0; i < k; i++){
  133.     xdata[i] = 0.5 * (float)i/(float)k;
  134.     gain[i] = fabs(gain[i]);
  135.     dbgain[i] = 20.0*log10(gain[i]);
  136.     fprintf(filepointer, "%10.6f       %10.6f  %10.6f\n",
  137.             xdata[i],gain[i],dbgain[i]);
  138.   }
  139.   fclose(filepointer);
  140.  
  141. }
  142.  
  143.