! scan-fit.sad ! k.furukawa, may.28.2003. ! FFS; getData[]:=Module[{}, aData = {}; current=start; getDataLoop[]; ]; getDataLoop[]:=Module[{}, AppendTo[aData,{current,Sin[current*3.1415/180.]+noise*GaussRandom[]}]; If[Length[aData]>1,plotData[]]; current = current + step; If[current<=stop,After[interv,getDataLoop[]]]; ]; plotData[]:=Module[{}, Canvas$Widget = c1; g1 = ListPlot[Thread[{Thread[aData][[1]],Thread[aData][[2]]}], FrameLabel->{"Actuater","Response","Raw Graph",""}, PlotJoined->True,Scale->{Linear,Linear}, FrameTicks ->{True,True,False,False}, PlotRange->{Automatic,Automatic},PointColor->"blue" ]; Show[g1]; ]; fitData[]:=Module[{}, Canvas$Widget = c2; g2 = FitPlot[aData, a Cos[x b 0.02 + c] + d, x, {a,1},{b,1},{c,-1},{d,1}, FrameLabel->{"X","Y"} ]; ]; fourierData[]:=Module[{}, Canvas$Widget = c3; xave=(Plus@@aData[[,2]])/Length[aData[[,2]]]; nx=aData[[,2]]-xave; dt=(aData[[-1,1]]-aData[[1,1]])/(Length[aData[[,2]]]-1); fx=Fourier[nx]; power=Abs[fx]^2; ListPlot[Thread[{Range[0,Length[fx]-1]/Length[fx]/dt,power}], FrameLabel->{"Frequency (Hz)","Power Spectrum"}, PlotRange->{{Automatic,Automatic},{Automatic,Automatic}}]; ]; w = KBMainFrame["Scan Test",f,Title -> "Scan Test"]; w[AboutMessage]="Scan Test, K. Furukawa, May.2003"; f1 = Frame[f,Side->"left"]; c1 = Canvas[f1,Width->640,Height->320]; c2 = Canvas[f1,Width->640,Height->320]; c3 = Canvas[f1,Width->640,Height->320]; f2 = KBFComponentFrame[f,Side->"right",Add->{ KBFGroup[Text->"Control"], KBFNumber[Text->"Start",Variable:>start,NumberForm->"8.2"], KBFNumber[Text->"Stop",Variable:>stop,NumberForm->"8.2"], KBFNumber[Text->"Step",Variable:>step,NumberForm->"8.2"], KBFNumber[Text->"Interval",Variable:>interv,NumberForm->"8.2"], KBFNumber[Text->"Noise",Variable:>noise,NumberForm->"8.2"], KBFSeparator[], KBFButton[Text->"Scan",Command:>getData[]], KBFButton[Text->"Fit",Command:>fitData[]], KBFButton[Text->"Fourier",Command:>fourierData[]], } ]; $DisplayFunction=CanvasDrawer; start = -10.; stop = 400.; step = 10.; interv = 0.1; noise = 0.1; TkWait[];