On Thu, 2016-05-12 at 16:24 -0400, [email protected] wrote: > Date: Wed, 11 May 2016 16:09:56 -0300 > From: Federico Larroca > To: [email protected] > Subject: [Discuss-gnuradio] VOLK division between complexes
> 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? I have a different idea, but I doubt it is better. The transformation w = Log (z) = ln|z| + jArg(z) transforms multiplication, division, power and root operations into addition, subtraction, multiplication and division operations respectively. So if c = Log(a), d = Log(b), then a/b = Exp(c-d) . If along with your complex division, you also have a lot of additional complex multiplcation, power, and/or (real) root operations to perform, then the transform *might* give you a savings. A savings would also be more likely, if you don't need to invert the transformation at the end (i.e. no need for z = Exp(w)). Regards, Andy > Implementing a new kernel is simply out of my knowledge scope. > Best > Federico _______________________________________________ Discuss-gnuradio mailing list [email protected] https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
