I'm new to LabVIEW and am trying to adapt and extend a processing routine from Signal Express.
I need to accurately measure transients of a weak bipolar square wave signal superimposed on a non-zero DC background. [I'm using a PXI-4495 16 channel DSA board and PXI-8106 controller with 4 GB of RAM.] The frequencies are very low (0.5 to 7.5 Hz) but precisely controlled so stacking and robust signal processing works very well in extracting very low amplitude signals in a noisy environment. As an added complication, the sensors used have a 15.6 kHz sinusoidal driving frequency of comparable or greater magnitude than the low frequency signal of interest that has to be removed.
The naive approach of simply measuring at a suitable sampling frequency (in this case, 7800 Hz) and letting the DSA antialiasing filters handle things does not work well and creates strong ringing around signal steps. By trial and error, I found acceptable results in SE by 12x oversampling at 93.6 kHz, applying a multitap Butterworth FIR low-pass filter, then carrying out a simple 12 point average to obtain a clean waveform. This works fine for short sampling intervals, but I need to sample for at least 300 seconds on three to fifteen channels. SE cannot handle the memory requirements.
I've been going through the help files, discussion forums, shipping examples and am still running into roadblocks. Can anyone tell me if it's feasible to do the following, and if so offer some hints about how to get started? Each individual step seems straightforward, but getting the continuous high-speed sampling in a 300 second loop is the first problem, and I'm not sure if that's even the best approach.
1) sample 15 analog voltage channels at 93.6 kHz for 300 seconds (28M points exceeds DAQ Assistant Express VI limit of 16.78M)
2) apply a 31-tap FIR low-pass filter to each channel
3) downsample all channels to 7800 Hz using simple 12 point averaging
4) stream the 15 channel filtered, downsampled data to disk in TDMS format
I do not see any reasons as to why you would not be able to accomplish steps 1-4. For continuous input, the DAQ Assistant Express vi is not always optimal. As such, to avoid the memory issues, use standard DAQmx functions, referring to the continuous acquisition shipping examples for techniques. Steps 2 and 3 can be accomplished with the signal processing functions in LabVIEW, while step 4 can be accomplished with the file i/o functions.