def Intel5300MPDU2(csifile, index=0): """Parse payload without scapy""" csidata = csiread.CSI(csifile, Nrxnum=3, Ntxnum=2, pl_size=40, if_report=False) csidata.read() print("=" * 20 + "Intel 5300 MPDU2" + "=" * 20) m = MPDU(csidata.payload[index].tobytes()) m.show()
def csitool_mon(): """ csitool - monitor """ print("="*40) print("csitool monitor") csifile = "../material/5300/dataset/sample_0x5_64_3000.dat" csidata = csiread.CSI(csifile, Nrxnum=3, Ntxnum=1, pl_size=10) last = time.time() csidata.read() now = time.time() print('-'*40) lmember = [s for s in csidata.__dir__() if s[:2] != "__"] print("Methods: \n", lmember[:6]) print('Time:') print(" read ", now - last, "s") last = time.time() total_rss = csidata.get_total_rss() now = time.time() print(" get_total_rss ", now - last, "s") last = time.time() scaled_csi = csidata.get_scaled_csi() now = time.time() print(" get_scaled_csi ", now - last, "s") last = time.time() scaled_csi_sm = csidata.get_scaled_csi_sm() now = time.time() print(" get_scaled_csi_sm ", now - last, "s") print('-'*40) index = 10 print("%dth packet: " % index) print(" file ", csidata.file) print(" count ", csidata.count) print(" timestamp_low ", csidata.timestamp_low[index]) print(" bfee_count ", csidata.bfee_count[index]) print(" Nrx ", csidata.Nrx[index]) print(" Ntx ", csidata.Ntx[index]) print(" rssiA ", csidata.rssiA[index]) print(" rssiB ", csidata.rssiB[index]) print(" rssiC ", csidata.rssiC[index]) print(" noise ", csidata.noise[index]) print(" agc ", csidata.agc[index]) print(" perm ", csidata.perm[index]) print(" rate ", csidata.rate[index]) print(" csi ", csidata.csi[index].shape) print(" total_rss ", total_rss[index]) print(" scaled_csi.shape ", scaled_csi[index].shape) print(" scaled_csi_sm.shape ", scaled_csi_sm[index].shape) print(" fc ", csidata.fc[index]) print(" dur ", csidata.dur[index]) print(" addr_src ", ":".join([hex(per)[2:].zfill(2) for per in csidata.addr_src[index]])) print(" addr_des ", ":".join([hex(per)[2:].zfill(2) for per in csidata.addr_des[index]])) print(" addr_bssid ", ":".join([hex(per)[2:].zfill(2) for per in csidata.addr_bssid[index]])) print(" seq ", csidata.seq[index]) print(" payload ", " ".join([hex(per)[2:].zfill(2) for per in csidata.payload[index]])) print('-'*40)
def update_background(): csidata = csiread.CSI(None, 3, 1) # config global cache_data1, cache_data2, cache_data3, mutex count = 0 address_src = ('127.0.0.1', 10086) address_des = ('127.0.0.1', 10010) with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: s.bind(address_des) while True: data, address_src = s.recvfrom(4096) msg_len = len(data) code = csidata.pmsg(data) if code == 0xbb: scaled_csi_sm = csidata.get_scaled_csi()[0] mutex.acquire() cache_data1.pop(0) cache_data1.append(scaled_csi_sm[15, 0, 0]) cache_data2.pop(0) cache_data2.append(scaled_csi_sm[15, 1, 0]) cache_data3.pop(0) cache_data3.append(scaled_csi_sm[15, 2, 0]) mutex.release() count += 1 if count % 100 == 0: print('receive %d bytes [msgcnt=%u]' % (msg_len, count))
def python_read(csifile='log.all_csi.6.7.6'): csidata = csiread.CSI(csifile, Ntxnum=3) csidata.read() pydata = csidata[:] pydata['scaled_csi'] = csidata.get_scaled_csi() pydata['scaled_csi_sm'] = csidata.get_scaled_csi_sm() return pydata
def csitool_ap(): """ csitool - ap """ print("="*40) print("csitool ap") csifile = "../material/5300/dataset/sample_0x1_ap.dat" csidata = csiread.CSI(csifile, Nrxnum=3, Ntxnum=2, pl_size=10) last = time.time() csidata.read() now = time.time() csidata.readstp() print('-'*40) lmember = [s for s in csidata.__dir__() if s[:2] != "__"] print("Methods: \n", lmember[:6]) print('Time:') print(" read ", now - last, "s") last = time.time() total_rss = csidata.get_total_rss() now = time.time() print(" get_total_rss ", now - last, "s") last = time.time() scaled_csi = csidata.get_scaled_csi() now = time.time() print(" get_scaled_csi ", now - last, "s") last = time.time() scaled_csi_sm = csidata.get_scaled_csi_sm() now = time.time() print(" get_scaled_csi_sm ", now - last, "s") print('-'*40) index = 10 print("%dth packet: " % index) print(" file ", csidata.file) print(" count ", csidata.count) print(" timestamp_low ", csidata.timestamp_low[index]) print(" bfee_count ", csidata.bfee_count[index]) print(" Nrx ", csidata.Nrx[index]) print(" Ntx ", csidata.Ntx[index]) print(" rssiA ", csidata.rssiA[index]) print(" rssiB ", csidata.rssiB[index]) print(" rssiC ", csidata.rssiC[index]) print(" noise ", csidata.noise[index]) print(" agc ", csidata.agc[index]) print(" perm ", csidata.perm[index]) print(" rate ", csidata.rate[index]) print(" csi ", csidata.csi[index].shape) print(" stp ", csidata.stp[index]) print(" total_rss ", total_rss[index]) print(" scaled_csi.shape ", scaled_csi[index].shape) print(" scaled_csi_sm.shape ", scaled_csi_sm[index].shape) print('-'*40)
def read_bf_fileA(csifile, pk_num): """read_bf_file Args: csifile: csi file pk_num: the count of packets in the csifile. Note: Override os.path.getsize(file) temporarily and set packet_number manually. """ csiread.os.path.getsize = lambda filename: 95 * pk_num csidata = csiread.CSI(csifile, Nrxnum=3, Ntxnum=2, pl_size=0, if_report=False) csiread.os.path.getsize = lambda filename: csiread.os.stat(filename).st_size csidata.read() return csidata
def background_task(self): csidata = csiread.CSI(None, 3, 2) address_des = ('127.0.0.1', 10010) with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: s.bind(address_des) s.settimeout(1) while self.task_status: try: data, _ = s.recvfrom(4096) except socket.timeout: continue code = csidata.pmsg(data) if code == 0xbb: socketio.sleep(0.00001) socketio.send(float(csidata.rssiA[0])) self.task_status = True
def main(): csidata = csiread.CSI('../material/5300/dataset/sample_0x5_64_3000.dat') csidata.read() scaled_csi = csidata.get_scaled_csi() preNrx = max(csidata.Nrx) preNtx = max(csidata.Ntx) if max(csidata.Nrx) != min(csidata.Nrx): print('be careful') preNrx = 3 # set by yourself scaled_csi = scaled_csi[csidata.Nrx == preNrx] if max(csidata.Ntx) != min(csidata.Ntx): print('be careful') preNtx = 2 # set by yourself scaled_csi = scaled_csi[csidata.Ntx == preNtx] scaled_csi = scaled_csi[:100, :, :preNrx, :preNtx] ret = get_eff_SNRs(scaled_csi) print(ret[0]) plt.figure() plt.plot(ret[:, 0, :]) plt.show()
def run(self): """get data in real time Note: If you want to run this script on the host with Intel 5300 NIC, rewrite code as csiuserspace.py """ csidata = csiread.CSI(None, 3, 2) # config global cache, mutex count = 0 address_src = ('127.0.0.1', 10086) address_des = ('127.0.0.1', 10010) with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: s.bind(address_des) s.settimeout(30 / 1000) while not self.isInterruptionRequested(): try: data, address_src = s.recvfrom(4096) except socket.timeout: continue msg_len = len(data) code = csidata.pmsg(data) if code == 0xbb: csi = csidata.get_scaled_csi_sm() scaled_csi_sm = np.abs(csi[0, :, 0, 0] / csi[0:, :, 1, 0]) scaled_csi_sm[scaled_csi_sm == np.inf] = 0 mutex.lock() cache[:, :-1] = cache[:, 1:] cache[:, -1] = scaled_csi_sm mutex.unlock() count += 1 if count % 100 == 0: print('receive %d bytes [msgcnt=%u], seq=%d' % (msg_len, count, csidata.seq))
import csiread import numpy as np import sys import glob import config if __name__ == "__main__": dir = sys.argv[1] mode = sys.argv[2] input = None for filename in glob.glob(f'{dir}/*_{mode}.dat'): csi = csiread.CSI(filename, Ntxnum=1) csi.read() scaled_csi = np.sum(csi.get_scaled_csi().squeeze(-1), axis=2) amplitude = np.abs(scaled_csi) phase = np.angle(scaled_csi) cur_input = np.concatenate((amplitude, phase), axis=1) if config.USE_PHASE else amplitude input = np.concatenate((input, cur_input), axis=0) if input is not None else cur_input print(input.shape) np.save(f'{dir}/{mode}.npy', input, False)
plt.ylabel('amplitude') plt.show() helpinfo = r"""Plot Type 1 CSI-time-amplitude 2 CSI-subcarrier-amplitude 3 CSI-time-phase 4 CSI-subcarrier-phase 5 timestamp-packet-timediff 6 CSI-time-amplitude(CIR: OFDM symbol view) 8 CSI-time-amplitude(butterworth filter) 9 CSI-time-amplitude(Convolve) 10 CSI-stft """ if __name__ == "__main__": parser = argparse.ArgumentParser( formatter_class=argparse.RawTextHelpFormatter) parser.add_argument('file', type=str, help='data file') parser.add_argument('-t', type=int, default=1, help=helpinfo) p = parser.parse_args() csidata = csiread.CSI(p.file, Nrxnum=3, Ntxnum=3) csidata.read() if p.t > 10: raise ValueError('the value of `t` can be 1 - 10') func = eval('func_' + str(p.t)) func(csidata)
import socket import sys import csiread import numpy as np import pyqtgraph as pg from PyQt5.QtCore import QMutex, Qt, QThread, QTimer, pyqtSlot from PyQt5.QtGui import QApplication from PyQt5.QtWidgets import QLabel, QMenuBar, QPushButton, QVBoxLayout, QWidget os.environ['QT_SCALE_FACTOR'] = '1' Device = 'Intel' # Intel or Atheros if Device == 'Intel': csidata = csiread.CSI(None, 3, 2) SUBCARRIERS_NUM = 30 BW = 20 NG = 2 YRange_A = 70 YRange_B = 70 YRange_D = 40 elif Device == 'Atheros': csidata = csiread.Atheros(None, 3, 2) SUBCARRIERS_NUM = 56 BW = 20 NG = 1 YRange_A = 300 YRange_B = 300 YRange_D = 200 else:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """csitable: view the contents of packets using beautiful table Note: run in jupyter notebook. """ import csiread import pandas as pd csifile = "../material/5300/dataset/sample_0x5_64_3000.dat" csidata = csiread.CSI(csifile, Ntxnum=1, pl_size=6, if_report=False) csidata.read() # pd.set_option('display.max_rows', None) # pd.set_option('display.max_columns', None) stringify = lambda data, space: [space.join([hex(per)[2:].zfill(2).upper() for per in data[index]]) for index in range(len(data))] data = csidata[:] del data['csi'] del data['perm'] data['perm'] = csidata.perm.tolist() data['csi.shape'] = [csidata.csi.shape[1:]]*csidata.count data['fc'] = csidata.fc data['dur'] = csidata.dur data['seq'] = csidata.seq data['addr_src'] = stringify(csidata.addr_src, ":")
phase = np.unwrap(np.angle(csi), axis=1) phase = calib(phase) plt.subplot(3, 1, 2) plt.plot(s_index, phase[200:300, :, 0, 0].T) # alg_3 # csicopy = csi.copy() # for i in range(100, 200): # csicopy[i] = alg_3(csi, i) # phase = np.unwrap(np.angle(csicopy), axis=1) # phase = calib(phase) # plt.subplot(3, 1, 3) # plt.plot(s_index, phase[100:200, :, 0, 0].T) plt.show() if __name__ == "__main__": csidata = csiread.CSI("../material/5300/dataset/sample_0x5_64_3000.dat", Ntxnum=1, if_report=False) athdata = csiread.Atheros("../material/atheros/dataset/ath_csi_1.dat", if_report=False) csidata.read() csidata.get_scaled_csi(True) athdata.read() fig_2(csidata) fig_4(athdata) fig_6(csidata) # algshow(csidata)
def intel(csifile, index, Ntxnum=2): """csitool""" print("=" * 40 + "[intel]") members = [ s for s in dir(csiread.CSI) if not s.startswith("__") and callable(getattr(csiread.CSI, s)) ] print("Methods: \n", members) print('Time:') last = default_timer() csidata = csiread.CSI(csifile, Ntxnum=Ntxnum, pl_size=10, if_report=False) csidata.read() print(" read ", default_timer() - last, "s") last = default_timer() total_rss = csidata.get_total_rss() print(" get_total_rss ", default_timer() - last, "s") last = default_timer() scaled_csi = csidata.get_scaled_csi() print(" get_scaled_csi ", default_timer() - last, "s") last = default_timer() scaled_csi_sm = csidata.get_scaled_csi_sm() # scaled_csi_sm = csidata.apply_sm(scaled_csi) print(" get_scaled_csi_sm ", default_timer() - last, "s") # Setting inplace to True may be dangerous but more efficient. temp = csiread.CSI(csifile, Ntxnum=Ntxnum, if_report=False) temp.read() last = default_timer() _ = temp.get_scaled_csi(inplace=True) # _ is temp.csi == True print(" get_scaled_csi(T) ", default_timer() - last, "s") temp = csiread.CSI(csifile, Ntxnum=Ntxnum, if_report=False) temp.read() last = default_timer() _ = temp.get_scaled_csi_sm(inplace=True) # _ is temp.csi == True print(" get_scaled_csi_sm(T)", default_timer() - last, "s") print('-' * 40) print("%dth packet: " % index) print(" file ", csidata.file) print(" count ", csidata.count) print(" timestamp_low ", csidata.timestamp_low[index]) print(" bfee_count ", csidata.bfee_count[index]) print(" Nrx ", csidata.Nrx[index]) print(" Ntx ", csidata.Ntx[index]) print(" rssiA ", csidata.rssiA[index]) print(" rssiB ", csidata.rssiB[index]) print(" rssiC ", csidata.rssiC[index]) print(" noise ", csidata.noise[index]) print(" agc ", csidata.agc[index]) print(" perm ", csidata.perm[index]) print(" rate ", csidata.rate[index]) print(" csi ", csidata.csi[index].shape) print(" total_rss ", total_rss[index]) print(" scaled_csi.shape ", scaled_csi[index].shape) print(" scaled_csi_sm.shape ", scaled_csi_sm[index].shape) if csidata.fc.size > index: print(" fc ", csidata.fc[index]) print(" dur ", csidata.dur[index]) print(" addr_src ", stringify(csidata.addr_src[index], ":")) print(" addr_des ", stringify(csidata.addr_des[index], ":")) print(" addr_bssid ", stringify(csidata.addr_bssid[index], ":")) print(" seq ", csidata.seq[index]) print(" payload ", stringify(csidata.payload[index], " "))
def read_bf_fileB(csifile): csidata = csiread.CSI(csifile, Nrxnum=3, Ntxnum=2, pl_size=0, if_report=False) csidata.read() return csidata