final case class Viterbi(mul: D = 1.0, add: D, numStates: I, numFrames: I = -1) extends SingleOut[Int] with Product with Serializable
A UGen performing a generalized Viterbi algorithm. The Viterbi algorithm
tries to find the best path among sequences of states, by evaluating transition
probabilities. It runs over a predefined number of frames, accumulating
data of different states. It maximizes the likelihood of the terminal state,
and then backtracks to reconstruct the likely path (sequence of states).
The output is the sequence of state indices (from zero inclusive to
numStates
exclusive).
Note: This UGen must run until numFrames
or the inputs are exhausted,
before it can begin outputting values.
This implementation is generalized in the sense that instead of the canonical
matrices "sequences of observations", "initial probabilities", "transition matrix",
and "emission matrix", it takes two large matrices mul
and add
that contain
the equivalent information. These two matrices allow the UGen to operate in two
different modes:
- multiplicative (as in the Wikipedia article) by damping the probabilities over time - accumulative (as used in Praat for pitch tracking) by adding up the weights (if you have "costs", feed in their negative values).
Basically the internal delta matrix is created by the update function
delta = (delta_prev * mul) + add
(with the corresponding matrix indices).
The initial delta state is zero. Therefore, in order to provide the initial state,
you obtain an initial vector v
by providing an add
matrix of numStates x numStates
cells, which is zero except for the first column filled by v
(alternatively, each row
filled with the next value of v
, or a diagonal matrix of v
; if v
can take negative
value, make sure to fill the initial numStates x numStates
completely by
duplicating v
).
For the classical data, set add
just to the initial matrix as explained above
(multiplying emitted first observations with initial probabilities),
and then use exclusively mul
by passing in emitted observations multiplied by their
transition probabilities:
mul[t][i][j] = transitionProb[i][j] * emissionProb[observation[t]][i]
See https://en.wikipedia.org/wiki/Viterbi_algorithm
- mul
the generalized multiplicative matrix (combining transition probabilities, emission probabilities and observations). If only accumulation is used, set this to 1.0.
- add
the generalized accumulative matrix (combining transition probabilities, emission probabilities and observations). If only multiplication is used, set this to provide the initial state (see above), followed either by zeroes or by terminating the signal.
- numStates
the number of different states, as reflected by the inner dimensions of matrices
mul
andadd
.- numFrames
the number of observations. If
-1
, the UGen runs until the input is exhausted. This happens when bothmul
andadd
end. see StrongestLocalMaxima see PitchesToViterbi
- Alphabetic
- By Inheritance
- Viterbi
- Serializable
- SingleOut
- SomeOut
- Lazy
- GE
- UGenSource
- Expander
- Lazy
- Product
- Equals
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new Viterbi(mul: D = 1.0, add: D, numStates: I, numFrames: I = -1)
- mul
the generalized multiplicative matrix (combining transition probabilities, emission probabilities and observations). If only accumulation is used, set this to 1.0.
- add
the generalized accumulative matrix (combining transition probabilities, emission probabilities and observations). If only multiplication is used, set this to provide the initial state (see above), followed either by zeroes or by terminating the signal.
- numStates
the number of different states, as reflected by the inner dimensions of matrices
mul
andadd
.- numFrames
the number of observations. If
-1
, the UGen runs until the input is exhausted. This happens when bothmul
andadd
end. see StrongestLocalMaxima see PitchesToViterbi
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- val add: D
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @HotSpotIntrinsicCandidate()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def makeUGen(args: IndexedSeq[UGenIn[_]])(implicit b: Builder): UGenInLike[Int]
- Attributes
- protected
- Definition Classes
- Viterbi → UGenSource
- def makeUGens(implicit b: Builder): UGenInLike[Int]
Abstract method which must be implemented by creating the actual
UGen
s during expansion. - val mul: D
- final def name: String
- Definition Classes
- UGenSource
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- val numFrames: I
- val numStates: I
- def productElementNames: Iterator[String]
- Definition Classes
- Product
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated