找到编号,仅保留最近的一个数字

3视图(30天)
你好,
我有一些数据从一个机器人运动现在我想找到最近的连续数字的389.387。到目前为止,这是我的代码,但是我不知道如何做“最接近389.387”循环。遗憾的是,没有点为389.387,所以我不能搜索这个数字……看看这张照片时,红圈区域附近的数字是389.387。我感激你的想法!
i = 1:长度(z_irl)
如果z_irl (i) > 389.2 & & z_irl(我)< 389.5% z_irl是整个机器人运动,我试图只保留
%的数量在389.387附近
y_temp_r (i) = z_irl(我);
结束
% y_temp (i) = 0;
结束
[row_r, col_r value_r] =找到(y_temp_r);%与这条线我得到所需的所有信息的数字389.387附近
smallnr = 0 (1 b);% b是10,只有10个数字在389.387附近
i = 1:长度(row_r)
区别(我)= abs (value_r (i) - 389.387);
结束
我= 2;
如果diff (row_r) = = 1%,这就是我不知道如何继续下去,我不知道如何
% < >查询只有连续的数字,它是
如果差异(张)<差异(我)%驾驶我疯了(ノಠ益ಠ)ノ彡┻━┻我想我需要两个计数器,
%一个用于计算的最小的数,另一个用于计算
发起(张)=差异(张);%的数量连续编号
其他的
发起(张)=区别(我);
结束
我=我+ 1;
结束
我用Matlab R2020b供学术使用。

接受的答案

图像分析
图像分析 2021年6月4日
布鲁斯,我可能使用findpeaks信号和常数之间的区别:
[~,indexesOfPeaks] = findpeaks (abs (y - yConstant))
yCrossings = y (indexesOfPeaks)
这里有一个完整的演示:
t = linspace(0, 42岁,500);
时间= 42/5;
y = -100 * sin(2 *π* t /期)+ 389.387;
次要情节(2,1,1);
情节(t y“b -”,“线宽”2);
网格;
标题(原始信号的);
包含(“时间”);
ylabel (“距离”);
yConstant = 389.387;
yDiff = abs (y - yConstant);
%让我们看到它。
次要情节(2,1,2);
情节(t, yDiff“b -”,“线宽”2);
网格;
标题(“常数的差异”);
包含(“时间”);
ylabel (“距离”);
%的山峰
[~,indexesOfPeaks] = findpeaks (yDiff)
yCrossings = y (indexesOfPeaks)
%的阴谋在原始信号
次要情节(2,1,1);
持有;
yCrossings情节(t (indexesOfPeaks),“r”。,“MarkerSize”15);
持有;
你也可以尝试ismembertol(),但可能让你在每个位置和多个索引必须检测,选择最接近的一个。

答案(1)

布鲁斯·罗杰斯
布鲁斯·罗杰斯 2021年6月7日
编辑:布鲁斯·罗杰斯 2021年6月7日
你好,图像分析,
这个解决方案对我来说是很好的,几乎工作正常。问题是,并不是一个正弦曲线信号,这是向上和向下运动的robotarm z轴,这样你的程序给我更多yCrossings。在图中你可以看到它的样子。我也附加整个z轴运动(z_axis.txt),所以你可以看到原始信号。
rowsToDelete = yCrossings < 380 | yCrossings > 420;
yCrossings (rowsToDelete) = [];
我设法消除转折点的标志值,但在一开始有三个标志值,这是错误的。我想用最后一个第一的10个“389.387”的价值观。

类别

找到更多的在机器人帮助中心文件交换

s manbetx 845

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的