当前位置: 首页 > news >正文

用简单仿真链路产生 WiFi CSI(不依赖专用工具箱,matlab实现)

此文章利用matlab实现简单仿真链路产生WiFi CSI的过程,不依赖专用工具箱,旨在让新手小白能更直观地清除WiFi CSI的产生机理,方便后续研究。此篇文章只做简单的仿真,更深入的请自己手动采数据或者移步别处。

目录

一、准备工作

二、基本参数设置

三、构造训练OFDM符

四、多径瑞利信道

五、逐天线时分发射并接收

六、CSI信道估计

七、幅值和相位可视化

八、模拟与真实对比


一、准备工作

首先,需要明确以下目标和参数:

1、定义OFDM与MIMO参数:例如 20 MHz、64点FFT、52个有效子载波、CP长度16、发射/接收天线数Nt​,Nr​。

2、构造训练符(LTF替身):在实际802.11n/ac里用 HT-LTF/HE-LTF 获取CSI。为简洁,我们用“逐天线正交时分训练”(每次只开一个Tx,其他静默),这样在接收端就能直接做 \widehat{H}(k)=Y(k)/X(k)

3、信道建模:给每个r,t 链路一个多径瑞利衰落脉冲响应H_{r,t}[n](可选多普勒/CFO/采样偏差)。

4、通过信道发送:对每个发射天线把OFDM训练块加CP后发送,经每个H_{r,t}卷积并在各接收端相加,再叠加AWGN。

5、接收处理:去CP、FFT→得到 Y_{r}(k)

6、估计CSI:对当前“激活”的发射天线 t,做 \widehat{H}_{r,t}(k)=Y_{r}(k)/X_{t}(k)。顺次激活所有发射天线,拼成N_{r}\times N_{t}\times N_{sc}的CSI张量。

7、(可选)插值/平滑与LMMSE:多符号或导频内插;也可做子载波方向的Wiener平滑提升SNR。

二、基本参数设置

Nt = 2;                  % 发射天线数
Nr = 2;                  % 接收天线数
Nfft = 64;               % FFT点数(802.11a/n 20MHz)
Ng   = 16;               % 循环前缀长度
subc_idx = [-26:-1 1:26];% 52个有效子载波(跳过DC)
Nsc = numel(subc_idx);
Es  = 1;                 % 训练符平均功率
SNRdB = 25;              % 接收端SNR(可改)

三、构造训练OFDM符

用BPSK全已知子载波(实际LTF有特定序列,这里只需“已知且非零”即可)

Xfull = zeros(Nfft,1);
trainSymbols = (2*(randi([0 1],Nsc,1))-1); % BPSK +/-1
trainSymbols = sqrt(Es)*trainSymbols;      % 调整功率
Xfull(subc_idx + (subc_idx<0)*Nfft + 1) = trainSymbols;  % 映射到FFT bins
x_time = ifft(ifftshift(Xfull), Nfft);     % IFFT(使用ifftshift对齐DC)
tx_ofdm = [x_time(end-Ng+1:end); x_time];  % 加CP
Ns = length(tx_ofdm);

四、多径瑞利信道

瑞利衰落信道(Rayleigh fading channel)是一种无线电信号传播环境的统计模型。这种模型假设信号通过无线信道之后,其信号幅度是随机的,即“衰落”,并且其包络服从瑞利分布。这一信道模型能够描述由电离层和对流层反射的短波信道,以及建筑物密集的城市环境。

% 设定一个离散PDP
tapDelays = [0 1 3 5 7];          % 以采样点为单位的延迟
tapPowers_dB = [0 -3 -6 -9 -12];  % 功率谱
tapPowers = 10.^(tapPowers_dB/10);
L = tapDelays(end)+1;% 为每个链路生成独立脉冲响应
h = cell(Nr,Nt);
for r = 1:Nrfor t = 1:Nth_rt = zeros(L,1);for l = 1:numel(tapDelays)amp = sqrt(tapPowers(l)/2)*(randn+1j*randn);h_rt(tapDelays(l)+1) = amp;endh{r,t} = h_rt;end
end

五、逐天线时分发射并接收

