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