I am using RFSA to acquire complex IQ data at 50MS/s. How can I stream this data at 100 MB/s (as one sample is 2 bytes so this makes 100MB/s) to 1 TB RAID?
Sorry, but you can't.
The 100 MB/s of ethernet is 100 megabit per second so basically 12 megabyte per second.
Even with Gigabit (120 megabit per second) you would have issues continually streaming data, I advise you to look at some faster connection than ethernet. (SATA for instance).
If you are returning a complex waveform at 50 MS/s, you are effectively returning 4 bytes of data per sample (2 bytes for I and 2 bytes for Q). This means that you will need to stream data at around 200 MB/s. Depending on what kind of RFSA hardware you are using, the maximum throughput will vary. For a NI-5661, since this uses the PXI bus, the theoretical bandwidth is limited to 133 MB/s, whereas a NI-5663 is based off of the PXI Express architecture which can theoretically reach 1GB/s (since the NI-5622 digitizer on the NI-5633 is a x4 Express card where each lane has a bandwidth of 250MB/s). Therefore, the only way you can achieve this bandwidth is to use our NI-5663. That being said, you still need to be able to write data to a HD fast enough to keep up with these rates. In most systems, the HD will be the bottleneck and therefore, to stream at these rates, you will definitely need to use a RAID array. Please take a look at the following links for more info.
I hope this helps. Please let me know if you have any questions
I am using 5661 and a 1TB RAID. What i understood by your reply was that I cant stream 200 MB/s because max bandwidth is 133 MB/s.
So is there any way in which i can write 1 byte for I and 1 for Q?? In this way the bandwidth required for data transfer will reduce to 100 MB/s ?
That is correct, the bus limitations on the 5661 will not allow you to stream at 200 MB/s.
As for reducing your IQ data to 1 byte each, you may be able to do this by pulling out the NI-Scope session from your RFSA session and changing the Binary Sample Width property (found under Acquisition) using the niScope property node as this will reduce the samples to 1 byte. To get the NI-Scope session handle from the RFSA instrument handle, you will need to use the niRFSA Get NI-Scope Session.vi which is not found in the LabVIEW RFSA palette, but rather in the niRFSA.llb in your C:\Program Files\National Instruments\LabVIEW X.X\instr.lib\niRFSA directory. (Replace X.X with your version of LabVIEW).
Note that even after making these changes, you may not reach exactly 100 MS/s as streaming is a very system dependent specification, but at least you will be closer to your target than before. Please let me know if you have any other questions.
Thanks a lot for your prompt reply..
I didn’t know about the property. When I had 2 bytes for I and 2 bytes for Q, the binary sample width was 32. Now if I want one byte for each, then binary sample width should be set to 16. When I try doing this the program returns an error. How can I make this work and compatible with other settings?
I am using the ref code to check this property (which is available of the website).
After looking into this issue a bit further, I have discovered that we may not be able to change the IQ data to 1 byte each contrary to what I have stated in my previous post. I would like to correct myself in saying that the binary sample width must be left to 32 bits as this is a requirement in order to process the data in the OSP (Onboard Signal Processing) of the NI-5142. Moreover, since the RFSA driver only allow you to fetch Complex Data, we may not be able to retrieve our data in any other format than in CDB (Complex Double) format. That being said, I believe I may have found a way around this problem. What we need to do is configure the downconverter and digitizer separately, that is, use the NI-5600 in downconverter only mode and manually configure the NI-5142 to perform our quadrature downconversion and fetch our data in I8 format. You can use the VI in the following KnowledgeBase article to perform your acquisition. Note however that you will have to manually change the fetch format to I8 and scale your data back so it can be read.
In order to make any sense of the raw I8 format, you must remember to appropriately scale the data as shown below. Remember that by reducing your fetch format, you are effectively reducing the overall resolution of your IQ data.
I hope this helps.
I tried streaming by configuring the digitizer separately. Here I have downconverter programmed to desired RF frequency and I give IF frequency in center frequency parameter of the digitizer.
At 25MS/s code works fine and never overflows, but at 50MS/s after sometime the digitizer memory overflows. It gives error that requested samples have been overwritten so they aren't available for fetching.
I have attached the code. What should be the appropriate settings for min number of records, number of samples to fetch and fetch transfer block size to avoid overflow? Can you please look at the code to see where am i going wrong.
Parameters such as number of samples to fetch, transfer block size, record length are all parameters that can affect streaming. Know that for every transfer, there is an overhead associated with the transfer protocol and therefore there will be an optimal setting for achieving maximum rates.
I cannot say exactly what settings you would need to optimize your streaming as this will be highly system dependent and you may need to run a couple of tests to find the optimal settings. I also want to let you know that at 50 MS/s we are attempting to transfer 100 MB/s and although this is below the theoretical limit, it may be possible that this number may not be achievable with your system in practical applications. If you are still having issues attaining this transfer rate, I recommend aiming for a lower rate.
I hope this helps clarify some things.
When you say that optimal streaming would be "highly system dependent", can be please specify what specs for a system are required to acieve that?
and what "tests" i can do to find the optimal settings for maximum rates??