☰
DTMB帧结构详解:分级帧、PN序列与系统信息保护
2026/11/2 3:13:48 网站建设 项目流程

简介:《中国数字地面播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。这三个数字不是拍脑袋定的,它们满足同一个恒等式:

模式帧头符号帧体符号单帧符号超帧帧数超帧总符号超帧时长
模式 1420(PN420)37804200225945000125ms
模式 2595(PN595)37804375216945000125ms
模式 3945(PN945)37804725200945000125ms

945000 ÷ 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 个复符号是帧体模式指示,C=1 模式映射前为“0000”,C=3780 模式为“1111”,采用 I、Q 相同的 4QAM 映射;后 32 个复符号才是 6 比特系统信息经过扩频保护后的结果。也就是说,接收机在解系统信息之前,先用这 4 个符号判断当前帧体是单载波还是多载波,再决定后续解调路径。这个顺序不能反:C=1 和 C=3780 的帧体处理方式完全不同,前者是时域信号,后者要经过频域交织和 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(n=32): # 递归构造 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)] # 4QAM,I、Q 取相同值:0 -> -1,1 -> +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 C=1 与 C=3780:同一份帧体的两条调制路径

36 个系统信息符号和 3744 个数据符号复接后,进入帧体数据处理。这里 DTMB 分了两条路:C=1 的单载波模式和 C=3780 的多载波模式。两条路的帧体时长都是 500μs,占用射频带宽都是 7.56MHz,但生成时域信号的方式完全不同。

C=1 模式下,帧体作为单载波时域信号处理,作为可选项,可以在 ±0.5 符号速率位置插入双导频,两个导频的总功率相对数据总功率为 -16dB。插入方式很具体:从日帧的第一个符号(编号 0)开始,奇数符号上实部加 1、虚部加 0,偶数符号上实部加 -1、虚部加 0。注意这个计数起点是日帧的绝对符号编号,不是帧体内的相对编号,这一点在后面排查章节会专门讲。

C=3780 模式下,相邻子载波间隔 2kHz,7.56MHz ÷ 2kHz = 3780,正好对应子载波数。帧体信息符号 X(k) 先经过频域交织得到 X(n),再做 OFDM 变换生成时域信号。频域交织的作用是把频域上的深衰落打散到时域的不同位置,避免一整段连续子载波被窄带干扰吃掉。C=3780 的 500μs 时域块和 2kHz 子载波间隔是一组绑定参数:子载波间隔定了,OFDM 符号周期就定了,500μs 的帧体块里能放多少个 OFDM 符号也随之确定。

两条路径的选择本质上是场景取舍。单载波 C=1 的峰均比低,发射机功放效率高,接收机均衡器结构相对简单,适合固定接收和较大功率覆盖;多载波 C=3780 对多径的容忍度更好,频域均衡实现成熟,适合城市环境下的移动接收和单频网组网。标准把两种模式都保留,并用帧体前 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 C=1 双导频插反了位置

现象是 C=1 模式下接收端做导频辅助跟踪时,频偏估计值符号相反,或者导频相关峰出现在错误的时间位置。原因是双导频的插入位置从日帧第一个符号编号 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 小时,这些常量把接收机的状态空间压得很小。代价是灵活性:帧头长度只有三档,帧体模式只有 C=1 和 C=3780 两种,系统信息只有 64 种组合。但地面广播面对的是海量、低成本、无法逐台配置的接收设备,确定性比灵活性值钱。接收机开机后不需要协商参数,按固定节奏扫帧头、解系统信息、切帧体模式,几百毫秒内就能进入稳定状态。

第二个取舍是单载波和多载波共存。C=1 的峰均比低、功放效率高,C=3780 的多径容忍度好、频域均衡成熟,标准没有二选一,而是用帧体前 4 个复符号做模式指示,让同一套帧结构承载两种部署。这个设计的隐含成本是接收机要同时实现两条解调链路,但换来的是标准能覆盖固定接收和移动接收两类场景,组网时不用换帧结构。

第三个取舍是系统信息的保护强度。6 比特信息扩成 32 个复符号,扩频增益大约 15dB,占帧体不到 1% 的开销,换来的是低信噪比下仍能正确解出编码调制模式。如果不做扩频,这 6 比特在恶劣信道下误码,后面 3744 个符号全白传;如果保护再强,开销又会上来。32 位 Walsh 加随机序列异或,是在保护能力和开销之间找到的一个平衡点。

验证这套帧结构是否实现正确,我习惯用三个闭环:第一个是符号数闭环,三种模式的单帧符号数、超帧总符号数、超帧时长必须严格满足 945000 和 125ms;第二个是相位闭环,超帧第一帧的 PN 相位序号必须为 0,帧内逐帧递增,超帧边界复位;第三个是时间闭环,日帧计数器在参考时间复位后,连续运行 24 小时的累积偏差不能发散。三个闭环都过了,再上射频做空口测试,能省掉大量“现象是同步不稳、原因是帧计数差一”的排查。

从那以后我每次碰帧结构相关的实现,都强制先跑一遍符号数闭环和相位闭环,再谈信道估计和均衡。很多看起来像射频问题的现象,根子都在帧计数和复位时机上。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询