Удалите скачки из сигнала

Иногда данные показывают нежелательные переходные процессы или скачки. Средняя фильтрация является естественным способом устранить их.

Рассмотрите напряжение разомкнутого цикла через вход аналогового инструмента в присутствии шума линии электропередачи на 60 Гц. Частота дискретизации составляет 1 кГц.

load openloop60hertz

fs = 1000;
t = (0:numel(openLoopVoltage) - 1)/fs;

Повредите сигнал путем добавления, что переходные процессы со случайными знаками наугад указывают. Сбросьте генератор случайных чисел для воспроизводимости.

rng default

spikeSignal = zeros(size(openLoopVoltage));
spks = 10:100:1990;
spikeSignal(spks+round(2*randn(size(spks)))) = sign(randn(size(spks)));

noisyLoopVoltage = openLoopVoltage + spikeSignal;

plot(t,noisyLoopVoltage)

xlabel('Time (s)')
ylabel('Voltage (V)')
title('Open-Loop Voltage with Added Spikes')

yax = ylim;

Функциональный medfilt1 заменяет каждую точку сигнала медианой той точки и конкретным количеством соседних точек. Соответственно, средняя фильтрация отбрасывает точки, которые значительно отличаются от их среды. Отфильтруйте сигнал, с помощью наборов трех соседних точек, чтобы вычислить медианы. Отметьте, как скачки исчезают.

medfiltLoopVoltage = medfilt1(noisyLoopVoltage,3);

plot(t,medfiltLoopVoltage)

xlabel('Time (s)')
ylabel('Voltage (V)')
title('Open-Loop Voltage After Median Filtering')
ylim(yax)
grid

Смотрите также

Похожие темы