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