目录

  • 1. CSI相位信息
  • 2. 线性相位去噪(两步:解卷绕+线性变换)
  • 3. 相位校准效果
  • 4. CSI线性相位去噪的python实现

1. CSI相位信息

  测量到的第i个子载波上的CSI相位信息θ~i\tilde{\theta}_{i}θ~i​:
θ~i=θi+2πKiΔtN+β+Zf\tilde{\theta}_{i}=\theta_{i}+\frac{2 \pi K_{i} \Delta t}{N}+\beta+Z_{f} θ~i​=θi​+N2πKi​Δt​+β+Zf​其中θi\theta_{i}θi​为真实相位,Δt\Delta tΔt为定时误差偏移(或者说时延),β\betaβ是设备引起的随机相位偏移,ZfZ_{f}Zf​是测量过程中的随机噪声。KiK_{i}Ki​是子载波索引(在IEEE 802.11n中范围是[-28,28]),N为FFT点数,N = 64.

2. 线性相位去噪(两步:解卷绕+线性变换)

目的:去除上式中中间两项。
  对于接收器,等式中间两项噪声在传输期间保持不变,线性相位去噪引入仅与真实相位相关,并对于每个子载波传输期间一致的变量值:
a=θ~n−θ~1Kn−K1b=1n∑i=1nθ~i\begin{aligned} a &=\frac{\tilde{\theta}_{n}-\tilde{\theta}_{1}}{K_{n}-K_{1}} \\ b &=\frac{1}{n} \sum_{i=1}^{n} \tilde{\theta}_{i} \end{aligned} ab​=Kn​−K1​θ~n​−θ~1​​=n1​i=1∑n​θ~i​​其中θ~\tilde{\theta}θ~是原始相位,n一般为30,去噪后的相位为:
θ^i=θ~i−aki−b=θi−θn−θ1Kn−K1Ki−∑i=1nθin\hat{\theta}_{i}=\tilde{\theta}_{i}-a k_{i}-b=\theta_{i}-\frac{\theta_{n}-\theta_{1}}{K_{n}-K_{1}} K i-\frac{\sum_{i=1}^{n} \theta_{i}}{n} θ^i​=θ~i​−aki​−b=θi​−Kn​−K1​θn​−θ1​​Ki−n∑i=1n​θi​​
由于采集的CSI信号周期范围为[−π,π][-\pi, \pi][−π,π],临界点π和π处会发生反相。为获得对应的30个子载波的均匀分布,在线性变换之前首先得unwrap30个子载波的相位

(a)原始相位→(b)接卷绕相位→(c)线性去噪后的估计相位

3. 相位校准效果

参考论文《PhaseFi: Phase Fingerprinting for Indoor Localization with a Deep Learning Approach》

4. CSI线性相位去噪的python实现

实验用的一发三收HT20,代码针对一发三收的数据流,是以前参照widar2.0相位去噪思路写的,感觉效果差不多

import numpy as nppi = np.pi# 注意,ant_csi的维度为1*F*T
def CSI_sanitization(one_csi, two_csi, three_csi):M = 3  # 天线数量3N = 30  # 子载波数目30T = one_csi.shape[1]  # 总包数fi = 312.5 * 2  # 子载波间隔312.5 * 2csi_phase = np.zeros((M, N, T))for t in range(T):  # 遍历时间戳上的CSI包,每根天线上都有30个子载波csi_phase[0, :, t] = np.unwrap(np.angle(one_csi[:, t]))csi_phase[1, :, t] = np.unwrap(csi_phase[0, :, t] + np.angle(two_csi[:, t] * np.conj(one_csi[:, t])))csi_phase[2, :, t] = np.unwrap(csi_phase[1, :, t] + np.angle(three_csi[:, t] * np.conj(two_csi[:, t])))ai = np.tile(2 * pi * fi * np.array(range(N)), M)bi = np.ones(M * N)ci = np.concatenate((csi_phase[0, :, t], csi_phase[1, :, t], csi_phase[2, :, t]))A = np.dot(ai, ai)B = np.dot(ai, bi)C = np.dot(bi, bi)D = np.dot(ai, ci)E = np.dot(bi, ci)rho_opt = (B * E - C * D) / (A * C - B ** 2)beta_opt = (B * D - A * E) / (A * C - B ** 2)temp = np.tile(np.array(range(N)), M).reshape(M, N)csi_phase[:, :, t] = csi_phase[:, :, t] + 2 * pi * fi * temp * rho_opt + beta_optantennaPair_One = abs(one_csi) * np.exp(1j * csi_phase[0, :, :])antennaPair_Two = abs(two_csi) * np.exp(1j * csi_phase[1, :, :])antennaPair_Three = abs(three_csi) * np.exp(1j * csi_phase[2, :, :])return antennaPair_One, antennaPair_Two, antennaPair_Three

用采集的数据验证效果:

