Hands-on Wireless System (Summer 2024)

基于软件无线电的无线通信系统实践 (2024年小学期)

Course Description

The goal of this course is to give students hands-on experience in the design, implementation and evaluation of an OFDM wireless communication system through the ADI Pluto software defined radio. Students will learn through lab driven experiments on software defined radios, and build a real-time system supporting real applications.

本课程为厦门大学信息学院信息与通信工程系的《专业方向性实践(二)》课程,是为高年级通信专业本科生开设。旨在通过指导同学们在软件无线电平台上完成一个实时无线通信系统(包括物理层、链路层与应用层),提升同学们对通信系统的理解,同时也提升同学们的动手实践能力。

本课程内容主要参考Princeton大学Kyle Jamieson教授的《COS463: Wireless Networks》课程、UIUC大学Haitham Hassanieh教授的《ECE463: IoT and Software Defined Radio Lab》课程。结合厦大实际情况,确定了如下的课程内容与方式:

(1)基于ADI Pluto的软件无线电与Python编程语言设计课程内容。学生们在大三上的《通信原理》课程上已熟悉ADI Pluto软件无线电平台,学生们在大三下《专业方向性实践(一)》课程上已熟悉Python语言。虽然Python语言在信号处理效率上远不及C语言或者FPGA的Verilog语言,但是上手容易,而我们的系统实时性要求不高;与Matlab比起来,Python更容易搭建实时系统。

(2)基于OFDM技术组织课程内容。与传统的数字调制方式(ASK/PSK/FSK)比起来,OFDM会更复杂。但是考虑到OFDM技术已被主流的通信系统(包括无线与水声)所采纳,是前沿技术,也是很多新波形设计的基础。此外,如何处理通信系统的实际因素,比如多径信道、Time Offset、Carrier Frequency Offset,都能通过OFDM系统很好的展示出来。因此本课程以WiFi 802.11a系统为例,通过讲解OFDM的原理与实现细节,贯穿数字通信基本知识(比如信道、调制、编码)。

(3)采取通信与网络相结合的方式。传统的通信类实践课程往往关注物理层设计,较少涉及MAC层、链路层、网络层、传输层,不能全面体现一个完整的通信系统。基于软件无线电平台提供的全栈开发能力,本课程引入MAC协议、链路层可靠传输协议(自动请求重传协议)、虚拟网卡(TUN/TAP)的技术开发框架,使学生能够对通信系统有全面的理解。

(4)采用阶梯式开发方式。本课程设计了两个实验,一个大项目,贯穿整个学期。各个环节相互依赖,比如第二个实验依赖第一个实验的结果,大项目依赖前两个实验的结果,将难度分解到平时的各个环节,确保学生能够在期末实现一个有完整度的实时通信系统。

Course Info

Time & Location:

Instructor: Lizhao You (lizhaoyou [AT] xmu.edu.cn)

Office Hours: Monday/Wednesday, 13:30-14:30 (西部片区6号楼103-7)

Lab TA:

Prerequisties: basic knowledge of

Contents

Grading

Reference Books

市面上目前没有完全契合本课程的教科书,采用自编讲义形式。注意本课程没有细致的实验指导手册,只有实验目标与粗略的步骤,本课程的目标就是希望同学们根据课上所学原理自己摸索实现完整通信系统。

主要有以下参考书:

相关材料将在内部课程群发布。

Schedule

Subject to change as material progresses and unforseen events

Week Date Lectures Labs Notes
1 June 24 (morning) Lec1: Intro / Lec2: SDR Lab0: SDR
June 26 (morning) Lec3: OFDM PHY I (Frame Sync) Lab1: Frame Sync
2 July 1 (morning) Lec4: OFDM PHY II (Principles) Lab2: OFDM PHY Lab1 Deadline
July 3 (morning) Lec4: OFDM PHY II (Principles) Lab2: OFDM PHY
3 July 8 (morning) Lab2: OFDM PHY
July 8 (afternoon) Lab2: OFDM PHY
July 10 (morning) Lab2: OFDM PHY Lab2 Deadline
July 10 (afternoon) Lec5: SDR DLC/System Project: SDR System
4 July 15 (morning) Project: SDR System Quiz1
July 15 (afternoon) Project: SDR System
July 17 (morning) Project: SDR System
July 17 (afternoon) Project: SDR System
5 July 24 Project Deadline

Collaboration Policy

The labs and project may be on individuals or a team of three members. The following policy applies to an individual for an individual lab or a team for a team lab/project.

Programming, like composition, is an individual creative process. Individuals must reach their own understanding of the problem and discover a path to its solution. During this time, discussions with friends are encouraged. However, when the time comes to write the code that solves the problem, such discussions are no longer appropriate; the program must be your own work.

Do not, under any circumstances, copy another person's program, comments, README description, or any part of the submitted assignment. This includes character-by-character transliteration of another works (whether inspected visually or copied digitally), but it also includes derivative works (i.e., by renaming variable names or subtly shifting around statements in order to try to hide that copying has occurrred). You are also not allowed to use other people's code, comments, or results, even when “citing” them – all work must be your own. This includes work done by other XMU students this or past semesters, as well as any other code you find online.

Writing code for use by another or using another's code in any form is academic fraud and will be dealt with firmly according to XMU's disciplinary policies. You are also responsible for ensuring that the code you write for the assignments is not readable by others, which includes sharing with students in future years or posting publicly on websites like github.

简化版: