一、前言
目前大部分基于CSI的无线被动定位方案都只使用CSI的幅值响应信息,忽略了CSI的相位响应信息,因为其原始相位响应信息中含有很大的随机噪声和相位误差。然而,有文献表明,经过校准后的CSI相位对目标位置的变化更为敏感,所以对CSI相位的处理便尤为重要。由于采集到的CSI样本信号,在传输的过程中会受到周围环境的噪声干扰,同时由于硬件限制等原因会产生相位偏移,可以采用一种简单而有效的线性拟合的方法进行相位,消除由于残余的载波频率误差及时钟同步误差造成的相位偏移,以此来获得CSI的真实相位。
二、操作步骤
1、处理的大致过程
原始相位→解卷绕→线性变换→校正后的相位(真实相位)
注:由于CSI的相位存在循环性,提取出的CSI相位是折叠的,因此需要先对CSI相位进行解卷绕,得到解卷绕后的相位后,再对其进行线性变换处理。
2、解卷绕
MATLAB使用unwrap函数进行解卷绕,使相位在pi处不发生跳变,从而反应出真实的相位变化。实际在默认的情况下,unwrap在检查到数据前后两点的差距在超过π的时候,就认为有跳变,当然其阈值也能通过函数设置。
unwrap函数的完整格式:unwrap(pha,tol,dim);
pha可为数列或矩阵,tol为判断的阈值,dim参数可以设置对矩阵的行(1表示列,2表示行)。
a =[2.1415 -3.1415 2.5025 1.7062 1.0361 0.2504 -0.5363 -2.5515 2.9917 2.0832 1.3398]; a_=a'; b=unwrap(a_,pi,1); hold on plot(a_,'b-'); plot(b,'r-'); hold off c=[a_,b]; disp(c);
当2.1415与-3.1415之间超过阈值π后视为发生跳变,将-3.1415加上或减去2*pi,这里加上2π,得到3.1417,再用2.5025与3.1417相比,两者相差小于π,故不进行解卷绕,以此类推。
3、线性变换
(1)线性变换算法公式和大致步骤如下所示:
(2)下图为不同带宽的子载波索引序列,可按照自己的实际需求来选取,我这里选择的是20MHz的带宽对应的子载波索引序号。
4、MATLAB代码实现
%参数说明:H_表示原始相位,F表示解绕缠后的矩阵、H表示矫正后的相位 H_=xlsread('test1.xlsx',1,'A1:AD1'); F=unwrap(H_,pi,2); %F表示解卷绕后的矩阵,判断的阙值为pi,2表示对矩阵每一行进行相位矫正 m=[-28,-26,-24,-22,-20,-18,-16,-14,-12,-10,-8,-6,-4,-2,-1,1,3,5,7,9,11,13,15,17,19,21,23,25,27,28]; H_length=length(H_); %预先分配好内存空间 H=zeros(1,H_length); %线性变换 sum=0; for t=1:30 sum=sum+F(t); end b=(1/30)*sum; k=(F(30)-F(1))/(m(30)-m(1)); for i=1:30 %子载波迭代 H(i)=F(i)-k*m(i)-b; %H表示校正以后的相位,H_表示实际测量的相位,k表示斜率,b表示截距 %res=squeeze(H); end hold on subplot(1,3,1); plot(m,H_,'r-');set(gca,'Xlim',[-30,30]);%原始相位图 title('原始的相位');xlabel('子载波索引');ylabel('相位'); subplot(1,3,2); plot(m,F,'k-'); %解卷绕后的相位图 set(gca,'Xlim',[-30,30]);set(gca,'Ylim',[-25,5]); title('解卷绕之后的相位');xlabel('子载波索引');ylabel('真实测量的相位'); subplot(1,3,3); plot(m,H,'b-'); %真实相位图 set(gca,'Xlim',[-30,30]);set(gca,'Ylim',[-1,1]); title('线性变换之后的相位');xlabel('子载波索引');ylabel('校准的相位'); hold off % disp(H_); % disp(F); % disp(H);
三、实验结果
(1)可以看出处理前的相位毫无规律可言,处理后的相位集中分布,说明了线性变换的有效性。
(2)1500个数据包的1500*30个子载波的相位矫正结果如下图所示:
如有对室内定位之CSI指纹定位感兴趣的,可参考博主往期文章:室内定位之CSI指纹定位_数产小黑娃的博客-CSDN博客
创作不易,感谢支持,您的支持是我进步最大的动力!!!
目前已发现文章抄袭,甚至连变量都不改的,希望支持原创,抄袭文章链接:使用MATLAB进行CSI数据处理_一定要早睡早起呀的博客-CSDN博客