Islocalmin/max on an Animated Plot and Indices Problem
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hi again!! I try to use islocalmin/max instead of findpeaks for my valleys and peaks, then use the previous answers for the same problem. But when I put the code in my for-loop code, it says "Array indices must be positive integers or logical values". Am I doing something wrong? because before I used findpeaks and call it even before the for-loop so it's not actually a real-time signal processing, so i put it in the for-loop and use local min/max instead. Also i multiplied my i to 100 because I want to plot it fastly, but also get problems on it.
%raw data from XYZ direction
NormChest = readtable('TV_1.5l_Hong.csv'); %%%get the raw data
C = table2array(NormChest(:,1));
x = table2array(NormChest(:,2));
y = table2array(NormChest(:,4));
z = table2array(NormChest(:,6));
total = table2array(NormChest(:,8));
time = C(:,1);
%--------------------------------------------------------------------------
% get relative acceleration
x = x - mean(x);
y = y - mean(y);
z = z - mean(z);
total = total - mean(total);
time = time - time (1);
%--------------------------------------------------------------------------
%design for low pass filter
fs = 1000; %sampling frequency
fc = 0.5; %cut-off frequency
order = 2;
[b1, a1] = butter (order, fc/(fs/2));
%--------------------------------------------------------------------------
% magnitude computation
mag = sqrt(x.^2+y.^2+z.^2);
figure (1)
plot (mag); axis tight;
mag = filtfilt (b1, a1, mag);
%--------------------------------------------------------------------------
% Initialize the plot
figure(2);
h = plot(time(1), mag(1)); hold on; % Start with the first data point
xlabel('Time'); axis tight;
title('Real-time Signal Analysis');
h.XDataSource = 'x1'; % Set the data source properties for dynamic updating
h.YDataSource = 'y1';
for i = 2:length (time)
% Update the data source
x1 = time(1:i*100);
y1 = mag(1:i*100);
refreshdata(h, 'caller');
drawnow;
[TF1, P1] = islocalmin (mag);
[TF2, P2] = islocalmax (mag);
TF1 = -TF1;
valid_vks_indices = P1 (time(P1) <= x1 (end));
valid_pks_indices = P2 (time(P2) <= x1 (end));
if ~isempty (valid_vks_indices)
plot (time(valid_vks_indices), TF1(ismember(P1, valid_vks_indices)), 'or');
end
if ~isempty (valid_pks_indices)
plot (time(valid_pks_indices), TF2 (ismember(P2, valid_pks_indices)), 'or');
end
pause(0.001);
end
hold off;
Thank you in advance for the help and I am still working on being good in Matlab, too.
0 Commenti
Risposte (1)
Dyuman Joshi
il 28 Gen 2024
Check the documentation for the appropriate syntax and incorporate the corrections accordingly.
5 Commenti
Dyuman Joshi
il 30 Gen 2024
Could you please share the data you are working with, so I can run your code and see what the issue is?
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!