简介《中国数字地面播DTMB帧结构介绍》以612KB的PDF单文件形式呈现面向数字电视传输、地面广播接收及通信同步技术的学习者与工程人员用于梳理国标DTMB分级帧结构的关键概念和参数关系。文档沿信号帧、超帧、分帧、日帧的层级展开说明帧头与帧体的符号构成、约500μs的帧体时长并比较PN420、PN595、PN945三种帧头模式在序列生成、相位选择及超帧内信号帧数量上的差异同时交代系统信息承载与扩频保护的基本思路。资源包内仅含1个PDF文件内容集中便于按章节查阅和参数速查。已有739人学习下载适合作为DTMB帧结构入门梳理、标准要点复习或相关工程配置的参考资料。1. 分级帧结构为什么广播标准敢把时间锚在公历自然日上DTMB 帧结构最反直觉的一点是它把信号的时间轴直接钉在公历自然日上日帧 24 小时、分帧 1 分钟、超帧 125 毫秒再往下才是信号帧。刚接触 DTMB 帧结构的人容易把这套层级当成文档里的命名游戏但它实际决定了接收机开机后能不能在几百毫秒内锁定以及在没有回传链路、没有外部授时的情况下接收端如何知道自己身处哪一个帧。地面广播是单向连续符号流帧结构就是接收机唯一的坐标系坐标系越“绝对”冷启动搜索的盲区就越小。搞懂这套分级后面帧头长度、PN 相位、系统信息扩频的所有取舍才有落脚点。2. 信号帧解剖420/595/945 三种帧头如何与 3780 符号帧体配平2.1 帧头越长、超帧帧数越少125ms 恒等式DTMB 定义了三种可选帧头模式帧体长度始终是 3780 个符号变的是帧头模式 1 为 420 个符号模式 2 为 595 个符号模式 3 为 945 个符号。三种模式对应的信号帧总长分别是 4200、4375、4725 个符号。基带符号率固定为 7.56 Msps所以单个信号帧的时长并不相同但把超帧拉齐到 125ms 时三种模式需要塞进的帧数分别是 225、216、200。这三个数字不是拍脑袋定的它们满足同一个恒等式模式帧头符号帧体符号单帧符号超帧帧数超帧总符号超帧时长模式 1420PN42037804200225945000125ms模式 2595PN59537804375216945000125ms模式 3945PN94537804725200945000125ms945000 ÷ 7.56 125000μs正好 125ms。也就是说帧头变长带来的每帧时长增加被超帧内帧数的减少精确抵消。这个设计动机很实在上层的时间管理8 个超帧为 1 秒、480 个超帧为 1 分钟不能因为物理层选了哪种帧头而改变否则定时系统校准、首帧定位、日帧复位全要跟着变。用帧数吸收帧头长度差异是把“物理层参数可变”和“系统层时间恒定”解耦的常见做法。用几行代码可以把这条恒等式验证一遍也方便改参数试算SR 7.56e6 # 基带符号率 7.56 Msps modes { mode1: {pn: 420, body: 3780, frames: 225}, mode2: {pn: 595, body: 3780, frames: 216}, mode3: {pn: 945, body: 3780, frames: 200}, } for name, m in modes.items(): frame_sym m[pn] m[body] # 单信号帧符号数 super_sym frame_sym * m[frames] # 超帧总符号数 print(name, frame_sym, super_sym, super_sym / SR * 1000, ms)三个分支打印出来的超帧时长都应该是 125.0ms。如果哪个模式算出来不是先检查帧体是不是被误算成 3744——3744 只是纯数据符号系统信息那 36 个符号必须计入帧体。2.2 帧体的 36 3744系统信息为什么能抢在数据前面帧体固定 3780 个符号拆开是 36 个系统信息符号加 3744 个数据符号。3780 ÷ 7.56 500μs这就是帧体时长。36 个符号看着不起眼占帧体不到百分之一但它承担的是“这一帧怎么解”的全部前置信息符号星座映射模式、LDPC 码率、交织模式、帧体信息模式。接收机必须先拿到这 36 个符号并正确解扩才知道后面 3744 个符号该按哪种星座、哪种码率去处理。把系统信息放在帧体最前面而不是塞进帧头是一个很务实的取舍帧头要保持 PN 序列的纯净周期性方便做相关同步系统信息需要扩频保护和数据的编码调制链路不是一回事硬塞进帧头会破坏帧头的自相关特性。36 个符号的构成也值得拆前 4 个复符号是帧体模式指示C1 模式映射前为“0000”C3780 模式为“1111”采用 I、Q 相同的 4QAM 映射后 32 个复符号才是 6 比特系统信息经过扩频保护后的结果。也就是说接收机在解系统信息之前先用这 4 个符号判断当前帧体是单载波还是多载波再决定后续解调路径。这个顺序不能反C1 和 C3780 的帧体处理方式完全不同前者是时域信号后者要经过频域交织和 OFDM 变换先知道模式才能选对接收机前端。从帧结构层级再往上走一层超帧的第一个信号帧被定义为“首帧”由系统信息的相关信息指示。模式 1 和模式 3 还能靠帧头 PN 相位为 0 做双重确认模式 2 因为每个信号帧的帧头 PN 序列完全相同没有相位区分度首帧识别更依赖帧计数和系统信息。这一点在后面排查章节会展开它是最容易踩坑的地方之一。3. 帧头 PN 序列LFSR 凭什么同时承担同步与帧身份3.1 8 阶、9 阶、10 阶阶数决定周期也决定可用相位三种帧头模式的 PN 序列都来自线性反馈移位寄存器LFSR生成的 m 序列差别在阶数。模式 1 用 8 阶 m 序列周期 255帧头 PN420 由前同步 82 个符号、PN255 序列、后同步 83 个符号组成82 255 83 420前同步和后同步都是 PN255 的循环扩展。模式 3 用 9 阶 m 序列周期 511帧头 PN945 由前同步 217 个符号、PN511 序列、后同步 217 个符号组成217 511 217 945。模式 2 用 10 阶最大长度伪随机二进制序列截短取前 595 个码片作为帧头长度 595 个符号。阶数直接决定了“能拿出多少个不同相位的序列”。8 阶 m 序列周期 255理论上可产生 255 个不同相位标准选用其中 225 个正好对应模式 1 超帧内的 225 个信号帧9 阶周期 511选用 200 个对应模式 3 的 200 个信号帧。每个信号帧用不同相位的 PN 作为帧识别符接收机做相关时不仅能看到“这里有一个帧头”还能从相关峰对应的相位反推出“这是超帧里的第几帧”。模式 2 是另一条路10 阶序列周期 1023截短到 595每个信号帧的帧头 PN 完全相同不承担帧编号功能帧编号只能靠计数和系统信息。LFSR 的实现本身不复杂关键是抽头位置和初始相位要按标准表格配置并且“0”映射为 1、“1”映射为 -1得到非归零二进制符号。下面这段代码演示的是同一套 LFSR 骨架如何通过换参数产生不同序列抽头下标随寄存器编号约定可能不同落地时以标准给出的本原多项式为准def lfsr(init, taps, n): init: 寄存器初值列表长度等于阶数 taps: 参与反馈异或的寄存器下标 n: 输出码片数 reg init[:] seq [] for _ in range(n): seq.append(reg[0]) # 当前输出位 fb 0 for t in taps: # 反馈位 抽头异或 fb ^ reg[t] reg reg[1:] [fb] # 左移并填入反馈位 return seq # 8 阶示例抽头对应 x^8 x^6 x^5 x^4 1 的一种编号方式 pn255 lfsr([1,0,0,0,0,0,0,0], [0,2,3,4], 255) # 循环扩展成 PN420前 82 个取尾部后 83 个取头部 pn420 pn255[-82:] pn255 pn255[:83] assert len(pn420) 420这段代码里有两个容易忽略的细节。第一初始相位不是随便给的模式 1 和模式 3 的初始条件决定当前 PN 序列的相位序号标准在每个超帧开始时把 LFSR 复位到序号 0 的初始相位之后每帧推进一个相位第二循环扩展的方向必须和标准一致前同步取 PN255 的尾部、后同步取头部取反了相关峰位置会整体偏移同步性能不会立刻崩但帧边界会稳定地差几十个符号这种错误最难查。3.2 循环扩展与相位序号超帧内的帧识别符怎么排PN420 和 PN945 采用“前同步 m 序列 后同步”的结构前后同步都是 m 序列的循环扩展。这样做的目的不是凑长度而是让帧头在边界处仍然保持序列的循环连续性接收机用滑动相关做同步时即使相关窗口跨过帧头边界也能看到完整的相关峰。对于多径信道循环扩展还让帧头在时延扩展下保留一定的能量不至于因为窗口截断而丢失同步点。相位序号的排布是另一个关键机制。以模式 1 为例一个超帧 225 个信号帧每帧帧头采用不同相位的 PN420序号从 0 到 224标准从 255 个可用相位中选 225 个超帧开始时 LFSR 复位到序号 0。接收机一旦锁定某个帧头读出相关峰对应的相位序号就知道当前是超帧内的第几帧再结合帧计数就能推算出分帧和日帧的位置。模式 3 同理200 个信号帧对应 200 个相位序号从 511 个可用相位中选 200 个。模式 2 放弃了这套相位编号每个信号帧帧头 PN 相同LFSR 初始相位 0000000001在每个信号帧开始时复位。这意味着模式 2 的帧头只提供同步不提供帧身份帧编号完全靠接收机自己数。这个取舍的代价是冷启动时缺少一个“绝对帧号”的物理锚点好处是帧头相关器不需要维护 225 组相位假设实现更简单同步搜索的计算量更小。三种模式没有绝对优劣选哪种取决于应用场景对同步时间、抗多径能力和实现复杂度的权衡。4. 系统信息与帧体处理6 比特如何变成 36 个复符号4.1 Walsh 正交保护64 个矢量与随机序列的异或6 比特系统信息要变成 32 个复符号中间要经过扩频保护否则在低信噪比下这几比特一旦解错整帧数据都白解。标准预设了 64 种系统信息模式扩频前用 6 个信息比特表示第 5 比特为 MSB 保留第 4 比特定义交织信息第 3 到第 0 比特定义编码调制模式。保护方案分三步。第一步产生 32 个 32 位长的 Walsh 矢量它们是 32×32 Walsh 块的各行矢量。第二步把这 32 个矢量取反连同原矢量一共得到 64 个矢量再经过“1 映射为 1、-1 映射为 0”的变换得到 64 个二进制矢量。第三步这 64 个矢量与一个长度为 32 的随机序列按位异或得到最终 64 个系统信息矢量。随机序列由一个 5 比特 LFSR 产生长度 31 的 5 阶最大长度序列再补一个 0 凑成 32 位初始相位 00001在每个信号帧开始时复位。Walsh 矢量负责正交性64 个矢量两两正交或取反接收端做相关时能把 64 种模式区分开随机序列负责打散 Walsh 码的周期性避免系统信息在频域上形成固定位置的强线谱。这两层保护叠加等效于给 6 比特信息套了一个 32 位的扩频码扩频增益大约 15dB代价是 32 个复符号的开销。用代码可以把映射过程固定下来def walsh_rows(n32): # 递归构造 Hadamard 矩阵行向量作为 Walsh 矢量 H [[1]] while len(H) n: H [r r for r in H] [r [-x for x in r] for r in H] return H def sysinfo_to_symbols(si6, rng32, walsh): idx si6 0x3F vec walsh[idx % 32][:] if idx 32: # 第 6 比特选择是否取反 vec [-x for x in vec] bits [1 if x 1 else 0 for x in vec] # 1 - 1, -1 - 0 bits [b ^ r for b, r in zip(bits, rng32)] # 4QAMI、Q 取相同值0 - -11 - 1 return [complex(1 if b else -1, 1 if b else -1) for b in bits]这段代码里idx % 32和idx 32的组合等价于用第 6 比特选择原矢量还是取反矢量。落地时要注意 Walsh 块的行序标准表格里的行序不一定等于递归 Hadamard 构造的自然序行序错了会导致系统信息整体错位但错误表现是“解出来的模式号恒定偏移”不是随机误码排查时可以通过遍历 64 个候选模式反查映射表。4.2 C1 与 C3780同一份帧体的两条调制路径36 个系统信息符号和 3744 个数据符号复接后进入帧体数据处理。这里 DTMB 分了两条路C1 的单载波模式和 C3780 的多载波模式。两条路的帧体时长都是 500μs占用射频带宽都是 7.56MHz但生成时域信号的方式完全不同。C1 模式下帧体作为单载波时域信号处理作为可选项可以在 ±0.5 符号速率位置插入双导频两个导频的总功率相对数据总功率为 -16dB。插入方式很具体从日帧的第一个符号编号 0开始奇数符号上实部加 1、虚部加 0偶数符号上实部加 -1、虚部加 0。注意这个计数起点是日帧的绝对符号编号不是帧体内的相对编号这一点在后面排查章节会专门讲。C3780 模式下相邻子载波间隔 2kHz7.56MHz ÷ 2kHz 3780正好对应子载波数。帧体信息符号 X(k) 先经过频域交织得到 X(n)再做 OFDM 变换生成时域信号。频域交织的作用是把频域上的深衰落打散到时域的不同位置避免一整段连续子载波被窄带干扰吃掉。C3780 的 500μs 时域块和 2kHz 子载波间隔是一组绑定参数子载波间隔定了OFDM 符号周期就定了500μs 的帧体块里能放多少个 OFDM 符号也随之确定。两条路径的选择本质上是场景取舍。单载波 C1 的峰均比低发射机功放效率高接收机均衡器结构相对简单适合固定接收和较大功率覆盖多载波 C3780 对多径的容忍度更好频域均衡实现成熟适合城市环境下的移动接收和单频网组网。标准把两种模式都保留并用帧体前 4 个复符号做模式指示就是为了让同一套帧结构能同时服务两类部署接收机不用预先配置就能自动识别。5. 排查手册帧结构落地时最容易翻车的五处5.1 超帧边界对不上首帧永远识别错现象是接收机偶尔能锁上帧头但帧计数一直对不齐首帧标志时有时无超帧内帧号从中间某个值开始跳。原因通常出在 LFSR 复位时机模式 1 和模式 3 要求每个超帧开始时把 LFSR 复位到序号 0 的初始相位如果复位点落在超帧的第二个帧而不是第一个帧整个相位序列会整体偏移一帧相关峰仍然存在但相位序号和帧号的对应关系全错。另一种情况是把“信号帧开始”当成复位点而标准要求的是“超帧开始”两者在超帧边界重合在超帧内部不重合。解决方法是把复位信号和超帧计数器绑定而不是和帧头检测绑定。实现上维护一个superframe_start脉冲只在超帧第一个信号帧的帧头起始位置拉高LFSR 在该脉冲有效时装载初始相位其余帧只做相位推进。验证时可以让接收机打印每个超帧第一帧的相位序号正常应该恒为 0如果不是 0先查复位脉冲的生成逻辑再查帧计数器的清零条件。5.2 系统信息解出来随机翻转现象是系统信息偶尔能解对但误码率高得离谱同一帧重解几次结果还不一样。原因往往在随机序列的复位周期标准规定 5 比特 LFSR 初始相位 00001在每个信号帧开始时复位如果实现成每个超帧复位一次随机序列的相位会逐帧漂移异或之后的 32 位矢量与发射端不一致相关峰自然对不上。另一种常见错误是 Walsh 矢量的取反映射极性搞反把“1 映射为 1、-1 映射为 0”做成了“1 映射为 0、-1 映射为 1”结果是 64 个候选矢量全部按位取反解出来的模式号落在镜像位置。解决方法是把随机序列的复位条件和帧头对齐每个信号帧的帧体起始处复位一次并在仿真里固定一组已知系统信息跑通“6 比特→32 位矢量→32 个复符号→反变换→6 比特”的闭环。闭环通过后再上射频能省掉大量空口调试时间。Walsh 行序和极性映射建议直接对照标准表格逐行核对不要凭记忆写。5.3 帧体符号数总是差 36现象是实现里帧体只处理了 3744 个符号系统信息被当成额外开销单独放在帧体前面结果帧体总长变成 3780 36时域块超过 500μs帧边界逐帧累积偏移。原因是把“36 个系统信息符号”和“3744 个数据符号”理解成了串行拼接而标准里它们是复用关系36 个系统信息符号连续排列在帧体数据的前 36 个符号位置和信道编码后的数据符号一起构成 3780 个符号的帧体。解决方法是把帧体缓冲区固定为 3780 个符号前 36 个位置写系统信息后 3744 个位置写数据复用完成后再统一做帧体数据处理。验证时可以直接检查帧体缓冲区的长度和时域块时长3780 ÷ 7.56 500μs多一个符号都会在长时间运行后表现为帧计数漂移。5.4 C1 双导频插反了位置现象是 C1 模式下接收端做导频辅助跟踪时频偏估计值符号相反或者导频相关峰出现在错误的时间位置。原因是双导频的插入位置从日帧第一个符号编号 0 开始计数奇数符号实部加 1、虚部加 0偶数符号实部加 -1、虚部加 0实现时如果从帧体第一个符号重新从 0 开始编号奇偶性会整体翻转导频极性全反。另一种情况是把“实部加 1”和“实部加 -1”的奇偶顺序记反同样导致极性相反。解决方法是维护一个日帧级别的绝对符号计数器从日帧复位时刻起累加双导频插入时用这个绝对计数判断奇偶不要用帧体内的局部计数。验证时可以在发射端固定一段全零数据观察插入导频后的时域波形奇偶符号的实部应该呈现 1、-1 交替虚部恒为 0。5.5 时间同步慢慢漂走现象是接收机刚开机时帧号、分帧号、日帧号都对运行几个小时后日帧号差了几帧越到后面偏得越多。原因是本地时钟和参考时间之间总有频偏如果只靠本地晶振累计时间误差会线性累积。DTMB 的分级帧结构本身就是为了解决这个问题超帧 125ms、8 个超帧 1 秒便于与定时系统校准分帧 1 分钟包含 480 个超帧日帧 1440 个分帧在北京时间 00:00:00 或其他选定参考时间复位开始新的日帧。解决方法是在接收机里保留一个可被外部参考时间复位的日帧计数器每次拿到可靠的参考时间就强制对齐日帧边界而不是让本地计数自由跑。校准周期可以根据晶振精度定一般每分钟对齐一次分帧边界就足够把漂移控制在符号级以内。验证时可以让设备连续运行 24 小时对比日帧复位时刻和参考时间偏差应该收敛而不是发散。6. 设计取舍固定开销、双模式与可验证性之间的平衡DTMB 帧结构里最值得琢磨的取舍是“固定开销换确定性”。帧体永远 3780 个符号系统信息永远占前 36 个超帧永远 125ms日帧永远 24 小时这些常量把接收机的状态空间压得很小。代价是灵活性帧头长度只有三档帧体模式只有 C1 和 C3780 两种系统信息只有 64 种组合。但地面广播面对的是海量、低成本、无法逐台配置的接收设备确定性比灵活性值钱。接收机开机后不需要协商参数按固定节奏扫帧头、解系统信息、切帧体模式几百毫秒内就能进入稳定状态。第二个取舍是单载波和多载波共存。C1 的峰均比低、功放效率高C3780 的多径容忍度好、频域均衡成熟标准没有二选一而是用帧体前 4 个复符号做模式指示让同一套帧结构承载两种部署。这个设计的隐含成本是接收机要同时实现两条解调链路但换来的是标准能覆盖固定接收和移动接收两类场景组网时不用换帧结构。第三个取舍是系统信息的保护强度。6 比特信息扩成 32 个复符号扩频增益大约 15dB占帧体不到 1% 的开销换来的是低信噪比下仍能正确解出编码调制模式。如果不做扩频这 6 比特在恶劣信道下误码后面 3744 个符号全白传如果保护再强开销又会上来。32 位 Walsh 加随机序列异或是在保护能力和开销之间找到的一个平衡点。验证这套帧结构是否实现正确我习惯用三个闭环第一个是符号数闭环三种模式的单帧符号数、超帧总符号数、超帧时长必须严格满足 945000 和 125ms第二个是相位闭环超帧第一帧的 PN 相位序号必须为 0帧内逐帧递增超帧边界复位第三个是时间闭环日帧计数器在参考时间复位后连续运行 24 小时的累积偏差不能发散。三个闭环都过了再上射频做空口测试能省掉大量“现象是同步不稳、原因是帧计数差一”的排查。从那以后我每次碰帧结构相关的实现都强制先跑一遍符号数闭环和相位闭环再谈信道估计和均衡。很多看起来像射频问题的现象根子都在帧计数和复位时机上。希望帮到你。本文还有配套的精品资源点击获取