www.gusucode.com > signal 案例源码程序 matlab代码 > signal/SignalWithSpikesAndMissingSamplesExample.m

    %% Multichannel Signal with Spikes and Missing Samples
% Generate a two-channel signal consisting of sinusoids of different
% frequencies. Place spikes in random places. Use NaNs to add missing
% samples at random. Reset the random number generator for reproducible
% results. Plot the signal.

% Copyright 2015 The MathWorks, Inc.


%%
rng('default')

n = 59;
x = sin(pi./[15 10]'*(1:n)+pi/3)';

spk = randi(2*n,9,1);
x(spk) = x(spk)*2;
x(randi(2*n,6,1)) = NaN;

plot(x)

%% 
% Filter the signal using |medfilt1| with the default settings. Plot the
% filtered signal. By default, the filter assigns NaN to the median of any
% segment with missing samples.

y = medfilt1(x);
plot(y)

%% 
% Transpose the original signal. Filter it again, specifying that the
% function work along the rows. Exclude the missing samples when
% computing the medians. If you leave the second argument empty, then
% |medfilt1| uses the default filter order of 3.

y = medfilt1(x',[],[],2,'omitnan');
plot(y')

%% 
% The function cannot assign a value to the segment that contains only
% NaNs. Increase the segment length to fix this issue. The change also
% removes the outlier more thoroughly.

y = medfilt1(x,4,'omitnan');
plot(y)

%% 
% The default zero padding results in the function's underestimating the
% signal values at the edges. Lessen this effect by using decreasing
% windows to compute the medians at the ends.

y = medfilt1(x,4,'omitnan','truncate');
plot(y)