To go to the main program click here
To go to the index click here
To go to my page click here
#include "../optimal/globDefs.h" /* idealLowpass() */ void idealLowpass(int numbTaps, real lambdaU, real hh[]) { int n,nMax; real mm; printf("in idealLowpass\n"); for (n=0; n<numbTaps; n++) { mm=n-(real)(numbTaps-1)/2.0; if(mm==0) { hh[n]=lambdaU/PI; } else { hh[n]=sin(mm*lambdaU)/(mm*PI); } } return; } /* idealHighpass() */ void idealHighpass( int numbTaps, real lambdaL, real hh[]) { int n,nMax; real mm; printf("in idealHighpass\n"); for (n=0; n<numbTaps; n++) { mm=n-(real)(numbTaps-1)/2.0; if(mm==0) { hh[n]=1.0-lambdaL/PI; } else {hh[n]=-sin(mm*lambdaL)/(mm*PI);} } return; } /* idealBandpass() */ void idealBandpass( int numbTaps, real lambdaL, real lambdaU, real hh[]) { int n, nMax; real mm; printf("in idealBandpass\n"); for(n=0; n<numbTaps; n++) { mm=n-(real)(numbTaps-1)/2.0; if(mm==0) {hh[n]=(lambdaU-lambdaL)/PI;} else {hh[n]=(sin(mm*lambdaU)-sin(mm*lambdaL))/(mm*PI);} } return; } /* idealBandstop() */ void idealBandstop( int numbTaps, real lambdaL, real lambdaU, real hh[]) { int n, nMax; real mm; printf("in idealBandstop\n"); for(n=0; n<numbTaps; n++) { mm=n-(real)(numbTaps-1)/2.0; if(mm==0) {hh[n]=1.0+(lambdaU-lambdaL)/PI;} else {hh[n]=(sin(n*lambdaL)-sin(mm*lambdaU))/(mm*PI);} } return; } /* contRectangularResponse() */ #define TINY 3.16e-5 real contrectangularResponse(real freq, real tau, logical dbScale) { real x; x=sinc(PI*freq*tau); if(dbScale) { if(fabs(x) < TINY) {x=-90.0;} else {x=20.0*log10(fabs(x));} } return(x); } /* discRectangularResponse() */ real discRectangularResponse( real freq, int M, logical normalizedAmplitude) { real result; if(freq==0.0) {result=(real)(2*M+1);} else {result=fabs(sin(PI*freq*(2*M+1))/sin(PI*freq));} if(normalizedAmplitude) result = result/(real)(2*M+1); return(result); } /* contTriangularResponse() */ real contTriangularResponse( real freq, real tau, logical dbScale) { real amp0, x; amp0=0.5*tau; x=PI*freq*tau/2.0; x=0.5*tau*sincSqrd(x); if(dbScale) { if(fabs(x/amp0) < TINY) {x=-90.0;} else {x=20.0*log10(fabs(x/amp0));} } return(x); } /* triangularWindow() */ void triangularWindow( int N, real window[]) { real offset; int n; offset=(real)(1-(n%2)); for (n=0; n<(N/2.0); n++) { window[n]=1.0-(2.0*n+offset)/(N+1.0); } return; } /* makeLagWindow () */ void makeLagWindow(int N, real window[], int center, real outWindow[]) { int n,M,negative; if(N%2) { M=(N-1)/2; for(n=0; n<=M; n++) { outWindow[n]= window[n]; outWindow[-n]=outWindow[n]; } } else { M=(N-2)/2; if(center == negative) { for(n=0; n<=M; n++) { outWindow[n] = window[n]; outWindow[-(1+n)] = window[n]; } } else { for(n=0; n<=M; n++) { outWindow[n+1]=window[n]; outWindow[-n]=window[n]; } } } return; } /* makeDataWindow() */ void makedataWindow(int N, real window[], real outWindow[]) { int n,M; if (N%2) { M=(N-1)/2; for(n=0; n<=M; n++) { outWindow[n]=window[M-n]; outWindow[M+n]=window[n]; } } else { M=(N-2)/2; for(n=0;n<=M; n++) { outWindow[n]=window[M-n]; outWindow[M+n+1]-window[n]; } } return; } /* hanningWindow() */ void hanningWindow( int N, real window[]) { logical odd; int n; odd=N%2; for(n=0; n<(N/2.0); n++) { if(odd) {window[n]=0.5+0.5*cos(TWO_PI*n/(N-1));} else {window[n]=0.5+0.5*cos(TWO_PI*(2*n+1)/(2.0*(N-1)));} } return; } /* hammingWindow() */ void hammingWindow( int N, real window[]) { logical odd; int n; odd=N%2; for (n=0; n<(N/2.0); n++) { if(odd) {window[n]=.54+.46*cos(TWO_PI*n/(N-1));} else {window[n]=.54+.46* cos(TWO_PI*(2*n+1)/(2.0*(N-1)));} } return; } void blackmanWindow(int N, real window[]) { int n; logical odd; odd=N%2; if (odd){ for (n=0; n<=((N-1)/2.0); n++) window[n]=0.42 + .5*cos(TWO_PI*n/(N-1))+.08*cos(2*TWO_PI*n/(N-1)); } else { for (n=0; n<((N/2)-1); n++) window[n]=0.42 + .5*cos(TWO_PI*n/(N-1))+.08*cos(2*TWO_PI*n/(N-1)); } } /* rectangular Window */ void rectWindow(int N, real window[]) { int n; logical odd; odd=N%2; if (odd){ for (n=0; n<=((N-1)/2.0); n++) window[n]= 1; } else { for (n=0; n<((N/2)-1); n++) window[n]= 1; } }