用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求复数模值。