Main Content

detrend

去除多项式趋势

说明

示例

D = detrend(A)A 的数据中去除最佳直线拟合线,并返回其余的数据。

  • 如果 A 是向量,则 detrendA 的元素中减去趋势。

  • 如果 A 是矩阵,则 detrend 分别对每列进行运算,从 A 的对应列中减去每个趋势。

  • 如果 A 是多维数组,则 detrend 对所有维度按列进行运算,从 A 的对应列中减去每个趋势。

  • 如果 A 是具有 singledouble 类型的数值变量的表或时间表,则 detrend 分别对 A 的每个变量进行运算,从 A 的对应变量中减去每个趋势。

示例

D = detrend(A,n) 去除 n 次多项式趋势。例如,当 n = 0 时,detrendA 中删除均值。当 n = 1 时,detrend 去除线性趋势,这等效于上述语法。当 n = 2 时,detrend 去除二次趋势。

示例

D = detrend(A,n,bp) 去除由向量 bp 中指定的断点定义的线段的分段连续趋势。

D = detrend(___,nanflag) 在上述任意语法的基础上指定如何处理 NaN 值。例如,detrend(A,"omitnan") 在计算趋势之前删除 NaN 值,而 detrend(A,"includenan") 包括这些值(默认)。

示例

D = detrend(___,Name,Value) 使用一个或多个名称-值参数指定其他参数。例如,detrend(A,1,bp,"Continuous",false) 指定拟合趋势可以有不连续趋势。

示例

全部折叠

创建一个数据向量,并去除连续线性趋势。绘制原始数据、去趋势后的数据和线性趋势。

t = 0:20;
A = 3*sin(t) + t;
D = detrend(A);

plot(t,A)
hold on
plot(t,D)
plot(t,A-D,":k")
legend("Input Data","Detrended Data","Trend","Location","northwest")

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Input Data, Detrended Data, Trend.

创建一个数据表,并从表中的指定变量中去除连续二次趋势。绘制原始数据、去趋势后的数据和趋势。

t = (-4:4)';
trend = (t.^2 + 4*t + 3);
sig = [0 1 -2 1 0 1 -2 1 0]';
x = sig + trend;
T = table(t,trend,sig,x);
T = detrend(T,2,"DataVariables","x","SamplePoints","t","ReplaceValues",false)
T=9×5 table
    t     trend    sig    x     x_detrended
    __    _____    ___    __    ___________

    -4      3       0      3     -0.12121  
    -3      0       1      1       0.9697  
    -2     -1      -2     -3      -1.9654  
    -1      0       1      1       1.0736  
     0      3       0      3      0.08658  
     1      8       1      9       1.0736  
     2     15      -2     13      -1.9654  
     3     24       1     25       0.9697  
     4     35       0     35     -0.12121  

plot(T,"t","x")
hold on
plot(T,"t","x_detrended")
plot(T.t,T.x-T.x_detrended,":k")
legend("Input Data","Detrended Data","Trend","Location","northwest")

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Input Data, Detrended Data, Trend.

创建一个数据向量,并使用 0 处的断点去除分段线性趋势。指定所得到的输出可以是不连续的。绘制原始数据、去趋势后的数据和趋势。

t = -10:10;
A = t.^3 + 6*t.^2 + 4*t + 3;
bp = 0;
D = detrend(A,1,bp,"SamplePoints",t,"Continuous",false);

plot(t,A)
hold on
plot(t,D)
plot(t,A-D,":k")
legend("Input Data","Detrended Data","Trend","Location","northwest")

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Input Data, Detrended Data, Trend.

输入参数

全部折叠

输入数据,指定为向量、矩阵、多维数组、表或时间表。

  • 如果 A 是向量,则 detrendA 的元素中减去趋势。

  • 如果 A 是矩阵,则 detrend 分别对每列进行运算,从 A 的对应列中减去每个趋势。

  • 如果 A 是多维数组,则 detrend 对所有维度按列进行运算,从 A 的对应列中减去每个趋势。

  • 如果 A 是具有 singledouble 类型的数值变量的表或时间表,则 detrend 分别对 A 的每个变量进行运算,从 A 的对应变量中减去每个趋势。

数据类型: double | single
复数支持:

多项式次数,指定为非负整数标量,或指定为 "constant"(等效于 0)或 "linear"(等效于 1)。

