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