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