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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
id: digital_symbol_sync_xx
label: Symbol Sync
category: '[Core]/Synchronizers'
flags: [ python, cpp ]
parameters:
- id: type
label: I/O Type
dtype: enum
options: [cc, ff]
option_labels: [Complex, Float]
option_attributes:
input: [complex, float]
output: [complex, float]
hide: part
- id: ted_type
label: Timing Error Detector
dtype: enum
options: [digital.TED_MUELLER_AND_MULLER, digital.TED_MOD_MUELLER_AND_MULLER,
digital.TED_ZERO_CROSSING, digital.TED_GARDNER, digital.TED_EARLY_LATE, digital.TED_DANDREA_AND_MENGALI_GEN_MSK,
digital.TED_MENGALI_AND_DANDREA_GMSK, digital.TED_SIGNAL_TIMES_SLOPE_ML, digital.TED_SIGNUM_TIMES_SLOPE_ML]
option_labels: ["Mueller and Müller", "Modified Mueller and Müller", Zero
Crossing, Gardner, Early-Late, D'Andrea and Mengali Gen MSK, Mengali and
D'Andrea GMSK, 'y[n]y''[n] Maximum likelihood', 'sgn(y[n])y''[n] Maximum
likelihood']
option_attributes:
hide_constellation: [part, part, part, all, all, all, all, all, all]
- id: constellation
label: TED Slicer Constellation
dtype: raw
default: digital.constellation_bpsk().base()
hide: ${ ted_type.hide_constellation }
- id: sps
label: Samples per Symbol
dtype: real
default: sps
- id: ted_gain
label: Expected TED Gain
dtype: real
default: '1.0'
- id: loop_bw
label: Loop Bandwidth
dtype: real
default: '0.045'
- id: damping
label: Damping Factor
dtype: real
default: '1.0'
- id: max_dev
label: Maximum Deviation
dtype: real
default: '1.5'
- id: osps
label: Output Samples/Symbol
dtype: int
default: '1'
- id: resamp_type
label: Interpolating Resampler
dtype: enum
options: [digital.IR_MMSE_8TAP, digital.IR_PFB_NO_MF, digital.IR_PFB_MF]
option_labels: ['MMSE, 8 tap FIR', 'Polyphase Filterbank, MMSE', 'Polyphase Filterbank,
MF']
option_attributes:
hide_nfilters: [all, none, none]
hide_pfb_mf_taps: [all, all, none]
- id: nfilters
label: Filterbank Arms
dtype: int
default: '128'
hide: ${ resamp_type.hide_nfilters }
- id: pfb_mf_taps
label: PFB MF Taps
dtype: real_vector
default: '[]'
hide: ${ resamp_type.hide_pfb_mf_taps }
inputs:
- domain: stream
dtype: ${ type.input }
outputs:
- domain: stream
dtype: ${ type.output }
- label: error
domain: stream
dtype: float
optional: true
- label: T_inst
domain: stream
dtype: float
optional: true
- label: T_avg
domain: stream
dtype: float
optional: true
templates:
imports: |-
from gnuradio import digital
from gnuradio import filter
make: |-
digital.symbol_sync_${type}(
${ted_type},
${sps},
${loop_bw},
${damping},
${ted_gain},
${max_dev},
${osps},
${constellation},
${resamp_type},
${nfilters},
${pfb_mf_taps})
callbacks:
- set_loop_bandwidth(${loop_bw})
- set_damping_factor(${damping})
- set_ted_gain(${ted_gain})
cpp_templates:
includes: ['#include <gnuradio/digital/symbol_sync_${type}.h>']
declarations: 'digital::symbol_sync_${type}::sptr ${id};'
make: |-
std::vector<float> pfb_mf_taps = {${str(pfb_mf_taps)[1:-1]}};
this->${id} = digital::symbol_sync_${type}::make(
${ted_type},
${sps},
${loop_bw},
${damping},
${ted_gain},
${max_dev},
${osps},
${constellation},
${resamp_type},
${nfilters},
pfb_mf_taps);
link: ['gnuradio::gnuradio-digital']
callbacks:
- set_loop_bandwidth(${loop_bw})
- set_damping_factor(${damping})
- set_ted_gain(${ted_gain})
translations:
digital\.: 'digital::'
file_format: 1
|