AnyMath 文档

平滑数据

噪声数据的平滑。

库::`工程师`

语法

函数调用

* [参数:B]=平滑数据(<参数:A>>) — 平滑元素 [参数:A] 使用移动平均线。 功能 *平滑数据* 根据元素确定滑动窗口的大小 [参数:A]. 窗口沿着矢量的长度移动,计算每个窗口的元素的平均值。 如果 [参数:A] -矩阵,然后是函数 *平滑数据* 计算每列的移动平均值 [参数:A].

* B=smoothdata(A,dim) — 执行尺寸平滑 [参数:暗淡] 矩阵 [参数:A]. 例如,如果 [参数:A] -矩阵,然后 平滑数据(<参数:A>>,2) 平滑矩阵每行中的数据 [参数:A].

* [参数:B]=平滑数据(_,[参数:方法]) — 使用平滑方法 [参数:方法] 使用任何先前的语法选项。 例如, 平滑数据(<参数:A>>,"sgolay") 使用Savitsky过滤器-用于平滑数据的目标 [参数:A].

* [参数:B]=平滑数据(_,[参数:方法],[参数:窗口]) — 将窗口大小用于平滑方法。 例如, smoothdata(A,"movmedian",5) 平滑数据 [参数:A] 计算滑动窗口上的中位数 5 元素。

* [参数:B]=平滑数据(_,[参数:nanflag]) — 还设置值的处理方式 [参数:A] 对于前面的任何语法选项。 例如, smoothdata([Argument:a],"includenan") 包括所有值 时平滑。 默认情况下 *平滑数据* 忽略值 .

* B=smoothdata(_,Name,Value) — 使用由该类型的一个或多个参数指定的其他平滑参数 Name,Value.

* [参数:B],[参数:winsize]=平滑数据(_) — 还返回滑动窗口的大小。

争论

输入参数

# *一个* — 输入数据

+ 向量资料 | 矩阵

Details

指定为向量或矩阵的输入数据。

数据类型

漂浮物32, 漂浮64, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, 布尔</无翻译> 支持复数::是

# *昏暗* — 为其执行操作的测量

+ 标量,标量

Details

对其执行操作的维度,指定为正整数标量。 如果未指定维度,则默认使用数组的第一个维度,其大小不等于 1.

考虑输入矩阵 [参数:A] 大小 :

* 平滑数据(<参数:A>>,1) 平滑矩阵每列中的数据 [参数:A] 并返回矩阵 .

smoothdata 1

* 平滑数据(<参数:A>>,2) 平滑矩阵每行中的数据 [参数:A] 并返回矩阵 .

smoothdata 2

# *方法* — 平滑方法

+ "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]. 当数据快速变化时,此方法可能比其他方法更有效。

# *窗口* — 窗口大小

+ 标量,标量 | 二元素向量

Details

指定为正整数标量或非负整数的双元素向量的窗口大小。 功能 *平滑数据* 定义相对于采样点的窗口。

*如果 窗户 —这是一个正整数标量,那么窗口有长度 窗户 并且它相对于当前元素居中。

*如果 窗户 是非负整数的双元素向量 [b f],该窗口包含当前元素, b 前面的元素和 f 后续元素。

有关窗口位置的详细信息,请参阅滑动窗口尺寸

# *nanflag* — 缺失值的条件

+ "省略" (默认情况下)| "奥米特南" | "包括" | "包括"

Details

缺少由以下值之一设置的值的条件:

* "省略""omitnan" -忽略值 [参数:A] 时平滑。 如果所有元素都在窗口中 — ,则相应的元素在 [参数:B]. 价值 "省略""omitnan" 他们的行为方式相同。

* "包括""包括" -启用值 [参数:A] 时平滑。 如果窗口中有任何元素 — ,则相应的元素在 [参数:B]. 价值 "包括""包括" 他们的行为方式相同。

名称-值输入参数

指定格式中的可选参数对 名称,值,在哪里 姓名 -参数的名称,以及 价值 -适当的值。 名称-值参数应该放在其他参数之后,但对的顺序无关紧要。

使用逗号分隔名称和值,以及 姓名 把它放在引号里。

*例子:* B=平滑数据([4.2, 3.8, 4.3, 5], "SmoothingFactor",0.5).

# *平滑因子* — 窗口大小因子

+ 标量,标量

Details

窗口大小系数,设置为从 0 以前 1. 作为一项规则,值 平滑因子 通过缩放函数的窗口大小来调整抗锯齿级别 *平滑数据* 根据以下值确定 [参数:A]. 值接近 0,导致较小的窗口大小,这导致较少的抗锯齿。 值接近 1,导致窗口大小的增加,这导致更多的抗锯齿。 在某些情况下,取决于使用的值 *平滑数据* 要确定窗口大小,参数的值为 平滑因子 它可能不会对窗口大小产生显着影响。

