From 51c504ebb1ca21c5f7071826c1af03e45e391a65 Mon Sep 17 00:00:00 2001 From: Daniel Estévez <daniel@destevez.net> Date: Sun, 6 Jun 2021 11:25:57 +0200 Subject: digital: Add NRZI option to differential en/decoder MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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> --- gr-digital/lib/diff_decoder_bb_impl.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'gr-digital/lib/diff_decoder_bb_impl.h') diff --git a/gr-digital/lib/diff_decoder_bb_impl.h b/gr-digital/lib/diff_decoder_bb_impl.h index 10688f427f..d73a5fe7b9 100644 --- a/gr-digital/lib/diff_decoder_bb_impl.h +++ b/gr-digital/lib/diff_decoder_bb_impl.h @@ -1,6 +1,7 @@ /* -*- c++ -*- */ /* * Copyright 2006,2012 Free Software Foundation, Inc. + * Copyright 2021 Daniel Estevez <daniel@destevez.net> * * This file is part of GNU Radio * @@ -20,7 +21,8 @@ namespace digital { class diff_decoder_bb_impl : public diff_decoder_bb { public: - diff_decoder_bb_impl(unsigned int modulus); + diff_decoder_bb_impl(unsigned int modulus, + enum diff_coding_type coding = DIFF_DIFFERENTIAL); ~diff_decoder_bb_impl() override; int work(int noutput_items, @@ -28,7 +30,8 @@ public: gr_vector_void_star& output_items) override; private: - unsigned int d_modulus; + const unsigned int d_modulus; + const enum diff_coding_type d_coding; }; } /* namespace digital */ -- cgit v1.2.3