%global _empty_manifest_terminate_build 0 Name: python-csiread Version: 1.4.0 Release: 1 Summary: A **fast** channel state information parser for Intel, Atheros, Nexmon, ESP32 and PicoScenes in Python. License: MIT URL: https://github.com/citysu/csiread Source0: https://mirrors.nju.edu.cn/pypi/web/packages/24/d6/086786333b83ea32f67e4c3b067331ba69e56d6b4e82bfac106d43eac58f/csiread-1.4.0.tar.gz Requires: python3-numpy %description # csiread [![PyPI](https://img.shields.io/pypi/v/csiread?)](https://pypi.org/project/csiread/) A **fast** channel state information parser for Intel, Atheros, Nexmon, ESP32 and PicoScenes in Python. - Full support for [Linux 802.11n CSI Tool](https://dhalperi.github.io/linux-80211n-csitool/), [Atheros CSI Tool](https://wands.sg/research/wifi/AtherosCSI/), [nexmon_csi](https://github.com/seemoo-lab/nexmon_csi) and [ESP32-CSI-Tool](https://github.com/StevenMHernandez/ESP32-CSI-Tool) - Support for [PicoScenes](https://ps.zpj.io) is **experimental**. - At least 15 times faster than the implementation in Matlab - Real-time parsing and visualization.
real-time plotting
![real-time plotting](https://github.com/citysu/csiread/blob/master/docs/sample2.png) ## Introduction Various CSI Tools only provide Matlab API parsing CSI data files. Those who want to process CSI with Python have to install Matlab to convert `.dat` to `.mat`. This process is redundant and inefficient. Therefore, **Python API** is recommended. Unfortunately, the API implemented in pure Python is inefficient. With this in mind, I implemented csiread in Cython(Pybind11 may be another great choice). The table below shows the performance of different implementations. They were all tested with **40k** packets on the same computer. | Function | Matlab | Python3+Numpy | csiread | file size | |-------------------------|----------|---------------|------------|-----------| | Nexmon.read:bcm4339 | 3.2309s | 0.2739s | 0.0703s | 44.0MB | | Nexmon.read:bcm4358 | 3.5987s | 23.0025s | 0.1227s | 44.0MB | | Atheros.read | 3.3081s | 14.6021s | 0.0956s | 76.3MB | | Intel.read | 1.6102s | 7.6624s | 0.0479s | 21.0MB | | Intel.get_total_rss | 0.1786s | 0.0030s | 0.0030s | | | Intel.get_scaled_csi | 0.5497s | 0.1225s | 0.0376s/0.0278s | | | Intel.get_scaled_csi_sm | 5.0097s | 0.3627s | 0.0778s/0.0465s | | This tool is not only the translation of the Matlab API, but also a **CSI toolbox**. I added some utilities, real-time visualization and algorithms code in the `examples` folder. These would be useful for Python-based CSI researchers. ## Install ```bash pip3 install csiread ``` ## Quickstart ```python import csiread # Linux 802.11n CSI Tool csifile = "../material/5300/dataset/sample_0x1_ap.dat" csidata = csiread.Intel(csifile, nrxnum=3, ntxnum=2, pl_size=10) csidata.read() csi = csidata.get_scaled_csi() print(csidata.csi.shape) # Atheros CSI Tool csifile = "../material/atheros/dataset/ath_csi_1.dat" csidata = csiread.Atheros(csifile, nrxnum=3, ntxnum=2, pl_size=10, tones=56) csidata.read(endian='little') print(csidata.csi.shape) # nexmon_csi csifile = "../material/nexmon/dataset/example.pcap" csidata = csiread.Nexmon(csifile, chip='4358', bw=80) csidata.read() print(csidata.csi.shape) # ESP32-CSI-Tool csifile = "../material/esp32/dataset/example_csi.csv" csidata = csiread.ESP32(csifile, csi_only=True) csidata.read() print(csidata.csi.shape) # PicoScenes csifile = "../material/picoscenes/dataset/rx_by_iwl5300.csi" csidata = csiread.Picoscenes(csifile, {'CSI': [30, 3, 2], 'MPDU': 1522}) csidata.read() csidata.check() print(csidata.raw['CSI']['CSI'].shape) ``` `examples` are the best usage instructions. The API documentation can be found in `docstring` of file `core.py`, so we won't repeat them here. ## Build from source ```bash cd csiread pip3 install -r requirements.txt python3 setup.py sdist bdist_wheel pip3 install -U dist/csiread*.whl ``` `*` is a shell wildcard. After running `python3 setup.py sdist bdist_wheel`,there will be a wheel file like `csiread-1.3.4-cp36-cp36m-win_amd64.whl` in the `dist` folder. Replace `csiread*.whl` with it. csiread is written in Cython, Cython requires a C compiler to be present on the system. You can refer to [Installing Cython](https://cython.readthedocs.io/en/latest/src/quickstart/install.html) for more details. If you don't want to install a C compiler, just fork the project and push a tag to the latest commit. Then wheel files can be found in `Github-Actions-Python package-Artifacts: csiread_dist` ## Design csiread provides 7 classes: `Intel, Atheros, Nexmon, AtherosPull10, NexmonPull46, ESP32 and Picoscenes`. Each class has 4 key methods: `read(), seek()`, `pmsg()` and `display()` which are used for reading a file, reading a file from a specific position, real-time parsing and viewing the contents of a packet respectively. `csiread.utils` provides some common functions. ### Nexmon CSI - `csiread.Nexmon` is based on the commit of nexmon_csi(Aug 29, 2020): `ba99ce12a6a42d7e4ec75e6f8ace8f610ed2eb60` - `csiread.NexmonPull256` is the same as `csiread.NexmonPull46`. It works with the latest master branch (Dec 11, 2021): `c037576b7035619e2716229c7622f4e8c511635f` - The `Nexmon.group` is experimental, it may be incorrect due to `core` and `spatial`. `core` and `spatial` are ZERO or not recorded correctly in some files. I don't know how to solve it. ### ESP32-CSI-Tool - `pandas.read_csv` and `csiread.ESP32` have the similar performance, but `pandas.read_csv` is much more flexible. ### PicoScenes The support for Picoscenes is an **experimental** feature. PicoScenes is still under active development, csiread cannot be updated synchronously. - `csidata.raw` is a [structured array](https://numpy.org/doc/stable/user/basics.rec.html#structured-arrays) in numpy and stores the parsed result. - `Mag` and `Phase` fileds have been removed, use `np.abs` and `np.angle` instead. - Call `check()` method after `read()`, Then set `pl_size` according to the report. - Edge padding are applied to `raw["xxx"]["SubcarrierIndex"]` for plotting. - The method `pmsg` has been implemented, but not yet ready. - Accessing CSI like `csidata.CSI.CSI` is only available after calling `read` method. - 5-10 times faster than before - `parseCSIMVM(...)` in `_picoscenes.pyx` may be incorrect. `csiread.Picoscenes` is based on the PicoScenes MATLAB Toolbox(PMT)(Last modified at 2022-01-21). %package -n python3-csiread Summary: A **fast** channel state information parser for Intel, Atheros, Nexmon, ESP32 and PicoScenes in Python. Provides: python-csiread BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip BuildRequires: python3-cffi BuildRequires: gcc BuildRequires: gdb %description -n python3-csiread # csiread [![PyPI](https://img.shields.io/pypi/v/csiread?)](https://pypi.org/project/csiread/) A **fast** channel state information parser for Intel, Atheros, Nexmon, ESP32 and PicoScenes in Python. - Full support for [Linux 802.11n CSI Tool](https://dhalperi.github.io/linux-80211n-csitool/), [Atheros CSI Tool](https://wands.sg/research/wifi/AtherosCSI/), [nexmon_csi](https://github.com/seemoo-lab/nexmon_csi) and [ESP32-CSI-Tool](https://github.com/StevenMHernandez/ESP32-CSI-Tool) - Support for [PicoScenes](https://ps.zpj.io) is **experimental**. - At least 15 times faster than the implementation in Matlab - Real-time parsing and visualization.
real-time plotting
![real-time plotting](https://github.com/citysu/csiread/blob/master/docs/sample2.png) ## Introduction Various CSI Tools only provide Matlab API parsing CSI data files. Those who want to process CSI with Python have to install Matlab to convert `.dat` to `.mat`. This process is redundant and inefficient. Therefore, **Python API** is recommended. Unfortunately, the API implemented in pure Python is inefficient. With this in mind, I implemented csiread in Cython(Pybind11 may be another great choice). The table below shows the performance of different implementations. They were all tested with **40k** packets on the same computer. | Function | Matlab | Python3+Numpy | csiread | file size | |-------------------------|----------|---------------|------------|-----------| | Nexmon.read:bcm4339 | 3.2309s | 0.2739s | 0.0703s | 44.0MB | | Nexmon.read:bcm4358 | 3.5987s | 23.0025s | 0.1227s | 44.0MB | | Atheros.read | 3.3081s | 14.6021s | 0.0956s | 76.3MB | | Intel.read | 1.6102s | 7.6624s | 0.0479s | 21.0MB | | Intel.get_total_rss | 0.1786s | 0.0030s | 0.0030s | | | Intel.get_scaled_csi | 0.5497s | 0.1225s | 0.0376s/0.0278s | | | Intel.get_scaled_csi_sm | 5.0097s | 0.3627s | 0.0778s/0.0465s | | This tool is not only the translation of the Matlab API, but also a **CSI toolbox**. I added some utilities, real-time visualization and algorithms code in the `examples` folder. These would be useful for Python-based CSI researchers. ## Install ```bash pip3 install csiread ``` ## Quickstart ```python import csiread # Linux 802.11n CSI Tool csifile = "../material/5300/dataset/sample_0x1_ap.dat" csidata = csiread.Intel(csifile, nrxnum=3, ntxnum=2, pl_size=10) csidata.read() csi = csidata.get_scaled_csi() print(csidata.csi.shape) # Atheros CSI Tool csifile = "../material/atheros/dataset/ath_csi_1.dat" csidata = csiread.Atheros(csifile, nrxnum=3, ntxnum=2, pl_size=10, tones=56) csidata.read(endian='little') print(csidata.csi.shape) # nexmon_csi csifile = "../material/nexmon/dataset/example.pcap" csidata = csiread.Nexmon(csifile, chip='4358', bw=80) csidata.read() print(csidata.csi.shape) # ESP32-CSI-Tool csifile = "../material/esp32/dataset/example_csi.csv" csidata = csiread.ESP32(csifile, csi_only=True) csidata.read() print(csidata.csi.shape) # PicoScenes csifile = "../material/picoscenes/dataset/rx_by_iwl5300.csi" csidata = csiread.Picoscenes(csifile, {'CSI': [30, 3, 2], 'MPDU': 1522}) csidata.read() csidata.check() print(csidata.raw['CSI']['CSI'].shape) ``` `examples` are the best usage instructions. The API documentation can be found in `docstring` of file `core.py`, so we won't repeat them here. ## Build from source ```bash cd csiread pip3 install -r requirements.txt python3 setup.py sdist bdist_wheel pip3 install -U dist/csiread*.whl ``` `*` is a shell wildcard. After running `python3 setup.py sdist bdist_wheel`,there will be a wheel file like `csiread-1.3.4-cp36-cp36m-win_amd64.whl` in the `dist` folder. Replace `csiread*.whl` with it. csiread is written in Cython, Cython requires a C compiler to be present on the system. You can refer to [Installing Cython](https://cython.readthedocs.io/en/latest/src/quickstart/install.html) for more details. If you don't want to install a C compiler, just fork the project and push a tag to the latest commit. Then wheel files can be found in `Github-Actions-Python package-Artifacts: csiread_dist` ## Design csiread provides 7 classes: `Intel, Atheros, Nexmon, AtherosPull10, NexmonPull46, ESP32 and Picoscenes`. Each class has 4 key methods: `read(), seek()`, `pmsg()` and `display()` which are used for reading a file, reading a file from a specific position, real-time parsing and viewing the contents of a packet respectively. `csiread.utils` provides some common functions. ### Nexmon CSI - `csiread.Nexmon` is based on the commit of nexmon_csi(Aug 29, 2020): `ba99ce12a6a42d7e4ec75e6f8ace8f610ed2eb60` - `csiread.NexmonPull256` is the same as `csiread.NexmonPull46`. It works with the latest master branch (Dec 11, 2021): `c037576b7035619e2716229c7622f4e8c511635f` - The `Nexmon.group` is experimental, it may be incorrect due to `core` and `spatial`. `core` and `spatial` are ZERO or not recorded correctly in some files. I don't know how to solve it. ### ESP32-CSI-Tool - `pandas.read_csv` and `csiread.ESP32` have the similar performance, but `pandas.read_csv` is much more flexible. ### PicoScenes The support for Picoscenes is an **experimental** feature. PicoScenes is still under active development, csiread cannot be updated synchronously. - `csidata.raw` is a [structured array](https://numpy.org/doc/stable/user/basics.rec.html#structured-arrays) in numpy and stores the parsed result. - `Mag` and `Phase` fileds have been removed, use `np.abs` and `np.angle` instead. - Call `check()` method after `read()`, Then set `pl_size` according to the report. - Edge padding are applied to `raw["xxx"]["SubcarrierIndex"]` for plotting. - The method `pmsg` has been implemented, but not yet ready. - Accessing CSI like `csidata.CSI.CSI` is only available after calling `read` method. - 5-10 times faster than before - `parseCSIMVM(...)` in `_picoscenes.pyx` may be incorrect. `csiread.Picoscenes` is based on the PicoScenes MATLAB Toolbox(PMT)(Last modified at 2022-01-21). %package help Summary: Development documents and examples for csiread Provides: python3-csiread-doc %description help # csiread [![PyPI](https://img.shields.io/pypi/v/csiread?)](https://pypi.org/project/csiread/) A **fast** channel state information parser for Intel, Atheros, Nexmon, ESP32 and PicoScenes in Python. - Full support for [Linux 802.11n CSI Tool](https://dhalperi.github.io/linux-80211n-csitool/), [Atheros CSI Tool](https://wands.sg/research/wifi/AtherosCSI/), [nexmon_csi](https://github.com/seemoo-lab/nexmon_csi) and [ESP32-CSI-Tool](https://github.com/StevenMHernandez/ESP32-CSI-Tool) - Support for [PicoScenes](https://ps.zpj.io) is **experimental**. - At least 15 times faster than the implementation in Matlab - Real-time parsing and visualization.
real-time plotting
![real-time plotting](https://github.com/citysu/csiread/blob/master/docs/sample2.png) ## Introduction Various CSI Tools only provide Matlab API parsing CSI data files. Those who want to process CSI with Python have to install Matlab to convert `.dat` to `.mat`. This process is redundant and inefficient. Therefore, **Python API** is recommended. Unfortunately, the API implemented in pure Python is inefficient. With this in mind, I implemented csiread in Cython(Pybind11 may be another great choice). The table below shows the performance of different implementations. They were all tested with **40k** packets on the same computer. | Function | Matlab | Python3+Numpy | csiread | file size | |-------------------------|----------|---------------|------------|-----------| | Nexmon.read:bcm4339 | 3.2309s | 0.2739s | 0.0703s | 44.0MB | | Nexmon.read:bcm4358 | 3.5987s | 23.0025s | 0.1227s | 44.0MB | | Atheros.read | 3.3081s | 14.6021s | 0.0956s | 76.3MB | | Intel.read | 1.6102s | 7.6624s | 0.0479s | 21.0MB | | Intel.get_total_rss | 0.1786s | 0.0030s | 0.0030s | | | Intel.get_scaled_csi | 0.5497s | 0.1225s | 0.0376s/0.0278s | | | Intel.get_scaled_csi_sm | 5.0097s | 0.3627s | 0.0778s/0.0465s | | This tool is not only the translation of the Matlab API, but also a **CSI toolbox**. I added some utilities, real-time visualization and algorithms code in the `examples` folder. These would be useful for Python-based CSI researchers. ## Install ```bash pip3 install csiread ``` ## Quickstart ```python import csiread # Linux 802.11n CSI Tool csifile = "../material/5300/dataset/sample_0x1_ap.dat" csidata = csiread.Intel(csifile, nrxnum=3, ntxnum=2, pl_size=10) csidata.read() csi = csidata.get_scaled_csi() print(csidata.csi.shape) # Atheros CSI Tool csifile = "../material/atheros/dataset/ath_csi_1.dat" csidata = csiread.Atheros(csifile, nrxnum=3, ntxnum=2, pl_size=10, tones=56) csidata.read(endian='little') print(csidata.csi.shape) # nexmon_csi csifile = "../material/nexmon/dataset/example.pcap" csidata = csiread.Nexmon(csifile, chip='4358', bw=80) csidata.read() print(csidata.csi.shape) # ESP32-CSI-Tool csifile = "../material/esp32/dataset/example_csi.csv" csidata = csiread.ESP32(csifile, csi_only=True) csidata.read() print(csidata.csi.shape) # PicoScenes csifile = "../material/picoscenes/dataset/rx_by_iwl5300.csi" csidata = csiread.Picoscenes(csifile, {'CSI': [30, 3, 2], 'MPDU': 1522}) csidata.read() csidata.check() print(csidata.raw['CSI']['CSI'].shape) ``` `examples` are the best usage instructions. The API documentation can be found in `docstring` of file `core.py`, so we won't repeat them here. ## Build from source ```bash cd csiread pip3 install -r requirements.txt python3 setup.py sdist bdist_wheel pip3 install -U dist/csiread*.whl ``` `*` is a shell wildcard. After running `python3 setup.py sdist bdist_wheel`,there will be a wheel file like `csiread-1.3.4-cp36-cp36m-win_amd64.whl` in the `dist` folder. Replace `csiread*.whl` with it. csiread is written in Cython, Cython requires a C compiler to be present on the system. You can refer to [Installing Cython](https://cython.readthedocs.io/en/latest/src/quickstart/install.html) for more details. If you don't want to install a C compiler, just fork the project and push a tag to the latest commit. Then wheel files can be found in `Github-Actions-Python package-Artifacts: csiread_dist` ## Design csiread provides 7 classes: `Intel, Atheros, Nexmon, AtherosPull10, NexmonPull46, ESP32 and Picoscenes`. Each class has 4 key methods: `read(), seek()`, `pmsg()` and `display()` which are used for reading a file, reading a file from a specific position, real-time parsing and viewing the contents of a packet respectively. `csiread.utils` provides some common functions. ### Nexmon CSI - `csiread.Nexmon` is based on the commit of nexmon_csi(Aug 29, 2020): `ba99ce12a6a42d7e4ec75e6f8ace8f610ed2eb60` - `csiread.NexmonPull256` is the same as `csiread.NexmonPull46`. It works with the latest master branch (Dec 11, 2021): `c037576b7035619e2716229c7622f4e8c511635f` - The `Nexmon.group` is experimental, it may be incorrect due to `core` and `spatial`. `core` and `spatial` are ZERO or not recorded correctly in some files. I don't know how to solve it. ### ESP32-CSI-Tool - `pandas.read_csv` and `csiread.ESP32` have the similar performance, but `pandas.read_csv` is much more flexible. ### PicoScenes The support for Picoscenes is an **experimental** feature. PicoScenes is still under active development, csiread cannot be updated synchronously. - `csidata.raw` is a [structured array](https://numpy.org/doc/stable/user/basics.rec.html#structured-arrays) in numpy and stores the parsed result. - `Mag` and `Phase` fileds have been removed, use `np.abs` and `np.angle` instead. - Call `check()` method after `read()`, Then set `pl_size` according to the report. - Edge padding are applied to `raw["xxx"]["SubcarrierIndex"]` for plotting. - The method `pmsg` has been implemented, but not yet ready. - Accessing CSI like `csidata.CSI.CSI` is only available after calling `read` method. - 5-10 times faster than before - `parseCSIMVM(...)` in `_picoscenes.pyx` may be incorrect. `csiread.Picoscenes` is based on the PicoScenes MATLAB Toolbox(PMT)(Last modified at 2022-01-21). %prep %autosetup -n csiread-1.4.0 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-csiread -f filelist.lst %dir %{python3_sitearch}/* %files help -f doclist.lst %{_docdir}/* %changelog * Wed May 31 2023 Python_Bot - 1.4.0-1 - Package Spec generated