Decrease time to upload a figure

Hi everyone,
I am traying to develop an instrumented insole. I have 5 sensor, where I am measuring the change of voltage that it is generated when the pressure in the sensor change. As the sensor is obviolsy only in one pixel, I want to simulate that the pressure is decreasing around 3-4cm, that following my calcules are about 100pixels.
Pressure_points is a function where I enter the foot image, the radius that I have mentioned (95 pixels in this case), Paux are the coordinates of the five sensors and S are their voltage value, then I obtain an image which name es Pedobarography.
So first of all I start reading the voltage values, and if they are cero, I represent the simple foot, waiting in the second 'while', in order to not repeat every time the same figure. When a chagne in the voltage values is deected in any sensor, the process is repeated, but here is the problem. I have cheked that the function Pressure_points is not the problem because without drawing the heatmap it runs quickly, but when I try to upload the foot heatmap with the sensor changes, it runs very slow because it has to draw everything again.
To sum up, is there any way to draw the changes in the same heatmap quickly, to have these change in real time.
Thanks for your attention.
Jorge.
load Paux.mat;
while bt.Status == 'open'
M=0;
[s1,s2,s3,s4,s5]=Voutput(bt);
if s1==0 && s2==0 && s3==0 && s4==0 && s5==0
S=zeros(1,5);
%Locate the pressure sensor, and the pressure created in each of them
R=1;
[Pedobarography]=Pressure_Points(K1,R,Paux,S);
%Pressure is drawn in mV
[X, h] = contourf(Pedobarography,'LevelList',[0.1:1]);
set(gca, 'YDir','reverse')
colorbar
caxis([0 100])
drawnow
end
while s1==0 && s2==0 && s3==0 && s4==0 && s5==0
[s1,s2,s3,s4,s5]=Voutput(bt);
M=M+1
end
while s1>0 || s2>0 || s3>0 || s4>0 || s5>0
[s1,s2,s3,s4,s5]=Voutput(bt);
S=[s1;s2;s3;s4;s5];
% Locate the pressure sensor, and the pressure created in each of them
R=95;
[Pedobarography]=Pressure_Points(K1,R,Paux,S);
% Pressure is drawn in mV
[X, h] = contourf(Pedobarography,'LevelList',[0.1:20:max(S)]);
set(gca, 'YDir','reverse')
colorbar
caxis([0 max(S)])
drawnow
end
end

4 Comments

Instead of always generating a new plot with contourf, you can update an existing one via:
h.ZData=Pedobarography;
h.LevelList=[0.1:20:max(S)];
This will likely speed things up by 30-50%.
You can use an option of drawnow to discard too frequent updates to the figure via:
drawnow limitrate
This will drop many of the updates, so it won't be realtime in that sense, but it gives your code the chance to catch up.
Just some ideas, maybe someone else has a real solution to your problem.
I read too quickly your code and had an heart attack when i read
Pedobarography
Thank you Looky, I'm going to try it.
Why Phillipe?
Starts with "pedo" and ends in "ography". read quickly skipped the middle of the word and made me read twice haha

Sign in to comment.

Answers (1)

Philippe Lebel
Philippe Lebel on 12 Dec 2019
Edited: Philippe Lebel on 12 Dec 2019
In addition to @Looky 's answer, try to remove the
set(gca, 'YDir','reverse')
from the while loop, I'm pretty sure you only need to do it once.
Maybe set a flag in the while loop to call it on the first iteration.
Samething for
colorbar
and
caxis

2 Comments

I thought the same, I tryed differents things to do it, but I dind't properly, how would do you that?
Publish sample data that works with your code. Ill look into it tomorrow.

Sign in to comment.

Asked:

on 12 Dec 2019

Commented:

on 12 Dec 2019

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!