marytts.unitselection.weightingfunctions.WeightingFunction Maven / Gradle / Ivy
The newest version!
/**
* Portions Copyright 2006 DFKI GmbH.
* Portions Copyright 2001 Sun Microsystems, Inc.
* Portions Copyright 1999-2001 Language Technologies Institute,
* Carnegie Mellon University.
* All Rights Reserved. Use is subject to license terms.
*
* Permission is hereby granted, free of charge, to use and distribute
* this software and its documentation without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of this work, and to
* permit persons to whom this work is furnished to do so, subject to
* the following conditions:
*
* 1. The code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
* 2. Any modifications must be clearly marked as such.
* 3. Original authors' names are not deleted.
* 4. The authors' names are not used to endorse or promote products
* derived from this software without specific prior written
* permission.
*
* DFKI GMBH AND THE CONTRIBUTORS TO THIS WORK DISCLAIM ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DFKI GMBH NOR THE
* CONTRIBUTORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
* THIS SOFTWARE.
*/
package marytts.unitselection.weightingfunctions;
/**
* Defines the applicable weighting functions.
*
* @author sacha
*
*/
public class WeightingFunction {
/**
* Linear weighting function: just computes the difference.
*
* @author sacha
*
*/
public static class linear implements WeightFunc {
/**
* Cost computation: a simple absolute value of a subtraction.
*
* @param a
* a
* @param b
* b
*/
public double cost(double a, double b) {
return (a > b ? (a - b) : (b - a));
/*
* (Measuring which one is bigger replaces a costly Math.abs() operation.)
*/
}
/**
* Optional argument setting.
*
* @param val
* val
*/
public void setParam(String val) {
/*
* Does nothing and is never called in the linear case.
*/
}
/**
* Returns the string definition for this weight function.
*/
public String whoAmI() {
return ("linear");
}
}
/**
* Step weighting function: saturates above a given percentage of the input values.
*
* @author sacha
*
*/
public static class step implements WeightFunc {
/** A percentage above which the function saturates to 0. */
private double stepVal;
/**
* Cost computation: the absolute value of a subtraction, with application of a saturation if the difference value reaches
* a certain percentage of the mean value of the arguments.
*
* @param a
* a
* @param b
* b
* @return res if dev < stepVal, 0.0 otherwise
*/
public double cost(double a, double b) {
double res = (a > b ? (a - b) : (b - a));
/*
* (Measuring which one is bigger replaces a costly Math.abs() operation.)
*/
double dev = res / ((a + b) / 2.0);
if (dev < stepVal)
return (res);
else
return (0.0);
}
/**
* Optional argument setting.
*
* Syntax for the step function's parameter: the first number before the % sign is interpreted as a percentage for the
* step value.
*
* @param val
* val
* */
public void setParam(String val) {
stepVal = Double.parseDouble(val.substring(0, val.indexOf("%"))) / 100.0;
}
/**
* String definition of the function.
*
* @return ("step " + Double.toString(100.0 * stepVal) + "%")
*/
public String whoAmI() {
return ("step " + Double.toString(100.0 * stepVal) + "%");
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy