RF Measurement Devices

cancel
Showing results for 
Search instead for 
Did you mean: 

Full bandwidth IQ capture using 5600 and 5122e

Hi

I have a PXI 5600 downconverter and a PXI 5122e digitizer. I want to capture 1 second of IQ data at 50MSs-1. I have sorted out the stream-to-disk part of the problem via a rather handy VI and have my large binary data file consisting of 1 sec of 50MSs-1 IF data with a bandwidth of 20MHZ (centred on 944 MHz for those who are particularly interested). The problem is I can't use the MT Convert IF to IQ VI because my controller (dual core, 1 Gig RAM) runs out of memory whenever I try to use that VI with such large data files. I just want to convert the entire IF sequence to IQ; no filtering is required during the conversion stage, but it is vital that I maintain the full bandwidth. I presume a simple IF to IQ conversion is pretty simple, is there another VI I could use or can anyone suggest a simple and quick way to do it (I'm a labview novice).

Cheers
Ramsey
0 Kudos
Message 1 of 11
(10,449 Views)
Hi Ramsey,
The problem you are facing is that you're running out of virtual RAM by passing so massive a data block to the VI. The solution to this is to convert your data in chunks.

The MT Convert IF to IQ VI is not set up to work with chunked data, but there is another VI that you can use for this. The VI is called MT Downconvert Passband, or Downconversion. In order to work on chunked data, you simply need to place this VI in a loop, and send smaller  chunks of your IF data to it. The key is the 'Reset' input on the VI. Wire a "equals 0" LV primitive from the comparison pallette to the iteration counter terminal of the loop structure. That way, the output of this comparison primitive is True on the first iteration, and False on all others. You can use this as the input for the Reset input, so the VI will reset on the first iteration of the loop, and each subsequent loop expects data that is continguous from the previous iteration.

Regards,
Andy Hinde
National Instruments
Message 2 of 11
(10,448 Views)
Hi Andy

Thanks for the help, I am not sure how to chunk the data though, I starting writing a producer/consumer loop but I don't think queueing will be the right way to do it as I can only flush the queue, not choose to extract a fixed number of samples from it. Should I write the entire file to an array then extract data row by row to convert it to IQ, something like that? I'm also wary of problems at the edges of each chunk due to the filtering within the downconversion, once I piece it all together will the IQ sequence be exactly the same as it would have been if the entire sequence was processed in one go?

Thanks
Ramsey
0 Kudos
Message 3 of 11
(10,435 Views)
Hi Ramsey,
As for the question about the data at the edges, that is the beauty of the Reset input. When Reset is False, it doesn't reset digital filters and the data provided at one iteration is assumed to be a continuation (in time) of data from the previous iteration. The Reset input is designed to allow for 'chunked' processing.

As for Producer/Consumer, you could transfer the entire IF waveform from Produce to Consumer loop, but in your Consumer loop also then split it up. You could also write the data to a file and then process it, but it seems like this may be an unneccessary step.

If you continue to have difficulty implementing the 'chunked' analysis, let us know and we can perhaps provide some type of example.

Regards,
Andy Hinde
National Instruments


Message 4 of 11
(10,431 Views)
Hi Andy

Its great to hear that the filtering won't be a problem with chunked data, and some kind of example would be great as I'm currently bashing my head against my monitor trying to figure out why I can't get things up and running. I'm currently considering reading the pre-captured data out from the binary file using the read from binary file VI, then using the build array vi to package the output into an array. Thats all fine, Im now struggling with getting that array chunked and sent through the downconvert VI. Eventually I will need to adapt the stream-to-disk vi  to stream IQ to disk, and an example based around either problem would be great.

Many (many) thanks
Ramsey


p.s. sorry I'm not attaching my current VIs but I think you might be offended by my hacked-about attempts. I'm a Matlab man you see......
0 Kudos
Message 5 of 11
(10,417 Views)

In terms of a good producer/consumer model, you can refer to the following VI for a nice model of how to do it efficiently.

Check out the following page (which you can get to from ni.com/streaming):

http://zone.ni.com/devzone/cda/epd/p/id/5273

There is a VI there called niScope Stream to Disk Queues Win32 File IO.vi

It shows how to take data from a digitizer (producer), put the data in a queue and pass it to another (consumer) loop that writes the data to disk.  You would be doing the opposite, reading the data from disk in one loop and sending it to the downconversion loop for processing.

Neil F.

Modular Instruments Software Engineer

National Instruments

Neil Feiereisel
Principal Engineer, Modular Instruments, National Instruments
0 Kudos
Message 6 of 11
(10,394 Views)
Thanks for the help - I'm making some progress and am using that vi to stream my data to disk already, but am having difficulty implementing a hardware trigger to control the timing of data capture - I can see that the current setup is to increment a read pointer, and I can't see an easy way of implementing the hardware trigger. If I change the trigger setup vi (marked "5") to accomodate my digital trigger, then also change the niscope property node ("6a") from read pointer to trigger, the stream to disk vi only appears to read the single element corresponding to the trigger event. Is there someway to set it to only start using the read pointer once the trigger has arrived?

By the way, on the topic of the stream to disk vis, I had to make a tweak to get it to actually read all the data out from the queue - the current setup within the consumer loop is to stop on an error or complete acquistion from the digitiser, however this leaves any data still in the queue. I added a check that the number of elements in the queue is zero AND the acquisition has completed in order to actually read out the full queue.

Thanks
Ramsey
0 Kudos
Message 7 of 11
(10,377 Views)

Hi NeilF,

 

I happen to see this post. Currently we also have a similar project that involves IF Streaming. However we encounter memorymanager.cpp errors when we acquire spectrum on 1 RFSA (With Averaging) and perform IF Recording.

 

Whenever we acquire spectrum with averaging configured to the RFSA and perform IF Recording, this memorymanager.cpp error will occur and labview crash. We suspect the virtual memory is insufficient, we are still trying to resolve this issue. any suggestion on the possibilities?

 

Thanks!

0 Kudos
Message 8 of 11
(9,117 Views)

Hi HWJ,

 

It would be usefull if I could have a little more information about your set up so that I can look into your problem.

 

What version of LabVIEW are you using?

What version of your instrument drivers are you using?

 

Would you also be able to provide some more information about the computer you are running this on?

 

 

Thanks,

 

Thomas Clark

Applications Engineer
National Instruments UK & Ireland
0 Kudos
Message 9 of 11
(9,080 Views)

Hi,

 

We deployed our Application as LabVIEW 8.5.1

 

For the drivers, RFSA 2.0.6

Scope 3.4.1

 

We deployed this application on two different types of PXI. They are PXIe-8130(Controller) in PXIe-1065 Chassis and PXI-8105 Controller in PXI-1045. They both are upgraded to 2GB RAM. There are 2 sets of RFSAs used in the Chassis. One is used for Spectrum Acquisition, the other is for IF Recording.

 

We observe that this error line 406 or line 437 occurs when we first acquire spectrum (with averaging configurations) and start IF recording with the other RFSA. The application will close after this error occurs, it seems LabVIEW crash due to insufficient memory.

 

However, these 2 functions can occur smoothly when no averaging is done. We have tried increasing the virtual memory, but this error will still occur inconsistently.

 

0 Kudos
Message 10 of 11
(9,060 Views)