我正在尝试使用Matlab保存NiDaq数据。我有5个通道,必须在后台获取它们,以在Daq获取时运行其他代码。考虑到我使用的是1000 Hz采集速率,20 s长的采集时间,并且我有5个通道,因此我的数据应该是20000 x 5矩阵。取而代之的是,我得到的是2 x 37300矩阵,其中我的通道信号似乎混在这两个向量中。 这是代码
function acquireData
daqreset
devID = 'Dev1';
niOI = daq.createSession('ni');
niOI.Rate = 1000;
aI = niOI.addAnalogInputChannel( devID , 1:5 , 'Voltage' );
for i = 1:5
aI(i).InputType = 'SingleEnded';
end
niOI.DurationInSeconds = 20;
prepare(niOI);
fid = fopen('log.dat','w');
lh = niOI.addlistener('DataAvailable',@(src,event)saveData(fid,event));
niOI.startBackground();
%%% Code that does something else %%%
Panel_com('set_pattern_id', 11);
Panel_com('set_position',[(round(rand*96)+1) 1]);
pause(1);
Panel_com('set_mode', [4 4]);
Panel_com('set_posfunc_id',[1 2]);
Panel_com('set_posfunc_id',[2 2]);
Panel_com('start');
pause(5)
Panel_com('stop');
Panel_com('set_position',[(round(rand*96)+1) 1]);
Panel_com('start');
pause(5)
Panel_com('stop');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
niOI.IsDone
delete(lh)
function saveData(fid,event)
time = event.TimeStamps;
data = event.Data;
plot(time,data)
fprintf(fid,'%f,%\n',time,data)
end
end
我还尝试使用fwrite代替fprintf:
fwrite(fid,data,'double')
但是这给了我一个文件,文件中的字符不是数字,也不是正确的矩阵大小。