1 
2 #ifdef HAVE_CONFIG_H
3 #include "config.h"
4 #endif
5 
6 #include <schroedinger/schrofilter.h>
7 #include <schroedinger/schro.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include <time.h>
11 #include <stdio.h>
12 #include <math.h>
13 
14 
15 double filter[100];
16 
sinc(double x)17 double sinc(double x)
18 {
19   if (x == 0) return 1.0;
20   return sin(x)/x;
21 }
22 
env(double x,double width)23 double env(double x, double width)
24 {
25   return (x + width/2) * (x - width/2);
26 }
27 
28 void
create_filter(int n)29 create_filter (int n)
30 {
31   int i;
32   double sum;
33   double x;
34 
35   for(i=0;i<n;i++) {
36     x = i - (n-1)*0.5;
37     filter[i] = sinc(M_PI*x/((n+1)/(n*0.5))) * env(x,n+3);
38   }
39 
40   sum = 0;
41   for(i=0;i<n;i++) {
42     sum += filter[i];
43   }
44 
45   for(i=0;i<n;i++){
46     filter[i] = floor(0.5 + 256.0*filter[i]/sum);
47   }
48 
49   printf("%d: ",n);
50   sum = 0;
51   for(i=0;i<n;i++){
52     printf(" %g", filter[i]);
53     sum += filter[i];
54   }
55   printf(" (%g)", sum);
56   printf("\n");
57 
58 
59 }
60 
61 
62 int
main(int argc,char * argv[])63 main (int argc, char *argv[])
64 {
65 
66   create_filter(2);
67   create_filter(4);
68   create_filter(6);
69   create_filter(8);
70   create_filter(10);
71   create_filter(12);
72 
73   return 0;
74 }
75 
76