<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: how to compare oscilloscope traces and detect outlier traces? in Discussions</title>
    <link>https://community.jmp.com/t5/Discussions/how-to-compare-oscilloscope-traces-and-detect-outlier-traces/m-p/561074#M77412</link>
    <description>&lt;P&gt;Based on your comment regarding how well they visually line up, the first question I must ask is when you look at the graphs are they practically significantly different? &amp;nbsp;How much of a change in the graphs would matter to you? &amp;nbsp;There are many ways to quantify the plots (e.g., max, min, slope, amplitude). &amp;nbsp;You can use any of those as response variables and test for differences.&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 27 Oct 2022 00:58:04 GMT</pubDate>
    <dc:creator>statman</dc:creator>
    <dc:date>2022-10-27T00:58:04Z</dc:date>
    <item>
      <title>how to compare oscilloscope traces and detect outlier traces?</title>
      <link>https://community.jmp.com/t5/Discussions/how-to-compare-oscilloscope-traces-and-detect-outlier-traces/m-p/561028#M77407</link>
      <description>&lt;P&gt;Hello,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;i am wondering if there is a way in JMP to compare oscilloscope voltage traces to tell whether the traces are statistically the same or different.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;the reason i want to know is bc i collect example scope traces to qualify power supplies. when i plot the traces they visually appear to line up quite well (both the waveform shape and voltage magnitudes), but of course the traces aren't identical.&amp;nbsp; i am wondering if there is a comparison method to identify outlier scope traces.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;my traces are square or pulsewidth type waveforms, which plot voltage vs. time&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;thanks!&lt;/P&gt;</description>
      <pubDate>Fri, 09 Jun 2023 00:56:21 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/how-to-compare-oscilloscope-traces-and-detect-outlier-traces/m-p/561028#M77407</guid>
      <dc:creator>LogitPorcupine1</dc:creator>
      <dc:date>2023-06-09T00:56:21Z</dc:date>
    </item>
    <item>
      <title>Re: how to compare oscilloscope traces and detect outlier traces?</title>
      <link>https://community.jmp.com/t5/Discussions/how-to-compare-oscilloscope-traces-and-detect-outlier-traces/m-p/561074#M77412</link>
      <description>&lt;P&gt;Based on your comment regarding how well they visually line up, the first question I must ask is when you look at the graphs are they practically significantly different? &amp;nbsp;How much of a change in the graphs would matter to you? &amp;nbsp;There are many ways to quantify the plots (e.g., max, min, slope, amplitude). &amp;nbsp;You can use any of those as response variables and test for differences.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 27 Oct 2022 00:58:04 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/how-to-compare-oscilloscope-traces-and-detect-outlier-traces/m-p/561074#M77412</guid>
      <dc:creator>statman</dc:creator>
      <dc:date>2022-10-27T00:58:04Z</dc:date>
    </item>
    <item>
      <title>Re: how to compare oscilloscope traces and detect outlier traces?</title>
      <link>https://community.jmp.com/t5/Discussions/how-to-compare-oscilloscope-traces-and-detect-outlier-traces/m-p/561240#M77426</link>
      <description>&lt;P&gt;And what do you have, a picture or a data table? I'm guessing you get a .CSV table from the scope.&lt;/P&gt;
&lt;P&gt;Are you looking at periodic data? Are you looking for timing of pulses? Or maybe low-level noise? Or sharp corners on square waves?&lt;/P&gt;
&lt;P&gt;I think different tools could be designed for different concerns.&lt;/P&gt;</description>
      <pubDate>Thu, 27 Oct 2022 13:06:06 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/how-to-compare-oscilloscope-traces-and-detect-outlier-traces/m-p/561240#M77426</guid>
      <dc:creator>Craige_Hales</dc:creator>
      <dc:date>2022-10-27T13:06:06Z</dc:date>
    </item>
    <item>
      <title>Re: how to compare oscilloscope traces and detect outlier traces?</title>
      <link>https://community.jmp.com/t5/Discussions/how-to-compare-oscilloscope-traces-and-detect-outlier-traces/m-p/561457#M77451</link>
      <description>&lt;P&gt;Here is an idea that uses Functional Data Explorer in JMP Pro.&amp;nbsp; FDE can do Fourier decomposition in a easy way, and you can look at the Fourier basis coefficients to see if any of them look unusual compared to the rest.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;// 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 &amp;lt;= ntraces, ii++,
	trace = Cos( 2 * Pi() * 3 * points ) :*&lt;/img&gt; Exp( -Pi() * points ^ 2 )
	+J( npoints, 1, Random Normal( 0, noise ) );
	traces = traces || trace;
);
strangetrace = Cos( 2 * Pi() * 2.5 * points ) :*&lt;/img&gt; 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 &amp;lt;&amp;lt; Set Name("Example Traces");
Column( dt, 1 ) &amp;lt;&amp;lt; Set Name( "X" );
For( ii = 1, ii &amp;lt;= ntraces, ii++,
	Column( dt, ii + 1 ) &amp;lt;&amp;lt; Set Name( "Trace " || Char( ii ) )
);
Column( dt, ntraces + 2 ) &amp;lt;&amp;lt; set name( "Strange Trace" );
// graph the traces
dt &amp;lt;&amp;lt; 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 &amp;lt;&amp;lt;
	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 )] &amp;lt;&amp;lt; Make Into Data Table;
	obj &amp;lt;&amp;lt; Close Window;
);

outdt= Get Data Table List()[1];
outdt &amp;lt;&amp;lt; 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 &amp;gt; Screening &amp;gt; Explore Outliers)
// shoudl work fine

outdt &amp;lt;&amp;lt; 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 )} )
	)
);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Example graph of generated traces (with added noise, one of the traces is different than all the others)&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SamGardner_0-1666905803862.png" style="width: 999px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/46661i8D2F6EE944CAEAAD/image-size/large?v=v2&amp;amp;px=999" role="button" title="SamGardner_0-1666905803862.png" alt="SamGardner_0-1666905803862.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;FDE output (summarized)&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SamGardner_1-1666905994927.png" style="width: 999px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/46662i06DEB9BB57654546/image-size/large?v=v2&amp;amp;px=999" role="button" title="SamGardner_1-1666905994927.png" alt="SamGardner_1-1666905994927.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;Explore Outliers detects the "Strange Trace" (Row 31) based on it's Fourier Basis coefficients&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SamGardner_2-1666906150301.png" style="width: 999px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/46663i44E9D838F0FF80CA/image-size/large?v=v2&amp;amp;px=999" role="button" title="SamGardner_2-1666906150301.png" alt="SamGardner_2-1666906150301.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 27 Oct 2022 21:30:03 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/how-to-compare-oscilloscope-traces-and-detect-outlier-traces/m-p/561457#M77451</guid>
      <dc:creator>SamGardner</dc:creator>
      <dc:date>2022-10-27T21:30:03Z</dc:date>
    </item>
  </channel>
</rss>

