detrend

Вычтите смещение или тренд от сигналов временного интервала, содержавшихся в объектах iddata

detrend вычитает смещения или линейные тренды от данных ввода - вывода временного интервала, представленных в объектах iddata. detrend или вычисляет данные о тренде, чтобы вычесть или вычитает тренд, который вы задаете.

Для более общей функции удаления тренда, которая не требует объектов iddata, смотрите detrend.

Синтаксис

data_d = detrend(data)
data_d = detrend(data,Type)
[data_d,T_r] = detrend(___)
data_d = detrend(data,1,brkpt)

Описание

пример

data_d = detrend(data) вычисляет и вычитает среднее значение из каждого сигнала временного интервала в data. iddata возражает data_d и data, каждый содержит входные и выходные данные, происходящие из SISO, MIMO, или мультиэкспериментирует наборы данных.

пример

data_d = detrend(data,Type) вычитает тренд, который вы задаете в Type. Можно задать среднее значение, линейный, или пользовательский тренд.

пример

[data_d,T_r] = detrend(___) также возвращает вычтенный тренд как объект TrendInfo, T_r. Можно получить T_r с любой из комбинаций входных аргументов в предыдущих синтаксисах.

пример

data_d = detrend(data,1,brkpt) вычисляет и вычитает кусочно-линейные тренды для данных с сегментированными трендами, с помощью точек останова, которые вы задаете с brkpt.

Вторым аргументом, который соответствует Type, должен быть 1.

С этим синтаксисом вы не можете получить получившуюся кусочно-линейную информацию о тренде как вывод.

Примеры

свернуть все

Удалите смещения из установившихся сигналов в объекте iddata при помощи detrend, чтобы вычислить и вычесть средние значения ввода и вывода.

Загрузите данные временных рядов ввода и вывода y2 и u2. Создайте объект iddata data2, using the данные и шаг расчета 0,08 секунд.

load dryer2 y2 u2
data2 = iddata(y2,u2,0.08);

Используйте detrend, чтобы и вычислить средние значения и вычесть их из сигналов ввода и вывода. Используйте входной параметр Tr, чтобы хранить вычисленную информацию тренда. Отобразите на графике исходные данные и детрендированные данные вместе.

[data2_d,Tr] = detrend(data2);
plot(data2,data2_d)
legend('Original Data','Detrended Data')

Детрендированные данные переключили приблизительно 5 модулями. Осмотрите Tr, чтобы получить точные средние значения, которые detrend вычислил и вычел. Эти значения возвращены в свойствах InputOffset и OutputOffset.

Tr
Trend specifications for data "data2" with 1 input(s), 1 output(s), 1 experiment(s):
        DataName: 'data2'
     InputOffset: 5.0000
    OutputOffset: 4.8901
      InputSlope: 0
     OutputSlope: 0

Среднее значение исходного входа выше, чем среднее значение исходного вывода.

Удалите линейный тренд из сигнала в объекте iddata и наложите линию тренда на до и после графика данных.

Загрузите и постройте данные сигнала из файла lintrend2. В данном примере только выходные данные обеспечиваются в объекте iddata dataL.

load lintrend2 dataL
plot(dataL,'b')

График показывает ясный линейный тренд в данных. Используйте detrend линейная опция (Type = 1), чтобы вычесть тренд из данных. detrend соответствует данным и определяет линейный тренд, чтобы вычесть. Включайте объект TrendInfo Tr как выходной аргумент, таким образом, вы видите то, что вычитает detrend.

[dataL_d,Tr] = detrend(dataL,1);

Отобразите детрендированные данные на графике против исходных данных.

hold on
plot(dataL_d,'g')
legend('Original','Detrended','Location','northwest')

Линейный тренд был удален. Осмотрите Tr, чтобы получить больше информации об удаленном тренде.

Tr
Trend specifications for data "dataL" with 0 input(s), 1 output(s), 1 experiment(s):
        DataName: 'dataL'
     InputOffset: [1x0 double]
    OutputOffset: 0.8888
      InputSlope: [1x0 double]
     OutputSlope: 19.3830

OutputOffset и свойства OutputSlope обеспечивают параметры строки, которую удалил detrend. Можно восстановить эту строку, и затем наложить ее на до и после графика данных. Свойство SamplingInstants DataL предоставляет моментам времени, сопоставленным данные.

