文章目录
近期实验需要搭建一个软件无线电环境平台,在琢磨一段时间后,以下是对之前的实验总结一下。
实验平台
- 硬件:笔记本2台,USRP N310两台,及辅助天线等
- 软件:在Ubuntu系统下安装Gnuradio3.7
实验前提,USRP能与电脑建立收发通信
USRP-OFDM发送端框架
利用Socket PDU模块与外部程序建立TCP连接,通过外部程序向9090端口发送数据从而写入发送端,经PDU to Tagged Stream将协议数据转换为byte格式数据,再经过CRC32给数据加上循环冗余校验码,再分两路生成数据头部和数据载荷部分,分别进行BPSK与QPSK映射,通过Tagged Stream Mux模块组装在一起,然后经过OFDM调制部分,分别进行载频子波分配、加入导频系列、加入同步字与循环前缀,再通过Multiply Const进行约束,防止波形发生非线性失真,Tag Gate模块抑制标记符号向下传递,最后通过UHD:USRP Sink 模块连接硬件设备,对数据进行DAC转换,数字变频发送到环境空间。
发送端模块简介
Socket PDU:与外部程序建立socket连接,对整个流图进行数据输入。
PDU to Tagged Stream:将协议数据转化为固定长度byte类型数据,并给数据加上长度标记。
Stream CRC32:给数据尾部加上32位(4字节)循环冗余校验-----信道编码。
Protocol Formatter:利用数据头生成对象创建一个6字节的数据头,包含数据帧长度,当前数据帧号等。
Repack Bits:对数据进行重新打包,8bits一组转换为2bits一组或者1bit一组的数据,为后续进行BPSK、 QPSK映射,此过程不存在数据bit丢失。
Chunks to Symbols:根据Symbol Table将byte数据进行浮点数或者复数映射,byte型数据转换为复数型数 据。
Tagged Stream Mux:将头部BPSK符号与载荷QPSK符号组装在一起进行OFDM调制。
OFDM Carrier Allocator:OFDM子载波分配,分配数据子载波,导频子载波,同步子载波,直流子载波。
FFT:对分配后的子载波进行傅里叶变换,完成OFDM调制。
OFDM Cyclic Prefixer:给OFDM加入循环前缀,防止ofdm符号间干扰(ISI)。
Multiply Const:乘常数模块,乘以小于1的值,限制幅度,防止发送非线性失真。
Tag Gate:阻止标记符号向后延续。
其他参数:
protocol parser: 协议分析器
FEC: 前向纠错编码,送入传输信道之前
MSB: 最高位有效
Becimation: 抽取,转变频率
OFDM符号结构
-
ofdm输出标签:载波偏移,信道均衡系数,数据帧,接收时间
-
ofdm子载波: 左6个子载波[-32,-27],右5个子载波[26,31]为虚拟子载波
不使用载波为0,———减少带外功率,抑制ACI(相邻信道干扰)
- 一个OFDM符号:包含 虚拟子载波 ,直流子载波 ,射频子载波 ,有效数据子载波
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CfNVPpsv-1601025338052)(D:\实验作图记录\OFDM符号结构.jpg)]
以进行64FFT变换为例,总载波个数为64,除去虚拟子载波,直流子载波,射频子载波,剩余有效数据子载波48个,数据头部Head采用BPSK调制,(6 * 8)/1一个符号用一位比特表示,数据载荷加上校验码Payload部分采用QBSK调制,((96+4 )* 8)/2,一个符号用两个比特位表示。数据生成头部加载荷总共需要OFDM符号个数:
( 6 ∗ 8 ) / 1 + ( 96 + 4 ) ∗ 8 / 2 = 448 (6*8)/1 + (96 + 4 )*8 / 2 = 448 (6∗