线性去噪后每条子载波上能比较真实得反映出真实相位的变化情况。

杂文笔记(三):CSI的线性相位去噪及其python实现相关推荐

  1. 【DSP数字信号处理学习笔记】—— 线性相位的四种类型的推演以及来龙去脉

    我们知道线性相位就是相位是一次函数的关系,当然这里面还细分成了严格的线性相位和非严格的线性相位.那么他们究竟是怎么来的呢?我们今天来推导一下,同时,我们将会给出一种如何用时域信号通过对称性的关系计算除 ...

  2. Windows内存管理学习笔记(一)—— 线性地址的管理

    Windows内存管理学习笔记(一)-- 线性地址的管理 用户空间线性地址的管理 实验一:理解用户空间线性地址管理 Private Memory 实验二:理解Private Memory 堆 实验三: ...

  3. activiti 设置可选处理人_新品速递|高端系列!慧明DF系列线性相位处理专业音箱处理器...

    2020年对很多人来说,是特别艰难的一年,一场新冠疫情,可谓把整个演艺行业压得喘不过气,但是尽管如此,我们仍坚决相信行业将会很快复苏,一切终将迎来新的生机与活力.2020年初,哪怕是最困难的时期,我们 ...

  4. 在matlab中实现累乘,如何利用matlab设计一个线性相位FIR带通滤波器,并在FPGA上实现...

    设计要求 利用matlab设计一个线性相位FIR带通滤波器,并在FPGA上实现. 1.滤波器指标:过渡带带宽分别为100~300HZ,500~700HZ,阻带允许误差为0.02,通带允许误差为0.01 ...

  5. 计量经济学学习与Stata应用笔记(三)Stata入门实例

    计量经济学学习与Stata应用笔记(三)Stata入门实例 使用的版本为stata15. 电力行业规模报酬的经典研究 本例为Nerlove(1963)对电力行业规模的经典研究. 导入数据 Excel的 ...

  6. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  7. tensorflow学习笔记(三十二):conv2d_transpose (解卷积)

    tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...

  8. 【机器学习】SVM学习(三):线性分类器的求解

    [机器学习]SVM学习(三):线性分类器的求解 2016-10-10 19:56 239人阅读 评论(0) 收藏 举报 本文章已收录于:  机器学习知识库  分类: 机器学习(37)  目录(?)[+ ...

  9. Ethernet/IP 学习笔记三

    Ethernet/IP 学习笔记三 原文为硕士论文: 工业以太网Ethernet/IP扫描器的研发 知网网址: http://kns.cnki.net/KCMS/detail/detail.aspx? ...

最新文章

  1. Activiti——工作流程-核心API(二)
  2. FACTORY设计模式【让吃货也能理解的程序】
  3. 使用Nessus漏扫
  4. 网站页面相关性从五个方面进行判断
  5. 碎片Fragment
  6. netcore docker_让.NetCore程序跑在任何有docker的地方
  7. 2038: [2009国家集训队]小Z的袜子(hose)
  8. 内核怎么帮程序建立连接的
  9. 【Kafka】Kafka如何开启SSL 控制台消费与生产 代码消费与生产
  10. 被外包程序员植入了后门程序,触发后删除数据库但他们死不承认,该怎么办?...
  11. ImageFieldFile:XXXX is not JSON serializable
  12. Java设计模式之四 ----- 适配器模式和桥接模式
  13. 学前教育怎么利用计算机思维,乐高教育全新推出编程启蒙小火车锻炼孩子计算机思维...
  14. 个人笔记上传 -- linux简单命令
  15. 计算机上的放大快捷键,电脑放大镜热键 怎么取消电脑放大镜快捷键?
  16. ovf导入虚拟服务器,云主机 导入 ovf
  17. java tt自行车_骑行圈的知识科普:“大组车”和“TT”车的区别
  18. 龙芯平台OsTools-Gmac更新
  19. 三年级计算机绘画第二课堂教案,美术第二课堂计划讲解.docx
  20. 在阿里云开通SSL后,网站PING不通!再说一下 阿里云的服务响应和体验真心的太差!!你们有没有同感?

热门文章

  1. Imint CEO:相机视频将进入元宇宙建设之路新阶段
  2. 计算机网络在电力系统继电保护的应用毕业论文,电力系统继电保护技术及其维护管理毕业论文.doc...
  3. Python 设计签名
  4. 长沙医学院及计算机排名,长沙医学院排名2021 湖南排名第24全国排名第608
  5. 非接触式IC卡中的射频识别技术
  6. Skype录音答录机编程思路和代码
  7. Ubuntu20.04配置ORB_SLAM2及简单运行
  8. Android ViewPager复用调研
  9. java 制作简易日历_Java简易日历的实现
  10. 基于socket实现虚拟手柄使用手机控制电脑游戏(下)-手机端虚拟手柄