如何使用MatLab对CSI的相位进行矫正

目录

一、前言

二、操作步骤

1、处理的大致过程

2、解卷绕

3、线性变换

4、MATLAB代码实现

三、实验结果


一、前言

目前大部分基于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);

3833efa1271a40d5aebc7b8a0ec0d427.png

当2.1415与-3.1415之间超过阈值π后视为发生跳变,将-3.1415加上或减去2*pi,这里加上2π,得到3.1417,再用2.5025与3.1417相比,两者相差小于π,故不进行解卷绕,以此类推。 

3、线性变换

(1)线性变换算法公式和大致步骤如下所示:

77338df7ac02424eabdefaa706b96ebc.png

(2)下图为不同带宽的子载波索引序列,可按照自己的实际需求来选取,我这里选择的是20MHz的带宽对应的子载波索引序号。

7c9a3829e569464984f68986d26036f3.png

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)可以看出处理前的相位毫无规律可言,处理后的相位集中分布,说明了线性变换的有效性。

24f76f9dea5c4d1d837c3b2f46a3c7ed.png

 (2)1500个数据包的1500*30个子载波的相位矫正结果如下图所示:01e66b91c5ad4700b61f3cef2c879fa1.png

dcc8a9f58d6a410da391a4a49594a495.png

如有对室内定位之CSI指纹定位感兴趣的,可参考博主往期文章:室内定位之CSI指纹定位_数产小黑娃的博客-CSDN博客

创作不易,感谢支持,您的支持是我进步最大的动力!!!

目前已发现文章抄袭,甚至连变量都不改的,希望支持原创,抄袭文章链接:使用MATLAB进行CSI数据处理_一定要早睡早起呀的博客-CSDN博客

 

  • 12
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值