用于定义数据的分段的断点,指定为包含以下项之一的向量:

  • 指示断点位置的采样点值。采样点值包含在默认采样点向量 [1 2 3 ...] 中,或由 SamplePoints 名称-值参数指定。

  • 逻辑值,其中逻辑值 1 (true) 表示输入数据的对应元素中的断点。如果 bp 包含逻辑值,则其长度必须与样本点相同。

当您要计算不同数据段的单独趋势时,断点非常有用。

数据类型: double | single | datetime | duration | logical

NaN 条件,指定为下列值之一:

  • "includenan" - 在计算趋势时,在输入数据中包含 NaN 值。

  • "omitnan" - 在计算趋势时,在输入数据中忽略所有 NaN 值。

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

示例: D = detrend(A,SamplePoints=1:10:1000)

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: D = detrend(A,"SamplePoints",1:10:1000)

连续性约束,指定为下列值之一:

  • true - 拟合趋势在任何位置都必须是连续的。

  • false - 拟合趋势可以包含不连续趋势。

采样点,指定为由采样点值组成的向量或下表中的选项之一(当输入数据为表时)。样本点代表数据的 x 轴位置,必须为有序且包含唯一的元素。样本点不需要均匀采样。向量 [1 2 3 ...] 是默认值。

当输入数据是表时,可以使用以下选项之一将采样点指定为表变量:

表输入的选项描述示例
变量名称

指定单个表变量名称的字符向量或标量字符串

'Var1'

"Var1"

标量变量索引

标量表变量索引

3

逻辑向量

逻辑向量,每个元素分别对应一个表变量,其中 true 将对应的变量指定为采样点,所有其他元素为 false

[true false false]

函数句柄

函数句柄,以表变量作为输入并返回逻辑标量,对于仅一个表变量,该标量必须为 true

@isnumeric

vartype 下标

vartype 函数生成的表下标,该函数只返回一个变量的一个下标

vartype('numeric')

注意

当输入数据为 timetable 时,不支持此名称-值参数。时间表使用行时间向量作为采样点。要使用不同采样点,您必须编辑时间表,以便行时间包含所需的采样点。

示例: detrend(A,"SamplePoints",0:0.1:10)

数据类型: double | single | datetime | duration

要对其进行操作的表或时间表变量,指定为下表中的选项之一。DataVariables 值指示要对输入表或时间表的哪些变量去除多项式趋势。

表或时间表中未由 DataVariables 指定的其他变量会传递给输出,而不会对其进行去趋势处理。

选项描述示例
变量名称

指定单个表变量名称的字符向量或字符串标量

'Var1'

"Var1"

变量名称的向量

字符向量元胞数组或字符串数组,其中每个元素表示一个表变量名称

{'Var1' 'Var2'}

["Var1" "Var2"]

变量索引的标量或向量

表变量索引的标量或向量

1

[1 3 5]

逻辑向量

逻辑向量,每个元素分别对应一个表变量,其中 true 指示包括对应变量,false 指示不包括对应变量。

[true false true]

函数句柄

函数句柄,以表变量作为输入并返回逻辑标量

@isnumeric

vartype 下标

vartype 函数生成的表下标

vartype("numeric")

对于向量、矩阵或多维数组输入数据,不支持 DataVariables

示例: detrend(A,"DataVariables",["Var1" "Var2" "Var4"])

替换值指示符,当 A 是表或时间表时,指定为以下值之一:

  • true1 - 将输入表变量替换为包含经过去趋势的数据的表变量。

  • false0 - 在输入表变量中追加包含去趋势数据的表变量。

对于向量、矩阵或多维数组输入数据,不支持 ReplaceValues

示例: detrend(A,"ReplaceValues",false)

提示

  • detrend 函数从数据中减去均值或最佳拟合线(基于最小二乘指标)。如果您的数据是表格或包含几个数据列,或是表或时间表,detrend 会分别处理每个数据列。

    通过从数据中去除线性趋势,您能够将分析集中在趋势数据的波动上。线性趋势通常表示数据的系统性增加或减少。例如,传感器漂移可能导致系统性偏移。虽然趋势可能是有意义的,但在去除线性趋势后,某些类型的分析能引发更深层的洞见。

    视分析目的不同,您可决定是否需要去除数据中的趋势效应。

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开