Get Maxima from changing areas with max command

1 view (last 30 days)
Hey all,
i have to get peak values from temperature measurements. Therefore it is important to take one double matrix for getting the start and end points of areas I want to calculate the maxima from. Another double matrix includes the measured values I finally want to get the peaks out of. E.g The first matrix is going [1 77 244 531 till 14400] and the other one has double values in a 14400x1 matrix. Now I want to get the peaks from the 14400x1 matrix in the areas from 1 to 77, 77 to 244, 244 to 531 etc. In the end I should get a vector with all peaks inside of it... I hope someone can understand my problem... Thanks in advance for your help! I thought it should be done similar to this:
% PV_change is a 84x1 double going from [1;77;244;531;...;13608] it should give the starting and endpoints for the maxima areas.
% TempR1 is a 14400x1 double with all measured values, now I want to get all maxima from the specified areas in the former specified matrix...
% So I should get 1 maximum from area 1 to 77, 1 maximum from 77 to 244 and so on... Best would be if these maximas could be stored in a vector PEAKS
index=1;
for k1= PV_change(1:end-1)';
k2= PV_change(2:end)';
PEAKS(index)=max(TempR1(k1:k2));
index=index+1;
end

Accepted Answer

Image Analyst
Image Analyst on 4 Nov 2016
Edited: Image Analyst on 4 Nov 2016
Try it this way instead:
% PV_change is a 84x1 double going from [1;77;244;531;...;13608] it should give the starting and endpoints for the maxima areas.
% TempR1 is a 14400x1 double with all measured values, now I want to get all maxima from the specified areas in the former specified matrix...
% So I should get 1 maximum from area 1 to 77, 1 maximum from 77 to 244 and so on... Best would be if these maximas could be stored in a vector PEAKS
% Get peak start and ends into their own separate arrays.
peakStarts = PV_change(1 : end - 1);
peakEnds = PV_change(2 : end - 1);
% Now find the max value of all the peaks.
for k = 1 : length(peakStarts)
% Get starting and stopping indexes for this peak.
k1 = peakStarts(k);
k2 = peakEnds(k);
% Get the max value of TempR1 between those indexes, inclusive.
peakAreas(k) = max(TempR1(k1 : k2));
end
By the way, you might like to use findpeaks() if you have the Signal Processing Toolbox.

More Answers (2)

Nick Counts
Nick Counts on 4 Nov 2016
Edited: Nick Counts on 4 Nov 2016
You can index a range of TempR1 using values from your PV_Change vector. Think:
dataSet( indexVector(1:2) )
Here is an example:
% Make dummy variables that correspond to the question's parameters
PV_Change = randi(13608, 84, 1);
PV_Change = sort(PV_Change); % In ascending order
TempR1 = randi(500, 14400, 1); % 14400x1 Random temperature data
PEAKS = zeros(length(PV_Change) - 1,1); % Preallocate PEAKS
% Iterate over each PV_Change pair
for i = 1:length(PV_Change) - 1
PEAKS(i,1) = max(TempR1(PV_Change(i:i+1,1) ) );
end
Hope that helps - good luck!

Janosch Faulhaber
Janosch Faulhaber on 4 Nov 2016
Thanks guys both answers work! You helped a lot ;)

Community Treasure Hunt

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

Start Hunting!