精细估计载波频率偏移

就是说 使接收机的系统时钟与发射机的系统时钟同步,同时还要考虑信号在信道中传 输所造成的延时。
再者,需要精确估计接收信号的载波频率偏移(Carrier FrequencyOffsets,CFO),因为没有两个振荡器的频率能够完全相同,两天线 之间必定会有载波频偏。

1、描述

fOffset = wlanFineCFOEstimate(rxSig,cbw)返回给定的时域L-LTF [1]采样rxSig和信道带宽cbw,得出载波频率偏移(CFO)的精确估计。

fOffset = wlanFineCFOEstimate(rxSig,cbw,corrOffset)在给定相关偏移corrOffset的情况下返回估计的频率偏移。

2、输入参数

rxSig 接收到的信号

包含L-LTF的接收信号,指定为NS-by-NR矩阵。 NS是L-LTF中的样本数,NR是接收天线的数。
如果rxSig中的样本数大于L-LTF中的样本数,则不使用尾随样本来估计载波频率偏移。

cbw 信号带宽

Channel bandwidth in MHz, specified as ‘CBW5’, ‘CBW10’, ‘CBW20’, ‘CBW40’, ‘CBW80’, or ‘CBW160’.

corrOffset 相关偏移

相关偏移是L-LTF循环前缀的一部分,指定为从0到1的实标量。短训练符号的持续时间随带宽而变化。

3、输出参数

fOffset 频率偏移

以Hz为单位的频偏,以实数形式返回。

4、L-LTF

传统长训练字段(L-LTF)是802.11™OFDM PLCP传统前导码中的第二个字段。 L-LTF是VHT,HT和非HT PPDU的组成部分。


信道估计,精细频率偏移估计和精细符号定时偏移估计依赖于L-LTF。

L-LTF由循环前缀(CP)和两个相同的长训练符号(C1和C2)组成。 CP由长时间训练符号的后半部分组成。

L-LTF持续时间随信道带宽而变化。

5、示例

精细估算载波频率偏移

% 创建非HT配置对象
nht = wlanNonHTConfig;% 生成非HT波形
txSig = wlanWaveformGenerator([1;0;0;1],nht);% 创建一个相位和频率偏移对象,并引入一个2 Hz频率偏移
pfOffset = comm.PhaseFrequencyOffset('SampleRate',20e6,'FrequencyOffset',2);
rxSig = pfOffset(txSig);% 提取L-LTF并估计频率偏移
ind = wlanFieldIndices(nht,'L-LTF');
rxlltf = rxSig(ind(1):ind(2),:);
freqOffsetEst = wlanFineCFOEstimate(rxlltf,'CBW20')%      freqOffsetEst = 2.0000

估计和校正VHT波形的CFO

估计通过嘈杂的TGac通道的VHT信号的频率偏移。 校正频率偏移。

% 创建一个VHT配置对象并创建L-LTF
vht = wlanVHTConfig;
txltf = wlanLLTF(vht);% 将采样率设置为与VHT配置对象的默认带宽相对应
fs = 80e6;% 创建TGac和热噪声通道对象。 将AWGN通道的噪声系数设置为10 dB
tgacChan = wlanTGacChannel('SampleRate',fs, ...'ChannelBandwidth',vht.ChannelBandwidth, ...'DelayProfile','Model-C','LargeScaleFadingEffect','Pathloss');noise = comm.ThermalNoise('SampleRate',fs, ...'NoiseMethod','Noise figure', ...'NoiseFigure',10);% 将L-LTF通过嘈杂的TGac通道
rxltfNoNoise = tgacChan(txltf);
rxltf = noise(rxltfNoNoise);% 创建一个相位和频率偏移对象,并引入一个25 Hz的频率偏移
pfoffset = comm.PhaseFrequencyOffset('SampleRate',fs,'FrequencyOffsetSource','Input port');
rxltf = pfoffset(rxltf,25);% 使用0.6的相关偏移量精确估算频率偏移量。 您的结果可能会略有不同
fOffsetEst = wlanFineCFOEstimate(rxltf,vht.ChannelBandwidth,0.6)
% fOffsetEst = 28.0773% 校正估计的频率偏移
rxltfCorr = pfoffset(rxltf,-fOffsetEst);% 估计校正信号的频率偏移
fOffsetEstCorr = wlanFineCFOEstimate(rxltfCorr,vht.ChannelBandwidth,0.6)
% fOffsetEstCorr = 1.2514e-13% 校正后的信号具有可忽略的频率偏移。

两步CFO估计和校正

分两步估算并校正明显的载波频率偏移。 完成所有校正后,估计频率偏移。

