一维相位展开问题从哪里开始? 我最初寻求帮助(请参阅下面的链接)如何根据规格值进行毯式 360 度翻转,但是更彻底地研究它不会起作用,因为相位被包裹。 有一个过程可以将阶段展开为连续形式。
过程如下:(使用弧度值)
1) 从包裹相位信号左侧的第二个样本开始。
2)计算当前样本与其直接相邻的左侧邻居之间的差异。
3)如果两者之差大于+π,则从这个样本中减去2π,同时从它右边的所有样本中减去。
4)如果两者之差小于-π,则将2π加到这个样本上,也加到它右边的所有样本上。
5) 所有样品都处理了吗? 如果否,则返回步骤 2。 如果是,则停止
我正在寻求执行此操作的一些帮助,并附上了一个示例数据表以供参考。
在这个数据表中,我需要通过 :RowCol、:channel、:teststate 和 refstate 解包。
提前致谢
// You can plot the data according to the scripts below
// This is what i think is a wrapped phase
_dt = Current Data Table();
gb = _dt << Graph Builder(
Size( 1326, 1002 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( :index ), Y( :radians ), Overlay( :RowCol_PartNo_Ch ) ),
Elements( Line( X, Y, Legend( 8 ) ) ),
Local Data Filter(
Add Filter(
columns( :teststate, :refstate, :channel, :RowCol ),
Where( :teststate == 11 ),
Where( :refstate == 1 ),
Where( :channel == {"0", "1", "2", "3"} ),
Where( :RowCol == "r3c1sr3sc1" ),
Display( :channel, N Items( 4 ) ),
Display( :RowCol, N Items( 15 ), Find( Set Text( "" ) ) )
)
),
SendToReport(
Dispatch(
{},
"index",
ScaleBox,
{Min( 4.3125 ), Max( 22.6875 ), Inc( 1 ), Minor Ticks( 4 )}
)
)
);
// This is what i think is a normal (continuous form)
_dt = Current Data Table();
gb = _dt << Graph Builder(
Size( 1326, 1002 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( :index ), Y( :radians ), Overlay( :RowCol_PartNo_Ch ) ),
Elements( Line( X, Y, Legend( 8 ) ) ),
Local Data Filter(
Add Filter(
columns( :teststate, :refstate, :channel, :RowCol ),
Where( :teststate == 11 ),
Where( :refstate == 1 ),
Where( :channel == {"0", "1", "2", "3"} ),
Where( :RowCol == "r3c1sr3sc0" ),
Display( :channel, N Items( 4 ) ),
Display( :RowCol, N Items( 15 ), Find( Set Text( "" ) ) )
)
),
SendToReport(
Dispatch(
{},
"index",
ScaleBox,
{Min( 4.3125 ), Max( 22.6875 ), Inc( 1 ), Minor Ticks( 4 )}
)
)
);
根据列规格限制更改列值
数据表图形脚本回复:一维相位展开问题我正在回顾脚本并将其应用于另一组数据,但我认为我们还没有完成。我将不得不考虑一下这个。 很近...
回复:一维相位展开问题这是伟大的工作@jthi .
(图1):我认为只要曲线保持与没有包裹相位的部件/通道相同的形状,它就是正确的。 我将与测试人员核实。
(图 2):我认为蓝线(通道 0)已死,但其他 3 个通道有大量的包裹阶段,您的脚本解决了这个问题。
(图 3):我现在可以忍受这一点,因为我们正在筛选两 (2) 个中间指数,而不是最后一个。
至于脚本的优化,我什至不知道从哪里开始。 也许有人可以在这个线程上提出建议。
再次,这很棒,不能感谢你的帮助。 因为我们任意展开阶段,所以有可能筛选出好的部分。 不确定我们是否发送了坏零件,直到我可以进一步研究它。
回复:一维相位展开问题知道正确的结果是什么样的吗? 与此类似的东西:
包装阶段:

这应该改变吗?

运行这个脚本会相当慢,但很可能它可以被优化得更快(如果最后一个值处于错误的阶段,它也会有问题):
Names Default To Here(1);
dt = Current Data Table();
dt << New Column("supportindex", Character, "Nominal",
<< Set Each Value(:rowcol || char(:channel)||char(:teststate)||char(:refstate))
);
dt << New Column("radians_cont", Numeric, "Continuous");
Summarize(dt, uniqValues = by(:supportIndex));
For(i = 1, i <= N Items(uniqValues), i++,
valIndex = Loc(Column(dt, "supportIndex") << get as matrix, uniqValues[i]);
m = Column(dt, "radians")[valIndex];
deduction = 0;
nr = N Items(m);
For(k = 2, k <= nr - 1, k++,
rad_dif = m[k - 1] - m[k];
If(rad_dif > pi(), deduction = 2*pi(),
rad_dif < -1*pi(), deduction = -2*pi(),
deduction = 0;
);
m[k::nr] = m[k::nr] + deduction;
);
dt[valIndex, "radians_cont"] = m;
);
dt << Delete Columns("supportindex");
gb = dt << Graph Builder(
Size(1326, 1002),
Show Control Panel(0),
Show Legend(0),
Variables(X(:index), Y(:radians), Y(:radians_cont), Overlay(:RowCol_PartNo_Ch)),
Elements(Position(1, 1), Line(X, Y, Legend(11))),
Elements(Position(1, 2), Line(X, Y, Legend(12))),
Local Data Filter(
Add Filter(
columns(:teststate, :refstate, :channel, :RowCol),
Where(:teststate == 11),
Where(:refstate == 1),
Where(:channel == {"0", "1", "2", "3"}),
Where(:RowCol == "r3c1sr3sc1"),
Display(:channel, N Items(4), Size(178, 68)),
Display(:RowCol, N Items(15), Size(161, 255), Find(Set Text("")))
)
),
SendToReport(
Dispatch(
{},
"index",
ScaleBox,
{Min(4.3125), Max(22.6875), Inc(1), Minor Ticks(4)}
)
)
);最后一个样本的问题:
