Skip to main content

Nexcsi

Nexcsi is a fast and simple CSI decoder for Nexmon_CSI files written in Python.

pip install nexcsi

Usage

from nexcsi import decoder

device = "raspberrypi" # nexus5, nexus6p, rtac86u

samples = decoder(device).read_pcap('pcap/output10k.pcap')

print(samples['rssi']) # [-75 -77 -77 ... -77 -76 -76]
print(samples['fctl']) # [128 148 148 ... 148 148 148]
print(samples['csi'])  # [[ 19489  0  -19200  -96 -42 ...

# samples is a Numpy Structured Array
print(samples.dtype)

# [
#     ('ts_sec', '<u4'), ('ts_usec', '<u4'), ('saddr', '>u4'), 
#     ('daddr', '>u4'), ('sport', '>u2'), ('dport', '>u2'),
#     ('magic', '<u2'), ('rssi', 'i1'), ('fctl', 'u1'),
#     ('mac', 'u1', (6,)), ('seq', '<u2'), ('css', '<u2'),
#     ('csp', '<u2'), ('cvr', '<u2'), ('csi', '<i2', (512,))
# ]

# Accessing CSI as type complex64
csi = decoder(device).unpack(samples['csi'])

Null and Pilot subcarriers

CSI values of some subcarriers contain large and arbitrary values. Removing or zeroing them can make the changes in CSI better visible.

To zero the values of Null and Pilot subcarriers:

csi = decoder(device).unpack(samples['csi'], zero_nulls=True, zero_pilots=True)

Alternatively you can completely delete the columns of those subcarriers. Although I don't recommend this, because it changes the indexes of other subcarriers.

import numpy as np

csi = np.delete(csi, csi.dtype.metadata['nulls'], axis=1)
csi = np.delete(csi, csi.dtype.metadata['pilots'], axis=1)

Metadata

Release files for nexcsi 0.5.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nexcsi 0.5.2
File Size Uploaded
nexcsi-0.5.2.tar.gz 6.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nexcsi 0.5.2
File Interpreter ABI Platform
nexcsi-0.5.2-py3-none-any.whl Python 3 none any Details

Total release size: 14.7 kB

Release files / nexcsi-0.5.2.tar.gz

Download URL nexcsi-0.5.2.tar.gz
Size 6.1 kB
Tags Source
SHA-256 checksum
How to use checksums
cba218e68a1eb1b92854bc5387903bafbb96b9e10ea8ff10f3a6e50dc87ad10c
BLAKE2b-256 checksum
How to use checksums
c67b09e8533b7b02e2676005e6cf4b1308efe6efea433eb9939d9dca1e7507a6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.2.2 CPython/3.10.6 Linux/6.0.6-76060006-generic

Release files / nexcsi-0.5.2-py3-none-any.whl

Download URL nexcsi-0.5.2-py3-none-any.whl
Size 8.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0a7bc28da9b68b33e0ea3cfc8471f65f6534789bba77204d1c22fc36ad15a257
BLAKE2b-256 checksum
How to use checksums
36b21144d7b251c9a3dd3f6311b148d2dfd26eac7e0012babe69cd1617960f2a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.2.2 CPython/3.10.6 Linux/6.0.6-76060006-generic

Release history Release notifications | RSS feed

This release

0.5.2 This release

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page