В этом примере показано, как детектировать энергию дискретного временного сигнала в течение конечного интервала с использованием среднеквадратичного значения сигнала. По определению, среднеквадратичное значение на конечном интервале -N ≤ n ≤ N задаётся:
| 2
Энергия дискретно-временного сигнала на конечном интервале -N ≤ n ≤ N задаётся:
| 2
Для определения энергии сигнала из среднеквадратичного значения возведите в квадрат среднеквадратичное значение и умножьте результат на количество выборок, которые используются для вычисления среднеквадратичного значения.
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

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