diff options
author | Daniel Estévez <daniel@destevez.net> | 2021-06-06 11:25:57 +0200 |
---|---|---|
committer | mormj <34754695+mormj@users.noreply.github.com> | 2021-06-12 12:01:12 -0400 |
commit | 51c504ebb1ca21c5f7071826c1af03e45e391a65 (patch) | |
tree | dbabf0b0b825f834cff2067248d193fe8d951dd8 /gr-digital/grc | |
parent | 16d1b0215d59c52009b09867fbfce0b4c3585add (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.yml | 16 | ||||
-rw-r--r-- | gr-digital/grc/digital_diff_encoder_bb.block.yml | 16 |
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 |