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)17double sinc(double x) 18 { 19 if (x == 0) return 1.0; 20 return sin(x)/x; 21 } 22 env(double x,double width)23double env(double x, double width) 24 { 25 return (x + width/2) * (x - width/2); 26 } 27 28 void create_filter(int n)29create_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[])63main (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