02-21-2012 09:27 PM
Hi there!
I am trying to optimize a data acquisition program that our group is using for mass spectroscopy experiments using a Ti:Sapph laser with a repitition rate of 1KHz. The way the experiment works is that a photodiode picks up the pulse as it enters our chamber, which acts as a trigger on our scope. After this trigger, the same pulse goes on to ionize a gas - where the fragments are separated and picked up by our detector, the signal from which then goes to our Tektronix 3054B Oscilloscope, every time the photodiode is triggered.
Our problem: too much noise at low signals. A quick remedy seems to just increase the averages on the scope, perhaps up to the maximum of 512. Since the signal we are looking at is repeated according to the rep rate of our laser system (1 KHz), we would suspect that even with taking 512 "pictures" of our spectrum would not take much time. It does indeed though! It takes a full 16 seconds to take one full, averaged shot. Yowza!
I have done quite a bit of poking around on this and cannot find a sound solution. I can either acquire a new single acquisition each time (initiate, acquire, fetch, close) or put it in continuous acquisition mode. The problem with the continuous acquisition is that it is a "rolling" average. For example, if I stick a function generator up to the scope and change the amplitude, you can see the scope continuously averaging for ages.
This is a problem because we are in fact not taking one single picture, we are taking several (hundreds, perhaps thousands even) of slight variations. The amount of time to make these changes is nearly instantaneous -- but I do not want to scope to average the current configuration with the previous configuration. I can add a "wait" function, but seeing as how the acquisition is continuous, depending on how different the output signal is the longer I will have to "wait" for it to give me a real average.
So.. my question is: what is the quickest way to get a series of clean, highly averaged signals from a triggered signal on a TDS3000 series scope?
I will try to provide some example code tonight; the main program is enormous. I am using LV 2011 32-bit and the newest firmware and labview drivers.
Thanks yall!
Wes
02-22-2012 07:07 AM
What is the sampling rate and the number of points in your scope settings?
Cheers
Edgar
02-22-2012 11:41 PM
I am not sure of the sampling rate, maybe something like 2.5Gs/s or something. The number of points is 10,000.
02-23-2012 03:19 AM
I mean your actual sampling rate setting not the maximum. You can read the sample rate on the scope's screen. Number of points over sampling rate gives you the record length in seconds. And you must add some latency due to the scope.
Maybe this is what limits your timing.
If this is the case you can increase the sampling rate or decrease the number of points.
02-23-2012 08:27 AM
At 2.5GS/s, and a 1kHz rep rate, it sounds like you are fetching over a gigabyte of data total from the scope. While you can collect 512 points in half a second (assuming a continuous acquisition), getting that data from the scope to the computer may be the problem. What is your interface? GPIB? USB? Ethernet?
Assuming this is your problem, you can try one of the following (some of which have already been mentioned):
Good luck. Let us know if you need more help.
02-24-2012 07:21 PM
Thank you everyone for the thoughtful replies.
Stupid question.. how do I read in only the points I care about? I thought that's what the scope was already doing, as it only "fetches" the waveform which is already on the scope, which I crop around the data that I care about.
Wes
02-27-2012 07:44 AM
Not really a stupid question, more of an invalid suggestion. I gave you a suggestion appropriate to the NI-SCOPE API, not the IVI one. My apologies. However, letting the scope do the averaging, if it is capable, would also help. Set the acquisition type to averaging, set your number of averages, then acquire. You will only need to fetch a single waveform - the finished average.
02-27-2012 10:31 AM
Wes,
You may want to change your DAQ parameters, that is, set the scope for a "Single Acquisition Sequence," opposed to the "Run/Stop" button only. In this mode the scope will stop automatically when it reaches the number of averages you specifiy. You can setup a RQS with the scope to let you know when it is finished acquiring data, or you can use an operation complete query. (I believe the TEK command would be STOPAFTER SEQ) The advantage is then when you take a new data set, the averages will restart.
Cheers,
Andrew
05-23-2012 06:49 AM
Wes
Your question is very interesting as a writing a program to take M-S from TDS3000, It take much longer time to average .and also your scope program is very like what i want to writing. Have you slove your problems? using the driver from NI ? we have write a program using VB, after average on scope then save the averaged mass spectrum to computer is faster.
Can you provide some example code.
Thanks
Sizuo
08-09-2012 02:59 AM
Thank you for all the replies.
I have extensively programmed and re-programmed my DAQ software and can only get the scope (tds-3054b) to take ~16 or so seconds to acquire 512 waveforms (2khz trigger, 1us/div,1mV/div). It is indeed "acquiring" because I quarry the scope and this is the reply, but to me it makes no sense that if the signal is repeated 2000 times a second, then it would only take a fraction of a second to acquire 512 times. Is it a processing speed issue?
Sizuo: what sort of speed improvement do you achieve with your VB program? Can you provide any more detail?
Thank you,
Wes