All pastes #613349 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-07-10 22:51 UTC
rendered paste body
/* Compute a windowed sinc FIR of size n into buffer */
void arke_firws(float frequency, float* buffer, unsigned int n, arke_window_f window)
{
	float sinFreq;
	float* p;
	int n2, i;

	if(!(n % 2)) {
		/* n may not be even */
		/* fix this by setting the last value to zero */
		n--;
		buffer[n] = 0.0f;
	}

	sinFreq = frequency * 2.0f * M_PI;
	p = buffer;
	n2 = n / 2;
	for(i = -n2; i < n2; i++, p++) {
		float f = sinFreq * i;
		if(fabs(f) > kNearZero) {
			*p = sin(f) / f;
		} else {
			*p = 1.0f;
		}
	}

	window(buffer, n);
}