Консультация № 200887
20.05.2021, 17:14
0.00 руб.
0 0 0
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Нужно переписать функции написанную на СИ на язык C#.
Код:

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 );
}


Если добавите комментарии, будет совсем супер.

Обсуждение

Форма ответа