matlabreal-time-updates

PLot Realtime data using MATLAB


I am trying to plot real-time data from a sensor that has a frequency of 25 Hz. I read data from the sensor using TCPIP protocol, parse it and then plot the data. However, the plotting part is not very fast and starts to lag after some time. So for e.g. if I move the sensor, I see the response 5 seconds later. I used Serial Plotter in Arduino (which has much less specifications than my laptop) but it is able to plot real-time data without any delays / problems.

My code looks a bit like the following

IMUData = nan(1500,6);
InterfaceObject = tcpip('my_ip_address',50001);
InterfaceObject.BytesAvailableFcn ={@PlotSensorData};

And the PlotSensorData function looks like

    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

Also, instead using plot, I have already tried animatedLine. It seems faster initially as it plots very fast, but after sometime, it starts to lag as well and the lag is more than 10 Sec.

So my questions are

Thanks


Solution

  • Reading Data Asynchronously instead of continuously solved my problem.