YunSDR通信小课堂-27

ops/2024/12/29 6:27:20/

第11讲 802.11a OFDM基带接收端载波频率同步算法设计与验证

OFDM技术是同时在多个重叠子信道上传输信号的,为了正确接收,必须严格保证子载波之间的正交性,但是由于多普勒频移和收发晶振的不完全相同,往往存在一定的载波频率偏差,这将破坏子载波之间的正交性,且这种频差对相位的影响还具有累加性。因此,为了保证OFDM性能,必须进行载波频率同步。在802.11a中前导允许接收机在实际信息分组部分尚未到达之前,采用最大似然算法估计频率偏移并进行修正。因此,载波同步是利用训练信息完成的。对于802.11a,不管是长训练符号还是短训练符号均满足这种需求。

11.1 实验目的
    学习IEEE802.11a的接收端频偏估计算法,使用Matlab编程语言实现IEEE802.11a基带接收端得的频偏估计算法并验证。通过理论研究,频偏模拟以及实际频偏估计等实验结果的对比,深刻理解频偏的影响以及OFDM系统的频偏敏感特性。

11.2 实验条件

YunSDR平台一套,Matlab软件环境,WiFi频段天线。

11.3 实验要求

使用Matlab搭建IEEE802.11a基带发送端,首先验证OFDM系统的理论抗频偏特性,其次通过模拟频偏来验证理论数据的极限值;最后通过YunSDR将基带信号经过射频发射出去并使用另一台YunSDR(或者一台YunSDR自发自收)进行接收,进行频偏估计,将实际频偏估计值与理论值比较,验证算法的正确性。

11.4 实验原理

IEEE 802.1la WLAN系统的频率同步估计可以从时域上进行估计也可以从频域上进行估计,这种方法要求训练序列至少有两个连续重复的符号,这一点在IEEE 802.1laWLAN系统中其前导部分无论是长、短训练序列都可以满足要求。

在本系统中,我们从时域进行频偏估计,先用短训练序列进行粗频偏估计校正,再用长训练序列进行细频偏估计校正,两种频偏估计的方法类似,这里我们只介绍粗频偏估计。

原理:设s(m,n)(n=1,2…N)表示发送端IFFT变换之后第m个OFDM符号的第n个子载波上采样值,r(m,n)(n=l,2… N)表示接收端FFT变换之前第m个OFDM符号的第n个子载波上的采样值,N为两个连续符号相同采样点之间的延时,Ts为采样时间,f1为发送载波频率,f2为接收载波频率。

其中angle()表示求复数的相角运算。

EEE802.1la系统中,短训练序列符号取样时问为50ns,延时N=16,则可以估计的最大频率误差fmax=1/(2*N*Ts)=1/(2*16*50*10^(-9)),如果使用长训练序列,那么它和短训练序列的唯一区别就是N=64,则长训练序列可以估计的最大频率误差为156.2kHz。虽然用短训练序列进行频偏估计误差比较大,但是其可以估计的范围比较大,这就是我们为什么要先用短训练序列进行粗频偏估计再用长训练序列进行细频偏估计的原因。

11.5 参考设计

此系统的频偏估计分为粗频偏估计与精频偏估计,分别利用了短训练序列和长训练序列,所以理论抗频偏性能分别为20MHz/32=625KHz和20MHz/128=156KHz;但是两种频偏估计的算法一致,只是因为训练序列的长度不同而导致频偏估计的范围不同,这里先使用粗频偏估计估算出大范围的频率偏差,然后用精频偏估计进行小范围的频率偏差的估计。图11-1为两种频偏估计所采用的算法框架图:

 以下Matlab程序为粗频偏估计的代码片段,与框架图算法保持一致。

    D = 16;

    phase = rxsignal(1:16).*conj(rxsignal(17:32));   

    % add all estimates

    phase = sum(phase, 2);   

    freq_est = -angle(phase) / (2*D*pi/20000000);

    radians_per_sample = 2*pi*freq_est/20000000;

    siglen=length(rxsignal(1,:));

    time_base=0:siglen-1;

correction_signal=exp(-j*radians_per_sample*time_base);


http://www.ppmy.cn/ops/145851.html

相关文章

异步线程池中,ThreadPoolTaskExecutor和ThreadPoolExecutor有什么区别?

异步线程池中,org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor和java.util.concurrent.ThreadPoolExecutor有什么区别? org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor 和 java.util.concurrent.ThreadPoolExec…

119.【C语言】数据结构之快速排序(调用库函数)

目录 1.C语言快速排序的库函数 1.使用qsort函数前先包含头文件 2.qsort的四个参数 3.qsort函数使用 对int类型的数据排序 运行结果 对char类型的数据排序 运行结果 对浮点型数据排序 运行结果 2.题外话:函数名的本质 1.C语言快速排序的库函数 cplusplus网的介绍 ht…

程序环境和预处理

程序环境和预处理 1.程序环境1.1如何从test.c到test.exe1.2.翻译环境1.2.1翻译过程1.2.2详细过程 1.3.运行环境 2.预处理2.1 预定义符号2.2 define2.2.1 define定义标识符2.2.2 define定义宏2.2.3 带副作用的宏参数2.2.4 宏和函数的对比 2.3 #undef2.4 命令行定义2.5 条件编译2…

安全筑堤,效率破浪 | 统一运维管理平台下的免密登录应用解析

在信息技术迅猛发展的今天,企业运维管理领域正面临着前所未有的复杂挑战。统一运维管理平台作为集中管理和监控IT基础设施的核心工具,其安全性和效率至关重要。免密登录作为一种新兴的身份验证技术,正逐渐成为提升运维管理效率和安全性的重要…

不同操作系统下安装Node.js及配置环境的详细步骤

以下是在不同操作系统下安装Node.js及配置环境的详细步骤: 一、Windows系统 下载Node.js安装包 访问Node.js官方网站(https://nodejs.org/)。在网站上可以看到有两个版本可供下载:LTS(长期支持版)和Curren…

git自动压缩提交的脚本

可以将当前未提交的代码自动执行 git addgit commitgit squash Git 命令安装指南 1. 创建脚本目录 如果目录不存在,创建它: mkdir -p ~/.local/bin2. 创建脚本文件 vim ~/.local/bin/git-squash将完整的脚本代码复制到此文件中。 3. 设置脚本权限…

无人机图传模块原理及作用

在当今科技飞速发展的时代,无人机已经成为了各个领域的热门工具,从航拍爱好者的创意拍摄到专业的农业植保、测绘勘察等工作,无人机都发挥着重要作用。而在无人机众多的组成部分中,图传模块无疑是极为关键的一个,它让无…

GitLab 将停止为中国区用户提供服务,60天迁移期如何应对? | LeetTalk Daily

“LeetTalk Daily”,每日科技前沿,由LeetTools AI精心筛选,为您带来最新鲜、最具洞察力的科技新闻。 GitLab作为一个广受欢迎的开源代码托管平台,近期宣布将停止服务中国大陆、澳门和香港地区的用户提供服务。根据官方通知&#x…