Я пытаюсь сохранить данные NiDaq, используя Matlab.У меня есть 5 каналов, и я должен получить их в фоновом режиме, чтобы запустить другой код, пока Daq получает.Учитывая, что я использую частоту захвата 1000 Гц, длительность захвата 20 с, и у меня есть 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')
Но это возвращает мне файл с символами, которые не являются числами, а также не правильнымразмер матрицы.