03-17-2012 09:36 PM - edited 03-17-2012 09:39 PM
Hello all,
I want to do Rxy(n) on 2 signals using the 7954R FlexRIO which contains a Virtex 5 LX110 FPGA. The first signal is 25,000 samples (S) long and the second is a constant/reference 2,500 samples. The 25,000 S signal is simulating a 100 usec recording at fs=250MHz of a chirp sent into the Antarctic ice. The 2,500 S signal simulates a 10usec chirp which is sent with BW=20MHz and frequency range of 15-35MHz. I have 64 DSP48e's available on the FPGA but I am unsure of how to use these for this cross correlation.
So far, the only way I can conceive of doing this is to place 2,500 multiplies within a SCTL to minimize resource use and feed the reference chirp signal one sample at a time into each multiple (one-to-one pairing) and then implement a circular buffer to cycle through the 25,000 S of the received wave. If you can imagine a long line of 25,000 S and then matching the reference 2,500 S with the first 2,500 samples of the received signal, multiplying these and summing the result, then shifting to the next set within the reference signal (indexes: 2 - 2,501) multiplying the two and then summing the result, repeat this now for indexes 3-2,502 of the reference signal, and so on until we reach index 22,501-25,000 (All the while, each sample of the reference signal goes into one AND ONLY ONE multiply terminal and this will remain so forever). Well actually not forever; only until a different chirp signal is used in later research. The sweeping portion is NOT as important to me as the actual 2,500 element MAC of the two waves that I wish to do.
Another approach I considered was to use the DSP48e by doing something similar to what I mentioned above. The only difference is that instead of having 2,500 multiplies all happening at once, I would segment the input and output signal to happen at 64 sample intervals, store the output of these to be added later on to the other products of the next 64 samples and so on until 2,500/64 = 39 of these intervals have been performed and then the final output is saved as Rxy(1). This processs will then be repeated but with an offset of 1 (meaning that now we only take indexed 2-2,501 of the received signal)
*NOTE: I have begun my index count at 1 for all of this discussion.
Aboslutely ANY INSIGHT into this matter will be immensely appreciated. Thank you very much for reading this.
03-19-2012 03:40 PM
Hi Denn_Mann
I found a few resources that might be helpful as you explore options for doing cross-correlation on your Virtex 5:
The Xilinx forums (Specifically the DSP thread, there are a few existing 'cross-correlation on FPGA' discussions there. At the very least their forum users may have different insights)
NI Community Example: Fixed Array Cross-Correlation
The example here might not be exactly what you're looking for (judging from your detailed description), but it might help.
Tim W.
Applications Engineering
National Instruments
03-28-2012 04:11 PM
Thanks Tim, I will look into the advice Xilinx forums may provide.
Have a nice day,
-Daniel
04-02-2012 02:02 PM
Reading over the discussion forums, I realized that this Rxy(n) can be performed using an FIR filter with 1024 coefficients.
Thanks a lot for pointing me in the right direction.
-Daniel