summaryrefslogtreecommitdiff
path: root/gr-digital/grc
diff options
context:
space:
mode:
authormormj <34754695+mormj@users.noreply.github.com>2020-04-09 07:38:25 -0400
committerGitHub <noreply@github.com>2020-04-09 07:38:25 -0400
commit3c1750c481a578bd831fce933502fde88444eb54 (patch)
treeb2e3baf85a1e0605fdf4b0bfcf3e4d6280dfe439 /gr-digital/grc
parent7bc8622dda145164c97b73b1c8d4aaf3e0a8bf16 (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.yml6
-rw-r--r--gr-digital/grc/digital_adaptive_algorithm.block.yml51
-rw-r--r--gr-digital/grc/digital_cma_equalizer_cc.block.yml1
-rw-r--r--gr-digital/grc/digital_decision_feedback_equalizer.block.yml62
-rw-r--r--gr-digital/grc/digital_kurtotic_equalizer_cc.block.yml1
-rw-r--r--gr-digital/grc/digital_linear_equalizer.block.yml54
-rw-r--r--gr-digital/grc/digital_lms_dd_equalizer_cc.block.yml1
-rw-r--r--gr-digital/grc/digital_meas_evm_cc.block.yml31
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