detrend
去除多项式趋势
语法
说明
D = detrend(
从 A
)A
的数据中去除最佳直线拟合线,并返回其余的数据。
如果
A
是向量,则detrend
从A
的元素中减去趋势。如果
A
是矩阵,则detrend
分别对每列进行运算,从A
的对应列中减去每个趋势。如果
A
是多维数组,则detrend
对所有维度按列进行运算,从A
的对应列中减去每个趋势。如果
A
是具有single
或double
类型的数值变量的表或时间表,则detrend
分别对A
的每个变量进行运算,从A
的对应变量中减去每个趋势。
D = detrend(___,
可指定对于上述任一语法,包含还是省略 nanflag
)A
中的 NaN
值。例如,detrend(A,"omitnan")
在计算趋势时会忽略 NaN
值。默认情况下,detrend
包括 NaN
值。
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")
连续二次趋势
创建一个数据表,并从表中的指定变量中去除连续二次趋势。绘制原始数据、去趋势后的数据和趋势。
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")
不连续线性趋势
创建一个数据向量,并使用 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")
输入参数
A
— 输入数据
向量 | 矩阵 | 多维数组 | 表 | 时间表
输入数据,指定为向量、矩阵、多维数组、表或时间表。
如果
A
是向量,则detrend
从A
的元素中减去趋势。如果
A
是矩阵,则detrend
分别对每列进行运算,从A
的对应列中减去每个趋势。如果
A
是多维数组,则detrend
对所有维度按列进行运算,从A
的对应列中减去每个趋势。如果
A
是具有single
或double
类型的数值变量的表或时间表,则detrend
分别对A
的每个变量进行运算,从A
的对应变量中减去每个趋势。
数据类型: double
| single
复数支持: 是
n
— 多项式次数
非负整数标量 | "constant"
| "linear"
多项式次数,指定为非负整数标量,或指定为 "constant"
(等效于 0
)或 "linear"
(等效于 1
)。
bp
— 断点
向量
用于定义数据的分段的断点,指定为包含以下项之一的向量:
指示断点位置的采样点值。采样点值包含在默认采样点向量
[1 2 3 ...]
中,或由SamplePoints
名称-值参数指定。逻辑值,其中逻辑值
1
(true
) 表示输入数据的对应元素中的断点。如果bp
包含逻辑值,则其长度必须与样本点相同。
当您要计算不同数据段的单独趋势时,断点非常有用。
数据类型: double
| single
| datetime
| duration
| logical
nanflag
— 缺失值条件
"includemissing"
(默认) | "includenan"
| "omitmissing"
| "omitnan"
缺失值条件,指定为下列值之一:
"includemissing"
或"includenan"
- 在计算趋势时包括A
中的NaN
值。如果运算维度中有任一元素为NaN
,则D
中对应的元素为NaN
。"includemissing"
和"includenan"
具有相同的行为。"omitmissing"
或"omitnan"
- 在计算趋势时忽略A
中的NaN
值。如果运算维度中的所有元素均为NaN
,则D
中对应的元素为NaN
。"omitmissing"
和"omitnan"
具有相同的行为。
名称-值参数
将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参数名称,Value
是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。
示例: D = detrend(A,SamplePoints=1:10:1000)
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: D = detrend(A,"SamplePoints",1:10:1000)
Continuous
— 连续性约束
true
(默认) | false
连续性约束,指定为下列值之一:
true
- 拟合趋势在任何位置都必须是连续的。false
- 拟合趋势可以包含不连续趋势。
SamplePoints
— 样本点
向量 | 表变量名称 | 标量 | 函数句柄 | 表 vartype
下标
采样点,指定为由采样点值组成的向量或下表中的选项之一(当输入数据为表时)。样本点代表数据的 x 轴位置,必须为有序且包含唯一的元素。样本点不需要均匀采样。向量 [1 2 3 ...]
是默认值。
当输入数据是表时,可以使用以下选项之一将采样点指定为表变量:
索引方案 | 示例 |
---|---|
变量名称:
|
|
变量索引:
|
|
函数句柄:
|
|
变量类型:
|
|
注意
当输入数据为 timetable
时,不支持此名称-值参数。时间表使用行时间向量作为采样点。要使用不同采样点,您必须编辑时间表,以便行时间包含所需的采样点。
示例: detrend(A,"SamplePoints",0:0.1:10)
数据类型: double
| single
| datetime
| duration
DataVariables
— 要对其进行操作的表或时间表变量
表变量名称 | 时间表变量名称 | 标量 | 向量 | 元胞数组 | 模式 | 函数句柄 | 表 vartype
下标
要对其进行操作的表或时间表变量,指定为下表中的选项之一。DataVariables
值指示要对输入表或时间表的哪些变量去除多项式趋势。
表或时间表中未由 DataVariables
指定的其他变量会传递给输出,而不会对其进行去趋势处理。
索引方案 | 示例 |
---|---|
变量名称:
|
|
变量索引:
|
|
函数句柄:
|
|
变量类型:
|
|
对于向量、矩阵或多维数组输入数据,不支持 DataVariables
。
示例: detrend(A,"DataVariables",["Var1" "Var2" "Var4"])
ReplaceValues
— 替换值指示符
true
或 1
(默认) | false
或 0
替换值指示符,当 A
是表或时间表时,指定为以下值之一:
true
或1
- 将输入表变量替换为包含经过去趋势的数据的表变量。false
或0
- 在输入表变量中追加包含去趋势数据的表变量。
对于向量、矩阵或多维数组输入数据,不支持 ReplaceValues
。
示例: detrend(A,"ReplaceValues",false)
提示
detrend
函数从数据中减去均值或最佳拟合线(基于最小二乘指标)。如果您的数据是表格或包含几个数据列,或是表或时间表,detrend
会分别处理每个数据列。通过从数据中去除线性趋势,您能够将分析集中在趋势数据的波动上。线性趋势通常表示数据的系统性增加或减少。例如,传感器漂移可能导致系统性偏移。虽然趋势可能是有意义的,但在去除线性趋势后,某些类型的分析能引发更深层的洞见。
视分析目的不同,您可决定是否需要去除数据中的趋势效应。
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
如果提供了输入参数
bp
但未提供逻辑值,则该参数必须按升序排序。如果提供了输入参数
bp
但可变大小被禁用,则该参数必须包含区间[1,m-2]
中的整数。在本例中,m
是输入参数A
的一列中的元素数;或当A
为行向量时表示A
中的元素数 (m = length(A)
)。如果指定了
SamplePoints
名称-值参数,则需要启用可变大小。如果多项式次数
n
既不是常量也不是逻辑值,则需要启用可变大小选项。代码生成使用与 MATLAB® 不同的方法来检测非唯一或病态问题,以发出警告。代码生成警告并不始终与 MATLAB 警告相匹配。
函数
detrend
在代码生成中不使用rand
。不支持为表或时间表变量的去趋势生成代码。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
不支持将 GPU 数组作为表或时间表变量。
版本历史记录
在 R2006a 之前推出R2023a: 指定缺失值条件
在使用 "includemissing"
或 "omitmissing"
选项计算趋势时,包括还是忽略输入数组中的缺失值。这些选项的行为分别与 "includenan"
和 "omitnan"
选项相同。
R2022b: 对表格数据去趋势
对表或时间表数据去趋势时,您可以:
使用
DataVariables
名称-值参数指定要去趋势的表格变量。通过使用
ReplaceValues
名称-值参数,用包含去趋势数据的变量追加或替换表格变量。通过使用
SamplePoints
名称-值参数将采样点指定为表变量。当输入数据是时间表时,不支持SamplePoints
。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)