Hallo,
Ich frage mich, ob es in JMP eine Möglichkeit gibt, Oszilloskop-Spannungsspuren zu vergleichen, um festzustellen, ob die Spuren statistisch gleich oder unterschiedlich sind.
Der Grund, den ich wissen möchte, ist, dass ich Beispiel-Scope-Traces sammle, um Netzteile zu qualifizieren. Wenn ich die Spuren zeichne, scheinen sie sich optisch recht gut auszurichten (sowohl die Wellenform als auch die Spannungsgrößen), aber natürlich sind die Spuren nicht identisch.Ich frage mich, ob es eine Vergleichsmethode gibt, um Spuren von Ausreißern zu identifizieren.
Meine Spuren sind Rechteck- oder Impulsbreitenwellenformen, die die Spannung über der Zeit darstellen
Danke!
Hier ist eine Idee, die den funktionalen Daten-Explorer in JMP Pro verwendet.FDE kann die Fourier-Zerlegung auf einfache Weise durchführen, und Sie können sich die Fourier-Basiskoeffizienten ansehen, um festzustellen, ob einer von ihnen im Vergleich zu den anderen ungewöhnlich aussieht.
// find unusual signal trace idea
Names Default To Here( 1 );
// create some signal traces, with one trace that is different from the others
ntraces = 30;
npoints = 100;
points = (-1 :: 1 :: .01)`;
npoints = N Rows( points );
noise = 0.1;
traces = [];
For( ii = 1, ii <= ntraces, ii++,
trace = Cos( 2 * Pi() * 3 * points ) :*</img> Exp( -Pi() * points ^ 2 )
+J( npoints, 1, Random Normal( 0, noise ) );
traces = traces || trace;
);
strangetrace = Cos( 2 * Pi() * 2.5 * points ) :*</img> Exp( -Pi() * points ^ 2 )+J( npoints, 1, Random Normal( 0, noise ) );
traces = traces || strangetrace;
// put them into a data table and name columns descriptively
dt = As Table( points || traces );
dt << Set Name("Example Traces");
Column( dt, 1 ) << Set Name( "X" );
For( ii = 1, ii <= ntraces, ii++,
Column( dt, ii + 1 ) << Set Name( "Trace " || Char( ii ) )
);
Column( dt, ntraces + 2 ) << set name( "Strange Trace" );
// graph the traces
dt << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :X ),
Y( :Trace 1 ),
Y( :Trace 2, Position( 1 ) ),
Y( :Trace 3, Position( 1 ) ),
Y( :Trace 4, Position( 1 ) ),
Y( :Trace 5, Position( 1 ) ),
Y( :Trace 6, Position( 1 ) ),
Y( :Trace 7, Position( 1 ) ),
Y( :Trace 8, Position( 1 ) ),
Y( :Trace 9, Position( 1 ) ),
Y( :Trace 10, Position( 1 ) ),
Y( :Trace 11, Position( 1 ) ),
Y( :Trace 12, Position( 1 ) ),
Y( :Trace 13, Position( 1 ) ),
Y( :Trace 14, Position( 1 ) ),
Y( :Trace 15, Position( 1 ) ),
Y( :Trace 16, Position( 1 ) ),
Y( :Trace 17, Position( 1 ) ),
Y( :Trace 18, Position( 1 ) ),
Y( :Trace 19, Position( 1 ) ),
Y( :Trace 20, Position( 1 ) ),
Y( :Trace 21, Position( 1 ) ),
Y( :Trace 22, Position( 1 ) ),
Y( :Trace 23, Position( 1 ) ),
Y( :Trace 24, Position( 1 ) ),
Y( :Trace 25, Position( 1 ) ),
Y( :Trace 26, Position( 1 ) ),
Y( :Trace 27, Position( 1 ) ),
Y( :Trace 28, Position( 1 ) ),
Y( :Trace 29, Position( 1 ) ),
Y( :Trace 30, Position( 1 ) ),
Y( :Strange Trace, Position( 1 ) )
),
Elements(
Line(
X,
Y( 1 ),
Y( 2 ),
Y( 3 ),
Y( 4 ),
Y( 5 ),
Y( 6 ),
Y( 7 ),
Y( 8 ),
Y( 9 ),
Y( 10 ),
Y( 11 ),
Y( 12 ),
Y( 13 ),
Y( 14 ),
Y( 15 ),
Y( 16 ),
Y( 17 ),
Y( 18 ),
Y( 19 ),
Y( 20 ),
Y( 21 ),
Y( 22 ),
Y( 23 ),
Y( 24 ),
Y( 25 ),
Y( 26 ),
Y( 27 ),
Y( 28 ),
Y( 29 ),
Y( 30 ),
Y( 31 ),
Legend( 5 )
)
)
);
// use FDE to find Fourier Basis Functions and Coefficients for Each Trace and save to a data table
Local( {obj},
obj = dt <<
Functional Data Explorer(
Data Format( Column ),
Y(
:Trace 1, :Trace 2, :Trace 3, :Trace 4, :Trace 5, :Trace 6, :Trace 7,
:Trace 8, :Trace 9, :Trace 10, :Trace 11, :Trace 12, :Trace 13,
:Trace 14, :Trace 15, :Trace 16, :Trace 17, :Trace 18, :Trace 19,
:Trace 20, :Trace 21, :Trace 22, :Trace 23, :Trace 24, :Trace 25,
:Trace 26, :Trace 27, :Trace 28, :Trace 29, :Trace 30, :Strange Trace
),
X( :X ),
Fourier Basis(
Functional PCA(
1,
FPC Profiler(
1,
Confidence Intervals( 1 ),
Term Value(
X( 0, N Levels( 201 ), Lock( 1 ), Show( 1 ) ),
FPC 1( 0, Lock( 0 ), Show( 1 ) )
)
)
)
),
SendToReport(
Dispatch(
{"Functional Data Explorer"},
"Data Processing",
OutlineBox,
{Close( 1 )}
),
Dispatch(
{"Functional Data Explorer", "Fourier Basis on Initial data"},
"Random Coefficients by Function",
OutlineBox,
{Close( 0 )}
),
Dispatch(
{"Functional Data Explorer", "Fourier Basis on Initial data"},
"Functional PCA",
OutlineBox,
{Close( 1 )}
)
)
);
Report( obj )["Fourier Basis on Initial data", "Random Coefficients by Function",
Table Box( 1 )] << Make Into Data Table;
obj << Close Window;
);
outdt= Get Data Table List()[1];
outdt << Set Name("Fourier Basis Coefficients for Traces");
// use explore outlier screening platform to find traces with outlying basis function coefficients
// note, this last step is specific to this problem, other problems might use more or less fourier basis
// functions, but the same general approach using Explore Outlier (Analyze > Screening > Explore Outliers)
// shoudl work fine
outdt << Explore Outliers(
Y(
:"Sine Period[3]"n, :"Cosine Period[3]"n, :"Sine Period[1.5]"n,
:"Cosine Period[1.5]"n, :"Sine Period[1]"n, :"Cosine Period[1]"n,
:"Sine Period[0.75]"n, :"Cosine Period[0.75]"n, :"Sine Period[0.6]"n,
:"Cosine Period[0.6]"n, :"Sine Period[0.5]"n, :"Cosine Period[0.5]"n,
:"Sine Period[0.43]"n, :"Cosine Period[0.43]"n, :"Sine Period[0.38]"n,
:"Cosine Period[0.38]"n, :"Sine Period[0.33]"n, :"Cosine Period[0.33]"n,
:"Sine Period[0.3]"n, :"Cosine Period[0.3]"n, :"Sine Period[0.27]"n,
:"Cosine Period[0.27]"n
),
Robust Fit Outliers( Huber( 1 ) ),
SendToReport(
Dispatch( {"Robust Fit Outliers"}, "", TabListBox, {Set Selected( 2 )} )
)
);
Beispieldiagramm generierter Spuren (mit zusätzlichem Rauschen unterscheidet sich eine der Spuren von allen anderen)

FDE-Ausgabe (zusammengefasst)

Explore Outliers erkennt die „Strange Trace“ (Zeile 31) basierend auf ihren Fourier-Basis-Koeffizienten
