8 views (last 30 days)

Show older comments

Star Strider
on 11 Jan 2018

Edited: Star Strider
on 11 Jan 2018

Use the ‘locs’ value:

[pks,locs] = findpeaks(Voltage, 'MinPeakDist',2000, 'NPeaks',1);

peakTimes = Time(locs);

See the plot call in my previous code to demonstrate how to do this.

EDIT —

‘I'd like to determine x (time) the next time 1.4147 (y, voltage) occurs.’

This will give all the ‘Voltage’ and ‘Time’ values that equal or exceed the initial peak value:

[D,S,R] = xlsread('Data.xls');

Time = D(:,1);

Voltage = D(:,2);

[pks,locs] = findpeaks(Voltage, 'MinPeakDist',2000, 'NPeaks',1, 'MinPeakHeight',1.2);

VoltageThreshold = Voltage - pks*0.99;

zci = @(v) find(v(:).*circshift(v(:), [-1 0]) <= 0); % Returns Approximate Zero-Crossing Indices Of Argument Vector

zx = zci(VoltageThreshold);

TimeNew = Time(zx); % Time Vector, Voltage >= VoltageThreshold

VoltageNew = Voltage(zx); % Voltage Vector, Voltage >= VoltageThreshold

figure(1)

plot(Time, Voltage)

hold on

plot(Time(locs), Voltage(locs), '+g')

plot(TimeNew, VoltageNew, '+r')

hold off

grid

SRT HellKitty
on 11 Jan 2018

Say you have data with peaks for the Y-Axis and linear data for the X-Axis

Y = [1:5,1:5,1:5];

X = [1:15];

Now you have 3 peaks in Y, when it equals 5. If you want to know what value of X is when Y is equal to 5 you could do a logical index;

X_at_peaks = X(Y == 5);

That would show that X is 5, 10, and 15 when Y is equal to 5.

SRT HellKitty
on 11 Jan 2018

If voltage is exactly 1.4147 another time in the data, do the logical indexing with respect to time

Peaks = time (Voltage == 1.4147)

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

Start Hunting!