CSI数据dat文件转换mat文件问题(matlab、python数据处理)

用intel5300网卡提取csi数据,得到的数据是dat文件,我们在数据处理时一般先将dat文件转换成mat文件。

将dat文件转换成mat文件,可以根据matlab版本和数据量大小选择mat file的版本,matlab-预设-常规-MAT-FILE保存格式(3种选择)。不同版本的mat文件处理速度和后续处理方法不同。

Matlab处理过程:

csi_trace= read_bf_file('C:\Users\...\XXX.dat');
csi_amp1=get_csi_function(csi_trace);
save('C:\Users\...\XXX','csi_amp1');

注意:csi_amp1这个名字后面处理的时候会用到。

------------------------------------------------------------------------

function csi_amp=get_csi_function(csi_trace)
row = size(csi_trace,1);%get the row number of csi_trace

for m=1:row    
    csia=get_scaled_csi(csi_trace{m});
    csi=csia(:).';  
    for ki=1:270    %3*3*30
           csi_amp(m,ki)=csi(ki);    
    end

end

 

Python处理过程:

1.低版本mat文件

import scipy.io

data  = scipy.io.loadmat(r'C:\Users\...\XXX.mat')

In[1]:data

Out[1]:

后续可利用abs求复数模值。

2.高版本mat文件

高版本的mat文件,在python中读取时不能用scipy.io.loadmat()。

报错NotImplementedError: Please use HDF reader for matlab v7.3 files。

改用data_1=h5py.File(),输出的变量格式与上面不同,

In[2]:type(data_1)

Out[2]: h5py._hl.files.File

In[3]:print(list(data_1.keys()))

Out[3]: ['csi_amp']

In[4]: csi_complex = np.array(data_1[csi_name[0]])

In[5]:print(csi_complex)

Out[5]: array([[(  1.05561743,  -8.4449394 ), (  3.71679437,   7.43358875),…,( -9.91358644,  -2.08707083)],[],[],…[]],dtype=[('real', '<f8'), ('imag', '<f8')])

问题:

之前的scipy.io.loadmat()生成的数据就是复数的形式

不是复数没有办法用pow abs等函数,转换的方法如下:

In[6]:csi_complex.dtype='complex128'

Out[6]:array([[1.05561743-8.4449394j,...,-9.91358644-2.08707083j],[],[],…,[]])

In[7]:csi_complex.shape

Out[7]: (270, 50898)

后续可利用abs求复数模值。

  • 4
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值