Измеренные сигналы могут показать полные шаблоны, которые не являются внутренним параметром к данным. Эти тренды могут иногда препятствовать анализу данных и должны быть удалены.
Рассмотрите две электрокардиограммы (ECG) сигналы с различными трендами. Сигналы ECG чувствительны к воздействиям, таким как интерференция источника питания. Загрузите сигналы и постройте их.
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)'
Сигнал на первом графике показывает линейный тренд. Тренд на втором сигнале нелинеен. Чтобы устранить линейный тренд, используйте функцию MATLAB® detrend
.
dt_ecgl = detrend(ecgl);
Чтобы устранить нелинейный тренд, соответствуйте полиному младшего разряда к сигналу и вычтите его. В этом случае полином имеет порядок 6. Постройте два новых сигнала.
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)'
Тренды были эффективно удалены. Наблюдайте, как сигналы больше не показывают базовый сдвиг. Они готовы к последующей обработке.