clickDetector.ClickClassifiers.basicSweep
Class SweepClassifierWorker

java.lang.Object
  extended by clickDetector.ClickClassifiers.basicSweep.SweepClassifierWorker

public class SweepClassifierWorker
extends java.lang.Object

Do the actual work of the click seep classifier Separated into a separate class for clarity and to keep sepeare from all the control functions.

Author:
Doug Gillespie

Field Summary
private  ClickControl clickControl
           
private  FastFFT fastFFT
           
(package private)  double lastLengthdB
           
(package private)  int lastLengthSmooth
           
private  int lastPeakSmooth
           
(package private)  int[][] lengthData
           
(package private)  int nChannels
           
(package private)  int[] peakBins
           
(package private)  double sampleRate
           
(package private)  double[][] smoothSpecData
           
(package private)  double[][] specData
           
private  SweepClassifier sweepClassifier
           
private  double[] window
           
(package private)  double[][] zeroCrossings
           
(package private)  ZeroCrossingStats[] zeroCrossingStats
           
 
Constructor Summary
SweepClassifierWorker(ClickControl clickControl, SweepClassifier sweepClassifier)
           
 
Method Summary
private  boolean classify(ClickDetection click, SweepClassifierSet scs)
           
private  void clearExtractedParams()
           
private  void createLengthData(ClickDetection click, SweepClassifierSet scs)
          Creates a 2D array of length data[channels][start/end]
private  double[] createRestrictedLenghtSpec(ClickDetection click, int chan, int[] lengthPoints, SweepClassifierSet scs)
           
private  double[][] createRestrictedLengthSpec(ClickDetection click, SweepClassifierSet scs)
           
private  double[][] createSpec(ClickDetection click, SweepClassifierSet scs)
          Get a copy of the ordinary power sepctrum data for the click.
private  void createSpecData(ClickDetection click, SweepClassifierSet scs)
           
private  double[][] createZeroCrossings(ClickDetection click, SweepClassifierSet scs)
           
private  double[] createZeroCrossings(double[] waveData, int[] lengthData)
          Work out zero crossings for one channel between given limits.
private  double getBinsPerHz()
           
private  int[][] getLengthData(ClickDetection click, SweepClassifierSet scs)
          Creates a 2D array of length data[channels][start/end]
private  int getPeakBin(double[] specData, double[] peakSearchRange)
           
private  int[] getPeakBins(ClickDetection click, SweepClassifierSet scs)
           
private  int getPeakWidth(double[] specData, int peakBin, double peakWidthThreshold)
           
private  double[][] getSmoothSpecData(ClickDetection click, SweepClassifierSet scs)
           
private  double[][] getSpecData(ClickDetection click, SweepClassifierSet scs)
           
private  double[] getWindow(int len)
           
private  double[][] getZeroCrossings(ClickDetection click, SweepClassifierSet scs)
           
 ClickIdInformation identify(ClickDetection click)
           
private  double pickSpecEnergy(double[] specData, double[] freqLims)
          Get some energy measurement from some spectral data.
private  boolean testEnergyBands(ClickDetection click, SweepClassifierSet scs)
           
private  boolean testLength(ClickDetection click, SweepClassifierSet scs)
           
private  boolean testMeanFreq(ClickDetection click, SweepClassifierSet scs)
           
private  boolean testPeakFreq(ClickDetection click, SweepClassifierSet scs)
           
private  boolean testPeakWidth(ClickDetection click, SweepClassifierSet scs)
           
private  boolean testZeroCrossings(ClickDetection click, SweepClassifierSet scs)
           
 boolean testZeroCrossingStat(ZeroCrossingStats zcStat, SweepClassifierSet scs)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

sweepClassifier

private SweepClassifier sweepClassifier

clickControl

private ClickControl clickControl

nChannels

int nChannels

sampleRate

double sampleRate

lengthData

int[][] lengthData

specData

double[][] specData

smoothSpecData

double[][] smoothSpecData

zeroCrossingStats

ZeroCrossingStats[] zeroCrossingStats

