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

    %% Remove Trends from Data
% Measured signals can show overall patterns that are not intrinsic to the
% data. These trends can sometimes hinder the data analysis and must be
% removed.
%
% Consider two electrocardiogram (ECG) signals with different trends. ECG
% signals are sensitive to disturbances such as power source interference.
% Load the signals and plot them.

% Copyright 2015 The MathWorks, Inc.


load(fullfile(matlabroot,'examples','signal','ecgSignals.mat')) 

t = (1:length(ecgl))';

subplot(2,1,1)
plot(t,ecgl), grid
title 'ECG Signals with Trends', ylabel 'Voltage (mV)'

subplot(2,1,2)
plot(t,ecgnl), grid
xlabel Sample, ylabel 'Voltage (mV)'

%%
% The signal on the first plot shows a linear trend. The trend on the
% second signal is nonlinear. To eliminate the linear trend, use the
% MATLAB(R) function |detrend|.

dt_ecgl = detrend(ecgl);

%%
% To eliminate the nonlinear trend, fit a low-order polynomial to the
% signal and subtract it. In this case, the polynomial is of order 6. Plot
% the two new signals.

opol = 6;
[p,s,mu] = polyfit(t,ecgnl,opol);
f_y = polyval(p,t,[],mu);

dt_ecgnl = ecgnl - f_y;

subplot(2,1,1)
plot(t,dt_ecgl), grid
title 'Detrended ECG Signals', ylabel 'Voltage (mV)'

subplot(2,1,2)
plot(t,dt_ecgnl), grid
xlabel Sample, ylabel 'Voltage (mV)'

%%
% The trends have been effectively removed. Observe how the signals do not
% show a baseline shift anymore. They are ready for further processing.