Я пытаюсь собрать данные с датчика акселерометра. У меня есть Arduino, делающий аналоговое цифровое преобразование сигнала и отправляя его через последовательный порт в MATLAB на Windows.Временное решение в режиме реального времени с использованием окон для фиксированного времени выборки
Я отправляю чтение каждые 5 мс от Arduino через последовательный порт. Я сохраняю эти данные с использованием последовательного чтения MATLAB в векторе, а также время, в которое оно было прочитано с использованием тактового метода.
Если бы я должен был построить столбец вектора, в котором я сохранил, во время которого читаю, я получаю кривую (нелинейную), и когда я смотрю разницу между 1 чтением и другим, я вижу, что он немного меняется.
Есть ли способ получить данные, сохраненные в реальном времени с фиксированным временем выборки?
Примечание: Я использую скорость в 250000 бод.
Matlab код:
%%%%% Initialisation %%%%%
clear all
clc
format shortg
cnt = 1;%File name changer
sw = 1;%switch: 0 we add to current vector and 1 to start new vector
%%%%% Initialisation %%%%%
%%%%% Communication %%%%%
arduino=serial('COM7','BaudRate',250000);
fopen(arduino);
%%%%% Communication %%%%%
%%%%% Reading from Serial and Writing to .mat file%%%%%
while true,
if sw == 0,
if (length(Vib(:,1))==1000),% XXXX Samples in XX minutes
filename = sprintf('C:/Directory/%d_VibrationReading.mat',cnt);
save (filename,'Vib');
clear Vib
cnt= cnt+1;
sw = 1;
end
end
scan = fscanf(arduino,'%f');
if isfloat(scan) && length(scan(:,1))==6,% Change length for validation
vib = scan';
if sw == 1,
Vib = [vib clock];
sw = 0;
else
Vib = [Vib;vib clock];
end
end
end
%%%%% Reading from Serial and Writing to .mat file%%%%%
% Close Arduino Serial Port
fclose(arduino);
Изображение 1 показывает полученные данные через последовательный порт (каждая строка соответствует 1 последовательного чтения) Image 2 показывает, что данные сохранены с часами
Пожалуйста, внесите свой код и измерения в ваш вопрос. Вы не достигнете совершенной точности, потому что MATLAB не способен обрабатывать в реальном времени, но кривая должна быть (грубо) линейной. – Daniel
Я добавил код, я провел некоторое исследование темы в режиме реального времени и увидел, что в Matlab есть панель инструментов, которая посвящает ядро только для чтения данных с некоторых «конкретных» устройств, таких как National Instruments. Инструменты для сбора данных, я не знаю много знаю о том, как они это делают, но, видимо, должен быть путь вокруг этого, надеюсь, намного проще. Кстати, если частота дискретизации снижается, я увидел, что Matlab в некоторой степени способен справиться с этим, однако мне нужна высокая частота дискретизации, поэтому я не буду ее обрезать – AnarKi
Эта строка 'length (scan (:, 1)) == 6 'потенциально отбрасывает сообщения, когда ваша система работает медленно, она может сразу получать два сообщения. – Daniel