diff options
author | mormj <34754695+mormj@users.noreply.github.com> | 2020-04-09 07:38:25 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-09 07:38:25 -0400 |
commit | 3c1750c481a578bd831fce933502fde88444eb54 (patch) | |
tree | b2e3baf85a1e0605fdf4b0bfcf3e4d6280dfe439 /gr-digital/grc | |
parent | 7bc8622dda145164c97b73b1c8d4aaf3e0a8bf16 (diff) |
digital: restructure equalizers and add dfe (#3306)
* digital: restructure equalizers and add dfe
This commit restructures the linear equalizer to have a separate
specifiable adaptive algorithm. Generally this works the same as the
previous LMS and CMA decision directed equalizers, but also adds the
ability to equalize using training sequences as well.
Also, a Decision Feedback Equalizer structure is added
* digital: more const in equalizers
* digital: equalizers - more safety based on review
* digital: dfe - use deque instead of vector for decision_history
* digital - equalizers, further cleanup
Diffstat (limited to 'gr-digital/grc')
-rw-r--r-- | gr-digital/grc/digital.tree.yml | 6 | ||||
-rw-r--r-- | gr-digital/grc/digital_adaptive_algorithm.block.yml | 51 | ||||
-rw-r--r-- | gr-digital/grc/digital_cma_equalizer_cc.block.yml | 1 | ||||
-rw-r--r-- | gr-digital/grc/digital_decision_feedback_equalizer.block.yml | 62 | ||||
-rw-r--r-- | gr-digital/grc/digital_kurtotic_equalizer_cc.block.yml | 1 | ||||
-rw-r--r-- | gr-digital/grc/digital_linear_equalizer.block.yml | 54 | ||||
-rw-r--r-- | gr-digital/grc/digital_lms_dd_equalizer_cc.block.yml | 1 | ||||
-rw-r--r-- | gr-digital/grc/digital_meas_evm_cc.block.yml | 31 |
8 files changed, 204 insertions, 3 deletions
diff --git a/gr-digital/grc/digital.tree.yml b/gr-digital/grc/digital.tree.yml index c2751f7ae1..b29659d2a1 100644 --- a/gr-digital/grc/digital.tree.yml +++ b/gr-digital/grc/digital.tree.yml @@ -4,9 +4,9 @@ - digital_descrambler_bb - digital_scrambler_bb - Equalizers: - - digital_cma_equalizer_cc - - digital_lms_dd_equalizer_cc - - digital_kurtotic_equalizer_cc + - variable_adaptive_algorithm + - digital_linear_equalizer + - digital_decision_feedback_equalizer - Measurement Tools: - digital_mpsk_snr_est_cc - digital_probe_density_b diff --git a/gr-digital/grc/digital_adaptive_algorithm.block.yml b/gr-digital/grc/digital_adaptive_algorithm.block.yml new file mode 100644 index 0000000000..7811f0b401 --- /dev/null +++ b/gr-digital/grc/digital_adaptive_algorithm.block.yml @@ -0,0 +1,51 @@ +id: variable_adaptive_algorithm +label: Adaptive Algorithm +flags: [ show_id, python ] + + +parameters: +- id: type + label: Algorithm Type + dtype: enum + options: [lms, nlms, cma] + option_labels: [LMS, NLMS, CMA] +- id: cons + label: Digital Constellation Object + dtype: raw + hide: 'part' +- id: step_size + label: Step Size + dtype: float + default: '.0001' + hide: 'none' +- id: modulus + label: Modulus + dtype: int + default: 2 + hide: ${ ( 'none' if str(type) == "cma" else 'all') } +- id: ffactor + label: Forgetting Factor + dtype: float + default: .99 + hide: ${ ( 'none' if str(type) == "rls" else 'all') } +- id: delta + label: Delta + dtype: float + default: 10.0 + hide: ${ ( 'none' if str(type) == "rls" else 'all') } + +value: |- + ${ (digital.adaptive_algorithm_lms(cons.base(), step_size)) } + +templates: + imports: from gnuradio import digital + var_make: |- + % if str(type) == "lms" or str(type) == "nlms": + self.${id} = ${id} = digital.adaptive_algorithm_${type}( ${cons}, ${step_size}).base() + % elif str(type) == "cma": + self.${id} = ${id} = digital.adaptive_algorithm_${type}( ${cons}, ${step_size}, ${modulus}).base() + % elif str(type) == "rls": + self.${id} = ${id} = digital.adaptive_algorithm_${type}( ${cons}, ${ffactor}, ${delta}).base() + % endif + +file_format: 1 diff --git a/gr-digital/grc/digital_cma_equalizer_cc.block.yml b/gr-digital/grc/digital_cma_equalizer_cc.block.yml index 7783398b6b..42d8b88c7d 100644 --- a/gr-digital/grc/digital_cma_equalizer_cc.block.yml +++ b/gr-digital/grc/digital_cma_equalizer_cc.block.yml @@ -1,5 +1,6 @@ id: digital_cma_equalizer_cc label: CMA Equalizer +category: '[Core]/Deprecated' flags: [ python, cpp ] parameters: diff --git a/gr-digital/grc/digital_decision_feedback_equalizer.block.yml b/gr-digital/grc/digital_decision_feedback_equalizer.block.yml new file mode 100644 index 0000000000..f3c9af1376 --- /dev/null +++ b/gr-digital/grc/digital_decision_feedback_equalizer.block.yml @@ -0,0 +1,62 @@ +id: digital_decision_feedback_equalizer +label: Decision Feedback Equalizer +category: '[Equalizers]' +flags: [ python ] + +templates: + imports: from gnuradio import digital + make: digital.decision_feedback_equalizer(${num_taps_fwd}, ${num_taps_rev}, ${sps}, ${alg}, ${adapt_after_training}, ${training_sequence}, ${training_start_tag}) + +parameters: +- id: num_taps_fwd + label: Num. Taps (Forward) + dtype: int + default: 5 +- id: num_taps_rev + label: Num. Taps (Feedback) + dtype: int + default: 3 +- id: training_sequence + label: Training Sequence + dtype: complex_vector + default: '[ ]' + hide: 'part' +- id: training_start_tag + label: Training Start Tag + dtype: string + default: 'corr_est' + hide: 'part' +- id: adapt_after_training + label: Adapt After Training + dtype: bool + default: 'True' + hide: 'part' +- id: sps + label: Input Samples per Symbol + dtype: int +- id: alg + label: Adaptive Algorithm Object + dtype: raw + hide: 'part' + +inputs: +- domain: stream + dtype: complex + +outputs: +- domain: stream + dtype: complex +- label: taps + domain: stream + dtype: complex + vlen: ${num_taps_fwd+num_taps_rev} + optional: true + optional: true +- label: state + domain: stream + dtype: short + optional: true + +# 'file_format' specifies the version of the GRC yml format used in the file +# and should usually not be changed. +file_format: 1 diff --git a/gr-digital/grc/digital_kurtotic_equalizer_cc.block.yml b/gr-digital/grc/digital_kurtotic_equalizer_cc.block.yml index 7498a09989..122991a2cb 100644 --- a/gr-digital/grc/digital_kurtotic_equalizer_cc.block.yml +++ b/gr-digital/grc/digital_kurtotic_equalizer_cc.block.yml @@ -1,5 +1,6 @@ id: digital_kurtotic_equalizer_cc label: Kurtotic Equalizer +category: '[Core]/Deprecated' flags: [ python, cpp ] parameters: diff --git a/gr-digital/grc/digital_linear_equalizer.block.yml b/gr-digital/grc/digital_linear_equalizer.block.yml new file mode 100644 index 0000000000..d7af62d5f9 --- /dev/null +++ b/gr-digital/grc/digital_linear_equalizer.block.yml @@ -0,0 +1,54 @@ +id: digital_linear_equalizer +label: Linear Equalizer +category: '[Equalizers]' +flags: [ python ] + +parameters: +- id: num_taps + label: Num. Taps + dtype: int +- id: sps + label: Input Samples per Symbol + dtype: int +- id: alg + label: Adaptive Algorithm Object + dtype: raw + hide: 'part' +- id: adapt_after_training + label: Adapt After Training + dtype: bool + default: 'True' + hide: 'part' +- id: training_sequence + label: Training Sequence + dtype: complex_vector + default: '[ ]' + hide: 'part' +- id: training_start_tag + label: Training Start Tag + dtype: string + default: 'corr_est' + hide: 'part' + +inputs: +- domain: stream + dtype: complex + +outputs: +- domain: stream + dtype: complex +- label: taps + domain: stream + dtype: complex + vlen: ${num_taps} + optional: true +- label: state + domain: stream + dtype: short + optional: true + +templates: + imports: from gnuradio import digital + make: digital.linear_equalizer(${num_taps}, ${sps}, ${alg}, ${adapt_after_training}, ${training_sequence}, ${training_start_tag}) + +file_format: 1 diff --git a/gr-digital/grc/digital_lms_dd_equalizer_cc.block.yml b/gr-digital/grc/digital_lms_dd_equalizer_cc.block.yml index 220bf75fb5..8f8cb5c016 100644 --- a/gr-digital/grc/digital_lms_dd_equalizer_cc.block.yml +++ b/gr-digital/grc/digital_lms_dd_equalizer_cc.block.yml @@ -1,5 +1,6 @@ id: digital_lms_dd_equalizer_cc label: LMS DD Equalizer +category: '[Core]/Deprecated' flags: [ python, cpp ] parameters: diff --git a/gr-digital/grc/digital_meas_evm_cc.block.yml b/gr-digital/grc/digital_meas_evm_cc.block.yml new file mode 100644 index 0000000000..64a00b8b88 --- /dev/null +++ b/gr-digital/grc/digital_meas_evm_cc.block.yml @@ -0,0 +1,31 @@ +id: digital_meas_evm_cc +label: EVM Measurement +category: '[Equalizers]' + +templates: + imports: from gnuradio import digital + make: digital.meas_evm_cc(${cons},${meas_type}) + +parameters: +- id: cons + label: Digital Constellation Object + dtype: raw + hide: 'part' +- id: meas_type + label: EVM Meas Type + dtype: enum + options: [digital.evm_measurement_t_EVM_PERCENT, digital.evm_measurement_t_EVM_DB] + option_labels: [Percent, Power-Ratio (dB)] + hide: part + +inputs: +- domain: stream + dtype: complex + vlen: 1 + +outputs: +- domain: stream + dtype: float + vlen: 1 + +file_format: 1 |