02-27-2012 05:07 AM
Dear NI-forum users.
I'm having a bit of problem getting the PCI-5640R Software defined radio tranceiver card to work, and am hoping that you could help me to get it to work to my needs.
At this time, my only plan is to use the card as a digitizer, and the input to the card is a signal from a radar which I plan to do some analysis on. The radar signal is intercepted at an IF frequency around 30MHz, and the bandwidth is less than 5MHz. The pulse repetition frequency is in my example set at 500Hz, and the parts I wish to analyse are within 300km. This is the reason for the short recording length, 6250 samples. The clock I send to the card is external, and at this time I'm only using a 10MHz sine wave from a Truetime GPS.
Trigging of the sampling is supposed to be external as well, but during testing I'm using software trigging using a timed loop set at 500Hz.
As you can see from my example, I've only set up a simple test to illustrate the problem. I'm configuring the 5640R card, setting up a timed loop to simulate the trigging, and iterating a while-loop for data retrieval every time a software trigger is sent. I'm fetching the data for every trigger occurence.
The problem I'm having, is that the repetition rate of the data collection while loop is only about 8-9 Hz, and not the 500Hz I'm aiming at. The source of this low rate is the "5640R Initiate.vi", which is calling a function named "5640R Initiate Acquisition.vi". This again is calling "PCI-5640R API.lvlib:_ni5640R Flush AI FIFOs.vi", which seems to be the function using up most of the time.
I have trid to avoid using the "5640R Initiate.vi" by setting it outside the while-loop, but this seems to be the function that is listening for the trigger. If set outside the loop, only one data recording is made. The only way I have been able to get a higher repetition rate is to use continuous recording mode, but this is not viable. More in-depth analysis of the driver code is difficult, since the diagrams are password protected.
Do anyone know how to get a higher recording rate when using the 5640R driver? Does it really need to flush the FIFOs for every recording that is done? If not, have anyone done this by using the FPGA?
Best regards from
Idar A. Andersen
03-14-2012 11:08 AM
One thing I want to note is that timed loops run in a Windows environment are not deterministic. That is, they will not necessarily execute in the time that you specify. You don't have control over the threads on the system, and if there are a lot of other things competing for CPU usage, your timing could change from loop to loop. The 8-9 Hz rate that you are seeing seems about right.
Timed Loops are more designed for systems that have determinism, such a Real-Time systems and LabVIEW FPGA. You can find more information about Real-Time Operating Systems (and how they differ from non-deterministic operating systems) in this tutorial.
But before we put the cart before the horse, I want to understand a bit more about your application. From what you wrote, it seems like the software triggering is a temperary solution until you implement hardware timing. You will be able to do hardware triggering at a much higher rate then you will with software triggering. I would focus on working on implementing that. Do you have a function generator or DAQ card that could act as a trigger during development? What is your final application's goal?
If you do wish to try to program something on the FPGA, I would reccomend taking a look at the 5640R Getting Started Guide, as it will walk you through creating your first LabVIEW FPGA VI if you are not familiar with LabVIEW FPGA.