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.