summaryrefslogtreecommitdiffstats
path: root/audio/filter/window.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/filter/window.c')
-rw-r--r--audio/filter/window.c212
1 files changed, 0 insertions, 212 deletions
diff --git a/audio/filter/window.c b/audio/filter/window.c
deleted file mode 100644
index 3cc8fe4b1b..0000000000
--- a/audio/filter/window.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright (C) 2001 Anders Johansson ajh@atri.curtin.edu.au
- *
- * This file is part of mpv.
- *
- * mpv is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * mpv is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with mpv. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* 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 <math.h>
-#include "dsp.h"
-
-/*
-// Boxcar
-//
-// n window length
-// w buffer for the window parameters
-*/
-void af_window_boxcar(int n, FLOAT_TYPE* w)
-{
- int i;
- // 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
-*/
-void af_window_triang(int n, FLOAT_TYPE* w)
-{
- FLOAT_TYPE k1 = (FLOAT_TYPE)(n & 1);
- FLOAT_TYPE k2 = 1/((FLOAT_TYPE)n + k1);
- int end = (n + 1) >> 1;
- int i;
-
- // Calculate window coefficients
- for (i=0 ; i<end ; i++)
- w[i] = w[n-i-1] = (2.0*((FLOAT_TYPE)(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
-*/
-void af_window_hanning(int n, FLOAT_TYPE* w)
-{
- int i;
- FLOAT_TYPE k = 2*M_PI/((FLOAT_TYPE)(n+1)); // 2*pi/(N+1)
-
- // Calculate window coefficients
- for (i=0; i<n; i++)
- *w++ = 0.5*(1.0 - cos(k*(FLOAT_TYPE)(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
-*/
-void af_window_hamming(int n,FLOAT_TYPE* w)
-{
- int i;
- FLOAT_TYPE k = 2*M_PI/((FLOAT_TYPE)(n-1)); // 2*pi/(N-1)
-
- // Calculate window coefficients
- for (i=0; i<n; i++)
- *w++ = 0.54 - 0.46*cos(k*(FLOAT_TYPE)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
-*/
-void af_window_blackman(int n,FLOAT_TYPE* w)
-{
- int i;
- FLOAT_TYPE k1 = 2*M_PI/((FLOAT_TYPE)(n-1)); // 2*pi/(N-1)
- FLOAT_TYPE k2 = 2*k1; // 4*pi/(N-1)
-
- // Calculate window coefficients
- for (i=0; i<n; i++)
- *w++ = 0.42 - 0.50*cos(k1*(FLOAT_TYPE)i) + 0.08*cos(k2*(FLOAT_TYPE)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
-*/
-void af_window_flattop(int n,FLOAT_TYPE* w)
-{
- int i;
- FLOAT_TYPE k1 = 2*M_PI/((FLOAT_TYPE)(n-1)); // 2*pi/(N-1)
- FLOAT_TYPE k2 = 2*k1; // 4*pi/(N-1)
-
- // Calculate window coefficients
- for (i=0; i<n; i++)
- *w++ = 0.2810638602 - 0.5208971735*cos(k1*(FLOAT_TYPE)i)
- + 0.1980389663*cos(k2*(FLOAT_TYPE)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
-
-static FLOAT_TYPE besselizero(FLOAT_TYPE x)
-{
- FLOAT_TYPE temp;
- FLOAT_TYPE sum = 1.0;
- FLOAT_TYPE u = 1.0;
- FLOAT_TYPE halfx = x/2.0;
- int n = 1;
-
- do {
- temp = halfx/(FLOAT_TYPE)n;
- u *=temp * temp;
- sum += u;
- n++;
- } while (u >= 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 af_window_kaiser(int n, FLOAT_TYPE* w, FLOAT_TYPE b)
-{
- FLOAT_TYPE tmp;
- FLOAT_TYPE k1 = 1.0/besselizero(b);
- int k2 = 1 - (n & 1);
- int end = (n + 1) >> 1;
- int i;
-
- // Calculate window coefficients
- for (i=0 ; i<end ; i++){
- tmp = (FLOAT_TYPE)(2*i + k2) / ((FLOAT_TYPE)n - 1.0);
- w[end-(1&(!k2))+i] = w[end-1-i] = k1 * besselizero(b*sqrt(1.0 - tmp*tmp));
- }
-}