Энергетическое обнаружение во временном интервале

В этом примере показано, как обнаружить энергию сигнала дискретного времени на конечном интервале с помощью значения RMS сигнала. По определению значением RMS на конечном интервале-NnN дают:

RMS=12N+1n=NN|x(n)|2

Энергией сигнала дискретного времени на конечном интервале-NnN дают:

EN=n=NN|x(n)|2

Чтобы определить энергию сигнала из значения RMS, придайте значению RMS квадратную форму и умножьте результат на количество выборок, которые используются для расчета значение RMS.

EN=RMS2×(2N+1)

Чтобы вычислить значение RMS в MATLAB® и Simulink®, используйте движущуюся Систему RMS object™ и блок, соответственно.

Обнаружьте энергию сигнала

В этом примере показано, как вычислить энергию сигнала от значения RMS сигнала и сравнивает энергетическую ценность с заданным порогом. Обнаружьте событие, когда энергия сигнала будет выше порога.

Создайте dsp.MovingRMS Система object™, чтобы вычислить движущуюся RMS сигнала. Установите этот объект использовать метод раздвижного окна с длиной окна 20. Создайте timescope объект просмотреть вывод.

FrameLength = 20;
Fs = 100;
movrmsWin = dsp.MovingRMS(20);
scope  = timescope('SampleRate',Fs,...
    'TimeSpanOverrunAction','Scroll',...
    'TimeSpanSource','Property','TimeSpan',100,...
    'ShowGrid',true,'LayoutDimensions',[3 1],'NumInputPorts',3);
scope.ActiveDisplay = 1;
scope.YLimits = [0 5];
scope.Title = 'Input Signal';
scope.ActiveDisplay = 2;
scope.YLimits = [0 350];
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';

Создайте входной сигнал. Сигнал является шумной лестницей с длиной системы координат 20. Пороговое значение 200. Вычислите энергию сигнала путем обработки на квадрат значению RMS и умножения результата с длиной окна. Сравните энергию сигнала с пороговым значением. Обнаружьте событие, и когда энергия сигнала пересекает порог, отметьте его как 1.

count = 1;
Vect = [1/8 1/2 1 2 3 4 3 2 1];
threshold = 200;
for index = 1:length(Vect)
    V = Vect(index);
    for i = 1:90
        x = V + 0.1 * randn(FrameLength,1);
        y1 = movrmsWin(x);
        y1ener = (y1(end)^2)*20;
        event = (y1ener>threshold);
        scope(y1,[y1ener.*ones(FrameLength,1),threshold.*ones(FrameLength,1)],event.*ones(FrameLength,1));
    end
end

Можно настроить энергетическую маску в шаблон, который варьируется больше, чем скалярный порог. Можно также записать время, в течение которого энергия сигнала остается выше или ниже порога.

Похожие темы