Skip to content

Instantly share code, notes, and snippets.

@jsnyder
Created June 30, 2011 01:17
Show Gist options
  • Save jsnyder/1055434 to your computer and use it in GitHub Desktop.
Save jsnyder/1055434 to your computer and use it in GitHub Desktop.
Triggered sampling script
% Clear out old handles for devices
try
stop(ai)
delete(ai)
catch
end
% Settings
Fs = 1221; % Number of samples to collect per second
time_length = 60; % length of time to capture samples (seconds)
samples = Fs*time_length; % How many samples of data to get
channels = [0 2 3 4 1]'; % Channels to get data on
% Get Handle for Analog Input Device
daqinfo = daqhwinfo('nidaq');
daqid = find(ismember(daqinfo.BoardNames, 'PCI-6259')==1);
ai= analoginput('nidaq', daqinfo.InstalledBoardIds{daqid});
% Apply settings to device
addchannel(ai,channels,'in');
setverify(ai.Channel,'InputRange',[-5 5]);
setverify (ai,'SampleRate',Fs);
%setverify(ai,'TriggerType','HwDigital');
%setverify(ai,'TriggerCondition','PositiveEdge');
setverify(ai,'InputType','SingleEnded');
setverify(ai,'SamplesPerTrigger', samples);
%setverify(ai,'TriggerRepeat', 20);
setverify(ai,'ClockSource','ExternalScanCtrl');
setverify(ai,'ExternalScanClockSource','PFI1');
%setverify(ai,'ChannelSkewMode','Manual');
%setverify(ai,'ChannelSkew',4e-6);
%Collect Data
start(ai);
%%
wait(ai,time_length+0.5);
[data, dtime, abstime,events]=getdata(ai, ai.SamplesAcquired);
flushdata(ai); % get rid of any queued data
% evts = find(isnan(data));
% mean_data = [];
% mean_time = [];
% std_data = [];
% cur_time = 0;
% for evt = evts'
% cur_data = data(evt+2:evt+10);
% cur_time = dtime(evt+2:evt+10);
% mean_time = [mean_time; mean(cur_time)];
% mean_data = [mean_data; mean(cur_data)];
% std_data = [std_data; std(cur_data)];
% end
% figure(1);
% plot(mean_time,mean_data);
% std(mean_data)
% figure(2);
% plot(data(evt+1:evt+10))
data2 = data./1250;
%%
data = data2(:,end);
figure(2); clf;
udata = data;% - mean(data);
windowSize = 16;
sdata = filtfilt(ones(1,windowSize)/windowSize,1,udata);
figure(1); clf;
%subplot(2,1,2);
plot(dtime,sdata);
xlabel('Time (sec)')
ylabel('Voltage')
L = length(udata);
NFFT = 2^nextpow2(L);
UDATA = fft(udata,NFFT)/L;
SDATA = fft(sdata,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
figure(2); clf;
% subplot(2,1,1);
semilogy(f,2*abs(UDATA(1:NFFT/2+1)));
set(gca,'xlim',[0 0.5]);
ylabel('Magnitude Voltage')
title('Unfiltered (input mag)')
% subplot(2,1,2);
% semilogy(f,2*abs(SDATA(1:NFFT/2+1)));
% set(gca,'xlim',[0 0.5]);
% xlabel('Frequency (Hz)')
% ylabel('Magnitude Voltage')
% title(['Filtered (input mag), windowSize=' num2str(windowSize)])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment