logic problem of selecting mutliple peaks
logic problem of selecting mutliple peaks
(OP)
Hi All,
I have a logic problem I am having trouble solving with MATLAB. My objective is to select and count peaks in a dataset. However, findpeaks and peakseek function will not work.
My dataset consist mostly of electronic noise, with intermittent high frequency oscillations generated by a sensor responding to pressure impacts. When there is no pressure impacting the sensor, the dataset consist only of electronic noise (<0.00007). When the sensor is activated, the signal peaks 2-4 order of magnitude above the noise level (0.001> x >0.1). The first or second peak is the highest peak in the oscillation and the oscillation decreases at a constant rate for the next 10 to 20 observations (as the sensor returns to its equilibrium represented in the dataset as electronic noise level).
I can select out the peaks for single pressure impacts and count them. However, the PROBLEM IS counting MULTIPLE PRESSURE IMPACTS WITHIN 10-20 OBSERVATIONS...i.e. the signal peaks, then begins to decrease and a constant rate, and then another peak occurs before it reaches electronic noise.
So the problem is: how do you separate and count double peaks within a dataset that has single and double pressure impacts?
I have a logic problem I am having trouble solving with MATLAB. My objective is to select and count peaks in a dataset. However, findpeaks and peakseek function will not work.
My dataset consist mostly of electronic noise, with intermittent high frequency oscillations generated by a sensor responding to pressure impacts. When there is no pressure impacting the sensor, the dataset consist only of electronic noise (<0.00007). When the sensor is activated, the signal peaks 2-4 order of magnitude above the noise level (0.001> x >0.1). The first or second peak is the highest peak in the oscillation and the oscillation decreases at a constant rate for the next 10 to 20 observations (as the sensor returns to its equilibrium represented in the dataset as electronic noise level).
I can select out the peaks for single pressure impacts and count them. However, the PROBLEM IS counting MULTIPLE PRESSURE IMPACTS WITHIN 10-20 OBSERVATIONS...i.e. the signal peaks, then begins to decrease and a constant rate, and then another peak occurs before it reaches electronic noise.
So the problem is: how do you separate and count double peaks within a dataset that has single and double pressure impacts?





RE: logic problem of selecting mutliple peaks
function [xx] = reducetopeak (xx)
xx(xx(:,:) <=(2*std(xx)), :) = 0;
r = find(xx);
peakCount = r(1,1);
count = peakCount + 1;test
while (count < length(xx))
while (xx(count, 1) <= 0.50*xx(peakCount, 1))
xx(count, 1) = 0;
count = count + 1;
if count > length(xx)
break
end
end
peakCount = count;
count = peakCount + 1;
end
RE: logic problem of selecting mutliple peaks
TTFN
FAQ731-376: Eng-Tips.com Forum Policies
RE: logic problem of selecting mutliple peaks
function [xx] = reducetopeak (xx)
xx(xx(:,:) <=(2*std(xx)), :) = 0; %brings noise level down to zero
r = find(xx); % find the first nonzero element...so finding the first peak
peakCount = r(1,1); %specifying the first peak for while loop to begin
count = peakCount + 1; %defining the next variable for comparison of peak values
while (count < length(xx))
while (xx(count, 1) <= 0.50*xx(peakCount, 1)); %this compares adjacent peaks, if the next peak %is
xx(count, 1) = 0;
count = count + 1;
if count > length(xx)
break
end
end
peakCount = count;
count = peakCount + 1;
end
RE: logic problem of selecting mutliple peaks
function [xx] = reducetopeak (xx)
xx(xx(:,:) <=(2*std(xx)), :) = 0; %brings noise level down to zero
r = find(xx); % find the first nonzero element...so finding the first peak
peakCount = r(1,1); %specifying the first peak for while loop to begin
count = peakCount + 1; %defining the next variable for comparison of peak values
while (count < length(xx))
while (xx(count, 1) <= 0.50*xx(peakCount, 1)); %this compares adjacent peaks, if the next peak is 50% less than the previous peak, then make that peak zero
xx(count, 1) = 0;
count = count + 1;
if count > length(xx)
break
end
end
peakCount = count;
count = peakCount + 1;
end
Thanks for checking this out.
RE: logic problem of selecting mutliple peaks
RE: logic problem of selecting mutliple peaks
9 10 9 8 7 6 5 4 3 2 1
and
10 9 8 7 6 5 4 3 2 1
as single peaks
and
7 6 5 10 9 8 7 6 5 4 3 2 1
as a double?
If so that seems rather a banal piece of programming.
Cheers
Greg Locock
New here? Try reading these, they might help FAQ731-376: Eng-Tips.com Forum Policies http://eng-tips.com/market.cfm?