ftp.nice.ch/pub/next/unix/audio/sms.N.bs.tar.gz#/sms/library/sincTab.c

This is sincTab.c in view mode; [Download] [Up]

#include "../sms.h"

#define SINC_TABLE_SIZE 4096

static double Sinc (double x, short N)	
{
	return (sin ((N/2) * x) / sin (x/2));
}

/* function to prepare the main lobe of a frequency domain 
 *  BlackmanHarris92 window
 *
 */
int PrepSinc ()
{
	short N = 512, i, m;
	float fA[4] = {.35875, .48829, .14128, .01168},
		fMax = 0;
	double fTheta = -4.0 * TWO_PI / N, 
	       fThetaIncr = (8.0 * TWO_PI / N) / (SINC_TABLE_SIZE);

	if((pFSincTab = (double *) calloc (SINC_TABLE_SIZE, sizeof(double))) == 0)
		return (0);

	for(i = 0; i < SINC_TABLE_SIZE; i++) 
	{
		for (m = 0; m < 4; m++)
			pFSincTab[i] +=  -1 * (fA[m]/2) * 
				(Sinc (fTheta - m * TWO_PI/N, N) + 
			     Sinc (fTheta + m * TWO_PI/N, N));
		fTheta += fThetaIncr;
	}
	fMax = pFSincTab[(int) SINC_TABLE_SIZE / 2];
	for (i = 0; i < SINC_TABLE_SIZE; i++) 
		pFSincTab[i] = pFSincTab[i] / fMax;

	return (1);
}

/*
 * fTheta has to be from 0 to 8
 */
double SincTab (double fTheta)
{
	long index = (long) (.5 + SINC_TABLE_SIZE * fTheta / 8.0);

	return (pFSincTab[index]);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.