% 设置通道带宽和相应的采样率
cbw = 'CBW40';
fs = 40e6;% 粗频率校正
% 生成HT格式配置对象
cfg = wlanHTConfig('ChannelBandwidth',cbw);% 生成发射波形
txSig = wlanWaveformGenerator([1;0;0;1],cfg);% 创建TGn和热噪声通道对象。 将接收器的噪声系数设置为9 dB
tgnChan = wlanTGnChannel('SampleRate',fs,'DelayProfile','Model-D', ...'LargeScaleFadingEffect','Pathloss and shadowing');
noise = comm.ThermalNoise('SampleRate',fs, ...'NoiseMethod','Noise figure', ...'NoiseFigure',9);% 使波形通过TGn通道并增加噪声
rxSigNoNoise = tgnChan(txSig);
rxSig = noise(rxSigNoNoise);% 创建一个相位和频率偏移对象,以引入载波频率偏移。 引入2 kHz频率偏移
pfOffset = comm.PhaseFrequencyOffset('SampleRate',fs,'FrequencyOffsetSource','Input port');
rxSig = pfOffset(rxSig,2e3);% 提取L-STF信号以进行粗略的频率偏移估计。
istf = wlanFieldIndices(cfg,'L-STF');
rxstf = rxSig(istf(1):istf(2),:);% 对频率偏移进行粗略估计。 您的结果可能会有所不同。
foffset1 = wlanCoarseCFOEstimate(rxstf,cbw)
foffset1 = 2.0221e+03% 校正估计的偏移量
rxSigCorr1 = pfOffset(rxSig,-foffset1);% 精细频率校正
% 提取L-LTF信号以进行精细偏移估计
iltf = wlanFieldIndices(cfg,'L-LTF');
rxltf1 = rxSigCorr1(iltf(1):iltf(2),:);% 对校正后的信号进行精细估算
foffset2 = wlanFineCFOEstimate(rxltf1,cbw)
% foffset2 = -11.0795% 校正后的信号偏移从2000 Hz降低到大约7 Hz。
% 校正剩余的偏移量。
rxSigCorr2 = pfOffset(rxSigCorr1,-foffset2);% 确定经过两次校正的信号的频率偏移。
rxltf2 = rxSigCorr2(iltf(1):iltf(2),:);
deltaFreq = wlanFineCFOEstimate(rxltf2,cbw)
% deltaFreq = -2.0700e-11
% The CFO is zero.

wlanFineCFOEstimate 详解相关推荐

  1. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  2. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

  3. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  4. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

  5. 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法

    深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...

  6. CUDA之nvidia-smi命令详解---gpu

    nvidia-smi是用来查看GPU使用情况的.我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下. ...

  7. Bert代码详解(一)重点详细

    这是bert的pytorch版本(与tensorflow一样的,这个更简单些,这个看懂了,tf也能看懂),地址:https://github.com/huggingface/pytorch-pretr ...

  8. CRF(条件随机场)与Viterbi(维特比)算法原理详解

    摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...

  9. pytorch nn.LSTM()参数详解

    输入数据格式: input(seq_len, batch, input_size) h0(num_layers * num_directions, batch, hidden_size) c0(num ...

最新文章

  1. Android ViewPager嵌套ViewPager滑动冲突处理方法
  2. 从地址字符串获取省市区信息
  3. cocos2dx[3.2](18)——屏幕截图ScreenShot
  4. ElasticSearch服务器操作命令
  5. HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置。...
  6. java简易日历程序报告_简单的日历小程序(java编写)
  7. Vivado 约束文件XDC使用经验总结
  8. vld不输出泄漏信息_UV固化设备不单单只有灯管!还有哪些辅动部件?
  9. maven下设置默认jdk版本和maven项目构建默认使用jdk版本
  10. 都说比特币无价值,涨得不合理;但你知道比特币最大的用途吗?
  11. Windows下MySql主从配置实战教程
  12. SEO搜索引擎优化二十八条经验建议
  13. Python可视化编辑,让Python 不再难懂
  14. 把实体 转为json 数据格式---jackson 的详细用法_Jackson快速入门
  15. IDW空间插值法matlab,基于IDW对PM2.5进行空间插值及可视化
  16. 最全HTTP协议详解
  17. 长安沦陷国家破碎,只有山河依旧,
  18. Pytorch内存泄漏Memory Leak
  19. python使用aip库识别图片中文字
  20. Keil的安装及使用

热门文章

  1. 微软服务器什么时候能好啊,微软想崛起,tm先把服务器弄好吧
  2. 网页特效php代码,html网页特效代码有哪些
  3. 科技计算机公司怎么做账,高新技术企业账务处理要怎么进行
  4. 使用jquery的accordion实现手风琴效果菜单树
  5. sr650服务器 支持100兆,ThinkSystem SR650 - 联想服务器配置参数
  6. 科普: 4G太慢? 你对网速有误解!
  7. Vista下输入法的使用
  8. 淘宝如何选词打造黄金标题?构词规则是什么?
  9. 2018年10月计算机专业英语自考真题,自考试卷:2018年10月00012英语(一)自考真题及答案...
  10. Linux中单引号双引号的区别与用法