m = Tr.OutputSlope
m = 19.3830
b = Tr.OutputOffset
b = 0.8888
t = dataL.SamplingInstants;
TrLn = m*t+b;
plot(t,TrLn,'r')
legend('Original','Detrended','Trendline','Location','northwest')

Удалите известные смещения из пары сигнала ввода - вывода, содержавшейся в iddata object.

Detrend может вычислить и вычесть средние значения для сигналов ввода и вывода, приводящий к нулевому среднему значению детрендировал сигналы. Однако, если вы уже знаете, что у вас есть определенные смещения данных заранее, у вас может быть detrend, вычитают их из ваших сигналов вместо этого. Определение смещений также позволяет вам сохранять ненулевую рабочую точку в результате detrend.

Загрузите данные SISO, содержащие векторы u2 и y2. В данном примере предположите, что вы знаете, что оба сигнала имеют смещение 4 от ожидаемой рабочей точки 1. Объедините эти векторы в iddata object, с помощью шага расчета 0,08 секунд, и постройте его.

load dryer2 u2 y2
data = iddata(y2,u2,0.08);
plot(data)

Известное смещение 4 (от рабочей точки 1) видимо в графиках. Можно создать объект TrendInfo получить это смещение, с помощью функционального getTrend.

Создайте объект TrendInfo, и затем установите его свойства смещения.

T = getTrend(data);
T.InputOffset = 4;
T.OutputOffset = 4
Trend specifications for data "data" with 1 input(s), 1 output(s), 1 experiment(s):
        DataName: 'data'
     InputOffset: 4
    OutputOffset: 4
      InputSlope: 0
     OutputSlope: 0

Используйте detrend, чтобы вычесть смещение из данных. Постройте его вместе с исходными данными.

data_d = detrend(data,T);
hold on
plot(data_d)
legend('Original','Detrended')

Смещение 4 было удалено.

Детрендируйте данные с сегментированными кусочно-линейными трендами путем определения точек останова, чтобы разграничить сегменты.

Большинство синтаксисов detrend принимает и вычисляет один тренд для каждого из сигналов. Однако в некоторых случаях существуют разрывы в линейных трендах, вызванных тестовыми изменениями конфигурации, условиями окружающей среды или другими влияниями. Когда сигнал отображает такую сегментацию, у вас может быть detrend, работают с тестовыми сегментами независимо. Для этого задайте точки останова во входном параметре brkpt . Это индексы к моментам времени в сигнале, в котором линейные тренды изменяют наклон.

Можно знать эти точки останова впереди, на основе изменений, которые вы знаете, произошел во время сбора данных. Также вы, возможно, должны аппроксимировать их путем осмотра самих данных.

Загрузите данные, осмотрите его структуру и содержимое, и постройте их. Эти данные состоят из выходных данных только в объекте iddata dataLb2.

load brkTrend dataLb2
dataLb2
dataLb2 =

Time domain data set with 512 samples.
Sample time: 0.00390625 seconds        
                                       
Outputs      Unit (if specified)       
   y1                                  
                                       
plot(dataLb2)

В данном примере данные знали точки останова в индексах [100 300]. Применяя шаг расчета (свойство Ts), эти точки останова соответствуют фактическим моментам времени можно следующим образом:

brkpt=[100 300];
brkpt_time = brkpt*dataLb2.Ts
brkpt_time = 1×2

    0.3906    1.1719

Детрендируйте данные с помощью brkp t.

dataLb2_d = detrend(dataLb2,1,brkpt);

Отобразите исходные и детрендированные данные на графике.

plot(dataLb2,dataLb2_d)
legend('Original Data','Detrended Data')

Линейные сегменты тренда были удалены.

Примените уникальный набор точек останова к каждому эксперименту, когда вы детрендируете набор данных Multiexperiment.

Эксперименты в наборе данных мультиэксперимента могут содержать уникальные линейные отклоняющиеся разрывы. Можно применить уникальный набор точек останова к каждому эксперименту путем выражения их в массиве ячеек.

Загрузите данные, которые состоят из:

  • datmult, объект iddata мультиэксперимента, содержащий три эксперимента (выводит только),

  • bp n векторы, которые обеспечивают известные точки останова для каждого эксперимента в форме индексов к моментам времени

load multiexpdt datmult bp1 bp2 bp3
datmult
datmult =
Time domain data set containing 3 experiments.

