www.gusucode.com > signal 案例源码程序 matlab代码 > signal/RemoveSpikesFromASignalExample.m
%% Remove Spikes from a Signal % Sometimes data exhibit unwanted transients, or spikes. Median filtering % is a natural way to eliminate them. %% % Consider the open-loop voltage across the input of an analog instrument % in the presence of 60 Hz power-line noise. The sampling rate is 1 kHz. load openloop60hertz fs = 1000; t = (0:numel(openLoopVoltage) - 1)/fs; %% % Corrupt the signal by adding transients with random signs at random % points. Reset the random number generator for reproducibility. 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; %% % The function |medfilt1| replaces every point of a signal by the median of % that point and a specified number of neighboring points. Accordingly, % median filtering discards points that differ considerably from their % surroundings. Filter the signal, using sets of three neighboring points % to compute the medians. Note how the spikes vanish. medfiltLoopVoltage = medfilt1(noisyLoopVoltage,3); plot(t,medfiltLoopVoltage) xlabel('Time (s)') ylabel('Voltage (V)') title('Open-Loop Voltage After Median Filtering') ylim(yax) grid