phanerozoic's picture
Upload folder using huggingface_hub
29db051 verified
---
license: mit
tags:
- pytorch
- safetensors
- threshold-logic
- neuromorphic
- error-correction
- hamming-code
---
# threshold-hamming74encoder
Hamming(7,4) encoder. Transforms 4 data bits into a 7-bit codeword with single-error correction capability.
## Circuit Overview
```
d1 d2 d3 d4
β”‚ β”‚ β”‚ β”‚
β”œβ”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ └────────────────────────────► c7 = d4
β”‚ β”‚ └───────────────────────► c6 = d3
β”‚ └──────────────────► c5 = d2
└─────────────► c3 = d1
β”‚ β”‚ β”‚ β”‚
β–Ό β–Ό β”‚ β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ d1 XOR d2 XOR │──────► c1 = p1
β”‚ d4 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ β”‚ β”‚
β–Ό β–Ό β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ d1 XOR d3 XOR │──────► c2 = p2
β”‚ d4 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ β”‚ β”‚
β–Ό β–Ό β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ d2 XOR d3 XOR │──► c4 = p3
β”‚ d4 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```
## The Hamming(7,4) Code
Richard Hamming invented this code in 1950. It encodes 4 data bits into 7 bits such that any single-bit error can be detected and corrected.
**Codeword structure:**
| Position | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|----------|---|---|---|---|---|---|---|
| Bit | p1 | p2 | d1 | p3 | d2 | d3 | d4 |
| Type | parity | parity | data | parity | data | data | data |
**Parity equations:**
- p1 = d1 βŠ• d2 βŠ• d4 (covers positions 1,3,5,7)
- p2 = d1 βŠ• d3 βŠ• d4 (covers positions 2,3,6,7)
- p3 = d2 βŠ• d3 βŠ• d4 (covers positions 4,5,6,7)
## 3-Way XOR Implementation
Each parity bit requires a 3-input XOR. In threshold logic:
```
XOR(a,b,c) = XOR(XOR(a,b), c)
a b
β”‚ β”‚
β””β”€β”¬β”€β”˜
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”
β”‚ XOR β”‚ (2 layers)
β””β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β”‚ c
β””β”€β”¬β”€β”˜
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”
β”‚ XOR β”‚ (2 more layers)
β””β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
XOR(a,b,c)
```
Total depth: 4 layers per parity. All three parities compute in parallel.
## Code Properties
| Property | Value |
|----------|-------|
| Data bits (k) | 4 |
| Codeword bits (n) | 7 |
| Parity bits (n-k) | 3 |
| Minimum distance | 3 |
| Error correction | 1 bit |
| Error detection | 2 bits |
## Example Encoding
```
Data: 1011
p1 = 1 βŠ• 0 βŠ• 1 = 0
p2 = 1 βŠ• 1 βŠ• 1 = 1
p3 = 0 βŠ• 1 βŠ• 1 = 0
Codeword: 0110011
↑↑ ↑
p1p2p3
```
## Architecture
| Component | Neurons | Parameters |
|-----------|---------|------------|
| p1 (3-way XOR) | 6 | 22 |
| p2 (3-way XOR) | 6 | 22 |
| p3 (3-way XOR) | 6 | 22 |
| d1-d4 pass-through | 4 | 20 |
| **Total** | **22** | **86** |
**Layers: 4** (two cascaded XOR stages)
## All 16 Codewords
| Data | Codeword | HW |
|------|----------|-----|
| 0000 | 0000000 | 0 |
| 1000 | 1110000 | 3 |
| 0100 | 1001100 | 3 |
| 1100 | 0111100 | 4 |
| 0010 | 0101010 | 3 |
| 1010 | 1011010 | 4 |
| 0110 | 1100110 | 4 |
| 1110 | 0010110 | 3 |
| 0001 | 1101001 | 4 |
| 1001 | 0011001 | 3 |
| 0101 | 0100101 | 3 |
| 1101 | 1010101 | 4 |
| 0011 | 1000011 | 3 |
| 1011 | 0110011 | 4 |
| 0111 | 0001111 | 4 |
| 1111 | 1111111 | 7 |
Note: Minimum Hamming distance between any two codewords is 3.
## Usage
```python
from safetensors.torch import load_file
w = load_file('model.safetensors')
def hamming74_encode(d1, d2, d3, d4):
"""Encode 4 data bits to 7-bit Hamming codeword"""
# See model.py for full implementation
pass
# Encode data word 1011
codeword = hamming74_encode(1, 0, 1, 1)
# Returns [0, 1, 1, 0, 0, 1, 1]
```
## Files
```
threshold-hamming74encoder/
β”œβ”€β”€ model.safetensors
β”œβ”€β”€ model.py
β”œβ”€β”€ config.json
└── README.md
```
## License
MIT