/*============================================================================= * * This software has been released under the terms of the GNU Public * license. See http://www.gnu.org/copyleft/gpl.html for details. * * Copyright 2001 Anders Johansson ajh@atri.curtin.edu.au * *============================================================================= */ /* Calculates a number of window functions. The following window * functions are currently implemented: Boxcar, Triang, Hanning, * Hamming, Blackman, Flattop and Kaiser. In the function call n is * the number of filter taps and w the buffer in which the filter * coefficients will be stored. */ #include #include "dsp.h" /* * Boxcar * * n window length * w buffer for the window parameters */ void boxcar(int n, _ftype_t* w) { int i; /* Calculate window coefficients */ for (i=0 ; i> 1; int i; /* Calculate window coefficients */ for (i=0 ; i= BIZ_EPSILON * sum); return(sum); } /* * Kaiser * * n window length * w buffer for the window parameters * b beta parameter of Kaiser window, Beta >= 1 * * Beta trades the rejection of the low pass filter against the * transition width from passband to stop band. Larger Beta means a * slower transition and greater stop band rejection. See Rabiner and * Gold (Theory and Application of DSP) under Kaiser windows for more * about Beta. The following table from Rabiner and Gold gives some * feel for the effect of Beta: * * All ripples in dB, width of transition band = D*N where N = window * length * * BETA D PB RIP SB RIP * 2.120 1.50 +-0.27 -30 * 3.384 2.23 0.0864 -40 * 4.538 2.93 0.0274 -50 * 5.658 3.62 0.00868 -60 * 6.764 4.32 0.00275 -70 * 7.865 5.0 0.000868 -80 * 8.960 5.7 0.000275 -90 * 10.056 6.4 0.000087 -100 */ void kaiser(int n, _ftype_t* w, _ftype_t b) { _ftype_t tmp; _ftype_t k1 = 1.0/besselizero(b); int k2 = 1 - (n & 1); int end = (n + 1) >> 1; int i; /* Calculate window coefficients */ for (i=0 ; i