peakBins

int[] peakBins

zeroCrossings

double[][] zeroCrossings

lastLengthdB

double lastLengthdB

lastLengthSmooth

int lastLengthSmooth

lastPeakSmooth

private int lastPeakSmooth

fastFFT

private FastFFT fastFFT

window

private double[] window
Constructor Detail

SweepClassifierWorker

public SweepClassifierWorker(ClickControl clickControl,
                             SweepClassifier sweepClassifier)
Method Detail

identify

public ClickIdInformation identify(ClickDetection click)

classify

private boolean classify(ClickDetection click,
                         SweepClassifierSet scs)

testLength

private boolean testLength(ClickDetection click,
                           SweepClassifierSet scs)

testEnergyBands

private boolean testEnergyBands(ClickDetection click,
                                SweepClassifierSet scs)

pickSpecEnergy

private double pickSpecEnergy(double[] specData,
                              double[] freqLims)
Get some energy measurement from some spectral data.

Parameters:
specData - single channel of power spectrum data
frequency - limits (Hz)
Returns:
summed energy (allowing for non integer bins)

getPeakBins

private int[] getPeakBins(ClickDetection click,
                          SweepClassifierSet scs)

testPeakFreq

private boolean testPeakFreq(ClickDetection click,
                             SweepClassifierSet scs)

getPeakBin

private int getPeakBin(double[] specData,
                       double[] peakSearchRange)

testPeakWidth

private boolean testPeakWidth(ClickDetection click,
                              SweepClassifierSet scs)

getPeakWidth

private int getPeakWidth(double[] specData,
                         int peakBin,
                         double peakWidthThreshold)

testMeanFreq

private boolean testMeanFreq(ClickDetection click,
                             SweepClassifierSet scs)

testZeroCrossings

private boolean testZeroCrossings(ClickDetection click,
                                  SweepClassifierSet scs)

testZeroCrossingStat

public boolean testZeroCrossingStat(ZeroCrossingStats zcStat,
                                    SweepClassifierSet scs)

getZeroCrossings

private double[][] getZeroCrossings(ClickDetection click,
                                    SweepClassifierSet scs)

createZeroCrossings

private double[][] createZeroCrossings(ClickDetection click,
                                       SweepClassifierSet scs)

createZeroCrossings

private double[] createZeroCrossings(double[] waveData,
                                     int[] lengthData)
Work out zero crossings for one channel between given limits.

Parameters:
waveData -
lengthData -
Returns:
array of zero crossing times.

getLengthData

private int[][] getLengthData(ClickDetection click,
                              SweepClassifierSet scs)
Creates a 2D array of length data[channels][start/end]

Will only call getLengthData if it really has to. really has to.

Parameters:
click - click
scs - classifier settings

createLengthData

private void createLengthData(ClickDetection click,
                              SweepClassifierSet scs)
Creates a 2D array of length data[channels][start/end]

Better to call getLengthData which will only call this if it really has to.

Parameters:
click - click
scs - classifier settings

getSmoothSpecData

private double[][] getSmoothSpecData(ClickDetection click,
                                     SweepClassifierSet scs)

getSpecData

private double[][] getSpecData(ClickDetection click,
                               SweepClassifierSet scs)

createSpecData

private void createSpecData(ClickDetection click,
                            SweepClassifierSet scs)

getBinsPerHz

private double getBinsPerHz()

createRestrictedLengthSpec

private double[][] createRestrictedLengthSpec(ClickDetection click,
                                              SweepClassifierSet scs)

createRestrictedLenghtSpec

private double[] createRestrictedLenghtSpec(ClickDetection click,
                                            int chan,
                                            int[] lengthPoints,
                                            SweepClassifierSet scs)

getWindow

private double[] getWindow(int len)

createSpec

private double[][] createSpec(ClickDetection click,
                              SweepClassifierSet scs)
Get a copy of the ordinary power sepctrum data for the click.

Parameters:
click - click
scs - sweep param settings

clearExtractedParams

private void clearExtractedParams()