I am trying to plot and make online calculation on analog data acquired through a national instrument device. I am using the following code. With this code I am able to plot the acquired data live, on two different subplots while writing data on file.
I would like at the same time to perform operations while data acquisition goes on. something simple: are voltage level passing a certain threshold? what's the freq of the signal ? I added a line (now commented) in the logData function... in the example I am trying to calculate the mean of the acquired data chunk plotted in that moment. However if I run the script it gives me a lot of warnings (it calculates the mean though).
If I try to perform slightly more complex operations I get no outputs and a lot of warnings about errors... I guess it could simply be that acquisition is too fast to perform any of these operations... would it be possible to buffer the data somehow to allow this to happen? I am not even sure if that's the problem, perhaps it is a matter of adding more listeners/callbacks/functions ? I tried to test these ideas but I had no success... I would be glad to get any feedback ! Thanks
s = daq.createSession('ni');
s.DurationInSeconds = 10;
ch4.TerminalConfig = 'Differential';
ch5.TerminalConfig = 'Differential';
lh = s.addlistener('DataAvailable', @(src, event) logData(src, event, fid1));
function logData(src, evt, fid)
data = [evt.TimeStamps, evt.Data]' ;
xlabel('Time (s)'), ylabel('Amplitude (V)'), legend('ai0')
xlabel('Time (s)'), ylabel('Amplitude (V)'), legend('ai1')