基于MATLAB的信道状态信息处理
1.理论基础
CSI(Channel State Information):信道状态信息(物理层);
CSI是CFR的采样版本,无线信道常常用信道冲击响应(Channel Impulse Response,CIR)建模。CIR可以表示为:
其中q为第/条多径分量的幅度袞减,0为第/条多径分量的相位偏移而I为第/条 多径分量的时间延迟。iV为多径分量的总数。5〇〇为Dirac脉冲函数。在频域上, 多径传播在频域上表现为频率选择性袞落,因此也可以通过将CIR进行傅里叶变 换得到的信道频率响应(ChannelFrequencyResponse,CFR)刻画多径传播,CIR和CFR可以用来诠释多径响应,遂也可被应用于描述信道。
一般来说,当我们需要准确的测量CIR及CFR时,一般需要专业的仪器来进行处理,但D.Halperin通过对固件进行修改,使一般商用WIFI设备上也能以CSI的方式获取一个采样版本的CFR,这些CSI数据釆自于无线网卡得到的接收数据包中,每组CSI包含了一个OFDM f载波的幅度信息和相位信息:
在WiFi网络中,信号通过OFDM调制的方式进行传播,每个信号都是通过多个子载波进行传 输,CS1表征了发射机和接收机之间的通信链路的特性,它不仅体现无线信号在发射机和接收机之间传 播过程中的衰减情况,还反映了信号在传输过程中遇到的散射和折射等情况。在频域空间中,信道状态 信息通过幅度和相位进行描述 。
2.执行内容
clc,clear csi_trace = read_bf_file('C:\Users\默党\Desktop\1\matlab\data\static_4.dat'); global x global m m=3; x=100;% x是一个全局变量,表示数据包个数 for L=1:x %取100个数据包的数据 csia=get_scaled_csi(csi_trace{L}); for i=1:1 %1个发射天线 for j=1:3 %3个接收天线 for k=1:30 %30个子载波数据 B(i,j,k)=csia(i,j,k);%收集数据 temp1(i,j,k) = 0; if k>m||k==m double sum; sum = 0; for p=1:m temp1(i,j,k) = temp1(i,j,k)+p*csia(i,j,k-m+1); sum = p + sum; end B(i,j,k) = 1/sum*temp1(i,j,k); end end end end temp=db(abs(squeeze(B).'));%暂存,用于将数据降维收成一个数组 sample(L,:)=temp(:,3)';%选取其中一列 end %Y1 = hampel(sample,2,1.4); Y2 = medfilt2(sample); %plot(sample)%输出 plot(sample)%输出 hold on xlabel('采样数据包'); ylabel('幅度 [dB]');
3.执行结果
尚未进行处理的原始信号
M=3的时候经过加权移动平均低同滤波的信号
M=4时经过加权移动平均低通滤波的信号
4.结论
最初使用的中值去除杂波方法效果不是很明显并且处理过程复杂。
后来更改成了加权平均法,对每个点进行加权平均,从而得到了目前相对比较令人满意的结果。而且我还发现,当M=4到7时对杂波去除的效果是最佳的,过大或过小的数字都会导致信号的过滤效果不好。
另外,我们还使用了部分MATLAB自带的过滤方法,比如hampel和medfilt2,也都取得了非常不错的效果。