使用 MATLAB 绘制实时数据
PLot Realtime data using MATLAB
我正在尝试绘制来自频率为 25 Hz 的传感器的实时数据。我使用 TCPIP 协议从传感器读取数据,对其进行解析,然后绘制数据。然而,绘图部分不是很快,一段时间后开始滞后。所以例如如果我移动传感器,我会在 5 秒后看到响应。我在 Arduino 中使用了 Serial Plotter(它的规格比我的笔记本电脑少得多),但它能够在没有任何延迟/问题的情况下绘制实时数据。
我的代码看起来有点像下面这样
IMUData = nan(1500,6);
InterfaceObject = tcpip('my_ip_address',50001);
InterfaceObject.BytesAvailableFcn ={@PlotSensorData};
PlotSensorData 函数看起来像
function PlotSensorData(~,~)
RecievedData = fscanf(InterfaceObject,'%s');
Identifier = RecievedData(6); % 6th byte is the sensor identifier
DataStartIdx = 28; % For each sensor, data start position is common
if Identifier == 'I'
DataEndIdx = DataEndPosition(RecievedData, 1);
SlicedData = RecievedData(DataStartIdx:DataEndIdx);
ParsedData = textscan(SlicedData,'%f', 'Delimiter',',');
% Append new data to IMUData matrices
prevval = IMUData;
val = [prevval(2:end,:); ParsedData{1}'];
IMUData = val;
set(PlotHandle{1},'ydata',val(:,3));
set(TopAxes,'ylim',[-15 15]);
drawnow limitrate;
end
end
此外,我已经尝试过 animatedLine,而不是使用绘图。最初看起来更快,因为它绘制得非常快,但过了一段时间,它也开始滞后,滞后超过 10 秒。
所以我的问题是
- 如何加速MATLAB中的实时数据。
- 此外,我已经尝试在接收到一定数量的样本(例如 10、20)后绘制数据,而不是在每个接收到的样本后绘制数据,但结果仍然滞后并且 GUI 也挂起。我可以使用其他策略吗?在 Python 中我使用了多线程,但我也可以在这里使用它吗?或者是否有更好的方法来处理此数据速率?
- 我明白Arduino只是运行一个脚本但是计算机的开销很大,但是Arduino怎么能在MATLAB挂掉的时候这么快地绘制数据呢?
谢谢
异步读取数据而不是连续读取数据解决了我的问题。
我正在尝试绘制来自频率为 25 Hz 的传感器的实时数据。我使用 TCPIP 协议从传感器读取数据,对其进行解析,然后绘制数据。然而,绘图部分不是很快,一段时间后开始滞后。所以例如如果我移动传感器,我会在 5 秒后看到响应。我在 Arduino 中使用了 Serial Plotter(它的规格比我的笔记本电脑少得多),但它能够在没有任何延迟/问题的情况下绘制实时数据。
我的代码看起来有点像下面这样
IMUData = nan(1500,6);
InterfaceObject = tcpip('my_ip_address',50001);
InterfaceObject.BytesAvailableFcn ={@PlotSensorData};
PlotSensorData 函数看起来像
function PlotSensorData(~,~)
RecievedData = fscanf(InterfaceObject,'%s');
Identifier = RecievedData(6); % 6th byte is the sensor identifier
DataStartIdx = 28; % For each sensor, data start position is common
if Identifier == 'I'
DataEndIdx = DataEndPosition(RecievedData, 1);
SlicedData = RecievedData(DataStartIdx:DataEndIdx);
ParsedData = textscan(SlicedData,'%f', 'Delimiter',',');
% Append new data to IMUData matrices
prevval = IMUData;
val = [prevval(2:end,:); ParsedData{1}'];
IMUData = val;
set(PlotHandle{1},'ydata',val(:,3));
set(TopAxes,'ylim',[-15 15]);
drawnow limitrate;
end
end
此外,我已经尝试过 animatedLine,而不是使用绘图。最初看起来更快,因为它绘制得非常快,但过了一段时间,它也开始滞后,滞后超过 10 秒。
所以我的问题是
- 如何加速MATLAB中的实时数据。
- 此外,我已经尝试在接收到一定数量的样本(例如 10、20)后绘制数据,而不是在每个接收到的样本后绘制数据,但结果仍然滞后并且 GUI 也挂起。我可以使用其他策略吗?在 Python 中我使用了多线程,但我也可以在这里使用它吗?或者是否有更好的方法来处理此数据速率?
- 我明白Arduino只是运行一个脚本但是计算机的开销很大,但是Arduino怎么能在MATLAB挂掉的时候这么快地绘制数据呢?
谢谢
异步读取数据而不是连续读取数据解决了我的问题。