Skip to content

Releases: mobilinkd/NucleoTNC

Clock Recovery Improvements

01 Jun 02:03
Compare
Choose a tag to compare
  • Update to version 2.4.4.
  • Clock recovery improvements.
    • Improve clock recovery by updating the filter closer to the sync word.
    • Update the sample index more frequently to reduce EVM.
    • Choose the best time to update the sample index.
    • Fix bug in sample index computation.
  • Re-wrote the symbol deviation, offset, EVM code.
  • More code comments.

Kalman Filtered Symbol Clock

23 Jan 21:40
Compare
Choose a tag to compare

This headline item on this release is the use of a Kalman filter for M17 symbol clock recovery. This simplifies the code and improves symbol clock recovery. It comes at the cost of a dependency on Blaze and the need to enable C++ exceptions.

The 2.4.2 tag was never released. The primary change there was fixing an issue with LICH fragment re-assembly.

  • Add M17 Setup Guide.
  • Validate the LICH fragment number and mask the LICH segment bitfield properly. Send -1 for BER while LICH decode is incomplete.
  • Add 8 and 11 symbol RRC filters to M17 demod.
  • Trivial optimization to Viterbi.
  • The FirFilter constructor and init function do not need to be templatized.
  • Add reset() function to IIR filter.
  • Use an 8-symbol length FIR filter for symbol interpolation.
  • Update firmware version to 2.4.2.
  • Make the adcInputQueue size match the number of buffers allocated in AudioInput.hpp (8).
  • Add Kalman filter code. This adds a dependency on Blaze and requires that exceptions be enabled.
  • Add symbol slope integrator code (currently unused).
  • Allow more time for DC offset to settle.
  • Add feature to allow forced DCD unlocking to aid in modem recycling.
  • Use EOT sync word for end of stream rather than EOS bit. Use only sync word and Kalman filter for clock recovery. Simplify some of the state transistions. Reduce DCD limits since we can follow symbol clock at lower levels now. Use a smaller FIR filter for RRC.
  • Update README.md for Blaze dependency.
  • Change clock used for M17 to 48MHz.
  • Update firmware version to 2.4.3.

To update the firmware, use the STM32CubeProgrammer:

STM32_Programmer_CLI -c port=SWD -d firmware-2.4.3.elf -g 0x08000000

M17 Receive Polarity Bugfix

26 Oct 01:24
Compare
Choose a tag to compare

Fix M17 RX reverse polarity.

New EOT sync word & RSSI

06 Sep 23:25
Compare
Choose a tag to compare
  • Add new EOT indicator.
  • Send RSSI/cost info for stream frame.
  • Update version to 2.4.0.

Updated LSF Puncture Matrix

30 Aug 02:02
Compare
Choose a tag to compare
  • Update to version 2.3.3.
  • Update EOS check.
  • New LSF puncture matrix (P1).

M17 Bit Error Rate Testing

04 Aug 02:39
Compare
Choose a tag to compare
  • Add support for M17 BER testing.
  • Update version to v2.3.2
  • Fix timing error which would match an M17 sync word too early causing frame corruption.
  • Add 1kHz test tone for M17 deviation setting.

This firmware adds two features to support BER (bit error rate) testing when in M17. In the config app, when sending test tones, three test patterns can be sent:

  1. A preamble tone (2400Hz)
  2. A 1000Hz tone for adjusting deviation (use Bessel Null at 2405Hz to set 2400Hz deviation)
  3. A M17 BER test pattern

It will also decode M17 BER frames, emitting KISS frames which can be consumed and displayed in M17 KISS HT. This is not perfect. Frames can be missed and dropped completely, and this will not be counted.

Update M17 Stream Frame Format

09 Jul 00:56
Compare
Choose a tag to compare
Pre-release
  • Add support for frame resizing (HdlcFrame). Handle old stream frame type in encoder.
  • Update firmware to use new stream frame format. Update version to 2.3.0.
  • Simplify FIR filter code.
  • Share storage (RAM) for all demodulators.
  • Use same Viterbi code as m17-cxx-demod.

The M17 code is still very much experimental in nature.

M17 Updates

23 Jun 02:23
Compare
Choose a tag to compare
M17 Updates Pre-release
Pre-release
  • Improve the timing accuracy for M17 to under 250ppm (typical is about 100ppm) using MSI PLL mode, and by using a clock speed that is an
    exact multiple of the sampling rate.
  • Improve M17 demodulator by updating the sync decode and frame timing estimates.
  • Use a DFT for M17 carrier detection.
  • Update callsign decoding based on spec clarification.
  • Fix a memory leak in M17 packet code which would cause the TNC to hang.

Fix LICH Decode

22 Feb 02:59
Compare
Choose a tag to compare

This update fixes a defect in LICH decoding that prevented demod of in-progress or interrupted M17 streams. It also improves decoding of back-to-back streams, addressing a defect in the M17 state machine. Memory handling changes were made to handle stack size issues encountered during a compiler upgrade (to GCC 10.2). C++20 support is now required of the compiler (for std::span).

This release also includes fixes to reduce symbol jitter. Clocks, DAC timing and interrupt priorities were optimized to improve symbol timing. The modulator RRC was changed to use floating point.

Send link setup frame if M17 encoder is starved. This improves M17 audio streaming quality and prevents drops due to intermittent packet drops or jitter. This is less of an issue on NucleoTNC than with TNC3 over BLE.

M17 Streaming Support

23 Jan 17:29
Compare
Choose a tag to compare

This release adds (fixes) M17 streaming support and improves M17 demodulation by tweaking clock recovery.