Esempio n. 1
0
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()
Esempio n. 2
0
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)
Esempio n. 3
0
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))
Esempio n. 4
0
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
Esempio n. 5
0
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)
Esempio n. 6
0
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
Esempio n. 7
0
 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
Esempio n. 8
0
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()
Esempio n. 9
0
    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))
Esempio n. 10
0
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)
Esempio n. 11
0
    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)
Esempio n. 12
0
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:
Esempio n. 13
0
#!/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, ":")
Esempio n. 14
0
    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)
Esempio n. 15
0
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], " "))
Esempio n. 16
0
def read_bf_fileB(csifile):
    csidata = csiread.CSI(csifile, Nrxnum=3, Ntxnum=2, pl_size=0, if_report=False)
    csidata.read()
    return csidata