summaryrefslogtreecommitdiff
path: root/gr-digital/grc
diff options
context:
space:
mode:
authorDaniel Estévez <daniel@destevez.net>2021-06-06 11:25:57 +0200
committermormj <34754695+mormj@users.noreply.github.com>2021-06-12 12:01:12 -0400
commit51c504ebb1ca21c5f7071826c1af03e45e391a65 (patch)
treedbabf0b0b825f834cff2067248d193fe8d951dd8 /gr-digital/grc
parent16d1b0215d59c52009b09867fbfce0b4c3585add (diff)
digital: Add NRZI option to differential en/decoder
This adds an option to the differential encoder an decoder blocks to perform NRZI encoding and decoding. NRZI only makes sense with a modulus of 2, so the blocks constructors will throw and exception if passed nrzi = true and a modulus different from 2. The GRC blocks handle this by hiding the modulus field if the user selects NRZI encoding. A new unit test for the NRZI version of the blocks is added. Besides checking that encode plus decode gives the original, this test also compares the C++ implementation results against a Numpy implementation. Additionally, a faster implementation of differential encoding/ decoding for modulus 2 is included here. Signed-off-by: Daniel Estévez <daniel@destevez.net>
Diffstat (limited to 'gr-digital/grc')
-rw-r--r--gr-digital/grc/digital_diff_decoder_bb.block.yml16
-rw-r--r--gr-digital/grc/digital_diff_encoder_bb.block.yml16
2 files changed, 28 insertions, 4 deletions
diff --git a/gr-digital/grc/digital_diff_decoder_bb.block.yml b/gr-digital/grc/digital_diff_decoder_bb.block.yml
index 4b94c38b23..ddfbe8192b 100644
--- a/gr-digital/grc/digital_diff_decoder_bb.block.yml
+++ b/gr-digital/grc/digital_diff_decoder_bb.block.yml
@@ -3,9 +3,19 @@ label: Differential Decoder
flags: [ python, cpp ]
parameters:
+- id: coding
+ label: Coding
+ dtype: enum
+ default: digital.DIFF_DIFFERENTIAL
+ options: [digital.DIFF_DIFFERENTIAL, digital.DIFF_NRZI]
+ option_labels: [Differential, NRZI]
+ option_attributes:
+ hide_modulus: [none, all]
+ force_modulus: [-1, 2]
- id: modulus
label: Modulus
dtype: int
+ hide: ${ coding.hide_modulus }
inputs:
- domain: stream
@@ -17,13 +27,15 @@ outputs:
templates:
imports: from gnuradio import digital
- make: digital.diff_decoder_bb(${modulus})
+ make: digital.diff_decoder_bb(${modulus if coding.force_modulus == '-1' else coding.force_modulus}, ${coding})
cpp_templates:
includes: ['#include <gnuradio/digital/diff_decoder_bb.h>']
declarations: 'digital::diff_decoder_bb::sptr ${id};'
make: |-
- this->${id} = digital::diff_decoder_bb::make(${modulus});
+ this->${id} = digital::diff_decoder_bb::make(${modulus if coding.force_modulus == '-1' else coding.force_modulus}, ${coding});
link: ['gnuradio-digital']
+ translations:
+ digital.DIFF: 'digital::DIFF'
file_format: 1
diff --git a/gr-digital/grc/digital_diff_encoder_bb.block.yml b/gr-digital/grc/digital_diff_encoder_bb.block.yml
index b9107e84b0..02e888dfdb 100644
--- a/gr-digital/grc/digital_diff_encoder_bb.block.yml
+++ b/gr-digital/grc/digital_diff_encoder_bb.block.yml
@@ -3,9 +3,19 @@ label: Differential Encoder
flags: [ python, cpp ]
parameters:
+- id: coding
+ label: Coding
+ dtype: enum
+ default: digital.DIFF_DIFFERENTIAL
+ options: [digital.DIFF_DIFFERENTIAL, digital.DIFF_NRZI]
+ option_labels: [Differential, NRZI]
+ option_attributes:
+ hide_modulus: [none, all]
+ force_modulus: [-1, 2]
- id: modulus
label: Modulus
dtype: int
+ hide: ${ coding.hide_modulus }
inputs:
- domain: stream
@@ -17,13 +27,15 @@ outputs:
templates:
imports: from gnuradio import digital
- make: digital.diff_encoder_bb(${modulus})
+ make: digital.diff_encoder_bb(${modulus if coding.force_modulus == '-1' else coding.force_modulus}, ${coding})
cpp_templates:
includes: ['#include <gnuradio/digital/diff_encoder_bb.h>']
declarations: 'digital::diff_encoder_bb::sptr ${id};'
make: |-
- this->${id} = digital::diff_encoder_bb::make(${modulus});
+ this->${id} = digital::diff_encoder_bb::make(${modulus if coding.force_modulus == '-1' else coding.force_modulus}, ${coding});
link: ['gnuradio-digital']
+ translations:
+ digital.DIFF: 'digital::DIFF'
file_format: 1