https://github.com/zzzzzzzzac/numfi
a subclass of numpy.ndarray that does fixed-point arithmetic
https://github.com/zzzzzzzzac/numfi
dsp fixed-point fpga numpy numpy-arrays simulation
Last synced: 2 months ago
JSON representation
a subclass of numpy.ndarray that does fixed-point arithmetic
- Host: GitHub
- URL: https://github.com/zzzzzzzzac/numfi
- Owner: ZZZZzzzzac
- License: mit
- Created: 2021-04-26T01:48:17.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2025-03-25T08:30:26.000Z (3 months ago)
- Last Synced: 2025-04-09T23:07:33.456Z (2 months ago)
- Topics: dsp, fixed-point, fpga, numpy, numpy-arrays, simulation
- Language: Python
- Homepage:
- Size: 1.02 MB
- Stars: 13
- Watchers: 1
- Forks: 5
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# [numfi](https://github.com/ZZZZzzzzac/numfi)
numfi is a numpy.ndarray subclass that does fixed-point arithmetic.
Feature:
- Automatically perform fixed-point arithmetic through overloaded operators
- Maximum compatibility with numpy and other library, just like a normal numpy.ndarray
- Optimized calculation speed, and keep bit precision as much as possible
- mimic the behavior of matlab's fixed-point toolbox
## Install
**Prerequisite**: python3 and numpy
```bash
pip install numfi
```or you can just copy [numfi.py](https://github.com/ZZZZzzzzac/numfi/blob/master/numfi/numfi.py) and do whatever you want, after all it's only 300 lines of code
## Quick start
```python
from numfi import numfi as fi
import numpy as np# numfi(array=[], s=1, w=16, f=None, RoundingMethod='Nearest', OverflowAction='Saturate')
x = fi([1,0,0.1234],1,16,8)
# print(numfi) return brief description of numfi object: x => s16/8-N/S
# s for 'signed', u for 'unsigned', followed by word bits(16) and fraction bits(8), N/S for 'Nearest' and 'Saturate` for rounding/overflow method# any arithmetic operation with numfi will return a numfi object with proper precision and value
# By overloading operators, numfi object can do fixed-point arithmetic easily:# normal arithmetic operation work with float form of x
y = x + 1
y = [1] - x
y = x * [3,0,-3]
y = fi([1,0,0.1234],1,21,15) / x
y = -x
y = x ** 0.5
y = x % 3
# comparison return np.array of bool, just like normal np.array
y = x > 0.5
y = x >= fi([1,0,0.1234],1,21,15)
y = x == x
y = x <= np.ones(3)
y = x < [1,1,1]
# bitwise operation work with integer form of x
y = x & 0b101
y = 0b100 | x # order of operands doesn't matter
y = x ^ x # two numfi object can also be used in bitwise operations
y = x << 4
y = x >> 2
...# numfi object can be used just like normal numpy array, and return same numfi object back
y = np.sin(x)
y = x[x>1]
y = x.sum()
y = x.reshape(3,1)
np.convolve(x[0],np.ones(3))
np.fft.fft(x,n=512)
plt.plot(x)
pandas.DataFrame(x)
f, t, Sxx = scipy.signal.spectrogram(x,nperseg=256,noverlap=128)
plt.pcolormesh(t, f, Sxx, shading='gouraud')
for i in x:
print(i)
...
```## Document
Details can be found here: [https://numfi.readthedocs.io/en/latest/?](https://numfi.readthedocs.io/en/latest/?)
## License
The project is licensed under the MIT license.