exponenta event banner

Обнаружение энергии во временной области

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

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

Энергия дискретно-временного сигнала на конечном интервале -NnN задаётся:

EN=∑n=−NN'x (n) | 2

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

EN = RMS2 × (2N + 1)

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

Детектировать энергию сигнала

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

Создать dsp.MovingRMS Система object™ для вычисления скользящего среднеквадратичного значения сигнала. Задайте для этого объекта метод скользящего окна с длиной окна 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. Вычислите энергию сигнала путем возведения в квадрат среднеквадратичного значения и умножения результата на длину окна. Сравните энергию сигнала с пороговым значением. Определите событие, и когда энергия сигнала превысит пороговое значение, отметьте его как 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

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

Связанные темы