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