aboutsummaryrefslogtreecommitdiffstats
path: root/doc/manuals/dtx.dot
blob: 1c60ee7241455d550ca1b381c46902d818138f5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
digraph dtx_dl_amr_fsm {
	node [shape = doublecircle] ST_VOICE ST_FACCH_V ST_FACCH ST_SID_U
	node [shape = circle]

	// default state for non-DTX and DTX when SPEECH is in progress
	ST_VOICE -> ST_SID_F1 [ label = "E_SID_F" ]
	ST_VOICE -> ST_SID_F1 [ label = "E_SID_U" ]
	ST_VOICE -> ST_VOICE [ label = "E_VOICE" ]
	ST_VOICE -> ST_VOICE [ label = "E_FACCH" ]

	// SID-FIRST or SID-FIRST-P1 in case of AMR HR: start of silence period (might be interrupted in case of AMR HR)
	ST_SID_F1 -> ST_SID_F1 [ label = "E_SID_F" ]
	ST_SID_F1 -> ST_SID_U [ label = "E_SID_U" ]
	ST_SID_F1 -> ST_VOICE [ label = "E_VOICE" ]
        ST_SID_F1 -> ST_ONSET_F [ label = "E_FACCH" ]
	ST_SID_F1 -> ST_SID_F2  [ label = "E_COMPL" ]
	ST_SID_F1 -> ST_F1_INH  [ label = "E_INHIB" ]
	ST_SID_F1 -> ST_ONSET_V [ label = "E_ONSET" ]

	// SID-FIRST P2 (only for AMR HR): actual start of silence period in case of AMR HR
	ST_SID_F2 -> ST_SID_U [ label = "E_SID_U" ]
	ST_SID_F2 -> ST_VOICE [ label = "E_VOICE" ]
	ST_SID_F2 -> ST_ONSET_F [ label = "E_FACCH" ]
	ST_SID_F2 -> ST_ONSET_V [ label = "E_ONSET" ]

	// SID-FIRST Inhibited: incoming SPEECH or FACCH (only for AMR HR)
	ST_F1_INH -> ST_VOICE [ label = "E_VOICE" ]
	ST_F1_INH -> ST_FACCH_V [ label = "E_FACCH" ]

	// SID-UPDATE Inhibited: incoming SPEECH or FACCH (only for AMR HR)
	ST_U_INH -> ST_VOICE [ label = "E_VOICE" ]
	ST_U_INH -> ST_FACCH [ label = "E_FACCH" ]

	// Silence period with periodic comfort noise data updates
	ST_SID_U -> ST_ONSET_F [ label = "E_FACCH" ]
	ST_SID_U -> ST_VOICE [ label = "E_VOICE" ]
	ST_SID_U -> ST_U_INH [ label = "E_INHIB" ]
	ST_SID_U -> ST_SID_U [ label = "E_SID_U" ]
	ST_SID_U -> ST_SID_U [ label = "E_SID_F" ]
	ST_SID_U -> ST_ONSET_V [ label = "E_ONSET" ]

	// ONSET - end of silent period due to incoming SPEECH frame
	ST_ONSET_V -> ST_ONSET_V_REC [ label = "E_COMPL" ]

	// ONSET - end of silent period due to incoming FACCH frame
	ST_ONSET_F -> ST_ONSET_F_REC [ label = "E_COMPL" ]

	// ONSET recursion in progress: ONSET itself was already sent, now have to send the voice that caused it
	ST_ONSET_V_REC -> ST_VOICE [ label = "E_COMPL" ]

	// ONSET recursion in progress: ONSET itself was already sent, now have to send the data that caused it
	ST_ONSET_F_REC -> ST_FACCH [ label = "E_COMPL" ]

	// FACCH sending state: SPEECH was observed before so once we're done FSM should get back to VOICE state
	ST_FACCH_V -> ST_FACCH_V [ label = "E_FACCH" ]
	ST_FACCH_V -> ST_VOICE [ label = "E_VOICE" ]
	ST_FACCH_V -> ST_VOICE [ label = "E_SID_U" ]
	ST_FACCH_V -> ST_SID_F1 [ label = "E_SID_F" ]

	// FACCH sending state: no SPEECH was observed before so once we're done FSM should get back to silent period via SID-FIRST
	ST_FACCH -> ST_FACCH [ label = "E_FACCH" ]
	ST_FACCH -> ST_VOICE [ label = "E_VOICE" ]
	ST_FACCH -> ST_SID_F1 [ label = "E_SID_U" ]
	ST_FACCH -> ST_SID_F1 [ label = "E_SID_F" ]
}