Find peaks in data without using signal processing tool

150 次查看(过去 30 天)
Hello Guys,
I am working on a set of data, attached.
I am using MatlabR2021b, I don't have signal processing tool. Therefore can't use peak function.
I need to find:
  1. Total number of peaks in data
  2. What are the corresponding values of eack peak
Would appreciate if anyone can suggest a solution.
Please let me know if my question is not clear.
Thanks

采纳的回答

Star Strider
Star Strider 2022-7-8
The findpeaks function is in the Signal Processing Toolbox, and since you do not have access to it, use the core MATLAB islocalmax function instead (introduced in R2017b) —
T1 = readtable('https://www.mathworks.com/matlabcentral/answers/uploaded_files/1059360/peaktest.xlsx', 'VariableNamingRule','preserve');
Time = T1.Time;
spike2 = T1.spike2;
Lv = islocalmax(spike2, 'MinProminence',1); % Choose The Name-Value Pair Arguments To Return The Peaks You Want
TotalNrOfPeaks = nnz(Lv)
TotalNrOfPeaks = 8
PeakTable = table(Time(Lv),spike2(Lv), 'VariableNames',{'Spike2Time','Spike2Amplitude'})
PeakTable = 8×2 table
Spike2Time Spike2Amplitude __________ _______________ 8 105 11 111 16 111 23 120 38 133 46 111 92 105 96 106
figure
plot(Time, spike2)
hold on
plot(Time(Lv), spike2(Lv), '^r')
hold off
grid
.

更多回答(1 个)

Sam Chak
Sam Chak 2022-7-8
If the data is not too large, you can test features of the findpeaks() function in this forum.
Else, you can find some peakfinder algorithms in FileExchange.
[data] = readtable('https://www.mathworks.com/matlabcentral/answers/uploaded_files/1059360/peaktest.xlsx');
plot(data.Time, data.spike2)
[pks, locs] = findpeaks(data.spike2)
pks = 8×1
105 111 111 120 133 111 105 106
locs = 8×1
8 11 16 23 38 46 92 96
num_of_pks = length(pks)
num_of_pks = 8

产品

Community Treasure Hunt

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

Start Hunting!

Translated by