I have some data labelled x_v[n] and I am trying to locate the starting and ending points of the peaks from my data. Till now I obtained x_v[n] and then I performed template matching. I require to find the starting and ending points of the peaks on x_v[n] Any idea as to how I can do that please? Here is my code till now: fs = 256; N = length(EOG_Data); T = 1/fs; Time = [0:(N - 1)] * T; figure(); plot(Time, EOG_Data); title('x_v[n]'); [pks, locs] = findpeaks(R, 'MinPeakHeight',10e6); %finding peaks figure(); plot(Time, R); hold on; plot(EOG_Time(locs), pks, '*r') hold off;
John Michell answered .
2025-11-20
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 22;
fprintf('Beginning to run %s.m ...\n', mfilename);
EOG_Data = load('EOG_Data.mat');
EOG_Data_v = double(EOG_Data.EOG_Data_4ch(1,:)) - double(EOG_Data.EOG_Data_4ch(2,:));
fs = 256;
N = length(EOG_Data_v);
T = 1/fs;
EOG_Time = [0:(N - 1)] * T;
subplot(2, 1, 1);
plot(EOG_Time, EOG_Data_v);
title('x_v[n]', 'FontSize', fontSize);
grid on;
Blink = EOG_Data_v(500:720); %template
[R, lags] = xcorr(EOG_Data_v, Blink); %cross-correlation
R = R(lags>=0);
lags = lags(lags>=0);
[peakValues, indexesOfPeaks, widths, proms] = findpeaks(R, 'MinPeakHeight',10e6); %finding peaks
subplot(2, 1, 2);
plot(EOG_Time, R);
title('Occurance of Blinks from Cross-Correlation plot', 'FontSize', fontSize);
xlabel('Time in seconds', 'FontSize', fontSize);
ylabel('Voltage in mV', 'FontSize', fontSize);
grid on;
axis tight;
hold on;
plot(EOG_Time(indexesOfPeaks), peakValues, '*r')
% Plot widths
valleyIndexes = zeros(length(widths), 2);
for k = 1 : length(widths)
% Get the indexes.
valleyIndexes(k, 1) = floor(indexesOfPeaks(k) - widths(k)/2);
valleyIndexes(k, 2) = ceil(indexesOfPeaks(k) + widths(k)/2);
% Get the times.
t1 = EOG_Time(valleyIndexes(k, 1));
t2 = EOG_Time(valleyIndexes(k, 2));
% Draw vertical lines on the plot.
xline(t1, 'Color', 'm', 'LineWidth', 2);
xline(t2, 'Color', 'm', 'LineWidth', 2);
end
hold off;
% Maximize figure window.
g = gcf;
g.WindowState = 'maximized'
fprintf('Done running %s.m.\n', mfilename);
