smoothdata
对含噪数据进行平滑处理
语法
说明
使用一个或多个名称-值参量指定用于平滑处理的其他参量。例如,如果 B
= smoothdata(___,Name,Value
)t
是时间值向量,则 smoothdata(A,"SamplePoints",t)
相对于 t
中的时间对 A
中的数据进行平滑处理。
示例
使用移动平均值对数据进行平滑处理
创建含有含噪数据的向量,并使用移动平均值对数据进行平滑处理。
x = 1:100;
rng(0,"twister")
A = cos(2*pi*0.05*x+2*pi*rand) + 0.5*randn(1,100);
B = smoothdata(A);
绘制原始数据和经过平滑处理的数据。
plot(x,A) hold on plot(x,B) legend("Input Data","Smoothed Data")
含噪数据的矩阵
创建一个矩阵,其中的行表示三个含噪信号。使用移动平均值对三个信号进行平滑处理,并绘制经过平滑处理的数据。
x = 1:100; rng(0,"twister") s1 = cos(2*pi*0.03*x+2*pi*rand) + 0.5*randn(1,100); s2 = cos(2*pi*0.04*x+2*pi*rand) + 0.4*randn(1,100) + 5; s3 = cos(2*pi*0.05*x+2*pi*rand) + 0.3*randn(1,100) - 5; A = [s1; s2; s3]; B = smoothdata(A,2); plot(x,B(1,:)) hold on plot(x,B(2,:)) plot(x,B(3,:)) legend("s1","s2","s3")
高斯滤波器
使用高斯加权移动平均滤波器对含噪数据向量进行平滑处理。显示过滤器使用的窗大小。
x = 1:100; rng(0,"twister") A = cos(2*pi*0.05*x+2*pi*rand) + 0.5*randn(1,100); [B,winsize] = smoothdata(A,"gaussian"); winsize
winsize = 4
用包含 20 个元素的较大窗对原始数据进行平滑处理。绘制两种窗大小的平滑数据。
C = smoothdata(A,"gaussian",20); plot(x,B) hold on plot(x,C) legend("Small Window","Large Window")
涉及缺失值的平滑处理
创建一个包含 NaN
值的含噪向量,对数据进行平滑处理并忽略 NaN
值。
rng(0,"twister")
A = [NaN randn(1,48) NaN randn(1,49) NaN];
B = smoothdata(A);
对包含 NaN
值的数据进行平滑处理。包含任一 NaN
值的窗中的平均值为 NaN
。
C = smoothdata(A,"includenan");
绘制 B
和 C
中经过平滑处理的数据图。
plot(1:100,B,"-o") hold on plot(1:100,C,"-x") legend("Ignore Missing","Include Missing")
使用样本点对数据进行平滑处理
创建对应于时间向量 t
的含噪数据的向量。相对于 t
中的时间对数据进行平滑处理,并绘制原始数据和经过平滑处理的数据图。
x = 1:100; rng(0,"twister") A = cos(2*pi*0.05*x+2*pi*rand) + 0.5*randn(1,100); t = datetime(2017,1,1,0,0,0) + hours(0:99); B = smoothdata(A,"SamplePoints",t); plot(t,A) hold on plot(t,B) legend("Input Data","Smoothed Data")
输入参数
A
— 输入数据
向量 | 矩阵 | 多维数组 | 表 | 时间表
输入数据,指定为向量、矩阵、多维数组、表或时间表。如果 A
是表或时间表,则变量必须为数值,或者您必须使用 DataVariables
名称-值参量显式列出数值变量。当使用同时包含非数值变量的表时,指定变量很有用。
数据类型:double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| table
| timetable
复数支持: 是
dim
— 运算维度
正整数标量
运算维度,指定为正整数标量。如果未指定值,则默认值是大小不等于 1 的第一个数组维度。
以一个 m
×n
输入矩阵 A
为例:
smoothdata(A,1)
平滑处理A
的每列中的数据,并返回一个m
×n
矩阵。smoothdata(A,2)
平滑处理A
的行中的数据,并返回一个m
×n
矩阵。
对于表或时间表输入数据,不支持 dim
,并且分别对每个表或时间表变量进行运算。
method
— 平滑处理方法
"movmean"
(默认) | "movmedian"
| "gaussian"
| "lowess"
| "loess"
| "rlowess"
| "rloess"
| "sgolay"
平滑方法,指定为下列值之一:
"movmean"
-A
的每个窗内的平均值。此方法对于减少数据中的周期性趋势很有用。"movmedian"
-A
的每个窗内的中位数。当存在离群值时,此方法对于减少数据中的周期性趋势很有用。"gaussian"
-A
的每个窗内的高斯加权平均值。"lowess"
-A
的每个窗内的线性回归。该方法可能会耗费大量计算资源,但会减少不连续性。"loess"
-A
的每个窗内的二次回归。此方法的计算开销略高于"lowess"
。"rlowess"
-A
的每个窗内的稳健线性回归。此方法比"lowess"
方法的计算开销更大,不过它在处理离群值时更为稳健。"rloess"
-A
的每个窗内的稳健二次回归。此方法比"loess"
方法的计算开销更大,不过它在处理离群值时更为稳健。"sgolay"
- 萨维茨基-戈雷滤波器,它根据在A
的每个窗上拟合的二次多项式进行平滑处理。当数据变化很快时,此方法可能比其他方法更有效。
window
— 窗口大小
正整数或 duration
标量 | 非负整数或 duration
值的二元素向量
窗大小,指定为正整数或 duration
标量或非负整数或 duration
值的二元素向量。smoothdata
定义相对于样本点的窗。
当
window
是正整数标量时,则窗的长度为window
,并且以当前元素为中心。当
window
是非负整数[b f]
的二元素向量时,窗包含当前元素、b
之前的元素和f
之后的元素。
当 A
是时间表或 SamplePoints
包含 datetime
或 duration
值时,window
的类型必须为 duration
。
有关窗位置的详细信息,请参阅移动窗大小。
示例: smoothdata(A,"movmean",4)
示例: smoothdata(A,"movmedian",[2 3])
nanflag
— 缺失值条件
"omitmissing"
(默认) | "omitnan"
| "includemissing"
| "includenan"
缺失值条件,指定为下列值之一:
"omitmissing"
或"omitnan"
- 进行平滑处理时忽略A
中的NaN
值。如果窗中的所有元素均为NaN
,则B
中对应的元素是NaN
。"omitmissing"
和"omitnan"
具有相同的行为。"includemissing"
或"includenan"
- 进行平滑处理时包括A
中的NaN
值。如果窗中有任一元素为NaN
,则B
中对应的元素为NaN
。"includemissing"
和"includenan"
具有相同的行为。
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
示例: smoothdata(A,SmoothingFactor=0.5)
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: smoothdata(A,"SmoothingFactor",0.5)
SamplePoints
— 样本点
向量 | 表变量名称 | 标量 | 函数句柄 | 表 vartype
下标
采样点,指定为由采样点值组成的向量或下表中的选项之一(当输入数据为表时)。样本点代表数据的 x 轴位置,必须为有序且包含唯一的元素。样本点不需要均匀间隔。向量 [1 2 3 ...]
是默认值。
当输入数据是表时,可以使用以下选项之一将采样点指定为表变量:
索引方案 | 示例 |
---|---|
变量名称:
|
|
变量索引:
|
|
函数句柄:
|
|
变量类型:
|
|
注意
当输入数据为 timetable
时,不支持此名称-值参量。时间表使用行时间向量作为采样点。要使用不同采样点,您必须编辑时间表,以便行时间包含所需的采样点。
移动窗基于样本点进行定义。例如,如果 t
是与输入数据对应的时间向量,则 smoothdata(rand(1,10),3,"SamplePoints",t)
将有一个代表 t(i)-1.5
和 t(i)+1.5
之间时间间隔的窗。
当样本点向量的数据类型为 datetime
或 duration
时,窗大小的类型必须为 duration
。
示例: smoothdata(A,"SamplePoints",0:0.1:10)
示例: smoothdata(T,"SamplePoints","Var1")
数据类型: double
| single
| datetime
| duration
DataVariables
— 要对其进行操作的表变量
表变量名称 | 标量 | 向量 | 元胞数组 | 模式 | 函数句柄 | 表 vartype
下标
要对其进行操作的表变量,指定为下表中的选项之一。DataVariables
值指示要对输入表的哪些变量进行平滑处理。
表中未由 DataVariables
指定的其他变量会传递给输出,而不会对其进行平滑处理。
索引方案 | 示例 |
---|---|
变量名称:
|
|
变量索引:
|
|
函数句柄:
|
|
变量类型:
|
|
示例: smoothdata(T,"DataVariables",["Var1" "Var2" "Var4"])
ReplaceValues
— 替换值指示符
true
或 1
(默认) | false
或 0
替换值指示符,当 A
是表或时间表时,指定为以下值之一:
true
或1
- 将输入表变量替换为包含经过平滑处理的数据的表变量。false
或0
- 在输入表变量中追加包含经过平滑处理的数据的表变量。
对于向量、矩阵或多维数组输入数据,不支持 ReplaceValues
。
示例: smoothdata(T,"ReplaceValues",false)
SmoothingFactor
— 窗口大小因子
0 到 1 之间的标量
窗口大小因子,指定为范围从 0 到 1 的标量。通常,smoothdata
根据 A
中的条目确定的窗大小,而 SmoothingFactor
通过缩放窗大小来调整平滑级别。接近 0 的值会产生较小的移动窗大小,从而导致较少的平滑处理。接近 1 的值会产生较大的移动窗大小,从而导致较多的平滑处理。在某些情况下,根据 smoothdata
用于确定窗大小的条目,SmoothingFactor
的值可能不会对窗大小产生显著影响。
SmoothingFactor
默认为 0.25。当不指定 window
时,只能指定 SmoothingFactor
。
Degree
— 萨维茨基-戈雷阶数
非负整数
萨维茨基-戈雷阶数,指定为非负整数。仅当指定的平滑处理方法为 "sgolay"
时,才能指定此名称-值参量。Degree
的值对应于萨维茨基-戈雷滤波器中多项式的次数,该次数适合每个窗口内的数据,默认为 2。
对于均匀样本点,Degree
的值必须小于窗大小。对于非均匀样本点,该值必须小于任意窗口中的最大点数。
输出参量
B
— 经过平滑处理的数据
向量 | 矩阵 | 多维数组 | 表 | 时间表
经过平滑处理的数据,以向量、矩阵、多维数组、表或时间表形式返回。
除非 ReplaceValues
的值为 false
,否则 B
与 A
的大小相同。如果 ReplaceValues
的值是 false
,则 B
的宽度是输入数据宽度和指定的数据变量数目之和。
winsize
— 窗口大小
正整数或 duration
标量 | 非负整数或 duration
值的二元素向量
窗大小,以正整数或 duration
标量或非负整数或 duration
值的二元素向量形式返回。
如果指定 window
作为输入参量,则 winsize
与 window
相同。如果不指定 window
作为输入参量,则 smoothdata
根据 A
中的条目确定窗大小。
详细信息
移动窗大小
下表说明默认等间距样本点向量 [1 2 3 ...]
上的窗位置。
描述 | 窗大小和位置 | 窗中的样本点 | 图 |
---|---|---|---|
对于标量窗大小,包括窗的左边界,不包括窗的右边界。 |
当前样本点 = 4 | 3、4、5 | |
当前样本点 = 4 | 2、3、4、5 | | |
对于向量窗大小,包括窗的左边界和右边界。 |
当前样本点 = 4 | 2、3、4、5、6 | |
对于输入数据端点附近的样本点,这些移动统计平滑方法会截断窗,使其从第一个样本点开始或在最后一个样本点结束。
|
当前样本点 = 2 | 1、2、3、4 | |
对于输入数据端点附近的样本点,这些局部回归平滑方法会移动窗以包含第一个或最后一个样本点。
|
当前样本点 = 2 | 1、2、3、4、5 | |
算法
当没有为平滑处理方法指定窗口大小时,smoothdata
将基于启发式算法计算默认窗口大小。对于平滑处理因子 τ,启发式算法将估算其衰减量大约为输入数据能量的 100*τ% 的移动平均窗口大小。
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
用法说明和限制:
不支持 tall 时间表。
不支持
"rlowess"
和"rloess"
方法。不支持多个输出。
您必须指定窗大小。
smoothdata
不支持通过启发式方法确定窗大小。不支持
SamplePoints
和SmoothingFactor
名称-值参量。DataVariables
的值不能是函数句柄。
有关详细信息,请参阅 tall 数组。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
dim
必须为常量。对于复数输入
A
,必须指定window
参量。不支持可变大小
window
参量。对于固定大小的代码生成,除
A
之外的所有输入参量都必须为常量。对于日期时间
SamplePoints
值或具有日期时间RowTimes
的时间表输入数据,必须指定窗口大小。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
版本历史记录
在 R2017a 中推出R2023a: 指定缺失值条件
使用 "omitmissing"
或 "includemissing"
选项进行平滑处理时,忽略还是包括输入数据中的缺失值。这些选项的行为分别与 "omitnan"
和 "includenan"
选项相同。
R2022a: 追加经过平滑处理的值
对于表或时间表输入数据,通过将 ReplaceValues
名称-值参量设置为 false
,可以在输入表变量中追加包含经过平滑处理的数据的表变量,而不是替换为包含经过平滑处理的数据的表变量。
R2021b: 将采样点指定为表变量
对于表输入数据,可以使用 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)