заново инициализируем, если параметр ширины





// инициализируем группу равноотстоящих волновых фильтров
// заново инициализируем, если параметр ширины полосы изменился
if(width != oldwidth) {
lper ==30.0; // фильтр длинных периодов
sper = 3.О ; // фильтр коротких периодов
fcount =20; // число фильтров в группе
ratio = exp (log (lper / sper) / (fcount - 1) ) ;
per = sper;
for(k = 1; k <= fcount; k++) (
filter[k- 1].build_kernel(per, width);
per *= ratio;
}
oldwidth = width;
}
// рассчитываем выходы фильтров и откорректированный спектр мощности
// если матрицы (таблицы) пустые, то присваиваем им значения
if(inphase == NULL) inphase = matrix(l,fcount,1,MAXBAR);
if(inquad == NULL) inquad = matrix(1,fcount,l.MAXBAR);
if(power == NULL) power = matrix(1,fcount,1.MAXBAR);
for(k = 1 ; k <= fcount; k++) {
filter[k- 1] .apply (cls, inphase[k] , inquad[k], nb);
for(cb = 1; cb <= nb; cb++)
power [k] [cb] = (inphase [k] [cb] * inphase [k] [cb] +
inquad [k] [cb] * inquad [k] [cb] )
/ filter[k- 1].period();
}
// сохраняем спектральный анализ выборки в файл
// эта процедура проводится для отладки
// #define WRITESAMPLE
#ifdef WRITESAMPLE


FILE *fil = fopen("test.dat", "wt");
for(cb = nb- 1200; cb < nb; cb++) {
domperndx = 0 ;
peakpower = - 1.0;
for(k = 1; k <= fcount; k++) (
if(power[k][cb] > peakpower) {
peakpower = power[k] [cb] ;
domperndx = k;
} )
phase = (180.0 / PI) * atan2 (inquad [domperndx] [cb] ,
inphase[domperndx] [cb]);
for(k = 1; k <= fcount; k++) (
if (power [k] [cb] > 0.90 * peakpower)
fprintf(fil, " **");
else if (power[k][cb] > 0.75 * peakpower)
fprintf(fil, " ++");
else if (power[k][cb] > 0.5 * peakpower)
fprintf(fil, " + ");
else
fprintf(fil, " ");
)
fprintf(fil, "%4d %7d %7d %7d %8.1f\n",
(int)filter[domperndx- 1].period(),
(int)(inphase[domperndx] [cb]),
(int)(inquad[domperndx] [cb]),
(int)phase, cls [cb]);
}
fclose(fil);
exit(0);
#endif
// используется для отладки сигналов
// #define SIGNALDEBUG
#ifdef SIGNALDEBUG
FILE *fil = fopen("testsig.dat" , "wt");
#endif

Содержание раздела