本页翻译不是最新的。点击此处可查看最新英文版本。
对含噪数据进行平滑处理
全页折叠
语法
B = smoothdata(A)
B = smoothdata(A,dim)
B = smoothdata(___,method)
B = smoothdata(___,method,window)
B = smoothdata(___,nanflag)
B = smoothdata(___,Name,Value)
[B,winsize] = smoothdata(___)
说明
示例
B = smoothdata(A)
使用移动平均值对 A
的条目进行平滑处理。smoothdata
根据 A
中的条目确定移动窗的大小。窗口向下滑动向量的长度,计算每个窗口中的元素的平均值。
如果
A
为矩阵,smoothdata
计算A
的每列的移动平均值。如果
A
是多维数组,则smoothdata
沿A
的大小不等于 1 的第一个维度进行运算。如果
A
是包含数值变量的表或时间表,则smoothdata
针对A
的每个变量单独执行运算。
示例
B = smoothdata(A,dim)
指定要沿其进行运算的 A
的维度。例如,如果 A
是一个矩阵,则 smoothdata(A,2)
对 A
中的每行数据进行平滑处理。
示例
B = smoothdata(___,method)
为上述任一语法指定平滑处理方法。例如,smoothdata(A,"sgolay")
使用萨维茨基-戈雷滤波器对 A
中的数据进行平滑处理。
示例
B = smoothdata(___,method,window)
指定平滑方法窗大小。例如,smoothdata(A,"movmedian",5)
通过求五元素滑动窗的中位数,来对 A
中的数据进行平滑处理。
示例
B = smoothdata(___,nanflag)
指定忽略还是包括 A
中的 NaN
值。例如,进行平滑处理时,smoothdata(A,"includenan")
包括所有 NaN
值。默认情况下,smoothdata
忽略 NaN
值。
示例
B = smoothdata(___,Name,Value)
使用一个或多个名称-值参量指定用于平滑处理的其他参量。例如,如果 t
是时间值向量,则 smoothdata(A,"SamplePoints",t)
相对于 t
中的时间对 A
中的数据进行平滑处理。
示例
[B,winsize] = smoothdata(___)
还会返回移动窗大小。
示例
全部折叠
使用移动平均值对数据进行平滑处理
打开实时脚本
创建含有含噪数据的向量,并使用移动平均值对数据进行平滑处理。
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 onplot(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 onplot(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 onplot(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 onplot(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 onplot(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
名称-值参量将采样点指定为表变量。
另请参阅
函数
- smoothdata2 | fillmissing | fillmissing2 | movmean | movmedian | movmad | filter
实时编辑器任务
- 平滑处理数据
App
- 数据清洗器
主题
- 使用实时编辑器任务清洗杂乱数据并定位极值
- 数据平滑和离群值检测
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:
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)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 简体中文
- English
- 日本 (日本語)
- 한국 (한국어)
Contact your local office