void DC_block( float * data, long Nsamples )
{
float *p;
long count;
float facc = 0.0f;
long ofs = SEARCHBUFFER * Downsample;
p = data + ofs;
for( count = (Nsamples - 2 * ofs); count > 0L; count-- )
facc += *(p++);
facc /= Nsamples;
p = data + ofs;
for( count = (Nsamples - 2 * ofs); count > 0L; count-- )
*(p++) -= facc;
p = data + ofs;
for( count = 0L; count < Downsample; count++ )
*(p++) *= (0.5f + count) / Downsample;
p = data + Nsamples - ofs - 1L;
for( count = 0L; count < Downsample; count++ )
*(p--) *= (0.5f + count) / Downsample;
}
void FFTInit(unsigned long N)
{
unsigned long C, L, K;
float Theta;
float * PFFTPhi;
if( (FFTSwapInitialised != N) && (FFTSwapInitialised != 0) )
FFTFree();
if( FFTSwapInitialised == N )
{
return;
}
else
{
C = N;
for( FFTLog2N = 0; C > 1; C >>= 1 )
FFTLog2N++;
C = 1;
C <<= FFTLog2N;
if( N == C )
FFTSwapInitialised = N;
FFTButter = (unsigned long *) safe_malloc( sizeof(unsigned long) * (N >> 1) );
FFTBitSwap = (unsigned long *) safe_malloc( sizeof(unsigned long) * N );
FFTPhi = (float *) safe_malloc( 2 * sizeof(float) * (N >> 1) );
PFFTPhi = FFTPhi;
for( C = 0; C < (N >> 1); C++ )
{
Theta = (TWOPI * C) / N;
(*(PFFTPhi++)) = (float) cos( Theta );
(*(PFFTPhi++)) = (float) sin( Theta );
}
FFTButter[0] = 0;
L = 1;
K = N >> 2;
while( K >= 1 )
{
for( C = 0; C < L; C++ )
FFTButter[C+L] = FFTButter[C] + K;
L <<= 1;
K >>= 1;
}
}
}
void apply_filters( float * data, long Nsamples )
{
IIRFilt( InIIR_Hsos, InIIR_Nsos, NULL,
data, Nsamples + DATAPADDING_MSECS * (Fs / 1000), NULL );
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.