该图的阶梯状外观是无意的。当我绘制相同大小的向量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})
答案 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')