Hello everyone,
We are on the stage of optimizing our project (gr-isdbt).
One of the most consuming blocks is OFDM synchronization,
and in particular the equalization phase. This is simply the
division between the input signal and the estimated channel
gains (two modestly big arrays of ~5000 complexes for each
OFDM symbol).
Until now, this was performed by a for loop, so my plan was to
change it for a volk function. However, there is no complex
division in VOLK. So I've done a rather indirect operation
using the property that a/b = a*conj(b)/|b|^2, resulting in
six lines of code (a multiply conjugate, a magnitude squared,
a deinterleave, a couple of float divisions and an
interleave). Obviously the performance gain (measured with the
Performance Monitor) is marginal (to be optimistic)...
Does anyone has a better idea? Implementing a new kernel is
simply out of my knowledge scope.