【笔记3】获取csi文件,并用MATLAB处理

利用MATLAB对csi数据进行分析与获取,参照网站 http://dhalperi.github.io/linux-80211n-csitool/faq.html 的第二部分 How do I process CSI with MATLAB or Octave?以下过程全在MATLAB中进行。


首先是包含csi数据的文件存放位置,参考前面的install instruction。新版的安装指南:linux-80211n-csitool-supplementary/netlink/目录下的csi.dat ;旧版的安装指南:linux-80211n-csitool-supplementary/netlink目录下的tmp.dat。将该文件拷到win 7能识别的地方,我们在win 7中用MATLAB对该文件进行操作。

示例中的csi文件是log.all_csi.6.7.6,以后替换为tmp.dat或csi.dat即可。

先将MATLAB目录转到linux-80211n-csitool-supplementary/matlab , 在命令窗口输入:csi_trace = read_bf_file('sample_data/log.all_csi.6.7.6'); 发现read_bfee出错。原因是网站只提供了32位(.mexw32)版本的read_bfee,而我的电脑是win7 64位的。要想利用read_bfee函数需要自己生成64位(.mexw64)版的。这里涉及到MATLAB与c联合编程的问题。

环境:MATLAB 2010b(更新的版本也行) ,visual studio 2010 (用VC 6.0会不兼容,不建议使用)

进行相关配置后输入:(参考网站; http://blog.sina.com.cn/s/blog_468651400100coas.html )

mex -setup    .....用于c编译器的选择,选择vs2010即可

..... .... 一些默认的设置(该部分若不清楚,百度“如何生成mex文件”即可)

mex read_bfee.c

最后生成read_bfee.mexw64

注意该部分会遇到编译不通过的情况,是由于vs 2010要求的语法格式与网站中的read_bfee.c有所不同。用codeblocks等gcc编译器就不会出现问题(但MATLAB与gcc编译器的绑定有些麻烦,不予考虑)(vs2010中不允许在程序主体部分再定义变量,所以将read_bfee.c中所有变量的定义移到函数开始阶段。即需要在程序的首部把该定义的变量都定义了)

附上编译出错的图片:

【笔记3】获取csi文件,并用MATLAB处理_第1张图片


将read_bfee.c稍作更改再编译,最后成功生成read_bfee.mexw64文件,以后可以直接调用read_bfee.



后续的操作按照网站中的来,我利用同学的小型Tp-link路由器得到数据;

csi_entry =

   timestamp_low: 1.0139e+009

      bfee_count: 2

              Nrx: 3

              Ntx: 1

          rssi_a: 39

          rssi_b: 28

          rssi_c: 12

           noise: -85

              agc: 20

            perm: [1 2 3]

            rate: 2311

             csi: [1x3x30 double]


生成的图形:

【笔记3】获取csi文件,并用MATLAB处理_第2张图片


Q&A:换一个路由器测得Ntx不为1,此时再用网站中的squeeze等作图会出错,关于Ntx的定义还不是很明确。

猜想:Ntx相当于发送天线的个数,Nrx相当于接收天线的个数。

你可能感兴趣的:(【笔记3】获取csi文件,并用MATLAB处理)