Иногда данные показывают нежелательные переходные процессы или скачки. Медианная фильтрация является естественным способом устранить их.
Рассмотрите напряжение разомкнутого контура через вход аналогового инструмента в присутствии шума линии электропередачи на 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