www.gusucode.com > dsp 案例源码程序 matlab代码 > dsp/DetectSignalEnergyExample.m

    %% Detect Signal Energy
% This example shows how to compute the energy of a signal from the 
% signal's RMS value and compares the energy value with a specified 
% threshold. Detect the event when the signal energy is above the 
% threshold.

%%
% Create a |dsp.MovingRMS| System object(TM) to compute the moving RMS of
% the signal. Set this object to use the sliding window method with a window 
% length of 20. Create a |dsp.TimeScope| object to view the output.
FrameLength = 20;
Fs = 100;
movrmsWin = dsp.MovingRMS(20);
scope  = dsp.TimeScope('SampleRate',Fs,...
    'TimeSpanOverrunAction','Scroll',...
    'TimeSpan',100,...
    'ShowGrid',true,...
    'YLimits',[-1.0 350],'LayoutDimensions',[3 1],'NumInputPorts',3);
%%
scope.ActiveDisplay = 1;
scope.YLimits = [0 5];
scope.Title = 'Input Signal';
%%
scope.ActiveDisplay = 2;
scope.Title = 'Compare Signal Energy with a Threshold';
%%
scope.ActiveDisplay = 3;
scope.YLimits = [0 2];
scope.PlotType = 'Stairs';
scope.Title = 'Detect When Signal Energy Is Greater Than the Threshold';

%%
% Create the input signal. The signal is a noisy staircase with a frame 
% length of 20. The threshold value is 200.
% Compute the energy of the signal by squaring the RMS value and
% multiplying the result with the window length. Compare the signal
% energy with the threshold value. Detect the event, and when the signal 
% energy crosses the threshold, mark it as 1.
count = 1;
Vect = [1/8 1/2 1 2 3 4 3 2 1];
index = 1;
threshold = 200;
for index = 1:length(Vect)
    V = Vect(index);
    for i = 1:80
        x = V + 0.1 * randn(FrameLength,1);
        y1 = movrmsWin(x);
        y1ener = (y1(end)^2)*20;
        event = (y1ener>threshold);
        scope(y1,[y1ener,threshold],event);
    end
end

%% 
% You can customize the energy mask into a pattern that varies by more
% than a scalar threshold. You can also record the time for which the
% signal energy stays above or below the threshold.