01.06.2015 Views

A Performance Analysis System for the Sport of Bowling

A Performance Analysis System for the Sport of Bowling

A Performance Analysis System for the Sport of Bowling

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

3.6 IMPLEMENTATION, PERFORMANCE, AND ACCURACY<br />

The version <strong>of</strong> <strong>the</strong> MASTER application that was used to generate <strong>the</strong> screen captures <strong>for</strong><br />

this paper incorporates most <strong>of</strong> <strong>the</strong> derivations and methods given in Sections 3.1 to 3.4.<br />

Figure 3-8 presents a data flow diagram <strong>of</strong> <strong>the</strong> various routines that generate <strong>the</strong> data <strong>for</strong><br />

<strong>the</strong> graphs displayed on <strong>the</strong> "Spectrum", "Wave<strong>for</strong>m", and "<strong>Analysis</strong>" screens. Appendix<br />

D contains <strong>the</strong> 'C' source code <strong>for</strong> those routines.<br />

MASTER <strong>Analysis</strong> Calculations Data Flow Diagram<br />

From:<br />

Upload/Archive Routines<br />

A<br />

vCalcSpectrum (page D-3)<br />

Initialize: RealData[ ] = RawData[ ]<br />

Calc Spectrum: RealSpectrum[ ] = FFT (RealData[ ])<br />

Calc Magnitudes: FFTMag[ ] = FFTMagnitude (RealSpectrum[ ])<br />

Calc Frequencies: FFTFreq[ ] = FFTFrequency()<br />

Find Fundamental: FundFreq = max (FFTMag[ ]), Freq > 2.0 Hz<br />

Normalize:<br />

FFTMag[ ] / FFTMag[FundFreq]<br />

Find Pass Band Limits: LOFilterIndex, HIFilterIndex<br />

vCalcVelocityData (page D-15)<br />

Calc RPM Energies: RPMEnergy[i] = k * RPMData[i] 2<br />

Calc RPM Ave Energy: RPMAveEnergy = Σ (RPMEnergy[ ]) /<br />

(PinImpactIndex - ReleaseIndex)<br />

Estimate Linear Energy: SpeedAveEnergy = ((LaneLength * SamplingFreq) /<br />

(PinImpactIndex - ReleaseIndex)) 2<br />

Calc Ball Ave Energy: BallAveEnergy =<br />

(1+FrictionCoef) * RPMAveEnergy * SpeedAveEnergy<br />

Calc Linear Velocities: VelocityData[i] =<br />

(BallAveEnergy - ((1 + FrictionCoef) * RPMEnergy[i])) 1/2<br />

Get Ball L<strong>of</strong>t Distance:<br />

Get Release Velocity:<br />

BallL<strong>of</strong>t = Σ ((VelocityData[i] * 12.0) / SamplingFreq),<br />

ReleaseIndex ≤ i ≤ LaneImpactIndex<br />

ReleaseVelocity = VelocityData[ReleaseIndex]<br />

vCalcFilterData (page D-5)<br />

Remove LO Freqs: RealData[i] = 0.0, i < LOFilterIndex<br />

Remove HI Freqs: RealData[i] = 0.0, i > HIFilterIndex<br />

Keep Pass Band Freqs: RealData[i] = RealSpectrum[i],<br />

LOFilterIndex ≤ i ≤ HIFilterIndex<br />

Get Impact Velocity:<br />

ImpactVelocity = VelocityData[PinImpactIndex]<br />

Get Ball Speed: BallSpeed = (LaneLength * SamplingFreq) /<br />

(PinImpactIndex - ReleaseIndex)<br />

Get Ball Time: BallTime = (PinImpactIndex - ReleaseIndex) /<br />

SamplingFreq<br />

Filter Data: RealData[ ] = FFT -1 (RealData[ ])<br />

Remove DC Bias: RealData[ ] - Min (RealData[ ])<br />

vCalcDistanceData (page D-16)<br />

Calc Distance to Sample: Distance[i] = Σ ((VelocityData[j] * 12.0) / SamplingFreq),<br />

0 ≤ j ≤ i<br />

fAnalyzeData (page D-7)<br />

Fill Distance Vectors: RPMDistance[ ], VelocityDistance[ ], RawRPMDistance[ ],<br />

ImpactDistance[ ]<br />

Find Rev Loc Indices: RevBGNLoc[ ], RevENDLoc[ ]<br />

Interpolate:<br />

RPMLoc[i] = Interpolate (RevENDLoc[i-1],<br />

RevBGNLoc[i])<br />

Calc Angular Velocities: CalcRPMs[i] = 1 / (RPMLoc[i] - RPMLoc[i-1])<br />

Remove Doppler: RPMData[ ] = PolyCurveFit (CalcRPMs[ ])<br />

Get Release RPMs: ReleaseRPMs = RPMData[ReleaseIndex]<br />

Get Impact RPMs: ImpactRPMs = RPMData[PinImpactIndex]<br />

Calc Rev Distance:<br />

vCalcRevLocations (page D-17)<br />

Fill Distance Vector: RevLocDistance[ ]<br />

RevDistance[rev] = Σ ((VelocityData[i] * 12.0 ) / SamplingFreq),<br />

0 ≤ i ≤ RPMLoc[rev]<br />

A<br />

Figure 3-8<br />

To:<br />

Graphing Routines<br />

58

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!