定期到增量(数据缩减)
Periodic to incremental (data reduction)
有一段时间我一直在考虑解决这个问题。我注册了 angular 数据 (Angle(~20000,1)) 在 0 到 355 之间变化(连接到旋转测试机的电位计),我想以增量形式转换它,因为我想最终总 angular 位移。主要问题是在 355 和下一个 0 之间没有跳跃,而是快速递减(时间与角度的斜率强烈负 space)。到目前为止,我已经尝试了两种方法:
计算 Angslope=diff(Angle)
,提取索引 j1=find(Angslope>0.2 & Angslope<0.2)
以避免由于 angular 信号反转导致的负斜率,然后尝试应用那些原始 Angle(n,1)
的索引为 Angle2=Angle(j1)
。问题是 Angslope 的 n-1 长度以及我的一个位置的索引以某种方式没有简单移动的事实。
对于循环和逻辑,如果前一个<当前值等想要排除数据等
Angle2=zeros(size(Angle,1),1);
for i=2:size(Angle,1)
if Angle(i,1)<Angle(i-1,1)
Angle2(i,1)=NaN;
else Angle2(i,1)=Angle(i,1);
end
end
效果很好,但我不知道如何 "match up" 我获得的单步增量!
任何帮助或简单的评论都会有很大帮助!!
您可能正在寻找 unwrap
函数。为此,您必须将角度转换为弧度,但这没什么大不了的。
您可以在一行中获取增量:
Inc = diff(unwrap(Angle*pi/180))*180/pi;
你的总angular位移:
Tot = sum(Inc);
最佳,
有一段时间我一直在考虑解决这个问题。我注册了 angular 数据 (Angle(~20000,1)) 在 0 到 355 之间变化(连接到旋转测试机的电位计),我想以增量形式转换它,因为我想最终总 angular 位移。主要问题是在 355 和下一个 0 之间没有跳跃,而是快速递减(时间与角度的斜率强烈负 space)。到目前为止,我已经尝试了两种方法:
计算
Angslope=diff(Angle)
,提取索引j1=find(Angslope>0.2 & Angslope<0.2)
以避免由于 angular 信号反转导致的负斜率,然后尝试应用那些原始Angle(n,1)
的索引为Angle2=Angle(j1)
。问题是 Angslope 的 n-1 长度以及我的一个位置的索引以某种方式没有简单移动的事实。对于循环和逻辑,如果前一个<当前值等想要排除数据等
Angle2=zeros(size(Angle,1),1); for i=2:size(Angle,1) if Angle(i,1)<Angle(i-1,1) Angle2(i,1)=NaN; else Angle2(i,1)=Angle(i,1); end end
效果很好,但我不知道如何 "match up" 我获得的单步增量!
任何帮助或简单的评论都会有很大帮助!!
您可能正在寻找 unwrap
函数。为此,您必须将角度转换为弧度,但这没什么大不了的。
您可以在一行中获取增量:
Inc = diff(unwrap(Angle*pi/180))*180/pi;
你的总angular位移:
Tot = sum(Inc);
最佳,