ftp.nice.ch/pub/next/unix/audio/cmix.s.tar.gz#/cmix/pvoc2/kaiser.c

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.