数字电视广播中的编解码器的同步机制

1引言
    高清晰度数字电视(HDTV)信源解码器的同步系统是高清晰电视解码器中的重要部分。由于全数字电视系统采用数字编解码和 数字电视传输技术,因而和传统的模拟电视有本质的区别。高清晰度电视与模拟信号的重要区别除了信号传输的压缩编码方式外,由于数字电视在编解码过程中因存 储、传输等一起延时,在同步方式上也有明显的区别。对于模拟电视而言,图像信息以同步方式传输,因而接收机可以从图像同步信号中直接获得时钟信号,其每一 帧端到端的传输延时自然是固定的,同步相对简单,其发送和接收是严格同步的。但对数字压缩系统而言,每一帧图像所占的数据量是不同的,其依赖于图像的编码 方式和图像的复杂度,而一般无线广播的传输信道码率是固定的,因而对于每一帧而言,其传输时延是可变的,从而不能从图像数据的开始处获得定时信息,传输和 显示之间没有自然的同步概念。为了解决这一问题,MPEG-2采用了在ES,PES和TS/PS这3个码流层次中设置相关的时钟信息,并通过其联合作用达 到编解码器的同步和音频、视频的同步。
2MPEG-2码流层次简介
    MPEG-2的结构可分为压缩层和系统层。一路节目的视频、音 频及其他辅助数据经过数字化后通过压缩层完成信源压缩编码,分别形成视频的基本流ES(Elementary  Stream)、音频的基本流和其他辅助 数据的基本流;紧接着系统层将不同的基本流分别加包头打包为PES(Packetised ES)包,为了多路数据节目流的复用和有效的传输,又将PES包作为负载分割后插入传送流包(TS包)或节目流包(PS包)中,MPEG-2标准规定了两 种码流,分别是基于可变长度打包的节目流PS(Program  Steam)和基于固定长度打包的传送流(Transport  Stream)。这两 种码流分别适应于不同的场合应用,节目流PS适合在相对出错较少的环境下使用,其长度是变化的,而传送流TS能够把多个节目在基于一个或多个时间标识的基 础上构成一个流,传送流适合于出错较多的场合下使用,如在存储、传输数据易丢失或在噪声媒介场合使用。用于视频、音频同步以及系统时钟恢复的时间标签分别 在ES,PES和TS/PS这3个层次中。在MPEG-2码流的ES层,和同步有关的主要是VBV-Delay域,表示MPEG-2所定义的一个假设的解 码器视频缓存校验器在收到图像起始码的最后一个字节后,至当前解码帧解码开始所应等待的时间,用以防止解码器的缓冲器(buffer)出现上溢或下溢。在 PES层,主要是在PES包头信息中出现的PTS(显示时间标签)和DTS(解码时间标签)。而在TS流中,TS包头包含了PCR(节目时钟参考),用于 解码器的系统时钟恢复。在节目流PS包头中包含SCR,它的定义和作用与PCR域相似。
3时间模型
    MPEG-2在其系统层语法中 给出了一个具有恒定的端到端的延迟的时间模型,该模型可用来指导系统层编码器与解码器的同步。同步的好坏直接影响到视频和音频的连续性和配合效果,因而, 系统层编码器与解码器之间同步的实现在整个系统中占有极为重要的地位,而解码器是否同步于编码器也成为解码器件设计优劣的一个判定标准。
在MPEG-2系统层时间模型中,它的端到端延迟——从信号进入编码器到信号从解码器输出是一个常数,信号总共经过编码器、编码缓冲器、多路复用器、传输或存储、解复用器、解码缓冲器以及解码器等器件的延迟,其时间模型如图2所示。
     所有的视频和音频采样进入编码器后,经一恒定的延迟,在解码器分别输出显示,采样率在编码器和解码器中应严格相等。在MPEG-2中,所有的时序被定义成 一个共同的系统时钟,即系统时间时钟(STC),故编码器、解码器的系统时钟必须同步。解码器的系统时钟应由编码器的系统时钟经恒定延迟后恢复出来,以服 从于编码器。  
   对于节目流而言,这个时钟可以与视频或音频采样时钟之间有一个严格的特定比率,或者稍有区别,但仍足以提供精确的端到端的时序和时钟恢复,而在传输流中,此系统时钟频率与视频或音频采样时钟之间任何时候都必须有严格的比率关系,其目的是为了在解码器中恢复采样率。
