discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] OFDM on E100


From: Josh Blum
Subject: Re: [Discuss-gnuradio] OFDM on E100
Date: Sun, 13 Nov 2011 20:00:53 -0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20110929 Thunderbird/7.0.1


On 11/13/2011 04:59 PM, Nowlan, Sean wrote:
> It could be related to the limitations of the ARM processor on the
> E100. I haven't tried the OFDM examples. The workarounds at this
> point seem to be: help implement some of the ARM NEON optimizations
> in Volk to squeeze out more performance or switch back to an USRP
> running on a system capable of handling higher bandwidths, e.g., your
> USRP1 with (most likely) an Intel processor.
> 

It looks like the ofdm blocks are using a fair amount of multiply and
multiply const blocks:

> gr-digital$ find -name "*ofdm*" | xargs grep mult
> ./python/ofdm_sync_ml.py:        self.mixer = gr.multiply_cc();
> ./python/ofdm_sync_ml.py:        # The output theta of the correlator above 
> is multiplied with this correlation to
> ./python/ofdm_sync_ml.py:        self.mul = gr.multiply_ff()
> ./python/ofdm_receiver.py:            self.chan_filt = 
> gr.multiply_const_cc(1.0) 
> ./python/ofdm_receiver.py:        self.sigmix = gr.multiply_cc()
> ./python/ofdm_sync_pn.py:        self.corr = gr.multiply_cc();
> ./python/ofdm_sync_pn.py:        self.square = gr.multiply_ff()
> ./python/ofdm_packet_utils.py:    to get to a multiple of 8.
> ./python/ofdm_packet_utils.py:    # pad to multiple of 8
> ./python/ofdm_packet_utils.py:    up being a multiple of 512 bytes when sent 
> across the USB.  We
> ./python/ofdm_packet_utils.py:    is a multiple of 128 samples.
> ./python/ofdm.py:        @param pad_for_usrp: If true, packets are padded 
> such that they end up a multiple of 128 samples
> ./python/ofdm.py:        self.scale = gr.multiply_const_cc(1.0 / 
> math.sqrt(self._fft_length))
> ./python/ofdm_sync_pnac.py:        self.corr = gr.multiply_cc();

I bet many of these multiply consts could be simplified out. But, doing
little things like replacing the multiplier implementation with one
optimized with the SIMD unit makes a big difference, especially on a arm
where NEON >> FPU.

So, there is a multiply and multiply const for floats that has been
optimized in my gr-basic branch. You may want to try using those blocks
instead. http://gnuradio.org/cgit/jblum.git/log/?h=gr_basic

-Josh



reply via email to

[Prev in Thread] Current Thread [Next in Thread]