Get Maxima from changing areas with max command
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Janosch Faulhaber
am 4 Nov. 2016
Beantwortet: Janosch Faulhaber
am 4 Nov. 2016
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
0 Kommentare
Akzeptierte Antwort
Image Analyst
am 4 Nov. 2016
Bearbeitet: Image Analyst
am 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.
0 Kommentare
Weitere Antworten (2)
Nick Counts
am 4 Nov. 2016
Bearbeitet: Nick Counts
am 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!
0 Kommentare
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!