4时间标签定义及同步机制
     编码器中有单一的共同系统时钟(其频率惟27 MHz),此时钟用来产生指示音频和视频的正确显示和解码时序的时间标签,同时可用来指示在抽样间隙中系统时钟本身的瞬时值。指示音频和视频显示时间的时 间标签称为显示时间标签(PTS),指示音频和视频的解码时间标签称为解码时间标签(DTS),指示系统时钟本身的瞬时值的时间标签称为节目参考时钟标签 (PCR/SCR)。解码器通过VBVDelay来确定解码起始,用解码时间标签(DTS)和显示时间标签(PTS)来确定解码和显示次序,用 PCR/SCR来获得系统时钟的同步。解码器中的系统时钟和同步就是依*这些时间标签来进行恢复和修正。
PCR/SCR,PTS,DTS具体编码方式如下:
    PCR/SCR 的插入必须在PCR/SCR字段的最后离开复用器的那一时刻,同时把27 MHz系统时钟的采样瞬时值作为PCR/SCR字段插入到相应的PCR/SCR域。PCR/SCR为42 bits的计数值,其中33 bits为PCRBase/SCRBase,是以27 MHz时钟经300分频后的时钟为单位的计数值;9 bits的PCRExt/SCRExt,则是以27 MHz时钟为单位的计数值。t(i)表示第i个包含PCR/SCR字段的最后一位的字节最后离开复用器的时间。PCR具体编码方式如下(SCR的编码 方式和PCR雷同):
PCRBase(i)=/[系统时钟频率×t(i)DIV300/]%233
PCRExt(i)=/[系统时钟频率×t(i)/]%300
PCR(i)=PCRBase(i)×300+PCRExt(i)
PTS域为33 bits,编码成为3个独立的字段,表示此分组中第一个访问单元在系统目标解码器中的预定显示时间,其具体的编码方式如下:
PTS(k)=/[系统时间频率×tp(k)DIV300/]%233
式中:tp(k)——显示单垣p(k)的显示时间;
p(k)——相应于此分组数据的第一个访问单元的显示单元。
DTS域也为33 bits,编码成为3个独立的字段,表示此分组中第一个访问单元在系统目标解码器中的预定解码时间,其具体的编码方式如下:
DTS(j)=/[系统时间频率×td(j)DIV300/]%233
式中:td(j)——访问单元An(j)的解码时间;
An(j)——相应于此分组数据开始的第一个访问单元的显示单元。
一般地,解码端解码时,首先利用PCR重建和编码器同步的27 MHz系统时钟,恢复27 MHz系统时钟后,再利用PES流中的DTS,PTS进行音、视频的同步,同时利用VBVDelay在解码器中的Buffer充盈到相应程度后启动初始解码。
由MPEG-2推荐的解码模型(见图3)可以知道,MPEG-2解码器的同步是由系统层解复用器、时钟控制单元和基本流解码器三者共同配合来完成的。
    根据该模型以及本文前面的分析,可知解码器同步算法如下:
(1) MPEG-2复用器从输入码流的包头中解出时间信息PCR/SCR送入到系统时间时钟恢复电路;
(2) 系统时间时钟恢复电路在接收到每一个新的SCR/PCR时,进行本地系统时间时钟恢复和锁相;
(3) 解复用器从输入码流的PES包头中解出显示时间标签PTS和解码时间标签DTS,并送入到基本流解码器中;
(4) 基本流解码器在接收到新的PTS/DTS存入对应的FIFO中进行管理;
(5) 对于没有DTS/PTS的显示单元,需要对其时间标签进行插值,并送入到FIFO中管理;
(6) 每一显示单元开始解码前,用其对应的DTS与STC进行比较,当STC与DTS相等时开始解码;
(7) 每一显示单元开始显示前,用其对应的PTS与STC进行比较,当STC与PTS相等时开始显示。
    在理想情况下,PTS和DTS的值应该是相同的,但由于实际解码器解码需要一定的时间,一般PTS和DTS的值是不同的。如果在PES包头中只出现了PTS,我们就认为DTS=PTS。
