使用smoothdata函数实现数据的平滑,该函数的语法格式为:
- B = smoothdata(A) 使用固定窗口长度向量元素的移动平均值。该长度以启发方式确定。窗口向下滑动向量的长度距离,计算每个窗口中元素的平均值。
如果 A 为矩阵,smoothdata 函数计算每列的移动平均值。
如果 A 是多维数组,则 smoothdata 函数沿大小不等于 1 的第一个维度进行运算。
如果 A 是包含数值变量的表或时间表,则 smoothdata 函数对每个变量单独运算。
- B = smoothdata(A,dim) 沿 A 的dim 维进行运算。例如,如果 A 是一个矩阵,则 smoothdata(A,2) 对 A 中的每行数据进行平滑处理。
- B = smoothdata(___,method) 为上述任一语法指定平滑处理方法。例如,B = smoothdata(A,'sgolay') 使用 Savitzky-golay 滤波器对 A 中的数据进行平滑处理。
- B = smoothdata(___,method,window) 指定平滑处理方法使用的窗口长度。例如,smoothdata(A,'movmedian',5) 通过求五元素移动窗口的中位数,来对 A 中的数据进行平滑处理。
- B = smoothdata(___,nanflag) 指定在使用上述任一语法时如何处理 NaN 值。'omitnan' 将忽略 NaN 值,'includenan' 则会在每个窗口中进行计算时包含 NaN 值。
- B = smoothdata(___,Name,Value) 使用一个或多个名称-值对组参数指定用于平滑处理的其他参数。例如,如果 t 是时间值向量,则 smoothdata(A,'SamplePoints',t) 相对于 t 中的时间对 A 中的数据进行平滑处理。
- [B,window] = smoothdata(___) 还会返回移动窗口长度。
smoothdata函数实现的算法包括:
‘movmean’ (默认):移动均值
‘movmedian‘:移动中位数,好处是对异常值不敏感
‘gaussian‘:高斯加权移动均值
‘lowess‘:线性回归
‘loess‘:二次回归
‘rlowess‘:稳健线性回归
‘rloess‘:稳健二次回归
‘sgolay’:Savitzky-Golay滤波,对窗口内作二次多项式拟合。数据变化大的情况下比其它方法更有效
下面创建一个带噪声的数据,使用高斯加权移动均值算法进行平滑并绘图。
>> x = 1:100;
>> A = cos(x) + 0.5*randn(1,100);
>> B = smoothdata(A, 'gaussian',10);
>> plot(x,A,'-o',x,B,'-x')
生成图1-6,图中标记为圆的曲线是没平滑的,标记为叉的曲线是平滑后的曲线。
\[\]
图1-6 曲线平滑