This is kaiser.c in view mode; [Download] [Up]
#include <math.h>
/*c-----------------------------------------------------------------------
c subroutine: kaiser
c kaiser window
c-----------------------------------------------------------------------
c
subroutine kaiser(nf, w, n, ieo, beta)
c
c nf = filter length in samples
c w = window array of size n
c n = filter half length=(nf+1)/2
c ieo = even odd indicator--ieo=0 if nf even
c beta = parameter of kaiser window
c
*/
kaiser(nf,w,n,ieo,beta)
float *w,beta;
{
float xind,xi,bes,ino();
int i;
bes = ino(beta);
xind = (float)(nf-1)*(float)(nf-1);
for(i=0; i<n; i++) {
// do 10 i=1,n
xi = i;
if (!ieo) xi = xi + 0.5;
xi = 4.*xi*xi;
w[i] = ino(beta*sqrt(1.-xi/xind));
w[i] = w[i]/bes;
}
}
/*c
c-----------------------------------------------------------------------
c function: ino
c bessel function for kaiser window
c-----------------------------------------------------------------------
c
*/
float ino(x)
float x;
{
float y,t,e,de,xi,sde;
int i;
y = x/2.;
t = 1.e-08;
e = 1.;
de = 1.;
// do 10 i=1,25
for(i=1; i<= 25; i++) {
xi = i;
de = de*y/xi;
sde = de*de;
e = e + sde;
if ((e*t-sde) > 0) break;
}
return(e);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.