An open API service indexing awesome lists of open source software.

https://github.com/8ff/viterbi

Convolutional encoder and a Viterbi decoder written in Golang
https://github.com/8ff/viterbi

convolutional golang viterbi viterbi-decoder

Last synced: 5 months ago
JSON representation

Convolutional encoder and a Viterbi decoder written in Golang

Awesome Lists containing this project

README

          

![logo](media/logo.svg)
# Convolutional Encoder and Viterbi Decoder

This package implements a convolutional encoder and a Viterbi decoder.
It can be used as a library or as a command line tool.

## Using as a library
```go
package main

import (
"fmt"
"github.com/8ff/viterbi"
)

func main() {
// Initialize a codec.
codec, err := viterbi.Init(viterbi.Input{Constraint: 7, Polynomials: []int{91, 109, 121}, ReversePolynomials: false})
if err != nil {
panic(err)
}

/**** Encode Bytes ****/
input := []byte("Hello, world!")

// Encode a message.
encoded := codec.EncodeBytes(input)

// Decode the message.
decoded := codec.DecodeBytes(encoded)

// Print input and decoded message.
fmt.Printf("InputBytes: %s\n", input)
fmt.Printf("DecodedBytes: %s\n", decoded)

/**** Encode string of bits ****/
inputBits := "101010"

// Encode a message.
encodedBits := codec.Encode(inputBits)

// Decode the message.
decodedBits := codec.Decode(encodedBits)

// Print input and decoded message.
fmt.Printf("InputBits: %s\n", inputBits)
fmt.Printf("DecodedBits: %s\n", decodedBits)
}

```

## Using as command line tool
```bash
cd cmd/viterbiCli

# Encode
echo 101010 | go run viterbiCli.go encode 3 5 7

# Decode
echo 10000010 | go run viterbiCli.go decode 3 5 7

# Encode/Decode
echo 101010 | go run viterbiCli.go encode 3 5 7 | go run viterbiCli.go decode 3 5 7
```

## Error Handling
Inputs are validated, and proper error messages will be displayed.

* The constraint should be greater than 0.
* A generator polynomial should be greater than 0 and less than 1 << constraint.
* The received bit sequence should be of length N * where N is an integer. Otherwise some bits must be missing during transmission. We will fill in appropriate number of trailing zeros.

## Dependencies
This code contains no external dependencies.