Энергетическое обнаружение во временном интервале

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

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

Энергией сигнала дискретного времени на конечном интервале-NnN дают:

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

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

EN=RMS2×(2N+1)

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

Обнаружьте энергию сигнала

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

Создать Системный объект dsp.MovingRMS? вычислить движущуюся RMS сигнала. Установите этот объект использовать метод раздвижного окна с длиной окна 20. Создайте объект dsp.TimeScope просмотреть вывод.

FrameLength = 20;
Fs = 100;
movrmsWin = dsp.MovingRMS(20);
scope  = dsp.TimeScope('SampleRate',Fs,...
    'TimeSpanOverrunAction','Scroll',...
    'TimeSpan',100,...
    'ShowGrid',true,...
    'YLimits',[-1.0 350],'LayoutDimensions',[3 1],'NumInputPorts',3);
scope.ActiveDisplay = 1;
scope.YLimits = [0 5];
scope.Title = 'Input Signal';
scope.ActiveDisplay = 2;
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:80
        x = V + 0.1 * randn(FrameLength,1);
        y1 = movrmsWin(x);
        y1ener = (y1(end)^2)*20;
        event = (y1ener>threshold);
        scope(y1,[y1ener,threshold],event);
    end
end

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

Похожие темы