如何找到的零交叉x和时间数据集?

254(30天)
我怎么能找到零交叉数据集?
图()
情节(x, t)
3评论

登录置评。

接受的答案

斯科特·麦肯齐
斯科特·麦肯齐 2021年6月9日
编辑:斯科特·麦肯齐 2021年6月10日
这就是我的总和。的变量 fCross 是你正在寻找的。
%的数据发布matlab。垫的文件
f = readmatrix (“testdata1.txt”);
t = readmatrix (“testdata2.txt”);
tiledlayout (3,1);
nexttile;
情节(t、f);
持有;
轴(10 -1.2 - 1.2 [1]);
nexttile;
fAbove = f。* (f > = 0);
fBelow = f。* (f < = 0);
区(t fAbove“FaceColor”,“r”);
持有;
区(t fBelow“FaceColor”,‘g’);
轴(10 -1.2 - 1.2 [1]);
nexttile;
fCrossRaw =找到(diff (fAbove > 0));
fCross = fCrossRaw。/长度(t) * 10;%按照轴
情节(fCross 0(1,长度(fCross)),“* r”);
持有;
轴(10 -1.2 - 1.2 [1]);
参照线(fCross“颜色”,(。7 7 7]);
yline (0,“颜色”,(。7 7 7]);

更多的答案(2)

Stefan Schuberth
Stefan Schuberth 2022年7月27日
编辑:Stefan Schuberth 2022年7月27日
如果你有(x, y)数据和想做它不使用循环试试:
我找= (y (1: end-1)。* y(2:结束)< 0);%的零交叉指数
m = (y (i + 1) - y (i))。/ (x - x (i + 1)(我));%的斜率
x0 = - y (i)。/ m + x(我);%的零交叉x坐标线性插值

乔尔·林奇
乔尔·林奇 2021年6月9日
编辑:乔尔·林奇 2021年6月9日
idx =找到(f(2:结束)。* f (1: end-1) < 0)
将返回左手indicies交叉的点。
得到确切的认识发生交叉的地方,你将不得不做一些线性intepolation(倒)
t_zero = 0(大小(idx));
i = 1:元素个数(idx)
j = idx (i);%需要索引idx / t_zero向量,和f / t向量
t_zero (i) = interp1 (f (j: + 1), t (j: + 1), 0.0,“线性”);
结束
注意:这将会失败如果交叉发生在最后我值(i + 1将扩展数据集的范围外)
4评论
斯科特·麦肯齐
斯科特·麦肯齐 2021年6月11日
编辑:斯科特·麦肯齐 2021年6月29日
是的,乔尔的代码给确切的交叉。但是,记住,这是恰当的 线性插值的数据 。实际数据实证,所以不可能知道确切的交叉。
它可能不重要在这种情况下,由于数据似乎聚集在高采样率。

登录置评。

类别

找到更多的在二维和三维图帮助中心文件交换

下载188bet金宝搏


释放

R2021a

社区寻宝

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

开始狩猎!