
GSM这个东西你把它看成一个争分夺秒的调度系统就对了——载频就那么多200kHz一格8个用户还得挤在同一个频点上玩凭什么不打架靠的就是TDMA时隙把时间切成整整齐齐的切片再用突发脉冲把每片时间装成标准包裹最后通过逻辑信道映射告诉每一类消息该去哪个时间格子里排队。这套时间管理机制处理好了叫高效复用处理不好就是时隙错位、干扰爆表、掉话不断。这篇文章不是来考古的而是想把GSM空中接口的时间调度逻辑彻底讲透。无论你是刚入行的通信学生、做网优的工程师还是写基站协议栈的程序员只要你的工作绕不开GSM、GRPS、EDGE这一系就应该把TDMA时隙、突发脉冲、逻辑信道映射这三层东西当成坐标系一样熟练。下面我按自己平时看信令、查问题、整理日志的路径把这套机制从原理到落地完整拆一遍。1. TDMA时隙GSM的时间切分与调度1.1 频率不够用怎么办FDMA加TDMA的双层切分GSM最早设计的时候频谱资源是非常紧张的。比如GSM900上行890-915MHz、下行935-960MHz一共才25MHz带宽一个载频要占200kHz满打满算只有124个频点。一个基站就算全向覆盖一个频点在同一时刻也只能服务一个用户这哪够用所以GSM必须再把频率这个维度之外加上时间维度让多个用户轮流使用同一个频点这就是TDMA的核心思想。你可以这样理解FDMA是给每辆车划分一条车道TDMA是给同一条车道上的车规定红绿灯通行时序。GSM把200kHz的一个载频在时间上切成一个个固定长度的帧每帧再切成8个时隙每个用户在自己的时隙里独占整个200kHz带宽时隙一结束就得让给别人。这样一来一个载频同时可以挂8个全速率用户如果用半速率还能翻倍到16个。这个双层切分的思路后来几乎所有数字蜂窝系统都继承了。WCDMA虽然用的是码分但也保留帧和时隙的概念LTE干脆把时域资源切成OFDM符号。GSM的时隙结构看着简单但它是最早把频率-时间二维资源管理做成工程化产品的一套方案。理解它你再看LTE的资源块RB调度会发现骨子里的逻辑是一脉相承的。1.2 一个TDMA帧有多大4.615毫秒里的精密安排GSM的TDMA帧长是4.615ms分成8个时隙每个时隙156.25bit。这里有个小细节容易把人绕晕为什么时隙长度不是整数比特因为GSM的系统比特率是270.833kbit/s一个时隙的时长是0.577ms算下来是156.25个比特。0.25bit没法单独传它就藏在每个时隙的尾部保护期里所以你在协议上看到的正常突发脉冲是156.25bit但里面有效内容加总起来是148bit最后8.25bit是保护期正好补到156.25。这4.615ms不是随便定的。它要跟语音编码的周期对齐——GSM全速率语音每20ms产生一个语音块4个TDMA帧正好是18.46ms再算上交织、编解码耗时整个空口传输链路的时延就能控制在合理的通话范围内。还有一个指标很关键一个TDMA帧内8个时隙从TS0到TS7每个时隙的起点都精确到比特级。基站侧按这个时钟往下发手机侧也得靠同步把这个时钟恢复出来。往上再叠一层GSM还有复帧结构。控制信道用51复帧一个复帧51个TDMA帧总时长约235ms业务信道用26复帧总时长120ms。51和26相乘等于1326这叫一个超帧时长6.12秒。再往上2048个超帧组成一个超高帧帧号从0到2715647循环。这个超高帧的时间尺度大约是3小时28分里面跑的帧号FN是加密算法和跳频序列的关键入参。提示FN这个参数在做信令分析时经常被忽略但它在加密和跳频里极其重要。A5算法生成密钥流把FN、Kc、方向三个输入一搅出来的才是真正加密的bit流。很多老网优查干扰只盯着频率看忘了跳频序列也是随FN变的结果问题定位跑偏。1.3 时隙编号与定时提前让远端的手机也对得齐每个时隙的编号叫TNTime Number从0到7。基站侧TS0通常留给广播和公共控制信道TS1可能给SDCCH或扩展CCCH剩下TS2到TS7基本都做TCH。但要注意这只是最常见的配置实际组合方式很灵活后面讲逻辑信道映射再细说。时隙调度的核心难点不在编号而在定时提前Timing AdvanceTA。你想手机离基站3km和离基站30km信号在空中跑的时间完全不一样。基站按自己的时钟在TS2发下行同时期望手机在对应时刻附近发上行TS2。可手机如果离得远它发出来的信号要跑很久才到基站如果按它自己收到下行信号的时间直接发上行包到了基站早就错过TS2的窗口撞进TS3了。所以GSM规定手机发送上行数据的时间要比它接收下行帧的时间提前一段这段提前量就是TA。TA的单位是bit1bit对应约3.69μs折算成双向传播距离大约553.5米。TA取值范围0到63所以理论最大覆盖半径大约35km。基站在上行接入和通话过程中持续测量手机信号的到达时间通过SACCH信道下发TA更新命令。这也是为什么网优工程师看TA分布就能大致判断一个小区覆盖半径和越区覆盖情况。2. 突发脉冲每个时隙里装的时间包裹2.1 五种突发脉冲普通、频率校正、同步、接入、空闲时隙只是时间容器真正往里装的东西叫突发脉冲Burst。GSM定义了5种每种的结构和用途都不一样你别看它们都是156.25bit排布方式千差万别。普通突发脉冲NB用得最多TCH、BCCH、CCCH、SDCCH基本都用它。它的结构是3bit尾比特 57bit信息 1bit偷帧标志 26bit训练序列 1bit偷帧标志 57bit信息 3bit尾比特 8.25bit保护期。两个57bit可以分别来自不同逻辑信道比如一边是话音一边是信令中间用偷帧标志来区分。频率校正突发FB只用来发FCCH结构最简单3bit尾比特 142个全0bit 3bit尾比特 8.25bit保护期。手机靠它来粗同步识别到一个全0突发就知道这是频率校正信道然后把自己本振频率校准到基站的载频上。同步突发SB用在SCH上中间是64bit训练序列两边各39bit编码后的同步信息里面携带了TDMA帧号和基站色码BSIC。手机拿到它才能完成时隙同步和帧同步。接入突发AB用在RACH上结构和前面几个差别很大8bit尾比特 41bit同步序列 36bit信息 3bit尾比特 68.25bit保护期。它保护期特别长就是为了让不确定距离的手机第一次接入时即使距离远近差异巨大也不会把下一个时隙撞掉。空闲突发DB是基站填充用的没有实际信息内容。2.2 训练序列接收机用来校准的时间锚点训练序列是我觉得GSM物理层最巧妙的设计之一。26bit的训练序列位于突发正中间收发双方事先约定好一组固定bit模式。GSM定义了8种训练序列基站给每个小区分配一个手机收到后拿本地存储的序列跟接收信号做相关运算从而估计出无线信道的冲激响应。为什么要这么干因为信号从基站到手机不是直接一条直线过来的会经过高楼反射、地面反射形成多径。多径会让一个符号的时延扩展到好几个符号前后比特互相叠加接收机如果你不知道信道长什么样根本没法把0和1从叠加的信号里解出来。训练序列的作用就是给均衡器提供一段已知答案的题目接收机通过对比接收到的训练序列和已知序列的差异反推出信道的多径特性然后用这个估计值去校正后面57bit里的真实数据。实操心得在网优测试里有一个很实用的判断方法——如果某个突发脉冲的训练序列相关峰很平、能量分散基本可以断定该区域多径严重或者同频干扰强。相反如果相关峰非常尖锐说明信道环境很干净。信号质量差的投诉点往往在那个时隙的训练序列上就能看出端倪。2.3 保护期与小区半径8.25比特背后的物理边界普通突发脉冲尾部的8.25bit保护期时长约30.5μs。这段时间里发射机不发送任何内容纯粹作为时隙之间的安全隔离。30.5μs对应电磁波单向传播大约9.1km双向就是4.5km左右。也就是说如果没有TA机制一个小区半径超过4.5km远端手机的上行突发就必然会砸到下一个时隙。但加入TA之后手机发送时间已经提前基站收到的上行突发在时间窗内是对齐的所以8.25bit保护期就不再承担补偿远距离时延的任务它主要留给收发信机开关切换时间和多径残余扩散的余量。真正负责远距离接入的是接入突发里那68.25bit的保护期大概252μs覆盖半径约37.8km这与TA最大35km的理论覆盖基本匹配。这也是为什么GSM的经典理论覆盖半径是35km想覆盖更远就要用扩展小区技术比如把时隙拉长、减少时隙数或者采用特殊的帧偏移。我见过不少刚接触GSM的同事以为把基站功率调大覆盖就能延伸结果越往远处调越容易出上行干扰本质就是没理解保护期和TA的物理边界——下行信号够得到不代表上行突发能在时间窗里被基站正确接收。3. 逻辑信道映射时间资源的路由与调度3.1 逻辑信道家族广播、公共控制、专用控制、业务物理层的时隙和突发脉冲只是运输工具实际传输的内容按功能分成各种逻辑信道。逻辑信道分三大类广播信道BCH负责告诉手机这里是哪个小区、怎么接入公共控制信道CCCH负责处理没有建立专用连接的信令交互专用控制信道DCCH给每个用户分配独立的信令通路。再加上承载话音或数据的业务信道TCH这样整个逻辑信道家族就齐了。广播信道里有FCCH频率校正、SCH同步、BCCH广播控制有时还有CBCH小区广播。公共控制信道包含RACH随机接入上行、AGCH接入允许下行、PCH寻呼下行。专用控制信道包括SDCCH独立专用控制、SACCH慢速随路控制、FACCH快速随路控制。业务信道分全速率TCH/F和半速率TCH/H。这么多信道物理资源只有那么几个时隙怎么办答案就是映射。映射规则从逻辑上规定了哪类逻辑信道占用哪类物理时隙以及在复帧里的哪一帧上出现。比如BCCH一定映射在TS0上SDCCH可以跟CCCH共用TS0TCH则集中在剩下的时隙上。手机开机之后先找FCCH和SCH再读BCCH最后通过CCCH发起接入每一步对应一个逻辑信道顺序严格不能乱。3.2 51复帧与26复帧为什么是这两个神奇的数字逻辑信道映射最核心的载体就是51复帧和26复帧。51复帧用于承载控制信道。为什么是51因为一个逻辑块L2帧或者RLC/MAC块在物理层需要4个连续TDMA帧的同一时隙才能装满51不整除4每轮复帧末尾会留下一些空闲帧这样能保证不同逻辑信道块之间的边界错开避免所有控制信道块在同一个时刻同时到来。在51复帧的TS0上FCCH和SCH成对出现每隔10帧重复一次手机搜索时只要找到FCCH下一个帧基本上就是SCH紧接着读到的就是BCCH或者CCCH块。BCCH和CCCH每个块占连续4帧的TS0多个块轮流排列在51帧周期里。26复帧用于承载业务信道。26帧里前24帧作为TCH业务帧第13帧从0开始编号就是第12帧?给你用SACCH第26帧空闲。算下来SACCH大约每120ms出现一次正好可以用来周期传测量报告和TA、功率控制命令。这两个复帧跟超帧的关系也很漂亮51乘以26等于1326正好是一个超帧。控制平面和用户平面用不同的复帧周期却能在超帧层面完整对齐这让基站的调度器能用一套基准时钟同时管理两种平面的资源分配。3.3 寻呼组与DRX手机怎么在时间片里打盹逻辑信道映射带来的一个直接好处就是手机不用每时每刻都监听下行信道。GSM里PCH寻呼信道按块分配给不同的寻呼组Paging Group手机在位置更新和待机时会计算自己属于哪个寻呼组然后只在属于自己的寻呼块醒来监听。寻呼组数量主要由两个参数决定BS_AG_BLKS_RESCCCH块中保留给AGCH的数量和MFRMS以51复帧数为单位的寻呼周期。打个比方MFRMS设为4意思是手机每4个51复帧才需要醒来一次一个周期约940ms。对于待机状态的手机这个周期配合DRX非连续接收机制省电效果非常明显。苹果和安卓的旧机型在GSM下待机时间差异很大很大程度上就是各家对寻呼监听策略的取舍不同。注意千万别在CCCH的AGCH和PCH块数量配置上乱调。AGCH给少了手机发起呼叫、位置更新的接入就慢PCH块给少了寻呼容量不足来电话容易延迟或者漏呼。这个平衡要靠话务模型算不能拍脑袋。4. 实战图解一条消息的空中时间之旅4.1 开机搜网从扫描频点到读FCCH/SCH把前面三层机制串起来最直观的体现就是手机开机搜网过程。手机第一步扫描整个频段在GSM900里逐个ARFCN听有没有信号。它怎么判断某个频点上有没有GSM小区就是在这个频点上等FCCH。FCCH用的是频率校正突发是一串固定的全0比特调制出来的信号是纯净的单音手机检测到这种特征就锁定这个频点。锁定之后手机下一个TDMA帧读SCH。SB同步突发里携带的是TDMA帧号和BSIC手机拿到帧号就建立起帧同步知道当前是哪一帧哪个时隙。但这时候手机只知道这一个频点有小区还不清楚这个小区具体参数。接下来手机去读BCCH上的系统消息系统消息1到4里包含LAI位置区码、小区频点列表、公共控制信道配置、随机接入参数等等读完手机才真正认识这个小区。整个过程快的话一两秒慢的话要好几秒主要卡在FCCH的检测和系统消息块的接收上。4.2 位置更新RACH、AGCH、SDCCH上的接力手机开机读完系统消息之后如果发现当前位置区跟SIM卡里存的位置区不一样就会触发位置更新流程。这个流程走得非常典型完美展示了逻辑信道映射的接力。手机先在RACH上用接入突发发一条Channel Request申请信令资源。这条消息很短只告诉基站我是某某我想接入。基站在AGCH上回一条Immediate Assignment给手机分配一个SDCCH信道并且告诉它初始TA值。手机随后跳到SDCCH上开始真正的信令交互——发CM Service Request、鉴权、加密模式、位置更新请求。每个步骤都发生在SDCCH这个专用信令信道上一套流程走完可能要几秒。整个过程中SACCH始终伴随SDCCH以慢速随路方式传递测量报告和物理层控制信令。位置更新完成后基站分配一个新的SDCCH时隙给手机继续用或者释放掉让手机回到idle状态去监听PCH。如果你在路测信令里看到Channel Request、Immediate Assignment、Location Updating Request这三个消息连续出现基本就能确认这是位置更新流程。4.3 语音通话一个20毫秒语音块怎么被塞进时间线等到真正打电话了手机就跳到TCH上。GSM全速率语音每20ms产生260bit原始语音参数信道编码后变成456bit。456bit不能直接塞进一个突发——一个突发净荷总共114bit两个57bit所以这456bit必须拆分、交织分散到8个连续TCH突发里发送。这里有个容易误解的点每个语音块不是占用8个时间上连续的突发就完了而是相邻语音块的bit会在同一个突发里交叉。每个突发里的两个57bit分别来自两个不同的语音块。这样做的好处是如果某个突发被干扰打掉了损失的bit只占每个语音块的一部分经过信道解码还有机会纠错恢复。你听到的通话里偶尔咔哒一下往往就是交织和纠错没能完全救回来的结果。从时间上看一个TCH用户占用26复帧中24个业务帧6个20ms语音块正好对应24个突发平均每个语音块分到4个突发但因为交织跨了8个突发抗干扰能力要强得多。这就是为什么GSM在高速移动或信号较弱的时候语音还能保持基本可懂老一代的模拟蜂窝系统在同样条件下早就一片噪音了。5. 常见问题与排查技巧实录5.1 时隙级问题速查表这些年做网络优化和故障排查我总结了一张时隙相关问题的速查表遇到类似现象可以先按这个思路查。现象可能原因排查方向上行高误码但下行正常手机TA不准确或上行干扰核查TA均值、RACH成功率、上行干扰带统计特定时隙掉话集中该时隙TCH信道被干扰或设备硬件故障检查该时隙的BER统计、载频告警、是否跳频全网呼叫建立时延大AGCH块数配置不足或寻呼周期过长核查BS_AG_BLKS_RES和MFRMS参数远处信号满格但无法接入接入突发超出保护期覆盖范围检查TA分布是否接近63覆盖是否越区手机频繁重新选网SCH解码失败或BCCH系统消息块接收失败检查频率干扰、BSIC复用距离这张表不一定覆盖所有场景但能帮你快速圈定问题范围。GSM问题很多时候不是单一的时隙冲突和频率干扰经常同时出现所以查问题的时候别只盯一个维度要把频域、时域一起看。5.2 实战排查经验看TA、看误码、看映射真实项目里我最常用的一个手段是拉出某个小区的TA分布统计。正常覆盖下TA分布应该集中在0到2之间对应1km以内的用户。如果一个小区TA分布拖到五六以上说明覆盖半径过大可能存在越区覆盖如果TA分布很零散、标准差特别大说明小区覆盖地形复杂直放站或者室分泄露可能是元凶。另一个必看指标是训练序列级别的误码统计。GSM接收机会根据训练序列位置做信道估计顺便得到一个关于接收质量的度量这就是RxQual。RxQual为0代表误码率很低为7代表几乎不可用。网优里经常用RxQual分布来评估下行质量但真正细查的时候我会把突发级别的数据拉出来统计每个时隙在复帧周期内的质量波动。如果一个时隙的RxQual时好时坏且跟TA变化绑定在一起多半是移动台快速移动造成的信道估计跟不上。逻辑信道映射这块排查核心是确认配置组合是否合理。比如一个小区如果SDCCH配置成combined with CCCH那它在TS0上的51复帧里既有BCCH、CCCH又有SDCCH容量很有限。遇到位置更新爆发或者短信爆发SDCCH会先拥塞。我处理过一个投诉某商场周末大量用户集中位置更新SDCCH拥塞率飙到30%呼叫建立成功率掉到90%。后来把SDCCH从combination改成stand-alone配置多加几个SDCCH设备时隙指标立刻恢复正常。歌诀式地记先看频点再看时隙先查上行再查下行先看TA再看误码最后回到逻辑信道配置。这套顺序在大多数GSM无线问题里都适用。最后再分享一个我自己的习惯调GSM时一定在脑子里画出那条时间线——从TDMA帧到复帧到超帧从突发脉冲到逻辑信道块到信令流程。看着复杂其实每一层都有清晰的对应关系。碰到问题时别急着改参数先把这条时间线上每一站的占用时间和到达时间核算一遍。GSM这套时间管理大师的机制之所以三十年不衰就是因为它把时间资源管到了极致而你要做的是比它更会管时间。