diff options
author | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2006-02-09 16:18:39 +0000 |
---|---|---|
committer | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2006-02-09 16:18:39 +0000 |
commit | b418fb91e7bb45d7b5f1eb8b19703441ae94eb13 (patch) | |
tree | 3f4a32d0b99d4ea0ac602bec59f0d2accba46719 /lib/makewindows.c |
got everything building and working, including building single-object/single-file objects with a shared dylib. Now got to get it integrated into the build systemsvn2git-root
svn path=/trunk/externals/fftease/; revision=4574
Diffstat (limited to 'lib/makewindows.c')
-rw-r--r-- | lib/makewindows.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/lib/makewindows.c b/lib/makewindows.c new file mode 100644 index 0000000..81a80f0 --- /dev/null +++ b/lib/makewindows.c @@ -0,0 +1 @@ +#include "fftease.h"
void makewindows( float *H, float *A, float *S, int Nw, int N, int I )
{
int i ;
float sum ;
for ( i = 0 ; i < Nw ; i++ )
H[i] = A[i] = S[i] = 0.54 - 0.46*cos( TWOPI*i/(Nw - 1) ) ;
if ( Nw > N ) {
float x ;
x = -(Nw - 1)/2. ;
for ( i = 0 ; i < Nw ; i++, x += 1. )
if ( x != 0. ) {
A[i] *= N*sin( PI*x/N )/(PI*x) ;
if ( I )
S[i] *= I*sin( PI*x/I )/(PI*x) ;
}
}
for ( sum = i = 0 ; i < Nw ; i++ )
sum += A[i] ;
for ( i = 0 ; i < Nw ; i++ ) {
float afac = 2./sum ;
float sfac = Nw > N ? 1./afac : afac ;
A[i] *= afac ;
S[i] *= sfac ;
}
if ( Nw <= N && I ) {
for ( sum = i = 0 ; i < Nw ; i += I )
sum += S[i]*S[i] ;
for ( sum = 1./sum, i = 0 ; i < Nw ; i++ )
S[i] *= sum ;
}
}
void makehamming( float *H, float *A, float *S, int Nw, int N, int I, int odd )
{
int i;
float sum ;
if (odd) {
for ( i = 0 ; i < Nw ; i++ )
H[i] = A[i] = S[i] = sqrt(0.54 - 0.46*cos( TWOPI*i/(Nw - 1) ));
}
else {
for ( i = 0 ; i < Nw ; i++ )
H[i] = A[i] = S[i] = 0.54 - 0.46*cos( TWOPI*i/(Nw - 1) );
}
if ( Nw > N ) {
float x ;
x = -(Nw - 1)/2. ;
for ( i = 0 ; i < Nw ; i++, x += 1. )
if ( x != 0. ) {
A[i] *= N*sin( PI*x/N )/(PI*x) ;
if ( I )
S[i] *= I*sin( PI*x/I )/(PI*x) ;
}
}
for ( sum = i = 0 ; i < Nw ; i++ )
sum += A[i] ;
for ( i = 0 ; i < Nw ; i++ ) {
float afac = 2./sum ;
float sfac = Nw > N ? 1./afac : afac ;
A[i] *= afac ;
S[i] *= sfac ;
}
if ( Nw <= N && I ) {
for ( sum = i = 0 ; i < Nw ; i += I )
sum += S[i]*S[i] ;
for ( sum = 1./sum, i = 0 ; i < Nw ; i++ )
S[i] *= sum ;
}
}
void makehanning( float *H, float *A, float *S, int Nw, int N, int I, int odd )
{
int i;
float sum ;
if (odd) {
for ( i = 0 ; i < Nw ; i++ )
H[i] = A[i] = S[i] = sqrt(0.5 * (1. + cos(PI + TWOPI * i / (Nw - 1))));
}
else {
for ( i = 0 ; i < Nw ; i++ )
H[i] = A[i] = S[i] = 0.5 * (1. + cos(PI + TWOPI * i / (Nw - 1)));
}
if ( Nw > N ) {
float x ;
x = -(Nw - 1)/2. ;
for ( i = 0 ; i < Nw ; i++, x += 1. )
if ( x != 0. ) {
A[i] *= N*sin( PI*x/N )/(PI*x) ;
if ( I )
S[i] *= I*sin( PI*x/I )/(PI*x) ;
}
}
for ( sum = i = 0 ; i < Nw ; i++ )
sum += A[i] ;
for ( i = 0 ; i < Nw ; i++ ) {
float afac = 2./sum ;
float sfac = Nw > N ? 1./afac : afac ;
A[i] *= afac ;
S[i] *= sfac ;
}
if ( Nw <= N && I ) {
for ( sum = i = 0 ; i < Nw ; i += I )
sum += S[i]*S[i] ;
for ( sum = 1./sum, i = 0 ; i < Nw ; i++ )
S[i] *= sum ;
}
}
\ No newline at end of file |