summaryrefslogtreecommitdiff
path: root/src/post/audio/window.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/post/audio/window.c')
-rw-r--r--src/post/audio/window.c208
1 files changed, 104 insertions, 104 deletions
diff --git a/src/post/audio/window.c b/src/post/audio/window.c
index 25b92bc31..3fe76a112 100644
--- a/src/post/audio/window.c
+++ b/src/post/audio/window.c
@@ -1,49 +1,49 @@
/*=============================================================================
-//
-// 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
-//
-//=============================================================================
-*/
+ *
+ * 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.
-*/
+ * 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 <math.h>
#include "dsp.h"
/*
-// Boxcar
-//
-// n window length
-// w buffer for the window parameters
-*/
+ * Boxcar
+ *
+ * n window length
+ * w buffer for the window parameters
+ */
void boxcar(int n, _ftype_t* w)
{
int i;
- // Calculate window coefficients
+ /* Calculate window coefficients */
for (i=0 ; i<n ; i++)
w[i] = 1.0;
}
/*
-// Triang a.k.a Bartlett
-//
-// | (N-1)|
-// 2 * |k - -----|
-// | 2 |
-// w = 1.0 - ---------------
-// N+1
-// n window length
-// w buffer for the window parameters
-*/
+ * Triang a.k.a Bartlett
+ *
+ * | (N-1)|
+ * 2 * |k - -----|
+ * | 2 |
+ * w = 1.0 - ---------------
+ * N+1
+ * n window length
+ * w buffer for the window parameters
+ */
void triang(int n, _ftype_t* w)
{
_ftype_t k1 = (_ftype_t)(n & 1);
@@ -51,96 +51,96 @@ void triang(int n, _ftype_t* w)
int end = (n + 1) >> 1;
int i;
- // Calculate window coefficients
+ /* Calculate window coefficients */
for (i=0 ; i<end ; i++)
w[i] = w[n-i-1] = (2.0*((_ftype_t)(i+1))-(1.0-k1))*k2;
}
/*
-// Hanning
-// 2*pi*k
-// w = 0.5 - 0.5*cos(------), where 0 < k <= N
-// N+1
-// n window length
-// w buffer for the window parameters
-*/
+ * Hanning
+ * 2*pi*k
+ * w = 0.5 - 0.5*cos(------), where 0 < k <= N
+ * N+1
+ * n window length
+ * w buffer for the window parameters
+ */
void hanning(int n, _ftype_t* w)
{
int i;
- _ftype_t k = 2*M_PI/((_ftype_t)(n+1)); // 2*pi/(N+1)
+ _ftype_t k = 2*M_PI/((_ftype_t)(n+1)); /* 2*pi/(N+1) */
- // Calculate window coefficients
+ /* Calculate window coefficients */
for (i=0; i<n; i++)
*w++ = 0.5*(1.0 - cos(k*(_ftype_t)(i+1)));
}
/*
-// Hamming
-// 2*pi*k
-// w(k) = 0.54 - 0.46*cos(------), where 0 <= k < N
-// N-1
-//
-// n window length
-// w buffer for the window parameters
-*/
+ * Hamming
+ * 2*pi*k
+ * w(k) = 0.54 - 0.46*cos(------), where 0 <= k < N
+ * N-1
+ *
+ * n window length
+ * w buffer for the window parameters
+ */
void hamming(int n,_ftype_t* w)
{
int i;
- _ftype_t k = 2*M_PI/((_ftype_t)(n-1)); // 2*pi/(N-1)
+ _ftype_t k = 2*M_PI/((_ftype_t)(n-1)); /* 2*pi/(N-1) */
- // Calculate window coefficients
+ /* Calculate window coefficients */
for (i=0; i<n; i++)
*w++ = 0.54 - 0.46*cos(k*(_ftype_t)i);
}
/*
-// Blackman
-// 2*pi*k 4*pi*k
-// w(k) = 0.42 - 0.5*cos(------) + 0.08*cos(------), where 0 <= k < N
-// N-1 N-1
-//
-// n window length
-// w buffer for the window parameters
-*/
+ * Blackman
+ * 2*pi*k 4*pi*k
+ * w(k) = 0.42 - 0.5*cos(------) + 0.08*cos(------), where 0 <= k < N
+ * N-1 N-1
+ *
+ * n window length
+ * w buffer for the window parameters
+ */
void blackman(int n,_ftype_t* w)
{
int i;
- _ftype_t k1 = 2*M_PI/((_ftype_t)(n-1)); // 2*pi/(N-1)
- _ftype_t k2 = 2*k1; // 4*pi/(N-1)
+ _ftype_t k1 = 2*M_PI/((_ftype_t)(n-1)); /* 2*pi/(N-1) */
+ _ftype_t k2 = 2*k1; /* 4*pi/(N-1) */
- // Calculate window coefficients
+ /* Calculate window coefficients */
for (i=0; i<n; i++)
*w++ = 0.42 - 0.50*cos(k1*(_ftype_t)i) + 0.08*cos(k2*(_ftype_t)i);
}
/*
-// Flattop
-// 2*pi*k 4*pi*k
-// w(k) = 0.2810638602 - 0.5208971735*cos(------) + 0.1980389663*cos(------), where 0 <= k < N
-// N-1 N-1
-//
-// n window length
-// w buffer for the window parameters
-*/
+ * Flattop
+ * 2*pi*k 4*pi*k
+ * w(k) = 0.2810638602 - 0.5208971735*cos(------) + 0.1980389663*cos(------), where 0 <= k < N
+ * N-1 N-1
+ *
+ * n window length
+ * w buffer for the window parameters
+ */
void flattop(int n,_ftype_t* w)
{
int i;
- _ftype_t k1 = 2*M_PI/((_ftype_t)(n-1)); // 2*pi/(N-1)
- _ftype_t k2 = 2*k1; // 4*pi/(N-1)
+ _ftype_t k1 = 2*M_PI/((_ftype_t)(n-1)); /* 2*pi/(N-1) */
+ _ftype_t k2 = 2*k1; /* 4*pi/(N-1) */
- // Calculate window coefficients
+ /* Calculate window coefficients */
for (i=0; i<n; i++)
*w++ = 0.2810638602 - 0.5208971735*cos(k1*(_ftype_t)i) + 0.1980389663*cos(k2*(_ftype_t)i);
}
/* Computes the 0th order modified Bessel function of the first kind.
-// (Needed to compute Kaiser window)
-//
-// y = sum( (x/(2*n))^2 )
-// n
-*/
-#define BIZ_EPSILON 1E-21 // Max error acceptable
+ * (Needed to compute Kaiser window)
+ *
+ * y = sum( (x/(2*n))^2 )
+ * n
+ */
+#define BIZ_EPSILON 1E-21 /* Max error acceptable */
_ftype_t besselizero(_ftype_t x)
{
@@ -160,32 +160,32 @@ _ftype_t besselizero(_ftype_t x)
}
/*
-// 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
-*/
+ * 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;
@@ -194,7 +194,7 @@ void kaiser(int n, _ftype_t* w, _ftype_t b)
int end = (n + 1) >> 1;
int i;
- // Calculate window coefficients
+ /* Calculate window coefficients */
for (i=0 ; i<end ; i++){
tmp = (_ftype_t)(2*i + k2) / ((_ftype_t)n - 1.0);
w[end-(1&(!k2))+i] = w[end-1-i] = k1 * besselizero(b*sqrt(1.0 - tmp*tmp));