Y = zeros(Nr,Nt,Nfft);  % 保存每次接收的频域符
noiseVarLin = Es/Nsc * 10^(-SNRdB/10);for t = 1:Nt% 当前仅开启第t根发射天线,其它静默txSig_t = tx_ofdm;% 通过信道到各接收天线并叠加噪声for r = 1:Nryr = conv(txSig_t, h{r,t});yr = yr(1:Ns); % 对齐长度(忽略尾符泄露,训练符足够长可避免IS I)% 加噪yr = yr + sqrt(noiseVarLin/2)*(randn(size(yr))+1j*randn(size(yr)));% 去CP、FFTy_noCP = yr(Ng+1:Ng+Nfft);Yfreq = fftshift(fft(y_noCP, Nfft));Y(r,t,:) = Yfreq; % 保存end
end

六、CSI信道估计

Hhat = zeros(Nr,Nt,Nsc); % 只保留有效子载波
Xused = Xfull(subc_idx + (subc_idx<0)*Nfft + 1); % 已知训练符频域值for t = 1:Ntfor r = 1:NrYrt = squeeze(Y(r,t,:));              % Nfft x 1Yused = Yrt(subc_idx + (subc_idx<0)*Nfft + 1);Hhat(r,t,:) = Yused ./ Xused;         % LS估计end
end

七、幅值和相位可视化

使用abs函数获取幅值,使用angle函数获取相位。

k = 1:Nsc;
H11 = squeeze(Hhat(1,1,:));
figure; plot(k, 20*log10(abs(H11))); grid on; xlabel('子载波索引'); ylabel('幅度(dB)');
title('估计CSI幅度(r=1,t=1)');
figure; plot(k, angle(H11)); grid on; xlabel('子载波索引'); ylabel('相位(rad)');
title('估计CSI相位(r=1,t=1)');

八、模拟与真实对比

模拟产生的CSI幅值:

真实产生的CSI幅值:

模拟产生的CSI相位

真实产生的CSI相位:

博主的每篇博文都是用心去写的,喜欢的可以多多支持和收藏,创作不易,未经作者允许,请勿转载或者抄袭。看WiFi指纹定位,我只认准全村第二帅和数产小黑娃,如外站有抄袭,记得点点举报!

关于WiFi 指纹定位迷茫的童鞋可以参考博主以前文章:WiFi指纹定位发论文求生指南——浅论WiFi指纹定位的前世今生与毕业困境-CSDN博客

http://www.dtcms.com/a/359133.html

相关文章:

  • 面试tips--MyBatis--<where> where 1=1 的区别
  • 如何查看Linux系统中文件夹或文件的大小
  • 【LeetCode - 每日1题】有效的数独
  • SQLSugar 快速入门:从基础到实战查询与使用指南
  • MySQL 在 CentOS 上的安装与配置文件路径详解
  • 【系列06】端侧AI:构建与部署高效的本地化AI模型 第5章:模型剪枝(Pruning)
  • 【LeetCode - 每日1题】鲜花游戏
  • 深度学习:洞察发展趋势,展望未来蓝图
  • Verilog 硬件描述语言自学——重温数电之典型组合逻辑电路
  • 深度学习通用流程
  • 用更少的数据识别更多情绪:低资源语言中的语音情绪识别新方法
  • nestjs连接oracle
  • 大模型备案、算法备案补贴政策汇总【广东地区】
  • SNMPv3开发--snmptrapd
  • CNB远程部署和EdgeOne Pages
  • More Effective C++ 条款18:分期摊还预期的计算成本(Amortize the Cost of Expected Computations)
  • 数据库的CURD
  • Shell 秘典(卷三)——循环运转玄章 与 case 分脉断诀精要
  • C语言类型转换踩坑解决过程
  • Java高并发架构核心技术有哪些?
  • 安装Redis
  • compute:古老的计算之道
  • 【ROS2】ROS2 基础学习教程 、movelt学习
  • Docker实战避坑指南:从入门到精通
  • plantsimulation知识点 多条RGV驮一台工件图标显示顺序问题
  • lumerical_FDTD_光源_TFSF
  • 【AI】【强化学习】强化学习算法总结、资料汇总、个人理解
  • php连接rabbitmq例子
  • SpringCloud学习笔记
  • 大模型应用开发面试全流程实录:RAG、上下文工程与多Agent协作技术深度解析