edu.cmu.sphinx.frontend.feature
Class BatchCMN

java.lang.Object
  extended byedu.cmu.sphinx.frontend.BaseDataProcessor
      extended byedu.cmu.sphinx.frontend.feature.BatchCMN
All Implemented Interfaces:
Configurable, DataProcessor

public class BatchCMN
extends BaseDataProcessor

Applies cepstral mean normalization (CMN), sometimes called channel mean normalization, to incoming cepstral data. Its goal is to reduce the distortion caused by the transmission channel. The output is mean normalized cepstral data.

The CMN processing subtracts the mean from all the Data objects between a DataStartSignal and a DataEndSignal. BatchCMN will read in all the Data objects, calculate the mean, and subtract this mean from all the Data objects. For a given utterance, it will only produce an output after reading all the incoming data for the utterance. As a result, this process can introduce a significant processing delay, which is acceptable for batch processing, but not for live mode. In the latter case, one should use the LiveCMN.

CMN is a technique used to reduce distortions that are introduced by the transfer function of the transmission channel (e.g., the microphone). Using a transmission channel to transmit the input speech translates to multiplying the spectrum of the input speech with the transfer function of the channel (the distortion). Since the cepstrum is the Fourier Transform of the log spectrum, the logarithm turns the multiplication into a summation. Averaging over time, the mean is an estimate of the channel, which remains roughly constant. The channel is thus removed from the cepstrum by subtracting the mean cepstral vector. Intuitively, the mean cepstral vector approximately describes the spectral characteristics of the transmission channel (e.g., microphone).

See Also:
LiveCMN

Constructor Summary
BatchCMN()
           
 
Method Summary
 Data getData()
          Returns the next Data object, which is a normalized cepstrum.
 void initialize()
          Initializes this BatchCMN.
 void newProperties(PropertySheet ps)
          This method is called when this configurable component has new data.
 void register(java.lang.String name, Registry registry)
          Register my properties.
 
Methods inherited from class edu.cmu.sphinx.frontend.BaseDataProcessor
getName, getPredecessor, getTimer, setPredecessor, toString
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

BatchCMN

public BatchCMN()
Method Detail

register

public void register(java.lang.String name,
                     Registry registry)
              throws PropertyException
Description copied from interface: Configurable
Register my properties. This method is called once early in the time of the component, shortly after the component is constructed. This component should register any configuration properties that it needs to register. If this configurable extends another configurable, super.register should also be called

Specified by:
register in interface Configurable
Overrides:
register in class BaseDataProcessor
Throws:
PropertyException

newProperties

public void newProperties(PropertySheet ps)
                   throws PropertyException
Description copied from interface: Configurable
This method is called when this configurable component has new data. The component should first validate the data. If it is bad the component should return false. If the data is good, the component should record the the data internally and return true.

Specified by:
newProperties in interface Configurable
Overrides:
newProperties in class BaseDataProcessor
Throws:
PropertyException

initialize

public void initialize()
Initializes this BatchCMN.

Specified by:
initialize in interface DataProcessor
Overrides:
initialize in class BaseDataProcessor

getData

public Data getData()
             throws DataProcessingException
Returns the next Data object, which is a normalized cepstrum. Signal objects are returned unmodified.

Specified by:
getData in interface DataProcessor
Specified by:
getData in class BaseDataProcessor
Returns:
the next available Data object, returns null if no Data object is available
Throws:
DataProcessingException - if there is an error processing data