Show HN: SIMD Viterbi Decoder in Rust

(github.com)

47 points | by brian-armstrong 11 hours ago

3 comments

  • nickcw 19 minutes ago
    I was looking at the reed Solomon implementation. I've done a few of those in the past! I note that you are using logs for multiplication. I always used to use a 64kb table for direct lookup, though maybe that isn't faster on modern processors?

    Next LDPC codes?

  • eminence32 6 hours ago
    Could this library be used decode signals from a GOES satellite downlink? goestools uses libcorrect for this and building a rust version might be fun.

    [1] https://github.com/pietern/goestools

    • brian-armstrong 5 hours ago
      You could certainly call this crate through a shim in goestools but you'd have to add a Rust dependency. But you could also rewrite goestools in Rust, though it wouldn't be a small undertaking. This crate does have everything you'd need for the forward error correction, at least.
      • femto 1 hour ago
        How do you find the speed of the Rust version of your FEC vs, the C version?
        • brian-armstrong 1 hour ago
          I used the benchmarking binaries that ship with libfec. My own crate has a libfec-compatible C shim, so I can link the benchmark against the Rust crate. The benchmark itself reports time spent for a given number of iterations, so the throughput can just be extrapolated from that.
          • femto 23 minutes ago
            [dead]
  • ChadNauseam 9 hours ago
    I thought this might have something to do with sentencepiece's unigram (which uses viterbi). But they seem to be totally different domains. What an amazing algorithm, to show up in so many different places.