Smart questions
Smart people
 Find A ForumFind An Expert
INTELLIGENT WORK FORUMS
FOR ENGINEERING PROFESSIONALS

Remember Me

Are you an
Engineering professional?
Join Eng-Tips now!
• Talk With Other Members
• Be Notified Of Responses
• Keyword Search
Favorite Forums
• Automated Signatures
• Best Of All, It's Free!

*Eng-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Just copy and paste the

#### Feedback

"...I just wanted to say that you guys RULE, a million thank you's to whoever created, and/or manages this site. KEEP UP THE GOOD WORK..."

#### Geography

Where in the world do Eng-Tips members come from?

# logic problem of selecting mutliple peaks

 Forum Search FAQs Links Jobs Whitepapers MVPs
 birdswords (Coastal) 21 May 12 16:30
 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?
 birdswords (Coastal) 22 May 12 11:39
 This is the code that I have written thus far, but I get error messages. The error message is a line 5: peakCount = r(1,1). . Anyone have any ideas?function [xx] = reducetopeak (xx)xx(xx(:,:) <=(2*std(xx)), :) = 0;r = find(xx);peakCount = r(1,1);count = peakCount + 1;testwhile (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
 IRstuff (Aerospace) 22 May 12 17:48
 Some code comments would be useful.
 birdswords (Coastal) 23 May 12 12:58
 function [xx] = reducetopeak (xx)xx(xx(:,:) <=(2*std(xx)), :) = 0; %brings noise level down to zeror = find(xx); % find the first nonzero element...so finding the first peakpeakCount = r(1,1); %specifying the first peak for while loop to begincount = peakCount + 1; %defining the next variable for comparison of peak valueswhile (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)breakendendpeakCount = count;count = peakCount + 1;end
 birdswords (Coastal) 23 May 12 13:00
 function [xx] = reducetopeak (xx)xx(xx(:,:) <=(2*std(xx)), :) = 0; %brings noise level down to zeror = find(xx); % find the first nonzero element...so finding the first peakpeakCount = r(1,1); %specifying the first peak for while loop to begincount = peakCount + 1; %defining the next variable for comparison of peak valueswhile (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 zeroxx(count, 1) = 0;count = count + 1;if count > length(xx)breakendendpeakCount = count;count = peakCount + 1;endThanks for checking this out.
 hacksaw (Mechanical) 26 May 12 21:29
 just counting raw data is going to be tough, have you considered autocorrelation or time series analysis methods to better characterize you data
 GregLocock (Automotive) 26 May 12 22:43
 So you need to identify the sequence of amplitude peaks9 10 9 8 7 6 5 4 3 2 1and 10 9 8 7 6 5 4 3 2 1as single peaksand 7 6 5 10 9 8 7 6 5 4 3 2 1as a double?If so that seems rather a banal piece of programming. CheersGreg LocockNew here? Try reading these, they might help FAQ731-376: Eng-Tips.com Forum Policies http://eng-tips.com/market.cfm?

Close Box

# Join Eng-Tips® Today!

Join your peers on the Internet's largest technical engineering professional community.
It's easy to join and it's free.

Here's Why Members Love Eng-Tips Forums:

• Talk To Other Members
• Notification Of Responses To Questions
• Favorite Forums One Click Access
• Keyword Search Of All Posts, And More...

Register now while it's still free!