Я не могу как обновить пределы xaxis, так и анимированная линия появляется на моем графике GUI. Либо ось прокручивается, и данные датчика не отображаются, либо появляются данные датчика, а границы оси не установлены должным образом.
function stream_Callback(hObject, eventdata, handles)
global bt;
% initialize graph
axes(handles.realtime); % associate to plot in gui
zaxis = animatedline('Parent',handles.realtime);
xlabel('Time - s');
j = 1;
ymin = 1.4;
ymax = 2;
viewport = 1000; % size of window that is shown in graph
% initialize filter
lag_smooth = 50; % size of trailing window for moving average filter
buffer = nan(1,lag_smooth);
% initialize analysis
fs = 100; % sampling frequency
bpm_buffer = 1500; % amount of data analyzed at a time
y = zeros(2,bpm_buffer);
m = 1;
n = 1;
% smoothing zscore parameters
lag = 25;
threshold = 2.9;
influence = 0;
pulsewidth = 40;
% matlab 'findpeaks' parameters - width,height,prominence,threshold,distance
peakwidth = 40; % MinPeakWidth
peakprominence = 0.01; % MinPeakProminence
'' '
while get(hObject,'Value') % while toggle button is true, start stream
%% Filter Data
% Smoothing Filter
while(isnan(buffer(lag_smooth))) % if buffer is not full, fill it
buffer = circshift(buffer,1);
buffer(1) = fscanf(bt, '%f');
end
filtered = mean(buffer); % calculate moving average
buffer = circshift(buffer,1); % shift points
buffer(1) = fscanf(bt, '%f'); % add datapoint to buffer
%% Display Data
% set scrolling axis
if(j>viewport) % moving viewport axis limits
xmin=(j-viewport)/fs;
xmax=j/fs;
else % initial viewport
xmin=0;
xmax=viewport/fs;
end
% % update axis and add data to graph
% axis([xmin xmax ymin ymax]); % update xaxis
handles.realtime.XLim = [xmin xmax];
handles.realtime.YLim = [ymin ymax];
addpoints(zaxis,j/fs,filtered); % add filtered points to graph
drawnow limitrate % update graph
%% Analysis
if(m == bpm_buffer) % amount of data to be analyzed
% Smoothing zscore
[signals,avg,dev] = ThresholdingAlgo(y(2,:),lag,threshold,influence); % send y to threshold algo
[numpeaks] = countPeaks(signals,pulsewidth); % count peaks
breathingrate(1,n) = numpeaks*(60/(bpm_buffer/fs)); % bpm of zscore algo, convert s to min
% Matlab findpeaks
[pks,locs,w,p] = findpeaks(y(2,:),'MinPeakWidth',peakwidth,...
'MinPeakProminence',peakprominence);
breathingrate(2,n) = length(locs)*(60/(bpm_buffer/fs));
% classify pattern
if(breathingrate(2,n)<1)
pattern(n)="Not Breathing - Apnea";
elseif(breathingrate(2,n)>8 && breathingrate(1,n)<24)
pattern(n)="Normal - Eupnea";
end
data{1,n} = y; % test purposes only, store data
n=n+1;
m=1;
else
y(1,m) = j/fs; % time
y(2,m) = filtered; % add point to buffer to be analyzed
m=m+1;
end
j=j+1;
end
Я бы хотел, чтобы ось прокручивалась при добавлении данных моего датчика на график. Кроме того, я хотел бы, чтобы второй графический интерфейс осей обновлялся с результатами обнаружения пиков. Это будет происходить каждый раз, когда заполняется bpm_buffer.