大项目
检查时间
将于 在 检查08:00-12:00, 24 July 2024 学院4号楼301
检查完毕归还Pluto设备
简介
到目前为止,我们主要在学习物理层,已经设计了帧同步算法和离线OFDM接收机的信号处理模块。在本次实验中,我们将
开始学习链路层,特别是在物理层不可避免出现错误情况下,在链路层实现可靠传输。具体来说,我们将设计两个“收发
机”,其中收发机既有发送模块也有接收模块,并构建两个双向通信的节点。
在实验1与实验2中,同学们已经开发了物理层信号处理的模块,包括发送机与接收机的信号处理。本次大项目就是将前述
实验的开发成果进行集成,完成物理层、链路层、应用层的开发,并实现一个完整的实时无线通信系统,支持图片的可靠传
输。
为了降低难度,大项目有两种提交方式:a) 物理层采用Pluto SDR硬件;b) 物理层依然采用Socket PHY,不过Socket传输
的是基带信号。前者能拿到大项目全部的分数,后者只能拿到大项目全部分数的85%。对于这两种方式,项目都会提供一个
框架代码,同学们只需要在框架代码中实现相应函数即可。对于后者,本实验只是用Socket在本地用来模拟两个收发机的
通信链路,同学们只需要简单的把它抽象成不可靠的通信链路即可。
这两种方式都需要进行基带信号处理,区别就在于修改的Socket PHY会直接传输一个信号块,包括一个帧的全部基带信号
与帧前面有随机添加的噪声。对于Pluto PHY,每次获取的一个信号块不一定保证包括一个完整的数据帧。此外,对于前
者,在Pluto SDR实现实时系统有很多挑战,需要注意优化代码的性能,使得接收模块的处理足够快,否则会发生丢包。
我们将提供了一个基于多线程架构的参考实现,即代码分为链路层(即LLC)和物理层(即PHY),中间使用队列进行交
互。在发送方向上,链路层负责根据协议状态生成帧,然后放入队列,物理层负责发送;在接收方向上,物理层负责接收,
然后放入队列,链路层提取帧更新协议状态。同学们只需要在这个框架内完成一些函数实现,就能完成本次实验。这里 线
是并发编程中的一个基本概念,是一种可以充分利用多核CPU进行处理的方法。程
选项1:基于Pluto SDR实现实时双向通信系统(100%)
第一部分:完成单向 OFDM 发送机(15%)
设置和要求
调制LLC层的数据包,并将基带信号放入 ,然后完成OfdmTx类的 和 。提交你实现的程 tx_queue put() process()
序。(5%)
添加线程 以从 中获取样本,并使用PlutoSDR进行传输。提交你实 tx_sample_queue_watcher_thread tx_queue
现的程序。(5%)
问题:描述单向OFDM发送机的过程。解释控制台输出,并描述它们的作用。 发送机和 发送机之间的 socket pluto
区别是什么?(5%)
提示
你可以使用Lab2中发送机的源代码来开发OfdmTx类中的 函数 process()
的设计类似于 tx_sample_queue_watcher_thread tx_packet_queue_watcher_thread
要使用pluto传输baseband samples,可以调用 sdr_tx.tx(samples)