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

Этот пример показывает, как обнаружить энергию сигнала в дискретном времени на конечном интервале, используя значение RMS сигнала. По определению RMS значением по конечному интервалу - <reservedrangesplaceholder2> ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0> дают:

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

Энергией сигнала дискретного времени по конечному интервалу - <reservedrangesplaceholder2> ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0> дают:

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

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

EN=RMS2×(2N+1)

Вычисление значения 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

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

Похожие темы