如何在Matlab中平滑阶梯状图形

时间:2018-07-17 17:12:54

标签: matlab matlab-figure

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

enter image description here

为使其更平滑,我尝试使用一维数据插值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})

1 个答案:

答案 0 :(得分:0)

interp1将对数据使用线性插值,因此对您没有太大帮助。您可以尝试的一件事是在interp1中使用三次样条,但鉴于数据的性质,我认为这不会有多大帮助。例如

  

替代1 。三次样条线

xq = 0:0.001:max(Arb);
Vq = interp1 (Arb, V, xq, 'spline');
plot (xq, Vq);
  

替代2。多项式拟合

您可以尝试的另一种选择是使用polyfit进行多项式插值。例如

p = polifit(Arb, V, 2); % I think a 2nd order polynomial should do
xq = 0:0.001:max(Arb);
Vq = polyval(p, xq);
plot (xq, Vq);
  

替代3 。 Alpha-beta过滤器

最后但并非最不重要的另一件事,是尝试对V数据使用平滑alpha-beta filter。一种可能的实现方式可以是:

% 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')