<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sarg.dev/index.php?action=history&amp;feed=atom&amp;title=Iterative_Viterbi_decoding</id>
	<title>Iterative Viterbi decoding - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sarg.dev/index.php?action=history&amp;feed=atom&amp;title=Iterative_Viterbi_decoding"/>
	<link rel="alternate" type="text/html" href="https://wiki.sarg.dev/index.php?title=Iterative_Viterbi_decoding&amp;action=history"/>
	<updated>2026-06-23T00:25:21Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.sarg.dev/index.php?title=Iterative_Viterbi_decoding&amp;diff=708638&amp;oldid=prev</id>
		<title>imported&gt;Monkbot: Task 18 (cosmetic): eval 2 templates: del empty params (2×);</title>
		<link rel="alternate" type="text/html" href="https://wiki.sarg.dev/index.php?title=Iterative_Viterbi_decoding&amp;diff=708638&amp;oldid=prev"/>
		<updated>2020-12-01T13:00:43Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Monkbot/task_18&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:Monkbot/task 18 (page does not exist)&quot;&gt;Task 18 (cosmetic)&lt;/a&gt;: eval 2 templates: del empty params (2×);&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Iterative Viterbi decoding&amp;#039;&amp;#039;&amp;#039; is an [[algorithm]] that spots the subsequence &amp;#039;&amp;#039;S&amp;#039;&amp;#039; of an observation &amp;#039;&amp;#039;O&amp;#039;&amp;#039; = {&amp;#039;&amp;#039;o&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, ..., &amp;#039;&amp;#039;o&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;lt;/sub&amp;gt;} having the highest average probability (i.e., probability scaled by the length of &amp;#039;&amp;#039;S&amp;#039;&amp;#039;) of being generated by a given [[hidden Markov model]] &amp;#039;&amp;#039;M&amp;#039;&amp;#039; with &amp;#039;&amp;#039;m&amp;#039;&amp;#039; states.  The algorithm uses a modified [[Viterbi algorithm]] as an internal step.&lt;br /&gt;
&lt;br /&gt;
The scaled probability measure was first proposed by [[John S. Bridle]]. An early algorithm to solve this problem, [[sliding window]], was proposed by [[Jay G. Wilpon]] et al., 1989, with constant cost &amp;#039;&amp;#039;T&amp;#039;&amp;#039; = &amp;#039;&amp;#039;mn&amp;#039;&amp;#039;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;/2.&lt;br /&gt;
&lt;br /&gt;
A faster algorithm consists of an iteration of calls to the [[Viterbi algorithm]], reestimating a filler score until convergence.&lt;br /&gt;
&lt;br /&gt;
== The algorithm ==&lt;br /&gt;
&lt;br /&gt;
A basic (non-optimized) version, finding the sequence &amp;#039;&amp;#039;s&amp;#039;&amp;#039; with the smallest normalized distance from some subsequence of &amp;#039;&amp;#039;t&amp;#039;&amp;#039; is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// input is placed in observation s[1..n], template t[1..m],&lt;br /&gt;
// and [[distance matrix]] d[1..n,1..m]&lt;br /&gt;
// remaining elements in matrices are solely for internal computations&lt;br /&gt;
(int, int, int) AverageSubmatchDistance(char s[0..(n+1)], char t[0..(m+1)], int d[1..n,0..(m+1)]) {&lt;br /&gt;
    // score, subsequence start, subsequence end&lt;br /&gt;
    declare int e, B, E&lt;br /&gt;
    t&amp;#039;[0] := t&amp;#039;[m+1] := s&amp;#039;[0] := s&amp;#039;[n+1] := &amp;#039;e&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    e := random()&lt;br /&gt;
    do&lt;br /&gt;
        e&amp;#039; := e&lt;br /&gt;
	for i := 1 to n	do	d&amp;#039;[i,0] := d&amp;#039;[i,m+1] := e&lt;br /&gt;
	(e, B, E)  := ViterbiDistance(s&amp;#039;, t&amp;#039;, d&amp;#039;)&lt;br /&gt;
        e := e/(E-B+1)&lt;br /&gt;
    until (e == e&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    return (e, B, E)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ViterbiDistance() procedure returns the tuple (&amp;#039;&amp;#039;e&amp;#039;&amp;#039;, &amp;#039;&amp;#039;B&amp;#039;&amp;#039;, &amp;#039;&amp;#039;E&amp;#039;&amp;#039;), i.e., the Viterbi score &amp;quot;&amp;#039;&amp;#039;e&amp;#039;&amp;#039;&amp;quot; for the match of &amp;#039;&amp;#039;t&amp;#039;&amp;#039; and the selected entry (&amp;#039;&amp;#039;B&amp;#039;&amp;#039;) and exit (&amp;#039;&amp;#039;E&amp;#039;&amp;#039;) points from it. &amp;quot;&amp;#039;&amp;#039;B&amp;#039;&amp;#039;&amp;quot; and &amp;quot;&amp;#039;&amp;#039;E&amp;#039;&amp;#039;&amp;quot; have to be recorded using a simple modification to Viterbi.&lt;br /&gt;
&lt;br /&gt;
A modification that can be applied to CYK tables, proposed by Antoine Rozenknop, consists in subtracting &amp;#039;&amp;#039;e&amp;#039;&amp;#039; from all elements of the initial matrix &amp;#039;&amp;#039;d&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Silaghi, M., &amp;quot;Spotting Subsequences matching a HMM using the Average Observation Probability Criteria with application to Keyword Spotting&amp;quot;, AAAI, 2005.&lt;br /&gt;
* Rozenknop, Antoine, and Silaghi, Marius; &amp;quot;Algorithme de décodage de treillis selon le critère de coût moyen pour la reconnaissance de la parole&amp;quot;, TALN 2001.&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
*{{cite conference |title=An Efficient Code Structure of Block Coded Modulations with Iterative Viterbi Decoding Algorithm |last1=Li |first1=Huan-Bang |last2=Kohno |first2=Ryuji |date=2006 |publisher=IEEE |location=Valencia, Spain |conference=3rd International Symposium on Wireless Communication Systems |isbn=978-1-4244-0397-4 |doi=10.1109/ISWCS.2006.4362391}}&lt;br /&gt;
*{{cite journal|last1=Wang |first1=Qi |last2=Wei |first2=Lei |last3=Kennedy |first3=R.A. |title=Iterative Viterbi decoding, trellis shaping, and multilevel structure for high-rate parity-concatenated TCM |journal=IEEE Transactions on Communications |volume=50 |number=1 |date=January 2002 |pages=48–55 |issn=0090-6778 |doi=10.1109/26.975743 }}&lt;br /&gt;
&lt;br /&gt;
[[Category:Error detection and correction]]&lt;br /&gt;
[[Category:Markov models]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Monkbot</name></author>
	</entry>
</feed>