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


Глава 1 Глава 2 Глава 3
// инициализируем группу равноотстоящих волновых фильтров // заново инициализируем, если параметр ширины полосы изменился 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
Содержание раздела