[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[sc-dev] SF.net SVN: quarks:[2654] SenseWorld/SignalCharacteristics.sc
- To: sc-dev@xxxxxxxxxxxxxxxx
- Subject: [sc-dev] SF.net SVN: quarks:[2654] SenseWorld/SignalCharacteristics.sc
- From: nescivi@xxxxxxxxxxxxxxxxxxxxx
- Date: Tue, 22 Oct 2013 16:48:57 +0000
- Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:Content-Type:Subject:To:From:MIME-Version:Date; bh=Yc54Z75E+9cGTrkov3sihgmqcSweBUcSZoaCsd0YupU=; b=Vs4Q++Cytj9R6ZTJQlY2s6tWuh3fygb9Jp7wus63WowVZVuPCbjTtW3Wlj7uZR/rv12aajli6Ouwt6CB7OFKtxZOc3lLKd42s4VZj7o1577O+9RRrm+/STkBLwUKn657ik2LT/i0x8YtzMTdApq4Mb0R5a1DSMuYWONcDH8zh8o=;
- Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x; h=Content-Transfer-Encoding:Content-Type:Subject:To:From:MIME-Version:Date; bh=Yc54Z75E+9cGTrkov3sihgmqcSweBUcSZoaCsd0YupU=; b=CgPS6tP6NbYiZPXVCQ46sathY2KV+EeUKZ235RGSxV8OviIwT9VZV/E6rjh3zdcEBno5mEo8/xuvWMsVkrs+NC6dHbZC14AonE3V3nL2x4kzXnO/6kP91EiUabKTdLzxkOOAEMzq9KRnbQHxtp9otpne+3bD0Y+DBV3lTQGUC9E=;
- List-id: SuperCollider developers mailing list <sc-devel.create.ucsb.edu>
- Reply-to: sc-dev@xxxxxxxxxxxxxxxx
- Sender: owner-sc-dev@xxxxxxxxxxxxxxxx
Revision: 2654
http://sourceforge.net/p/quarks/code/2654
Author: nescivi
Date: 2013-10-22 16:48:55 +0000 (Tue, 22 Oct 2013)
Log Message:
-----------
add SignalCharacteristics analyzer
Added Paths:
-----------
SenseWorld/SignalCharacteristics.sc
Added: SenseWorld/SignalCharacteristics.sc
===================================================================
--- SenseWorld/SignalCharacteristics.sc (rev 0)
+++ SenseWorld/SignalCharacteristics.sc 2013-10-22 16:48:55 UTC (rev 2654)
@@ -0,0 +1,210 @@
+SignalCharacterics {
+
+ var <>maxsize;
+
+ var <data, <times, <lastTime;
+ var <resdata, <stepdata, <timeresdata;
+
+ *new{ |maxsize|
+ ^super.new.maxsize_( maxsize ).init;
+ }
+
+ init{
+ data = Array.new;
+ times = Array.new;
+ lastTime = Process.elapsedTime;
+ }
+
+ mean{
+ ^data.mean;
+ }
+
+ stdDev{
+ ^data.stdDev;
+ }
+
+ range{
+ ^[ data.minItem, data.maxItem ];
+ }
+
+ median{
+ ^data.median
+ }
+
+ addValue{ |newval|
+ var thistime = Process.elapsedTime;
+ times = times.add( thistime - lastTime );
+ lastTime = thistime;
+ if ( times.size > ( maxsize-1 ) ){ times = times.drop(1) };
+ data = data.add( newval );
+ if ( data.size > maxsize ){ data = data.drop(1); };
+ }
+
+ totalTime{
+ ^times.sum;
+ }
+
+ calcResolution{
+ var datacopy = data.copy;
+ var timecopy = times.copy;
+ resdata = datacopy.asSet.asArray.sort;
+ stepdata = resdata.differentiate.drop(1);
+ timeresdata = timecopy.asSet.asArray.sort;
+ }
+
+ makeGui{
+ ^SignalCharacteristicsGui.new( this );
+ }
+}
+
+SignalCharacteristicsGui {
+ var <>signalc;
+
+ var <window;
+ var subwin, subwin2, subwin3;
+
+ var dataLabel;
+ var medianNumber, meanNumber, stdNumber;
+ var rangerStat, ranger, dataPlot;
+ var resolutionLabel, stepsNumber, stepMeanNumber, stepStdNumber, stepRangerStat, stepRanger;
+ var histoPlot;
+
+ var timeresolutionLabel, sampleMeanNumber, sampleStdNumber, sampleRangerStat, sampleRanger, sampleHistoPlot, samplePlot;
+
+ var <updater;
+
+ *new{ |signal|
+ ^super.new.signalc_( signal ).init;
+ }
+
+ init{
+
+ signalc.calcResolution;
+
+ window = Window.new( "data characteristics", Rect( 0,0, 900, 300 ), scroll: false );
+ window.addFlowLayout( 0@0, 0@0 );
+
+ subwin = CompositeView.new( window, Rect( 0,0,300, 300 ) );
+ subwin.addFlowLayout( 2@2, 2@2 );
+
+ dataLabel = StaticText.new( subwin, Rect( 0,0, 294, 20 ) ).string_( "Data" ).align_( \center ).background_( Color.green );
+ medianNumber = EZNumber.new( subwin, Rect( 0,0, 145, 20 ), "median", initVal: signalc.median ).round_( 0.0001 ).numberView.decimals_( 4 );
+
+ subwin.decorator.nextLine;
+ meanNumber = EZNumber.new( subwin, Rect( 0,0, 145, 20 ), "mean", initVal: signalc.mean ).round_( 0.0001 ).numberView.decimals_( 4 );
+ stdNumber = EZNumber.new( subwin, Rect( 0,0, 145, 20 ), "std-dev", initVal: signalc.stdDev ).round_( 0.0001 ).numberView.decimals_( 4 );
+
+
+ rangerStat = EZRanger.new( subwin, Rect( 0,0, 294, 20 ), "mean/std", initVal: signalc.mean + ( signalc.stdDev* [-1,1]), labelWidth:60 );
+ rangerStat.setColors(sliderColor: Color.yellow, knobColor: Color.black );
+ ranger = EZRanger.new( subwin, Rect( 0,0, 294, 20 ), "range", initVal: [ signalc.data.minItem, signalc.data.maxItem], labelWidth:60 );
+ ranger.setColors(sliderColor: Color.yellow, knobColor: Color.black );
+
+
+ dataPlot = Plotter.new( "data", Rect( 0,0, 294, 190 ), subwin );
+ dataPlot.value = signalc.data;
+ dataPlot.domainSpecs_( [ 0, signalc.totalTime, \linear, signalc.totalTime/signalc.maxsize, 0, " s" ].asSpec ); dataPlot.refresh;
+
+
+ subwin2 = CompositeView.new( window, Rect( 0,0,300, 300 ) );
+ subwin2.addFlowLayout( 2@2, 2@2 );
+
+
+ resolutionLabel = StaticText.new( subwin2, Rect( 0,0, 294, 20 ) ).string_( "Resolution" ).align_( \center ).background_( Color.green );
+ stepsNumber = EZNumber.new( subwin2, Rect( 0,0, 145, 20 ), "steps", [0,1000].asSpec, initVal: signalc.resdata.size, numberWidth: 80 );
+ subwin2.decorator.nextLine;
+ stepMeanNumber = EZNumber.new( subwin2, Rect( 0,0, 145, 20 ), "mean", initVal: signalc.stepdata.mean, numberWidth: 80 ).round_( 0.0001 ).numberView.decimals_( 4 );
+ stepStdNumber = EZNumber.new( subwin2, Rect( 0,0, 145, 20 ), "std-dev", initVal: signalc.stepdata.stdDev, numberWidth: 80 ).round_( 0.0001 ).numberView.decimals_( 4 );
+
+ stepRangerStat = EZRanger.new( subwin2, Rect( 0,0, 294, 20 ), "mean/std", [0,0.1,\linear,0.001].asSpec, initVal: signalc.stepdata.mean + (signalc.stepdata.stdDev* [-1,1]), labelWidth:60 );
+ stepRangerStat.setColors(sliderColor: Color.yellow, knobColor: Color.black );
+ stepRanger = EZRanger.new( subwin2, Rect( 0,0, 294, 20 ), "range", [0,0.1,\linear,0.001].asSpec, initVal: [signalc.stepdata.minItem, signalc.stepdata.maxItem], labelWidth:60 );
+ stepRanger.setColors(sliderColor: Color.yellow, knobColor: Color.black );
+
+
+ histoPlot = Plotter.new( "histogram", Rect( 0,0, 294, 190 ), subwin2 );
+ // plot(discrete: true);
+ histoPlot.plotMode_( \steps );
+ histoPlot.domainSpecs_( [ signalc.data.minItem, signalc.data.maxItem].asSpec );
+ histoPlot.refresh;
+
+
+ subwin3 = CompositeView.new( window, Rect( 0,0,300, 300 ) );
+ subwin3.addFlowLayout( 2@2, 2@2 );
+
+ timeresolutionLabel = StaticText.new( subwin3, Rect( 0,0, 294, 20 ) ).string_( "Sample resolution" ).align_( \center ).background_( Color.green );
+ // a.stepsNumber = EZNumber.new( a.subwin2, Rect( 0,0, 145, 20 ), "steps", [0,1000].asSpec, initVal: a.resdata.size, numberWidth: 80 );
+ // a.subwin2.decorator.nextLine;
+ sampleMeanNumber = EZNumber.new( subwin3, Rect( 0,0, 145, 20 ), "mean", initVal: signalc.times.mean, numberWidth: 80 ).round_( 0.0001 ).numberView.decimals_( 4 );
+ sampleStdNumber = EZNumber.new( subwin3, Rect( 0,0, 145, 20 ), "std-dev", initVal: signalc.times.stdDev, numberWidth: 80 ).round_( 0.0001 ).numberView.decimals_( 4 );
+
+ sampleRangerStat = EZRanger.new( subwin3, Rect( 0,0, 294, 20 ), "mean/std", [0,0.5,\linear,0.001].asSpec, initVal: signalc.times.mean + (signalc.times.stdDev* [-1,1]), labelWidth:60 );
+ sampleRangerStat.setColors(sliderColor: Color.yellow, knobColor: Color.black );
+ sampleRanger = EZRanger.new( subwin3, Rect( 0,0, 294, 20 ), "range", [0,1,\linear,0.001].asSpec, initVal: [signalc.times.minItem, signalc.times.maxItem], labelWidth:60 );
+ sampleRanger.setColors(sliderColor: Color.yellow, knobColor: Color.black );
+
+ sampleHistoPlot = Plotter.new( "times histogram", Rect( 0,0, 294, 100 ), subwin3 );
+ samplePlot = Plotter.new( "times", Rect( 0,0, 294, 100 ), subwin3 );
+ // plot(discrete: true);
+ samplePlot.value = signalc.times;
+ sampleHistoPlot.plotMode_( \steps );
+ sampleHistoPlot.domainSpecs_( [ signalc.times.minItem, signalc.times.maxItem].asSpec );
+ sampleHistoPlot.refresh;
+
+ window.front;
+
+ updater = SkipJack.new( { signalc.calcResolution; this.updateVals }, 0.2, { window.isClosed } );
+ }
+
+ updateVals{
+ var histodata, sampleHistoData;
+ defer{
+ medianNumber.value = signalc.median;
+ meanNumber.value = signalc.mean;
+ stdNumber.value = signalc.stdDev;
+ rangerStat.value = signalc.mean + ( signalc.stdDev* [-1,1]);
+ ranger.value = [ signalc.data.minItem, signalc.data.maxItem];
+ dataPlot.value = signalc.data;
+ dataPlot.domainSpecs_( [ 0, signalc.totalTime, \linear, signalc.totalTime/signalc.maxsize, 0, " s" ].asSpec );
+
+
+ stepsNumber.value = signalc.resdata.size;
+ stepMeanNumber.value = signalc.stepdata.mean;
+ stepStdNumber.value = signalc.stepdata.stdDev;
+
+ stepRangerStat.value = signalc.stepdata.mean + (signalc.stepdata.stdDev* [-1,1]);
+ stepRanger.value = [signalc.stepdata.minItem, signalc.stepdata.maxItem];
+
+ histodata = signalc.data.histo( signalc.resdata.size );
+ histoPlot.domainSpecs_( [ signalc.data.minItem, signalc.data.maxItem].asSpec );
+ histoPlot.value = histodata;
+
+ sampleMeanNumber.value = signalc.times.mean;
+ sampleStdNumber.value = signalc.times.stdDev;
+
+ sampleRangerStat.value = signalc.times.mean + (signalc.times.stdDev* [-1,1]);
+ sampleRanger.value = [signalc.times.minItem, signalc.times.maxItem];
+
+ samplePlot.value = signalc.times;
+ sampleHistoData = signalc.times.histo( signalc.maxsize/10 );
+ sampleHistoPlot.domainSpecs_( [ signalc.timeresdata.minItem, signalc.timeresdata.maxItem].asSpec );
+ sampleHistoPlot.value = sampleHistoData;
+
+ signalc.times.mean + (signalc.times.stdDev* [-1,1])
+ };
+ }
+}
+
+
+/*
+(
+Tdef( \generateData, { loop{
+ a[ \addData ].value( 0.5.gauss(0.1).round(0.01) );
+ a[ \getStepData ].value;
+ rrand(0.03,0.07 ).wait
+ };
+} );
+);
+Tdef( \generateData ).play;
+Tdef( \generateData ).stop;
+*/
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
_______________________________________________
sc-dev mailing list
info (subscription, etc.): http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: https://listarc.bham.ac.uk/marchives/sc-dev/
search: https://listarc.bham.ac.uk/lists/sc-dev/search/