主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

smoothdata2

对二维含噪数据进行平滑处理

自 R2023b 起

    说明

    S = smoothdata2(A) 使用移动平均值对 A 的条目进行平滑处理。smoothdata2 根据 A 中的条目确定移动窗的大小。

    示例

    S = smoothdata2(A,method) 使用指定的平滑方法对条目进行平滑处理。例如,smoothdata2(A,"movmedian") 通过计算 A 的每个二维窗上的中位数来进行平滑处理。

    示例

    S = smoothdata2(A,method,window) 指定移动窗的大小。window 指定当前元素的窗中包含的前面的行数、后面的行数、前面的列数和后面的列数。

    示例

    S = smoothdata2(___,nanflag) 指定忽略还是包括 A 中的 NaN 值。支持上述语法中的任何输入参量组合,且可使用此选项。例如,进行平滑处理时,smoothdata2(A,"includenan") 包括所有 NaN 值。默认情况下,smoothdata2 忽略 NaN 值。

    S = smoothdata2(___,Name=Value) 使用一个或多个名称-值参量指定用于平滑处理的其他参数。例如,smoothdata2(A,SmoothingFactor=0.5) 通过指定因子来调整平滑程度,该因子缩放 smoothdata2 根据 A 中的条目确定的窗大小。

    示例

    [S,winsize] = smoothdata2(___) 还返回窗描述。如果 window 指定为输入,则返回的窗描述与指定的窗描述相同。

    示例

    示例

    全部折叠

    创建一个含噪矩阵,并使用曲面图沿 z 维度可视化该矩阵。

    A = peaks;
    rng(0,"twister")
    A = A + 0.5*randn(size(A));
    
    surf(A)

    Figure contains an axes object. The axes object contains an object of type surface.

    使用移动平均值平滑数据。

    B = smoothdata(A);

    可视化平滑数据。

    surf(B)

    Figure contains an axes object. The axes object contains an object of type surface.

    在此示例中,了解并比较二维平滑方法。每种方法各有优势,适用于不同类型的数据和噪声特征。

    创建一个离散化且具有锐边的数据矩阵,并使用曲面图可视化该矩阵。

    [bins,edges] = discretize(peaks,10);
    A = edges(bins);
    
    surf(A)

    Figure contains an axes object. The axes object contains an object of type surface.

    使用移动统计量平滑方法平滑数据。

    B = smoothdata2(A);
    B2 = smoothdata2(A,"movmedian");

    通过可视化平滑数据来比较平滑方法的结果。对于具有锐边的离散二维数据,移动均值方法优于移动中位数方法。虽然移动中位数方法对离群值具有稳健性,但由于它仅关注中间值,可能无法充分处理数据中的锐边。

    tiledlayout(2,1)
    
    nexttile
    surf(B)
    title("Mean")
    
    nexttile
    surf(B2)
    title("Median")

    Figure contains 2 axes objects. Axes object 1 with title Mean contains an object of type surface. Axes object 2 with title Median contains an object of type surface.

    创建一个在小于平滑窗大小的区域内发生急剧变化的矩阵。

    x = 1:59;
    y = sin(x/5*pi);
    A2 = y + y';
    
    figure
    surf(A2)

    Figure contains an axes object. The axes object contains an object of type surface.

    使用移动统计量平滑方法和局部回归平滑方法平滑数据。

    B3 = smoothdata2(A2,"movmean",9);
    B4 = smoothdata2(A2,"gaussian",9);

    通过可视化平滑数据来比较平滑方法的结果。高斯平滑方法比移动均值方法更适合平滑具有急剧变化的数据,因为它能够在减少噪声的同时保留尖锐特征。与在窗上应用简单平均值的移动均值方法不同,高斯平滑使用加权平均值为附近的点赋予更高权重。

    tiledlayout(2,1)
    
    nexttile
    surf(B3)
    title("Mean")
    
    nexttile
    surf(B4)
    title("Gaussian-Weighted Average")

    Figure contains 2 axes objects. Axes object 1 with title Mean contains an object of type surface. Axes object 2 with title Gaussian-Weighted Average contains an object of type surface.

    创建一个含噪矩阵,并使用热图沿 z 维度可视化该矩阵。

    A = peaks(25);
    rng(0,"twister")
    A = A + 6*randn(size(A));
    
    heatmap(A)

    Figure contains an object of type heatmap.

    通过计算 A 的每个二维窗上的平均值平滑数据。将移动窗定义为当前元素的相邻条目组成的 2×3 块。

    B = smoothdata2(A,"movmean",{2 3});

    在更大的移动窗(由条目组成的 4×4 块)上平滑数据。

    B2 = smoothdata2(A,"movmean",4);

    通过可视化平滑数据来比较窗大小的结果。

    tiledlayout(2,1)
    
    nexttile
    heatmap(B,Title="2-by-3 Window")
    
    nexttile
    heatmap(B2,Title="4-by-4 Window")

    Figure contains objects of type heatmap. The chart of type heatmap has title 2-by-3 Window. The chart of type heatmap has title 4-by-4 Window.

    创建一个含噪矩阵,并使用填充的二维等高线图可视化该矩阵。

    A = peaks;
    rng(0,"twister")
    A = A + 4*randn(size(A));
    
    contourf(A);
    colorbar

    Figure contains an axes object. The axes object contains an object of type contour.

    通过计算 A 的每个二维窗上的平均值平滑数据。smoothdata2 根据输入数据和默认窗大小因子 0.25 通过启发式方法确定窗大小。返回窗大小。

    [B,winsize] = smoothdata2(A);
    winsize
    winsize=1×2 cell array
        {[3]}    {[3]}
    
    

    通过指定更大的窗大小因子,使用更大的窗大小进行平滑处理,从而获得更平滑的效果。

    [B2,winsize2] = smoothdata2(A,SmoothingFactor=0.5);
    winsize2
    winsize2=1×2 cell array
        {[5]}    {[5]}
    
    

    通过可视化平滑数据来比较窗大小因子的结果。

    tiledlayout(2,1)
    
    nexttile
    contourf(B)
    title("Window Size Factor 0.25")
    colorbar
    
    nexttile
    contourf(B2)
    title("Window Size Factor 0.5")
    colorbar

    Figure contains 2 axes objects. Axes object 1 with title Window Size Factor 0.25 contains an object of type contour. Axes object 2 with title Window Size Factor 0.5 contains an object of type contour.

    创建一个非等间距数据的矩阵。指定向量 xsys 中的采样点。

    t = linspace(0,10,30);
    xs = cumsum(sin(pi/11*t));
    ys = xs;
    A = sin(xs'/5)*cos(ys/5);
    
    rng(0,"twister")
    A = A+randn(size(A))*0.5;

    使用网格曲面图可视化该矩阵。

    m = mesh(xs',ys,A,FaceAlpha=0.5);
    m.FaceColor = "flat";
    view(0,90)

    Figure contains an axes object. The axes object contains an object of type surface.

    A 的每个二维窗上使用线性回归平滑数据。指定窗大小,并指定数据的 x 轴和 y 轴位置。

    B = smoothdata2(A,"loess",{[2 3],[4 3]},SamplePoints={xs,ys});

    可视化平滑数据。

    m2 = mesh(xs',ys,B,FaceAlpha=0.5);
    m2.FaceColor = "flat";
    view(0,90)

    Figure contains an axes object. The axes object contains an object of type surface.

    输入参数

    全部折叠

    输入数据,指定为数值数组。

    复数支持:

    平滑方法,指定为下列值之一:

    • "movmean" - 计算 A 的每个二维窗上的平均值。此方法对于减少数据中的周期性趋势很有用。

    • "movmedian" - 计算 A 的每个二维窗上的中位数。当存在离群值时,此方法对于减少数据中的周期性趋势很有用。

    • "gaussian" - 计算 A 的每个二维窗上的高斯加权平均值。

    • "lowess" - 计算 A 的每个二维窗上的线性回归。该方法可能会耗费大量计算资源,但会减少不连续性。

    • "loess" - 计算 A 的每个二维窗上的二次回归。此方法的计算开销略高于 "lowess"

    • "sgolay" - 萨维茨基-戈雷滤波器,它根据在 A 的每个二维窗上拟合的二次多项式进行平滑处理。当数据变化很快时,此方法可能比其他方法更有效。

    窗大小,指定为正整数或 duration 标量、正整数或 duration 值的二元素元胞数组,或非负整数或 duration 值的二元素向量的二元素元胞数组。smoothdata2 相对于采样点定义窗。

    • window 是正整数标量时,窗是以当前元素为中心的 window×window 块。

    • 如果 window 是由正整数组成的二元素元胞数组 {m n},则窗是以当前元素为中心的 m×n 块。

    • 如果 window 是非负整数的二元素向量的二元素元胞数组 {[bRow fRow] [bCol fCol]},则窗包含当前元素的行和列、前导 bRow 行和后继 fRow 行,以及前导 bCol 列和后继 fCol 列。

    SamplePoints 包含 datetimeduration 值时,window 的类型必须为 duration

    有关窗位置的详细信息,请参阅移动窗大小

    示例: smoothdata2(A,"movmean",4)

    示例: smoothdata2(A,"movmedian",{2 3})

    示例: smoothdata2(A,"movmedian",{[0 2] [3 3]})

    缺失值条件,指定为下列值之一:

    • "omitmissing""omitnan" - 进行平滑处理时忽略 A 中的 NaN 值。如果窗中的所有元素均为 NaN,则 S 中对应的元素是 NaN"omitmissing""omitnan" 具有相同的行为。

    • "includemissing""includenan" - 进行平滑处理时包括 A 中的 NaN 值。如果窗中有任一元素为 NaN,则 S 中对应的元素为 NaN"includemissing""includenan" 具有相同的行为。

    名称-值参数

    全部折叠

    Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

    示例: S = smoothdata2(A,SmoothingFactor=0.5)

    采样点,指定为由采样点值向量组成的二元素元胞数组。第一个向量中的采样点表示沿 A 的列的数据位置,第二个向量中的采样点表示沿 A 的行的数据位置。这两个向量都必须排序,且不能包含重复元素。采样点不需要均匀间隔。如果 Am×n 矩阵,则 SamplePoints 的默认值为 {1:n 1:m}

    移动窗基于采样点进行定义。当采样点向量的数据类型为 datetimeduration 时,移动窗描述的类型必须为 duration

    窗口大小因子,指定为范围从 0 到 1 的标量。通常,SmoothingFactor 的值通过缩放启发式窗口大小,调整平滑处理的级别。接近 0 的值会产生较小的移动窗大小,从而导致较少的平滑处理。接近 1 的值会产生较大的移动窗大小,从而导致较多的平滑处理。在某些情况下,根据确定启发式窗大小的输入数据,SmoothingFactor 的值可能不会对 smoothdata2 使用的窗大小产生显著影响。

    如果您指定 window 输入参量,则无法指定 SmoothingFactor

    萨维茨基-戈雷阶数,指定为非负整数。仅当 "sgolay" 是指定的平滑方法时,您才能指定此名称-值参量。Degree 的值对应于萨维茨基-戈雷滤波器中多项式的次数,该次数适合每个窗内的数据。

    输出参量

    全部折叠

    平滑数据,以数值数组形式返回。SA 大小相同。

    窗描述,以形式返回:正整数或 duration 标量、正整数或 duration 值的二元素元胞数组,或非负整数或 duration 值的二元素向量的二元素元胞数组。

    如果指定 window 作为输入参量,则 winsizewindow 相同。如果您未将 window 指定为输入参量,则 winsizesmoothdata2 根据输入数据通过启发式方法确定的标量。

    详细信息

    全部折叠

    算法

    当没有为平滑处理方法指定窗大小时,smoothdata2 将基于启发式算法计算默认窗大小。对于平滑处理因子 τ,启发式算法将估算其衰减量大约为输入数据能量的 100*τ% 的移动平均窗口大小。

    版本历史记录

    在 R2023b 中推出