marytts.signalproc.filter
Class LowPassFilter

java.lang.Object
  extended by marytts.signalproc.filter.FIRFilter
      extended by marytts.signalproc.filter.LowPassFilter
All Implemented Interfaces:
InlineDataProcessor

public class LowPassFilter
extends FIRFilter

Author:
Marc Schröder

Nested Class Summary
 
Nested classes/interfaces inherited from class marytts.signalproc.filter.FIRFilter
FIRFilter.FIROutput
 
Field Summary
static double DEFAULT_TRANSITIONBANDWIDTH
           
 double normalisedCutoffFrequency
           
 
Fields inherited from class marytts.signalproc.filter.FIRFilter
denumeratorCoefficients, impulseResponseLength, sliceLength, transformedIR
 
Constructor Summary
LowPassFilter(double normalisedCutoffFrequencyIn)
          Create a new lowpass filter with the given normalised cutoff frequency and a default transition band width.
LowPassFilter(double normalisedCutoffFrequencyIn, double normalisedTransitionBandwidth)
          Create a new lowpass filter with the given normalised cutoff frequency and the given normalised transition band width.
LowPassFilter(double normalisedCutoffFrequencyIn, int kernelLength)
          Create a new lowpass filter with the given normalised cutoff frequency and the given length of the filter kernel.
 
Method Summary
protected static int bandwidth2kernelLength(double normalisedTransitionBandwidth)
          Convert from normalisedTransitionBandwidth to filter kernel length, using the approximate formula l = 4/bw.
protected static double[] getKernel(double normalisedCutoffFrequencyIn, int kernelLength)
          Compute the low-pass filter kernel, using a Blackman window.
 double getTransitionBandWidth(int samplingRate)
          For a given sampling rate, return the width of the transition band for this filter, in Hertz.
protected static double kernelLength2bandwidth(int kernelLength)
          Convert from filter kernel length to normalisedTransitionBandwidth, using the approximate formula l = 4/bw.
static void main(java.lang.String[] args)
           
 java.lang.String toString()
           
 
Methods inherited from class marytts.signalproc.filter.FIRFilter
apply, apply, applyInline, getDenumeratorCoefficients, getImpulseResponseLength, initialise
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

DEFAULT_TRANSITIONBANDWIDTH

public static double DEFAULT_TRANSITIONBANDWIDTH

normalisedCutoffFrequency

public double normalisedCutoffFrequency
Constructor Detail

LowPassFilter

public LowPassFilter(double normalisedCutoffFrequencyIn)
Create a new lowpass filter with the given normalised cutoff frequency and a default transition band width.

Parameters:
normalisedCutoffFrequency - the cutoff frequency of the lowpass filter, expressed as a fraction of the sampling rate. It must be in the range ]0, 0.5[. For example, with a sampling rate of 16000 Hz and a desired cutoff frequency of 4000 Hz, the normalisedCutoffFrequency would have to be 0.25.

LowPassFilter

public LowPassFilter(double normalisedCutoffFrequencyIn,
                     double normalisedTransitionBandwidth)
Create a new lowpass filter with the given normalised cutoff frequency and the given normalised transition band width.

Parameters:
normalisedCutoffFrequency - the cutoff frequency of the lowpass filter, expressed as a fraction of the sampling rate. It must be in the range ]0, 0.5[. For example, with a sampling rate of 16000 Hz and a desired cutoff frequency of 4000 Hz, the normalisedCutoffFrequency would have to be 0.25.
normalisedTransitionBandwidth - indicates the desired quality of the filter. The smaller the bandwidth, the more abrupt the cutoff at the cutoff frequency, but also the larger the filter kernel (impulse response) and computationally costly the filter. Usual range of this parameter is [0.002, 0.2].

LowPassFilter

public LowPassFilter(double normalisedCutoffFrequencyIn,
                     int kernelLength)
Create a new lowpass filter with the given normalised cutoff frequency and the given length of the filter kernel.

Parameters:
normalisedCutoffFrequency - the cutoff frequency of the lowpass filter, expressed as a fraction of the sampling rate. It must be in the range ]0, 0.5[. For example, with a sampling rate of 16000 Hz and a desired cutoff frequency of 4000 Hz, the normalisedCutoffFrequency would have to be 0.25.
kernelLength - length of the filter kernel (the impulse response). The kernel length must be an odd number. The longer the kernel, the sharper the cutoff, i.e. the narrower the transition band. Typical lengths are in the range of 10-1000.
Throws:
java.lang.IllegalArgumentException - if the kernel length is not a positive, odd number, or if normalisedCutoffFrequency is not in the range between 0 and 0.5.
Method Detail

getTransitionBandWidth

public double getTransitionBandWidth(int samplingRate)
For a given sampling rate, return the width of the transition band for this filter, in Hertz.

Parameters:
samplingRate - the sampling rate, in Hertz.

getKernel

protected static double[] getKernel(double normalisedCutoffFrequencyIn,
                                    int kernelLength)
Compute the low-pass filter kernel, using a Blackman window.


bandwidth2kernelLength

protected static int bandwidth2kernelLength(double normalisedTransitionBandwidth)
Convert from normalisedTransitionBandwidth to filter kernel length, using the approximate formula l = 4/bw.

Parameters:
normalisedTransitionBandwidth -
Returns:
the corresponding filter kernel length (guaranteed to be an odd number).

kernelLength2bandwidth

protected static double kernelLength2bandwidth(int kernelLength)
Convert from filter kernel length to normalisedTransitionBandwidth, using the approximate formula l = 4/bw.

Parameters:
kernelLength -
Returns:
the corresponding normalised transition bandwidth.

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

main

public static void main(java.lang.String[] args)
                 throws java.lang.Exception
Throws:
java.lang.Exception