第一章 LTE物理层概述:从系统架构到资源网格
各位同学,大家好。我是你们的老朋友,一个在无线通信领域摸爬滚打十几年的老兵。今天咱们正式开始《4G基带物理层链路仿真》的第一章。说实话,每次带新人,我第一件事就是让他们把物理层在协议栈里的位置搞清楚。为什么?因为很多仿真跑不通,根源就在于对“物理层到底该干什么”没概念。
这一章,咱们不搞虚的。我会带着大家把LTE物理层的骨架搭起来:系统架构长什么样?OFDM和SC-FDMA到底怎么选?帧结构里的时频资源怎么用?这些都是后续仿真代码的基石。我个人习惯,学新东西先看整体框架,再抠细节。所以,咱们先画一张图,把本章的知识脉络理清楚。
1.1 LTE系统架构:一张网,三个核心
LTE的网络架构,说白了就是“一张扁平化的IP网”。跟3G时代那种复杂的树形结构比,LTE简化了很多。我当年从WCDMA转到LTE时,第一感觉就是:清爽!
整个系统由三大部分组成:
- UE(用户设备):就是你的手机、CPE、数据卡。它负责跟基站通信,把数据发上去或者收下来。
- eNodeB(基站):这是LTE的核心网元。它集成了原来3G里NodeB和RNC的功能。我在项目中遇到过,很多新手搞不清eNodeB到底管什么——它既要处理无线资源调度,又要做用户面数据转发,还要管移动性管理。说白了,它就是个“小全能”。
- EPC(核心网):包括MME(移动性管理实体)、S-GW(服务网关)、P-GW(PDN网关)。MME管信令,S-GW管用户数据,P-GW负责连接外部网络。
物理层在哪儿?就在UE和eNodeB之间的Uu接口上。我们做基带仿真,模拟的就是这段无线链路上的信号处理过程。
重点理解:物理层不关心你发的是微信消息还是视频流,它只负责把比特流变成无线信号发出去,再把收到的信号还原成比特流。这就是我们仿真的核心任务。
1.2 物理层在协议栈中的位置
LTE的协议栈分三层:L1(物理层)、L2(MAC/RLC/PDCP)、L3(RRC/NAS)。物理层在最底层,上面是MAC层。
我给大家画个简单的对应关系:
- MAC层:负责调度、HARQ、逻辑信道到传输信道的映射。它告诉物理层“你在这个子帧用哪些资源块,用什么调制方式”。
- 物理层:负责编码、调制、MIMO处理、OFDM信号生成、射频发射。说白了,MAC层下指令,物理层干活。
做仿真时,我们通常从MAC层拿到传输块(Transport Block),然后模拟物理层的整个处理流程。嗯,这里要注意:仿真中我们经常需要假设MAC层的调度结果,比如分配了多少RB、用了什么MCS。这些参数在真实系统中是动态变化的,但仿真时可以固定下来,方便验证算法。
个人经验:我建议初学者先从“单用户、固定调度”的场景开始仿真。别一上来就搞多用户调度和链路自适应,容易把自己绕晕。先把物理层的编解码、调制解调、OFDM收发跑通,再逐步加复杂度。
1.3 OFDM与SC-FDMA基本原理
下行用OFDM,上行用SC-FDMA。为什么这么设计?
OFDM(正交频分复用):把宽带信道分成多个正交的子载波。每个子载波带宽15kHz,数据在子载波上并行传输。好处是抗多径能力强,频谱利用率高。我当年调试一个OFDM接收机时,遇到过频偏导致子载波间干扰的问题,折腾了两天才发现是本地振荡器频率没对准。所以,做OFDM仿真,频偏估计和补偿是必修课。
SC-FDMA(单载波频分多址):上行用的多址方式。它本质上还是OFDM的框架,但多了个DFT预编码。为什么要加这个?因为OFDM的峰均比(PAPR)太高,手机发射功率有限,高PAPR会导致功放效率低、电池耗电快。SC-FDMA通过DFT扩展,把时域信号的峰均比降下来。说白了,就是让手机发信号时更省电。
两者的核心区别,我列个表:
| 特性 | OFDM(下行) | SC-FDMA(上行) |
|---|---|---|
| 调制方式 | 每个子载波独立调制 | DFT扩展后映射到子载波 |
| 峰均比(PAPR) | 高 | 低(约低3-6dB) |
| 接收机复杂度 | 相对简单(FFT即可) | 需要IDFT解预编码 |
| 适用场景 | 基站发射(功率不受限) | 手机发射(电池受限) |
避坑指南:我曾经在仿真上行链路时,直接把下行OFDM的代码拿过来用,结果PAPR高得离谱,功放模型怎么调都不对。后来才意识到,上行必须加DFT预编码。所以,写仿真代码时,上下行的信号处理流程一定要分开。
1.4 帧结构与资源网格
LTE的帧结构,是物理层仿真的“坐标系”。所有信号都在这个时频网格里排布。
基本参数:
- 一个无线帧长度:10ms
- 一个帧包含10个子帧,每个子帧1ms
- 一个子帧包含2个时隙,每个时隙0.5ms
- 一个时隙在常规CP下包含7个OFDM符号(索引0-6)
- 一个资源块(RB)在频域占12个子载波(180kHz),时域占1个时隙
资源网格怎么理解?你想想看,把时间轴切成一个个OFDM符号,把频率轴切成一个个子载波。每个时频格点就是一个资源单元(RE)。一个RE可以承载一个调制符号(QPSK、16QAM、64QAM等)。
在仿真中,我们通常用三维数组来表示资源网格:
- 维度1:子载波索引(0到N_RB*12-1)
- 维度2:OFDM符号索引(0到13,一个子帧内)
- 维度3:天线端口索引(0到N_ant-1)
举个例子,20MHz带宽(100个RB),常规CP,一个子帧的资源网格大小就是:1200子载波 × 14符号 × 天线端口数。
仿真关键:资源映射是物理层仿真的核心步骤。你要把PDSCH(物理下行共享信道)、PDCCH(物理下行控制信道)、参考信号等,按照协议规定的位置,填到资源网格里。我见过不少仿真代码,资源映射搞错了,结果解调出来的数据全是错的。
下面给一段简单的Python代码,演示如何生成一个空的资源网格,并在指定位置填入数据:
import numpy as np
# 参数配置
N_RB = 100 # 资源块数量(20MHz)
N_sc_per_RB = 12 # 每个RB的子载波数
N_sym_per_slot = 7 # 每个时隙的OFDM符号数(常规CP)
N_slots_per_subframe = 2
N_ant = 2 # 2天线端口
# 生成资源网格:子载波 x 符号 x 天线
grid = np.zeros((N_RB * N_sc_per_RB,
N_sym_per_slot * N_slots_per_subframe,
N_ant), dtype=complex)
# 假设在子载波索引0-11,符号索引0-1,天线0上填入QPSK数据
data = np.random.randn(12, 2) + 1j * np.random.randn(12, 2)
grid[0:12, 0:2, 0] = data
print("资源网格形状:", grid.shape)
print("填充区域数据:", grid[0:2, 0:2, 0])
这段代码虽然简单,但它是所有资源映射操作的基础。后续章节中,我们会在这个网格上填充同步信号、参考信号、控制信道、数据信道等。
1.5 小结与仿真思路
这一章,我们把LTE物理层的“世界观”建立起来了。从系统架构到协议栈,从多址技术到帧结构,再到资源网格。这些概念,是后续所有仿真模块的基石。
我个人习惯,在开始写仿真代码前,先画一张“信号处理流程图”,把发射机和接收机的每个模块列出来。比如:
- 发射机:CRC添加 → 信道编码 → 速率匹配 → 加扰 → 调制 → 层映射 → 预编码 → 资源映射 → OFDM调制 → 加CP
- 接收机:去CP → FFT → 信道估计 → 均衡 → 解资源映射 → 解预编码 → 解调 → 解扰 → 速率解匹配 → 信道译码 → CRC校验
这张图,就是咱们这门课30章的目录。后续每一章,都会深入讲解其中一个模块的原理和仿真实现。
学习建议:别急着跑完整的链路仿真。先把每个模块单独仿真验证,比如单独写一个OFDM调制解调的仿真,看看星座图对不对。模块验证通过了,再拼起来。我曾经带过一个学生,一上来就想跑完整链路,结果出了错根本不知道是哪个模块的问题。后来我让他拆开调试,三天就搞定了。
好了,第一章就到这里。记住:物理层仿真的本质,就是在资源网格上做“编码→调制→映射→发射→接收→解映射→解调→译码”的循环。把这个循环搞明白,后面的路就好走了。
公众号:蓝海资料掘金营,微信deep3321