Experiment   Samples      Sample Time          
   exp1         250            1               
   exp2         320            1               
   exp3         350            1               
                                               
Outputs      Unit (if specified)               
   y1                                          
                                               
bp1,bp2,bp3
bp1 = 1×2

    50   200

bp2 = 100
bp3 =

     []

Отобразите данные на графике. Среди потоков существуют существенные различия, и они дрейфуют на различных уровнях от нулевого среднего значения.

plot(datmult)
legend

Для этого набора экспериментов известно, что существует уникальное отклонение для каждого выполнения и уникальные разрывы, обозначенные векторами bp.

detrend может включить эти уникальные характеристики, если информация о bp предоставляется как массив ячеек.

Создайте массив ячеек.

bpcell = {bp1;bp2;bp3}
bpcell = 3x1 cell array
    {1x2 double}
    {[     100]}
    {0x0 double}

Примените detrend и постройте результат, с помощью той же шкалы в качестве исходного plot.

datmult_d = detrend(datmult,1,bpcell);
figure
plot(datmult_d)
axis([0,inf,-15,30])
legend

Экспериментальные данные теперь лучше выравниваются и не дрейфуют значительно далеко от нулевого среднего значения.

Примените различные типы тренда к сигналам ввода и вывода, содержавшимся в объекте an iddata.

Detrend принимает, что тот же тип тренда применяется к обоим сигналам ввода и вывода. В некоторых случаях может быть тип тренда, который присутствует только в одном сигнале. Можно выполнить detrend индивидуально на каждом сигнале путем извлечения сигналов в отдельные объекты iddata. Примените detrend к каждому объекту с помощью его отдельного типа тренда сигнала. Затем повторно соберите результаты назад в один детрендированный объект iddata.

Загрузите, исследуйте и отобразите данные на графике в iodatab.

load septrend iodatab;
iodatab
iodatab =

Time domain data set with 1000 samples.
Sample time: 0.08 seconds               
                                        
Outputs      Unit (if specified)        
   y1                                   
                                        
Inputs       Unit (if specified)        
   u1                                   
                                        
plot(iodatab)
hold on

Оба графика ввода и вывода показывают смещение. Однако выходной график также показывает инвертированный тренд V-формы, который не присутствует во входных данных.

Разделите входные данные и выходные данные в отдельные объекты для удаления тренда, с помощью iddata общая форма выбора данных (см. Время Представления - и Данные Частотного диапазона Используя Объекты iddata):

data(samples,outputchannels,inputchannels)

idatab = iodatab(:,[],:);
odatab = iodatab(:,:,[]);

Удалите смещение из входных данных, с помощью detrend, чтобы вычислить и вычесть среднее значение.

idatab_d = detrend(idatab,0);

Удалите смещение и инвертированный-V тренд от выходных данных, с помощью индекса 500 средней точки в качестве точки останова.

odatab_d = detrend(odatab,1,500);

Объедините детрендированные входные и выходные данные в один объект iddata.

iodatab_d = [odatab_d,idatab_d];

Наложите детрендированные данные по исходным данным.

plot(iodatab_d)
legend('original','detrended')

Входные и выходные данные теперь не содержат ни смещения, ни тренда V-формы.

Входные параметры

свернуть все

Заданный как объект iddata, содержащий один или несколько наборов сигналов временного интервала. Объект iddata может содержать SISO, MIMO или данные о мультиэксперименте. Наборы сигнала могут содержать или входные и выходные данные или выходные данные только.

Заданный как один из:

  • 0 — Вычислите и вычтите среднее значение

  • 1 — Вычисляют и вычитают линейный тренд (подгонка наименьших квадратов)

  • Объект TrendInfo — вычитает тренд, который вы задаете в объекте TrendInfo. Используйте getTrend, чтобы создать объект TrendInfo. Для примера смотрите, Удаляют Заданные Смещения из Сигналов.

Местоположения момента времени отклоняющихся разрывов (точки останова), заданные как:

Выходные аргументы

свернуть все

Детрендированные сигналы, возвращенные как объект iddata. Размерности содержимого совпадают с размерностями содержимого data.

Данные о тренде, вычтенные из data, чтобы произвести data_d, возвратились как объект TrendInfo.

Когда вы используете brkpt, чтобы задать несколько трендов, вы не можете получить вычисленные данные о тренде.

Смотрите также

| | |

Представлено до R2006a