平滑数据
噪声数据的平滑。
库::`工程师`
语法
函数调用
* [参数:B]=平滑数据(_,[参数:nanflag]) —
还设置值的处理方式 南 在 [参数:A] 对于前面的任何语法选项。 例如, smoothdata([Argument:a],"includenan") 包括所有值 南 时平滑。 默认情况下 *平滑数据* 忽略值 南.
* B=smoothdata(_,Name,Value) —
使用由该类型的一个或多个参数指定的其他平滑参数 Name,Value.
* [参数:B],[参数:winsize]=平滑数据(_) —
还返回滑动窗口的大小。
争论
输入参数
# *一个* — 输入数据
+
向量资料 | 矩阵
Details
指定为向量或矩阵的输入数据。
| 数据类型 |
|
# *方法* — 平滑方法
+
"movmean" (默认情况下)| "movmedian" | "高斯" | "lowess" | "黄土" | "rlowess" | "rloess" | "sgolay"
Details
由以下值之一指定的平滑方法:
* "movmean" -平均每个窗口 [参数:A]. 此方法对于减少数据中的周期性趋势非常有用。
* "movmedian" -每个窗口的中位数 [参数:A]. 当存在异常值时,此方法可用于减少数据中的周期性趋势。
* "高斯" -每个窗口的高斯加权平均值 [参数:A].
* "lowess" -每个窗口的线性回归 [参数:A]. 这种方法在计算上可能是昂贵的,但它导致更少的间隙。
* "黄土" -每个窗口的二次回归 [参数:A]. 这种方法在计算上比 "lowess".
* "rlowess" -每个窗口的稳定线性回归 [参数:A]. 该方法是该方法的计算成本更高的版本。 "lowess",但更耐排放。
* "rloess" -每个窗口的稳健二次回归 [参数:A]. 该方法是该方法的计算成本更高的版本。 "lowess",但更耐排放。
* "sgolay" -Savitsky filter-Golay,它根据为每个窗口选择的二次多项式来平滑数据。 [参数:A]. 当数据快速变化时,此方法可能比其他方法更有效。
名称-值输入参数
指定格式中的可选参数对 名称,值,在哪里 姓名 -参数的名称,以及 价值 -适当的值。 名称-值参数应该放在其他参数之后,但对的顺序无关紧要。
使用逗号分隔名称和值,以及 姓名 把它放在引号里。
*例子:* B=平滑数据([4.2, 3.8, 4.3, 5], "SmoothingFactor",0.5).
# *学位* — Savitsky过滤器的程度—Goleya
+
标量,标量
Details
Savitsky过滤器的程度-定义为非负整数标量的傀儡。 只有选择了平滑方法,才能指定此名称值参数。 "sgolay". 参数的值 学位 对应于Savitsky滤波器中的多项式的程度-一个近似每个窗口中的数据的目标。 默认情况下,它等于 2.
参数的值 学位 它应该小于均匀采样点的窗口大小。 对于不均匀的样本点,该值应小于任何窗口中的最大点数。
例子:
使用移动平均线平滑数据
Details
让我们创建一个包含噪声数据的向量,并使用移动平均线平滑数据。 让我们绘制原始和平滑的数据。
import EngeeDSP.Functions: smoothdata
using Plots, Random
Random.seed!(0)
x = 1:100
A = cos.(2π * 0.05 * x .+ 2π * rand()) .+ 0.5 * randn(100)
B = smoothdata(A)
plot(x, A, label="Input Data")
plot!(x, B, label="Smoothed Data")

噪声数据矩阵
Details
让我们创建一个矩阵,其中的行表示三个噪声信号。 让我们使用移动平均线平滑这三个信号,并绘制平滑后的数据。
import EngeeDSP.Functions: smoothdata
using Plots, Random
Random.seed!(0)
x = 1:100
s1 = cos.(2π * 0.03 * x .+ 2π * rand(rng)) .+ 0.5 * randn(rng, 100)
s2 = cos.(2π * 0.04 * x .+ 2π * rand(rng)) .+ 0.4 * randn(rng, 100) .+ 5
s3 = cos.(2π * 0.05 * x .+ 2π * rand(rng)) .+ 0.3 * randn(rng, 100) .- 5
A = [s1'; s2'; s3']
B = smoothdata(A, 2)[1]
plot(x, B[1, :], label="s1")
plot!(x, B[2, :], label="s2")
plot!(x, B[3, :], label="s3")

高斯滤波器
Details
让我们使用高斯加权移动平均滤波器平滑噪声数据向量。 让我们显示过滤器使用的窗口大小。
import EngeeDSP.Functions: smoothdata
using Plots, Random
Random.seed!(0)
x = 1:100
A = cos.(2π * 0.05 * x .+ 2π * rand(rng)) .+ 0.5 * randn(rng, 100)
B, winsize = smoothdata(A, "gaussian")
winsize
4.0
使用包含 20 元素。 让我们绘制两种尺寸窗口的平滑数据。
C = smoothdata(A, "gaussian", 20)[1]
plot(x, B, label="Small Window", linewidth=2)
plot!(x, C, label="Large Window", linewidth=2)

使用缺失值平滑数据
Details
创建包含值的噪声向量 南,并平滑数据,忽略值 南.
import EngeeDSP.Functions: smoothdata
A = [NaN randn(1,48) NaN randn(1,49) NaN]
B, w = smoothdata(A)
([NaN 0.5580616078303169 … 1.0570367844487276 2.3203045641188864], 2.0)
平滑数据,包括值 南. 包含至少一个值的窗口中的平均值 南,等于 南.
C, w = smoothdata(A, "includenan")
([NaN NaN … 1.0570367844487276 NaN], 2.0)
让我们绘制平滑的向量 B 和 C.
plot(1:100, B', shape=:circle, label="Ignore Missing")
plot!(1:100, C', shape=:xcross, label="Include Missing")

此外
滑动窗口尺寸
Details
该表默认根据均匀分布的样本点的矢量显示窗口的位置。 [1 2 3 4 5 6 7].
| 资料描述 | 窗口大小和位置 | 窗口中的采样点 | 计划 |
|---|---|---|---|
对于标量窗口大小,包括窗口的前边缘,排除窗口的后边缘。 |
|
|
|
|
|
||
为了确定矢量窗口的大小,将前缘和后缘考虑在内。 |
|
|
|
对于位于输入数据端点附近的采样点,这些滑动统计平滑方法会截断窗口,使其在第一个采样点开始或在最后一个采样点结束: * * * |
|
|
|
对于位于输入数据端点附近的采样点,这些局部回归平滑方法使窗口移位,使其包括第一个或最后一个采样点。: * * * * * |
|
|