如何在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')