Hello Philip,

thank you for coming back on this subject.
I modified the library developed by Gregory Heckler, the source code is here:

http://github.com/gps-sdr/gps-sdr/tree/6153c01317f34a26b2fb41926505b9d97f764e90/objects

To give you an example, the DIT butterfly looks like this:


#define BUTTERFLY_FWD(_A, _B, _W)                                       \
  __asm__ ("LDR    r0, [%0]            \n\t"                            \
           "LDR    r2, [%1]            \n\t"                            \
           "MOV    r3, #0              \n\t"                            \
           "SHADD16  r0, r0, r3        \n\t"                            \
           "SHADD16  r2, r2, r3        \n\t"                            \
           "LDR    r3, [%2]            \n\t"                            \
           "SMUADX r5, r2, r3          \n\t"                            \
           "SMUSD  r4, r2, r3          \n\t"                            \
           "ADD    r5, r5, #8192       \n\t"                            \
           "ADD    r4, r4, #8192       \n\t"                            \
           "ASR    r4, r4, #14         \n\t"                            \
           "PKHBT  r3, r4, r5, LSL #2  \n\t"                            \
           "QSUB16 r2, r0, r3          \n\t"                            \
           "QADD16 r0, r0, r3          \n\t"                            \
           "STR    r0, [%0]            \n\t"                            \
           "STR    r2, [%1]            \n\t"                            \
           ::"r" (_A), "r" (_B), "r" (_W)                               \
           :"r0", "r2", "r3", "r4", "r5", "memory")



and just uses ARM assembly (NEON is complicated to use with this basic
radix2 implementation).

As user space, I am using the Angstrom image v0.92:

http://www.gumstix.net/overo-gm-images/v0.92/

on my Overo Water. I use the CodeSourcery 2009q1 free toolchain, even
though today I've been suggested to try something else by Koen.


Regards,
Michele




> Michele Bavaro wrote:
>> Hello everyone,
>>
>> I'm porting my software GPS receiver on the OMAP, therefore I need fast
>> signal processing libraries, and in particular FFTs.
>>
>> I have somehow adapted an open source library to do radix2 butterfly
>> using
>> ARM assembly. It works, but my 256 points fixed point 16 bit FFT still
>> takes about 60us. That's 12 times slower than 4.7us advertised with
>> NEON!
>
> What open source FFT library? You could try posting the code and seeing
> if anyone has any suggestions. (Post the code the Beagle list also,
> there are some good NEON people there)
>
>> Frustrated, I downloaded and compiled with the evaluation version of
>> RVCT
>> the openMAX libraries, but I don't manage to link the object file with
>> code compiled with the CodeSourcery gnu toolchain.
>
> What user space are you using? Angstrom or something else. You'll need
> to use a tool chain that matches your user space.
>
> Philip
>
>>
>> I tried to translate the assembly, but unfortunately it's a very
>> challenging task for me.
>>
>> Can someone point me in the right direction on this subject?
>> Should I keep working on my fixed point 16 bit FFT? Should I buy the ARM
>> toolchain and port all the software? Should I just give up and try using
>> the DSP maybe?
>>
>> Thank you in advance for any reply, and good luck with the OpenSDR,
>> which
>> I'm watching very closely.
>>
>> Cheers,
>> Michele
>>
>>
>>
>


Reply via email to