= Symbol Synchronizer (polyphase filter bank) = This component recovers symbol timing information using a polyphase filter bank for simultaneous matched filtering and decimation. * [source:experimental/components/SymbolSyncPoly development trunk] * [http://ossie.wireless.vt.edu/documentation/components/SymbolSyncPoly/index.html code documentation] == Profiling results == Here are the results of some profiling of the SymbolSyncPoly component using [http://oprofile.sourceforge.net oprofile]. For information on how to get these or similar results please see the [wiki:Profiling] page. {{{ CPU: P4 / Xeon with 2 hyper-threads, speed 3391.93 MHz (estimated) Counted GLOBAL_POWER_EVENTS events (time during which processor is not stopped) with a unit mask of 0x01 (mandatory) count 100000 GLOBAL_POWER_E...| samples| %| ------------------ 216324 37.7020 SymbolSyncPoly GLOBAL_POWER_E...| samples| %| ------------------ 172100 79.5566 libsigproc.so.0.0.7 20587 9.5167 SymbolSyncPoly 10011 4.6278 libomniORB4.so.0.7 4588 2.1209 libc-2.4.so 2786 1.2879 libstandardInterfaces.so.0.0.6 1885 0.8714 libpthread-2.4.so 1753 0.8104 ld-2.4.so 1474 0.6814 libm-2.4.so 494 0.2284 libstdc++.so.6.0.8 360 0.1664 libomnithread.so.3.2 279 0.1290 anon (tgid:27975 range:0xfc8000-0xfc9000) 4 0.0018 libomniDynamic4.so.0.7 1 4.6e-04 libossieidl.so.0.0.4 1 4.6e-04 libossieparser.so.0.0.4 1 4.6e-04 libxerces-c.so.27.0 }}} Annotating {{{libsigproc.so.0.0.7}}} produces the following results for the FIRPolyphaseFilterBank filter class (revision [source:SigProc/trunk/SigProc/filters.cpp#3805 3805]). Notice that nearly 75% of the CPU time is spent in computing the dot product. {{{ /* * Total samples for file : \"/home/jgaeddert/src/SigProc/filters.cpp\" * * 144909 84.1394 */ ... :/// compute filter output from current buffer state using specific filter :void SigProc::FIRPolyphaseFilterBank::ComputeOutput( : short &y, // output sample : unsigned int _b // filter bank index 2196 1.2751 : ) /* SigProc::FIRPolyphaseFilterBank::ComputeOutput(short&, unsigned int) total: 143356 83.2376 */ :{ : // Ensure the requested filter bank index does not exceed the number : // of filters actually in the bank 425 0.2468 : if ( _b >= Npfb ) : { : std::cerr << \"ERROR: SigProc::FIRPolyphaseFitlerBank::ComputeOutput, \" : << \" index exceeds filter bank size (\" : << _b << \" > \" << Npfb << \")\" << std::endl; : throw 0; : } : : // Initialize floating point value for output : /// \\todo make this compatable with FPM : float yf(0.0f); : : // Set B to memory block in filter bank array : unsigned int B; 25 0.0145 : B = _b*h_len; : : // Accumulate (apply filter) 29767 17.2838 : for (unsigned int i=0; i SHRT_MAX ) { : y = SHRT_MAX; : } else { 3062 1.7779 : y = (short) yf; : } : 1990 1.1555 :} }}}