5系统时钟(STC)恢复
     在编码器中,STC的恢复是同步的关键。如果解码器中的时钟频率和编码器的时钟频率严格匹配,那么视频和音频的解码和显示将自动和编码器保持相同的速率, 而端到端的延迟将为常数。当编码器与解码器匹配时,任何正确的SCR/PCR值可用来设置解码器STC的瞬时值,而且此后不需要更多的调整,解码器的 STC就与编码器的STC相匹配。但在实际中,解码器均有自主的系统时间频率,并不和编码器的系统时钟匹配,因而需要利用接收到的SCR/PCR值来使解 码器服从于编码器,使解码器的时钟服从于接收的数据流的典型方法是通过锁相环(PLL)。
用锁相环技术进行系统时钟恢复的框图如图4所示。
     当一个新节目的PCR到达解码器时,需要更新时间基点,STC被设置为编码于PCR/SCR中的当前值。通常第一个从解复用器中解出的PCR/SCR被直 接装入到STC的计数器,其后PLL为闭环操作。每当一个新节目的PCR/SCR到达解码器时,此值被认为是锁相环的参考频率,用来和STC的当前值比 较,产生的差值e经过脉宽调制后被输入低通滤波器并经放大,输出为控制信号f,用来控制振荡器(VCO)的瞬时频率,VCO输出的频率是在27 MHz左右振荡信号,它作为解码器的系统时钟。27 MHz时钟经波形整理后输入到计数器中,产生当前的STC值,其33 bits的90 kHz部分用于和PTS/DTS比较,产生解码和显示的同步信号。
6DTS/PTS的管理
    STC输出的33 bits中,90 kHz部分(即PCR-Base域)用于与PTS和DTS作比较,当二者相同时,相应的单元被显示或者解码。但按照MPEG-2标准的规定, PTS/DTS位于PES包的包头中,而解复用器所解出的PES包头的字节不被送入到任何基本流解码器的输入缓冲区,仅用于控制各解码器工作。每当解复用 解到一个PTS/DTS时,就表明其后送入各个基本流解码器的输入缓冲器中的编码数据的显示/解码时间,但此时送入信道缓冲器中的基本流并不一定立即被解 码,因此基本流解码器必须记录当前这个PTS/DTS及所对应的码流位置,以利于后面的解码和显示同步。
    针对以上分析,我们采用如下方法 来达到解码与显示的同步:在每一个基本流解码器中建立一个33 bits的PTS/DTS先入先出存储器(FIFO),用以存放PTS/DTS值,同时MPEG-2码流解复用器中加入一个检测电路,每当码流开始新的一 帧图像时,则产生一个信号,用来通知基本流解码器,并将该帧图像的PTS/DTS写入到FIFO中,同时,每当解码器解到一帧图像时,就从FIFO中读出 相应的PTS/DTS,此PTS/DTS与STC进行比较,当两者相等时,当前图像就开始显示/解码。
   在MPEG-2标准中,并非每一个PES包或每一帧图像均有PTS和DTS,一般PS流中每两个PTS之间的间隔是0.7 s,而TS流中每两个PTS之间的间隔是0.1 s,所以在没有PTS和DTS的一帧图像出现时,我们可以在前一PTS/DTS的基础上加一增量得到对应该帧图像的PTS/DTS,并将计算出来的新的 PTS/DTS插入到存放PTS/DTS的FIFO中去,即:
PTSn=PTSn-1+ΔPTS
7PTS/DTS同步实现和失步处理
     27 MHz系统时钟经过1/300分频后,得到本地的33 bits PCRBase,该时钟与寄存器中当前图像的PTS/DTS进行比较,系统软件根据比较结果做出相应的处理:
(1) 若当前的PTS/DTS比PCR计数器的值小于半帧以上,即
PTS-SCRBase≤-ΔPTS/2
此时说明系统解码过慢,解码器处于失步状态,应根据该帧的结构做出相应的同步调整;
(2) 若当前的PTS/DTS比SCR计数器的值在半帧时间以内,我们认为此时系统解码正常,立即显示/解码当前帧;
(3) 若当前的PTS/DTS大于SCR计数器的值,则此时解码器正常或稍快,在这种情况下,只需等到SCR与PTS/DTS相等时,就可显示/解码。 

你可能感兴趣的:(算法,ext,存储,buffer,div,delay)