如何在Matlab中平滑阶梯形图

如何在Matlab中平滑阶梯形图,matlab,matlab-figure,Matlab,Matlab Figure,图形的阶梯状外观是无意的。当我绘制相同大小的向量时,Arb和V(plot(Arb,V,'r')),我得到以下图形: 为了使其更平滑,我尝试使用一维数据插值,interp1,如下所示: xq = 0:0.001:max(Arb); Vq = interp1 (Arb, V, xq); plot (xq, Vq); 但是,我收到以下错误消息: Error using interp1>reshapeAndSortXandV (line 416) X must be a vector. Er

图形的阶梯状外观是无意的。当我绘制相同大小的向量时,
Arb
V
plot(Arb,V,'r')
),我得到以下图形:

为了使其更平滑,我尝试使用一维数据插值,
interp1
,如下所示:

xq = 0:0.001:max(Arb);
Vq = interp1 (Arb, V, xq);
plot (xq, Vq);
但是,我收到以下错误消息:

Error using interp1>reshapeAndSortXandV (line 416)
X must be a vector.

Error in interp1 (line 92)
    [X,V,orig_size_v] = reshapeAndSortXandV(varargin{1},varargin{2})

interp1
将对数据使用线性插值,因此对您没有多大帮助。您可以尝试使用三次样条曲线与
interp1
,但鉴于数据的性质,我认为这不会有多大帮助。e、 g

备选方案1。三次样条

备选方案2.多项式拟合

您可以尝试的另一种选择是,使用多项式插值。e、 g

备选方案3。α-β滤波器

最后但并非最不重要的一点是,尝试对
V
数据使用平滑处理。一种可能的实施方式可以是:

% x is the input data
% a is the "smoothing" factor from [0, 1]
% a = 0 full smoothing
% a = 1 no smoothing
function xflt  = alphaBeta(x, a)
    xflt = zeros(1,length(x));
    xflt(1) = x(1);

    a = max(min(a, 1), 0); % Bound coefficient between 0 and 1;

    for n = 2:1:length(x);
        xflt(n) = a * x(n) + (1 - a) * xflt(n-1);
    end
end
用法:

plot (Arb, alphaBeta(V, 0.65), 'r')

插值如何帮助平滑?你只需要在同一个形状中得到更多的点。尝试在单个数据点顶部绘制某种拟合线(如果您知道数据确实应该是线性的)。您尝试过“平滑”功能吗?我尝试过。它对图形的总体外观几乎没有影响。这只会使台阶的边缘更圆一点。
% x is the input data
% a is the "smoothing" factor from [0, 1]
% a = 0 full smoothing
% a = 1 no smoothing
function xflt  = alphaBeta(x, a)
    xflt = zeros(1,length(x));
    xflt(1) = x(1);

    a = max(min(a, 1), 0); % Bound coefficient between 0 and 1;

    for n = 2:1:length(x);
        xflt(n) = a * x(n) + (1 - a) * xflt(n-1);
    end
end
plot (Arb, alphaBeta(V, 0.65), 'r')