学习笔记——OFDM仿真课设
说明
本学期的通信原理课程设计,要做一个OFDM调制解调的仿真,现在基本上理解了OFDM调制的过程,并且参照实验平台上的代码,自己仿写了个简化突出的代码,因此,梳理一下思路,写个小小总结,方便后面写课设报告之用,也希望能方便其他OFDM初学者。
本文简要介绍OFDM原理和优势,并利用数学公示推导,着重讨论IFFT相关内容,参考《移动通信 第五版》(其实也有很多地方没看懂或者觉得有错,这里写的仅是我的理解内容)。
本人也是OFDM初学者,可能有些地方理解不到位或者错误,希望各位老哥在线交流~
1.OFDM简介
OFDM全称正交频分复用,是一种高级的频分复用的调制技术。相对于传统FDM,它的频谱利用率更高,抗干扰能力更强。其基本思路是:
将串行数据并行,将并行的数据分别调制到各自的载波上去,且这些载波是正交的,然后合成各个已调的载波信号成为已调信号;在接收端,收到已调信号后,分别乘以对应的载波信号后积分,由于正交性,只有与自己相乘后积分才不为零,可以分别解调出对应的数据。
两大明显优势:
- 正交载波 ,由于载波正交,因此即便是载波间有重叠,也能还原出各载波信号。
图1 FDM&OFDM
- 串行数据并行化,串行数据传输过程中,一个比特数据错误,可能导致很大的前后误差,而并行数据传输就不一样了。
图2 OFDM原理框图
2.OFDM原理
串行原始数据,单个码元长度tst_{s}ts,将串行数据分组,一组N(载波数)个,Ts=N∗tsT_{s}=N*t_{s}Ts=N∗ts,N个子载波:fn=f0+n∗Δf,n=0,1,2,…N−1f_{n}=f_{0}+n*\Delta f,n=0,1,2,…N-1fn=f0+n∗Δf,n=0,1,2,…N−1;
载波间隔取 Δf=1/Ts=1/(N∗ts)\Delta f = 1/T_{s}=1/(N*t_{s})Δf=1/Ts=1/(N∗ts); d(n)d(n)d(n)即并行的一组的N个数据,用以给N个载波进行调制;
由上图OFDM原理框图可知:
OFDM实际发射的信号:
D(t)=∑n=0N−1d(n)∗cos(2πfnt)(1.1)D(t)=\sum_{n=0}^{N-1}d(n)*cos(2\pi f_{n}t)\tag{1.1}D(t)=n=0∑N−1d(n)∗cos(2πfnt)(1.1)
在接收端也是接收信号D(t)D(t)D(t),乘以对应的频率后积分有:
d′(k)=∫0TsD(t)∗2cos(wkt)dt=∫0Ts∑n=0N−1d(n)2cos(wkt)2dt=d(k)d^{'}(k)=\int_{0}^{T_{s}}D(t)*2cos(w_{k}t)dt=\int_{0}^{T_{s}}\sum_{n=0}^{N-1}d(n)2cos(w_{k}t)^{2}dt=d(k) d′(k)=∫0TsD(t)∗2cos(wkt)dt=∫0Tsn=0∑N−1d(n)2cos(wkt)2dt=d(k)
补充:正交性:如果f(t)与g(t)正交f(t)与g(t)正交f(t)与g(t)正交
∫f(t)∗g(t)dt=0\int f(t)*g(t) dt=0 ∫f(t)∗g(t)dt=0
因此通过正交性能够恢复出原始信号。
实现OFDM一般在产生叠加的已调信号的时候有两种方法:
(1)叠加法 (2)IDFT 法。
2.1叠加法
很简单,就是单纯的将各个载波调制的信号加起来,也就是式子(1-1)所表达内容,这里就不赘述了。
2.2IDFT
一般为了更加高效的调制,通常会进行一些数字调制、多进制调制,如QPSK、16QAM等,通过幅度和相位进行保存数据信息来进行调制。
D(t)=∑n=0N−1A(n)∗cos(2πfnt+ϕn)=∑n=0N−1A(n)cos(ϕn)cos(2πfnt)−A(n)sin(ϕn)sin(2πfnt)=∑n=0N−1a(n)cos(2πfnt)−b(n)sin(2πfnt)D(t)=\sum_{n=0}^{N-1}A(n)*cos(2\pi f_{n}t+\phi_{n}) \\ =\sum_{n=0}^{N-1}A(n)cos(\phi_{n})cos(2\pi f_{n}t)-A(n)sin(\phi_{n})sin(2\pi f_{n}t)\\ =\sum_{n=0}^{N-1}a(n)cos(2\pi f_{n}t)-b(n)sin(2\pi f_{n}t) D(t)=n=0∑N−1A(n)∗cos(2πfnt+ϕn)=n=0∑N−1A(n)cos(ϕn)cos(2πfnt)−A(n)sin(ϕn)sin(2πfnt)=n=0∑N−1a(n)cos(2πfnt)−b(n)sin(2πfnt)
写成复数形式如下:
D(t)=Re[∑n=0N−1(a(n)+jb(n))∗ej2πfnt](1.2)D(t)=Re[ \sum_{n=0}^{N-1}(a(n)+jb(n))*e^{j2\pi f_{n}t}] \tag{1.2} D(t)=Re[n=0∑N−1(a(n)+jb(n))∗ej2πfnt](1.2)
根据数字调制里面的知识,原始序列d(n)d(n)d(n)经过映射成为a(n)+jb(n)a(n)+jb(n)a(n)+jb(n),也就是星座图里面的实轴、虚轴值。
图3 a,b分别对应I,Q轴的值
由于d(n)映射成a(n)+jb(n)d(n)映射成a(n)+jb(n)d(n)映射成a(n)+jb(n),故而式子(1.2)可写成下面形式:
D(t)=Re[∑n=0N−1d(n)∗ej2πfnt](1.3)D(t)=Re[ \sum_{n=0}^{N-1}d(n)*e^{j2\pi f_{n}t}] \tag{1.3} D(t)=Re[n=0∑N−1d(n)∗ej2πfnt](1.3)
将fn=f0+Δff_{n}=f_{0}+\Delta ffn=f0+Δf带入上式有:
D(t)=Re[∑n=0N−1d(n)∗ej2πf0t∗ej2πnΔft]D(t)=Re[ \sum_{n=0}^{N-1}d(n)*e^{j2\pi f_{0}t}*e^{j2\pi n\Delta ft}]\\ D(t)=Re[n=0∑N−1d(n)∗ej2πf0t∗ej2πnΔft]
如果对D(t)D(t)D(t)以采样频率FsFsFs进行采样得到离散序列:
D(m)=Re[∑n=0N−1d(n)∗ej2πf0m/Fs∗ej2πnΔfm/Fs](1.4)D(m)=Re[ \sum_{n=0}^{N-1}d(n)*e^{j2\pi f_{0}m/Fs}*e^{j2\pi n\Delta fm/Fs}] \tag{1.4} D(m)=Re[n=0∑N−1d(n)∗ej2πf0m/Fs∗ej2πnΔfm/Fs](1.4)
若Δf/Fs=1/N,即Fs=NΔf=N∗1/Ts=N∗1/(N∗ts)=1/ts\Delta f/Fs=1/N ,\\即Fs =N\Delta f=N*1/T_{s}=N*1/(N*t_{s})=1/t_{s}Δf/Fs=1/N,即Fs=NΔf=N∗1/Ts=N∗1/(N∗ts)=1/ts,则(1.4)可写为:
D(m)=Re[∑n=0N−1d(n)∗ej2πf0m/Fs∗ej2πnm/N]=Re[∑n=0N−1IDFT(d(n))∗ej2πf0m/Fs]=Re[∑n=0N−1IDFT(d(n))](若f0=0)(1.5)D(m)=Re[ \sum_{n=0}^{N-1}d(n)*e^{j2\pi f_{0}m/Fs}*e^{j2\pi nm/N}] \tag{1.5}\\=Re[ \sum_{n=0}^{N-1}IDFT(d(n))*e^{j2 \pi f_{0}m/Fs}]\\=Re[ \sum_{n=0}^{N-1}IDFT(d(n))] (若f_{0}=0) D(m)=Re[n=0∑N−1d(n)∗ej2πf0m/Fs∗ej2πnm/N]=Re[n=0∑N−1IDFT(d(n))∗ej2πf0m/Fs]=Re[n=0∑N−1IDFT(d(n))](若f0=0)(1.5)
IDFT定义为: x(n)=∑k=0N−1X(k)ej2πnk/N=IDFT(X(k))x(n)=\sum_{k=0}^{N-1}X(k)e^{j2\pi nk/N}=IDFT(X(k))x(n)=∑k=0N−1X(k)ej2πnk/N=IDFT(X(k))
因此,可用并行序列的数字调制映射的IDFT得到叠加后的时域信号的采样的离散信号。当采样频率足够高,满足奈奎斯特速率,即可无失真,不损失频率分量,可见IDFT的可行高效。
3.OFDM仿真结果
进行MATLAB仿真,可得如下结果:
图4 四个载波时域图
图5 载波频谱(16QAM)
图6 两种方法的合成信号对比
4.Problem
1.为什么IDFT法得到的合成波形和叠加法的波形差别比较大?
答:IDFT得到的波形是连续信号的采样,可用通过对叠加法以同样频率采样得到信号在与IDFT的信号比较,不出意外,应该是相同的。
我也是刚刚写博客才想到这个问题的可能答案,还没来得及写代码验证,稍后有时间我会写代码看看。
2.前面分析IDFT里面采样频率Fs=NΔfFs=N\Delta fFs=NΔf,而合成信号最大频率是fmax=f0+NΔff_{max}=f_{0}+N\Delta ffmax=f0+NΔf,并不满足Fs>2fmaxF_{s}>2f_{max}Fs>2fmax,何解?
学习笔记——OFDM仿真课设相关推荐
- HTML4基本编译原理,Stanford公开课《编译原理》学习笔记(1~4课)
课程里涉及到的内容讲的还是很清楚的,但个别地方有点脱节,任何看不懂卡住的地方,请自行查阅经典著作<Compilers--priciples, Techniques and Tools>(也 ...
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第二十一课:Cocos2D-X网格特效1-3
[麦可网]Cocos2d-X跨平台游戏开发---学习笔记 第二十一课:Cocos2D-X网格特效1-3 ================================================ ...
- Qt 5.9.5学习笔记第三节课
Qt 5.9.5学习笔记第三节课 学习目标 1.Qt资源图标添加和使用 1.1添加资源文件 1.2qmake让资源文件生效 1.3修改widget应用程序窗口ICO 1.3.1第一种方法 1.3.2 ...
- VGGNet学习笔记及仿真
VGGNet学习笔记及仿真 文章目录 VGGNet学习笔记及仿真 引言 VGGNet论文笔记 VGGNet架构 参数详解 创新点 训练细节 结果 代码实现 Visualize a few images ...
- 大数据学习笔记第1课 Hadoop基础理论与集群搭建
大数据学习笔记第1课 Hadoop基础理论与集群搭建 一.环境准备 二.下载JDK 三.安装JDK 四.下载hadoop 五.安装hadoop集群 六.打通3台服务器的免密登录 七.hadoop集群配 ...
- 深度学习笔记第一门课第一周:深度学习引言
本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...
- 珍大户《认知世界的经济学》学习笔记 --第19课 时间补偿 第20课 利率 国债 MLF SLF OMO 利率
珍大户<认知世界的经济学>学习笔记 – 第五章 第19课 时间补偿 文章目录 珍大户<认知世界的经济学>学习笔记 -- 第五章 第19课 时间补偿 把钱借给国家 通货膨胀程度 ...
- 【金字塔Python量化学习笔记】01课:利用Python导出价格数据
作为一个交易员,一直都想学Python量化,无奈文科生一个,根本不懂编程,看了vn.py的教程头大了,买了课但一直都学不下去.最近看了看金字塔的Python量化系统,感觉还可以,代码编写没那么难,我P ...
- kitti之ros可视化_学习笔记--第1课:资料准备及环境介绍
概要:本系列笔记,记录的是使用kitti数据集在ros可视化操作,并案例方式进行介绍.在开始本系列课程学习之前,交代清楚一些所需要的材料. 0.环境及工具 ubuntu16.04,ros-kineti ...
最新文章
- NeurIPS 2019 少样本学习研究亮点全解析
- 关于cocos2d的下载和安装
- A Router may have only one child element
- maven 多模块项目关系
- 使用Java程序通过http post访问ABAP Netweaver服务器
- php图片旋转显示不出来的,php – 我服务的图像不正确,它们都显示为旋转90度
- leetcode 【 Sort List 】 python 实现
- k8s从入门到放弃--使用kubeadm快速安装kubernetes
- JavaScript判断office的版本
- 使用python构建基于hadoop的mapreduce日志分析平台
- poedit 图文教程 转载
- b站视频怎么引流?b站做什么视频有流量?b站流量引流技巧
- phpstorm如何找回删除的文件
- ABAP ALV上的红绿灯状态
- Markov blanket 马尔科夫毯子
- 代码中的软件工程:正则表达式十步通关
- 第3章 Linux内核调试手段之内核打印
- Java连接sqlserver数据库,并进行增删改查操作
- jinja2中if和for的使用
- 420个生活小窍门,很有用的哦!
热门文章
- 为什么今天不写技术文章
- oc引导win方法_Win10安装Mac os双系统引导过程总结2020
- 美国计算机加音乐专业,史上最全的美国大学音乐学院专业解析
- iOS开发-类似微信录音上滑取消功能
- 使用vivado调用自定义IP的两种方法
- 腾讯会议:资源加载失败请重新安装程序解决方案
- 前端笔记—从入门到坟墓[网站基础与优化][12.1]
- python实验中遇到的问题及解决方法_Python中遇到的小问题及解决方法汇总
- Idea中文件图标发生变化,导致文件显示出现异常
- css3边框圆角、背景