1차원 위상 언래핑 문제어디서부터 시작해야 할까요? 나는 원래 사양 값을 기반으로 블랭킷 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 )}
)
)
);
열 사양 제한에 따라 열 값 변경
데이터 테이블제도법스크립팅Re: 1차원 위상 언래핑 문제나는 스크립트를 다시 보고 그것을 다른 데이터 세트에 적용하고 있는데 우리가 아직 거기에 도달했다고 생각하지 않습니다. 나는 이것에 대해 조금 생각해야 할 것입니다. 가깝다...
Re: 1차원 위상 언래핑 문제이것은 훌륭한 작품입니다 @jthi .
(그림 1): 곡선이 래핑된 위상이 없는 부품/채널과 동일한 모양을 유지하는 한 옳다고 생각합니다. 테스트 사람들과 함께 확인하겠습니다.
(그림 2): 파란색 선(채널 0)은 죽은 것 같지만 다른 3개의 채널에는 엄청난 수의 래핑된 단계가 있고 스크립트가 해결했습니다.
(그림 3): 우리가 마지막이 아닌 두 개의 중간 지수에서 심사하고 있기 때문에 지금은 그걸로 살 수 있습니다.
스크립트 최적화에 관해서는 어디서부터 시작해야 할지조차 몰랐습니다. 누군가가 제안과 함께 이 스레드에 끼어들 수도 있습니다.
다시 말하지만, 이것은 훌륭하며 도움에 대해 충분히 감사할 수 없습니다. 우리가 임의로 단계를 풀었기 때문에 좋은 부분을 선별할 가능성이 있습니다. 내가 좀 더 파고들 때까지 우리가 나쁜 부품을 보내고 있는지 확실하지 않습니다.
Re: 1차원 위상 언래핑 문제올바른 결과가 어떻게 보일지 아십니까? 이것과 비슷한 것:
래핑된 단계:

이것을 변경해야합니까?

이 스크립트를 실행하는 것은 상당히 느리지만 더 빠르도록 최적화될 가능성이 높습니다(마지막 값이 잘못된 단계에 있는 경우에도 문제가 있음).
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)}
)
)
);마지막 샘플 문제:
