Eliminar picos de una señal
A veces, los datos muestran transitorios o picos no deseados. El filtrado de mediana es una forma natural de eliminarlos.
Piense en el voltaje de bucle abierto en la entrada de un instrumento analógico en presencia de ruido de un cable de luz a 60 Hz. La tasa de muestreo es 1 kHz.
load openloop60hertz
fs = 1000;
t = (0:numel(openLoopVoltage) - 1)/fs;
Corrompa la señal añadiendo transitorios con signos aleatorios en puntos aleatorios. Reinicie el generador de números aleatorios a efectos de reproducibilidad.
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;
La función medfilt1
sustituye todos los puntos de una señal por la mediana de dicho punto y un número especificado de puntos contiguos. De este modo, el filtrado de mediana descarta los puntos que difieren de forma considerable de los que los rodean. Filtre la señal utilizando conjuntos de tres puntos contiguos para calcular las medianas. Observe cómo desaparecen los picos.
medfiltLoopVoltage = medfilt1(noisyLoopVoltage,3); plot(t,medfiltLoopVoltage) xlabel('Time (s)') ylabel('Voltage (V)') title('Open-Loop Voltage After Median Filtering') ylim(yax) grid