- Notifications
You must be signed in to change notification settings - Fork0
A Convolutional Encoder and Viterbi Decoder in Python/C++.
License
clysto/viterbi
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This project is a fork ofhttps://github.com/xukmin/viterbi that introduces Python support, enabling effortless utilization of the Viterbi module within the Python environment.
pip install viterbi
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.
Expressed in code as:
fromviterbiimportViterbidot11a_codec=Viterbi(7, [0o133,0o171])
You can use the viterbi decoder like this:
fromviterbiimportViterbidot11a_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]
This library also allows you to puncture the original encoded data by specifying a puncture pattern or decode data that has already been punctured.
fromviterbiimportViterbi# 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])
You can find the way to use the Viterbi decoder in C++ in theREADME of the original project.
About
A Convolutional Encoder and Viterbi Decoder in Python/C++.
Resources
License
Stars
Watchers
Forks
Packages0
Languages
- C++83.0%
- Python13.2%
- Makefile3.8%