如何在 Matlab 中平滑阶梯状图
Posted
技术标签:
【中文标题】如何在 Matlab 中平滑阶梯状图【英文标题】:How to smooth a stairstep-like graph in Matlab 【发布时间】:2018-07-17 17:12:54 【问题描述】:图表的阶梯状外观是无意的。当我绘制相同大小的向量 Arb
和 V
(plot (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(varargin1,varargin2)
【问题讨论】:
插值如何帮助平滑?您只会在相同的形状中获得更多积分。尝试某种拟合线(如果您知道数据确实应该是线性的),绘制在各个数据点的顶部。 你试过'smooth'功能吗? 我有。它对图形的总体外观几乎没有影响。它只会使台阶的边缘更圆一点。 【参考方案1】: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')
【讨论】:
以上是关于如何在 Matlab 中平滑阶梯状图的主要内容,如果未能解决你的问题,请参考以下文章