CSIKit Versions Save

Python CSI processing and visualisation tools for Atheros, Intel, Nexmon, ESP32, FeitCSI, and PicoScenes (USRP, etc) formats.

v2.5

3 months ago

It's been a little while...

What's Changed

New Contributors

Full Changelog: https://github.com/Gi-z/CSIKit/compare/v2.4...v2.5

v2.4

1 year ago

Feature release.

  • Added support for PicoScenes AX200/AX210 format.
    • Additional example .csi files have been provided in data/pico.
    • Timestamps are pulled from the muClock onboard as opposed to those generated by PicoScenes.
  • Various performance improvements.
  • Changed average RSSI readout for CSIMetadata to handle multiple antennas where one of them may be null.

Contributions:

  • @dingyiyi0226 has implemented a string-based print output for CSIMetadata.
    • An example use case can be found in #23.

v2.3

2 years ago

Major feature release.

  • Added initial support for PicoScenes RxS format.
    • PicoScenes provides a modern platform for collecting, parsing and processing CSI from IWL5300 and QCA93XX devices, as well as USRP-based software defined radios.
    • Support is initial, as PicoScenes formats contain significantly more data than other CSI formats. The priority for CSIKit is ensuring CSI matrices can be parsed from all available formats.
    • All current PicoScenes devices and formats are supported, and additional future support is planned.
    • Example .csi files have been provided in data/pico.
  • Added backend reporting to CSIData.
    • This indicates the platform used to produce the generated CSI (e.g. Linux 802.11n CSI Tool/PicoScenes).

Contributions:

  • @FredeJ has implemented stream-based parsing for Nexmon CSI data via NEXBeamformReader.read_stream.
    • An example use case can be found in #16.
    • Additional functionality and improvements for real-time parsing are planned.

7be20a1

2 years ago

Minor feature release.

  • Added support for BCM4339
  • All nexmon file formats should be supported automatically, with no extra configuration on the user's end.
    • If you have a Nexmon pcap file which doesn't parse correctly, let me know!
  • Resolved incorrect parsing of Nexmon core and spatial stream values.
  • Added extra handling for incomplete pcap payloads which may occur when forcefully terminating captures.

Known Issues:

  • Multiple cores/spatial streams are incorrectly referred to as multiple Rx/Tx antennas.
    • This will be resolved in the next update.

Current goals are to add more visualisation, processing, and capturing functionality in the near future, if spare time allows. Additionally, I'd like to reduce the number of dependencies being used where possible.

ff8234f

2 years ago

Minor feature release.

Nexmon Spatial Stream support CSI captured across multiple spatial streams is now parsed as Tx * Rx matrices, similar to the implementation seen with IWL5300 or Atheros CSI data. An example file (example_4366c0_4x4mimo.pcap) has been provided by @yujianyuanhaha, thank you!

image

Performance Improvements While this library has never been the most performant option available, I felt performance when parsing some file formats was too poor. After switching some applicable code over to numba's JIT implementation, performance has improved in these areas to an acceptable level. While I hope to continue improving both usability and performance of CSIKit I suggest looking into @citysu's csiread if you're looking for high performance CSI payload parsing.

4bce011

2 years ago

Minor update to resolve a bug which may have occurred when parsing bcm43455c0 files. Incomplete payloads will now be acknowledged and will not cause the parser to fail.

5aea4be

2 years ago

Minor release with improvements and a new feature.

Features: A new denoising filter has been added. Discrete Wavelet Transform-based denoising (using soft thresholding) is available in CSIKit.filters.wavelets.dwt, based on FallDeFi and WDen. dwt.denoise applies this filtering technique to CSI matrices. The results can be quite surprising with minimal distortion to the original signal, as opposed to passband-based filtering techniques. Comparisons of these techniques will be added to documentation soon.

Improvements: The ESP32 CSIFrame format has been updated to more accurately reflect the original contents of the packets. Field names have not changed, but their types and included data have correctly assigned to match the specification provided by ESP-IDF. This should provide better insight into the contents of ESP32 CSI data.

An average RSSI value is calculated for CSIMetadata and rendered in the get_info function. This is reflected in the standard CSIKit output (e.g. csikit example.dat).

Compatibility Changes: While no compatibility changes should occur as a result of this update, filters will slowly be moved from their location in CSIKit.util.filters to CSIKit.filters in the next major update.

Readme to be updated shortly.

868f34a

3 years ago

Major update.

Support for extracting CSI for multiple antenna streams.

This changes the default get_CSI behaviour, as well as adding additional options to more finely tweak functionality. By default, CSI extraction for any given chipset will work the same way as their MATLAB implementations. Additional parameters:

  • extract_as_dBm (bool, default=True): When extracting CSI amplitude, this option controls whether the amplitude is converted to dBm.
  • squeeze_output (bool, default=False): By default, the returned CSI shape will always be (frames, subcarriers, rx, tx). This option will remove singular dimensions, for instance, from CSI captures on devices with one antenna stream.

Support for ESP32.

ESP32 CSI CSVs as generated by StevenMHernandez's ESP32-CSI-Tool are now supported by default, and will be automatically detected. This lays groundwork for allowing custom CSV formats to be imported into CSIKit, which I hope to finish soon.

Visualization module

Initial support for more complex visualizations is now available through CSIKit.visualization, implemented by @tweigel-dev. A tutorial and various examples for usage are included in docs/scenario_plot.ipynb! Currently only support for Intel .dat-style CSI files is implemented, however the system is very extensible and should see future improvements.

Bugfixes for Atheros format

Resolved issues which occurred when reading CSI files generated by the more common versions of the Atheros CSI Tool. If any additional issues occur, please make an issue and provide an example file. These fixes usually don't take long at all, but I don't have examples of all formats.

PyTests

Rewrote the Intel/Nexmon MATLAB comparisons into rough PyTests, mainly for CI/CD. This hopefully should reduce major issues from reaching main releases. These can be run by running pytest in the project root. Instructions for generating .mat files and performing additional testing are included in tests/x/README.md.

Various Bugfixes