参数的默认值为 平滑因子 同样 0.25. 指出 平滑因子 只有在未指定的情况下才允许 [参数:窗口].

# *学位* — Savitsky过滤器的程度—Goleya

+ 标量,标量

Details

Savitsky过滤器的程度-定义为非负整数标量的傀儡。 只有选择了平滑方法,才能指定此名称值参数。 "sgolay". 参数的值 学位 对应于Savitsky滤波器中的多项式的程度-一个近似每个窗口中的数据的目标。 默认情况下,它等于 2.

参数的值 学位 它应该小于均匀采样点的窗口大小。 对于不均匀的样本点,该值应小于任何窗口中的最大点数。

输出参数

# *B* — 平滑数据

+ 向量资料 | 矩阵

Details

作为向量或矩阵返回的平滑数据。

论点 B 大小与 [参数:A].

# *winsize* — 窗口大小

+ 标量,标量 | 二元素向量

Details

作为正整数标量或非负整数的双元素向量返回的窗口大小。

如果指定了输入参数 [参数:窗口] 然后 winsize/winsize[参数:窗口]. 如果未指定输入参数 [参数:窗口],则函数 *平滑数据* 根据以下数据确定窗口大小 [参数:A].

例子:

使用移动平均线平滑数据

Details

让我们创建一个包含噪声数据的向量,并使用移动平均线平滑数据。 让我们绘制原始和平滑的数据。

import EngeeDSP.Functions: smoothdata
using Plots, Random

Random.seed!(0)
x = 1:100
A = cos.(2π &ast; 0.05 &ast; x .+ 2π &ast; rand()) .+ 0.5 &ast; randn(100)
B = smoothdata(A)

plot(x, A, label="Input Data")
plot!(x, B, label="Smoothed Data")

smoothdata 8

噪声数据矩阵

Details

让我们创建一个矩阵,其中的行表示三个噪声信号。 让我们使用移动平均线平滑这三个信号,并绘制平滑后的数据。

import EngeeDSP.Functions: smoothdata
using Plots, Random

Random.seed!(0)
x = 1:100
s1 = cos.(2π &ast; 0.03 &ast; x .+ 2π &ast; rand(rng)) .+ 0.5 &ast; randn(rng, 100)
s2 = cos.(2π &ast; 0.04 &ast; x .+ 2π &ast; rand(rng)) .+ 0.4 &ast; randn(rng, 100) .+ 5
s3 = cos.(2π &ast; 0.05 &ast; x .+ 2π &ast; rand(rng)) .+ 0.3 &ast; 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")

smoothdata 9

高斯滤波器

Details

让我们使用高斯加权移动平均滤波器平滑噪声数据向量。 让我们显示过滤器使用的窗口大小。

import EngeeDSP.Functions: smoothdata
using Plots, Random

Random.seed!(0)
x = 1:100
A = cos.(2π &ast; 0.05 &ast; x .+ 2π &ast; rand(rng)) .+ 0.5 &ast; 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)

smoothdata 10

使用缺失值平滑数据

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)

让我们绘制平滑的向量 BC.

plot(1:100, B', shape=:circle, label="Ignore Missing")
plot!(1:100, C', shape=:xcross, label="Include Missing")

smoothdata 11

此外

滑动窗口尺寸

Details

该表默认根据均匀分布的样本点的矢量显示窗口的位置。 [1 2 3 4 5 6 7].

资料描述 窗口大小和位置 窗口中的采样点 计划

对于标量窗口大小,包括窗口的前边缘,排除窗口的后边缘。

窗口=3 当前采样点= 4

3, 4, 5

smoothdata 3

窗口=4 当前采样点= 4

2, 3, 4, 5

smoothdata 4

为了确定矢量窗口的大小,将前缘和后缘考虑在内。

窗口=[22] 当前采样点= 4

2, 3, 4, 5, 6

smoothdata 5

对于位于输入数据端点附近的采样点,这些滑动统计平滑方法会截断窗口,使其在第一个采样点开始或在最后一个采样点结束:

* "movmean"

* "movmedian"

* "高斯"

窗口=[22] 当前采样点= 2

1, 2, 3, 4

smoothdata 6

对于位于输入数据端点附近的采样点,这些局部回归平滑方法使窗口移位,使其包括第一个或最后一个采样点。:

* "lowess"

* "黄土"

* "rlowess"

* "rloess"

* "sgolay"

窗口=[22] 当前采样点= 2

1, 2, 3, 4, 5

smoothdata 7

算法

如果没有为平滑方法指定窗口大小,则函数 *平滑数据* 根据启发式计算默认窗口大小。 为平滑系数 启发式估计移动平均窗口的大小,该窗口大约减弱 输入数据能量的百分比。