www.gusucode.com > signal 案例源码程序 matlab代码 > signal/PeaksOfSaturatedSignalExample.m

    %% Peaks of Saturated Signal
% Sensors can return clipped readings if the data are larger than a given
% saturation point. You can choose to disregard these peaks as meaningless
% or incorporate them to your analysis.

%%
% Generate a signal that consists of a product of trigonometric functions
% of frequencies 5 Hz and 3 Hz embedded in white Gaussian noise of variance
% 0.1². The signal is sampled for one second at a rate of 100 Hz.
% Reset the random number generator for reproducible results.

rng default

fs = 1e2;
t = 0:1/fs:1-1/fs;

s = sin(2*pi*5*t).*sin(2*pi*3*t)+randn(size(t))/10;

%%
% Simulate a saturated measurement by truncating every reading that is
% greater than a specified bound of 0.32. Plot the saturated signal.

bnd = 0.32;
s(s>bnd) = bnd;

plot(t,s)
xlabel('Time (s)')

%%
% Locate the peaks of the signal. |findpeaks| reports only the rising edge
% of each flat peak.

[pk,lc] = findpeaks(s,t);

hold on
plot(lc,pk,'x')

%%
% Use the |'Threshold'| name-value pair to exclude the flat peaks. Require
% a minimum amplitude difference of $10^{-4}$ between a peak and its
% neighbors.

[pkt,lct] = findpeaks(s,t,'Threshold',1e-4);

plot(lct,pkt,'o','MarkerSize',12)