Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

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')

Figure contains an axes object. The axes object with title Open-Loop Voltage with Added Spikes, xlabel Time (s), ylabel Voltage (V) contains an object of type line.

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

Figure contains an axes object. The axes object with title Open-Loop Voltage After Median Filtering, xlabel Time (s), ylabel Voltage (V) contains an object of type line.

Consulte también

Temas relacionados