Skip to content
/ viterbi Public
forked from xukmin/viterbi

A Convolutional Encoder and Viterbi Decoder in Python/C++.

License

Notifications You must be signed in to change notification settings

clysto/viterbi

This branch is 27 commits ahead of, 1 commit behind xukmin/viterbi:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

53ef9e1 · Jun 25, 2023

History

37 Commits
Jun 21, 2023
Jun 24, 2023
Jun 24, 2023
Jun 21, 2023
Jun 21, 2023
Jun 21, 2023
Jun 21, 2023
Jun 25, 2023
Jun 25, 2023
Jun 25, 2023
Jun 21, 2023
Jun 24, 2023
Jun 24, 2023
Jun 24, 2023
Nov 21, 2015
Jun 24, 2023
Nov 21, 2015

Repository files navigation

Convolutional Encoder and Viterbi Decoder

License Version PyPI - Python Version PyPI - Downloads

This project is a fork of https://github.com/xukmin/viterbi that introduces Python support, enabling effortless utilization of the Viterbi module within the Python environment.

Install

pip install viterbi

Usage

The following is a convolutional encoder with a constraint length of 7. The diagram indicates the binary values and polynomial form, indicating the left-most bit is the most-significant-bit (MSB). The generating polynomials are 1011011 and 1111001 can be alternatively expressed in octal as 133 and 171, respectively.

convolutional encoder

Expressed in code as:

from viterbi import Viterbi
dot11a_codec = Viterbi(7, [0o133, 0o171])

You can use the viterbi decoder like this:

from viterbi import Viterbi

dot11a_codec = Viterbi(7, [0o133, 0o171])
bits = [0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0]
output = dot11a_codec.encode(bits)
# [0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1]
dot11a_codec.decode(output)
# [0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0]

Puncturing

This library also allows you to puncture the original encoded data by specifying a puncture pattern or decode data that has already been punctured.

from viterbi import Viterbi

# Puncture Pattern: [1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1]
dot11a_codec = Viterbi(7, [0o133, 0o171], [1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1])

Using in C++

You can find the way to use the Viterbi decoder in C++ in the README of the original project.

About

A Convolutional Encoder and Viterbi Decoder in Python/C++.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 83.0%
  • Python 13.2%
  • Makefile 3.8%