detrend

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

Описание

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

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

пример

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

пример

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

пример

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

пример

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

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

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

Примеры

свернуть все

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

Загрузите данные временных рядов ввода и вывода y2 и u2. Создайте iddata объект data2, использование данные и шаг расчета 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

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

dataLb2_d = detrend(dataLb2,1,brkpt);

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

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

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

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

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

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

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

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

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=3×1 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 создать a TrendInfo объект. Для примера смотрите, Удаляют Заданные Смещения из Сигналов.

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

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

свернуть все

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

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

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

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

| | |

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