一种基于频差检测和补偿的PCR校正方法和系统与流程

文档序号:29615369发布日期:2022-04-13 11:20阅读:224来源:国知局
一种基于频差检测和补偿的PCR校正方法和系统与流程
一种基于频差检测和补偿的pcr校正方法和系统
技术领域
1.本发明涉及数字领域,更具体地,涉及一种基于频差检测和补偿的pcr校正方法和系统。


背景技术:

2.电视运动图像及伴音在数字化以后通常是使用ts流(transport stream,传送数据流)的格式传输。ts传输流在应用的过程中,经常需要进行节目的复用操作,复用后的节目pcr包的位置变更,pcr值所指示的时间信息已不准确,需要进行pcr校正,以保证后端设备能从流中依靠pcr准确地恢复出编码端时钟及进行解码操作。
3.现有的pcr校正算法,有三种方式:
4.第一种是再生型pcr校正,其核心思想就是用源端输入的pcr对本地pcr进行初始同步,然后依靠本地时钟再生复用后的pcr值。再生型pcr校正具有简单、方便、多节目同时校正,且无需考虑接口转换形式等优点,尤其适用于ip输入输出接口。其缺点在于由于源端时钟与本地时钟存在频差,长时间的运行将导致pcr与pts/dts之间的误差逐步累积,解码端会出现es缓存溢出无法解码现象,因此为了解决es缓存溢出无法解码问题,需要本地时钟定期同步源时钟,而在同步源时钟操作的初始化本地计数器的瞬间会影响到pcr精度指标,这是周期性的,只要频差问题不解决,再生型pcr校正无法从根源上解决这个问题。
5.第二种是跟随型pcr校正,其核心思想是使用本地时钟进行时间戳计数,在码流输入端打上输入时间戳标签,经过复用码率调整之后再打上输出时间标签,通过输入输出时间戳确定pcr包在系统中的时延,并将此时延叠加到原pcr值上。跟随型的pcr校正方法,其优点是不会因此引入本地时钟与源时钟的频差因素,只要源端pcr正常即可保证输出端pcr正常。其缺点是其使用有较严格的限制条件:一是必须保证ts传输流在输入侧和输出侧ts包都是均匀间隔的,不能有抖动的存在,否则ts包的抖动将会引入到pcr精度中,从而影响pcr校正结果;二是必须保证输入的ts流其pcr是正常的,跟随型的pcr校正无法对源端错误的pcr指标进行校正回来。
6.第三种是完全用本地时钟再生pcr、pts和dts,这种方式优点是无需考虑源端时钟与本地时钟的频差,也无需输入输出码流均匀及是pcr是否正常等限制。但是此种方式的缺点是实现起来最为复杂,处理模块多,资源消耗最大,很难应用于多通道多节目场景。
7.现有技术公开了一种基于直通音频的ts传输流音视频同步装置和方法,所述ts再编码模块,用于对源ts传输流进行再编码,获得再编码ts传输流;所述音频延时模块,用于将源ts传输流中的音频包进行延时,延时的时间对应为源ts传输流再编码所需时间;所述频差计算模块,用于计算并输出源编码基准时钟与再编码基准时钟之间的频率偏差表征量;所述校准模块,用于根据所述频差计算模块所输出的频率偏差表征量,校准再编码ts传输流;所述码流复用模块,将校准后的再编码ts传输流与延时后的源ts传输流中的音频包进行复用输出。但是该方案无法解决ts码流传输时由于抖动出现的偏差问题。


技术实现要素:

8.本发明的首要目的是提供一种基于频差检测和补偿的pcr校正方法,能够检测ts流源端和本地端时钟的频差特性,且解决了ts码流传输时由于抖动出现的偏差问题。
9.本发明的进一步目的是一种基于频差检测和补偿的pcr校正系统。
10.为解决上述技术问题,本发明的技术方案如下:
11.一种基于频差检测和补偿的pcr校正方法,包括以下步骤:
12.接收ts码流,从所述ts码流中获取pcr值,从本地计数器中获取本地计数器值;
13.根据所述pcr值和本地计数器值计算本地时钟与源端时钟的频差信息;
14.根据所述频差信息,对本地时基进行同步及频差补偿;
15.利用频差补偿后的本地时基对pcr值进行再生校正。
16.本地时基与本地计数器为不同的计数器,其中本地计数器的作用是用来和源端pcr值进行比较运算得到本地时钟和源端时钟的频差信息,在整个校正过程中是不调整的。而本地时基是另外一个计数器,本地时基会根据前面检测得到的频差进行补偿调整,使本地时基跟源端的时钟频率接近,实现了大部分的误差补偿。
17.优选地,从所述ts码流中获取pcr值,具体为:
18.所述ts码流包括若干pcr包,所述获取pcr值为获取每个pcr包中对应的pcr值。
19.优选地,所述从本地计数器中获取本地计数器值,具体为:
20.所述本地计数器值为接收到ts码流中每个pcr包时对应的本地计数器值。
21.优选地,根据所述pcr值和本地计数器值计算本地时钟与源端时钟的频差信息,具体为:
22.根据本地时钟计数器值计算本地计数器差值:
23.δcntn'=cntn'-cnt0'
24.式中,δcntn'为第n+1个pcr包时对应的本地计数器差值,cntn'表示接收到ts码流中第n+1个pcr包时对应的本地计数器值,cnt0'表示接收到ts码流中第1个pcr包时对应的本地计数器值;
25.根据所述pcr值计算pcr差值:
26.δpcrn=pcr
n-pcr027.式中,δpcrn为第n+1个pcr包时对应的pcr差值,pcrn表示第n+1个pcr包对应的pcr值,pcr0表示第1个pcr包对应的pcr值;
28.计算第一参数an:
[0029][0030]
计算第二参数bn:
[0031][0032]
所述本地时钟与源端时钟的频差信息δf'为:
[0033]
δf'=floor(10m×an
/bn)
[0034]
式中,floor()为取整函数,m为大于等于6的整数。
[0035]
优选地,根据所述频差信息,对本地时基进行同步及频差补偿,具体为:
[0036]
根据所述pcr值对本地时基进行初始同步,然后本地时基按照本地时钟进行计数,在计数过程中使用频差信息对本地时基进行均匀化补偿。
[0037]
优选地,还包括将初步再生校正的pcr值与从ts码流中获取的pcr值比较,判断是否存在偏差,若存在偏差,则对本地时基进行偏差补偿,由本地时基得到最终校正的pcr值。
[0038]
优选地,所述将初步再生校正的pcr值与从ts码流中获取的pcr值比较,判断是否存在偏差,具体为:
[0039]
将校正后的pcr值与从所述ts码流中获取的pcr值作差,连续监测n次所述差值,如果所述差值均为正值或负值,则判断存在偏差。
[0040]
优选地,所述对本地时基进行偏差补偿,具体为:
[0041]
判断偏差的方向,所述判断偏差的方向,具体为:根据校正后的pcr值与从所述ts码流中获取的pcr值的差值为正值或负值,判断为正偏或负偏;
[0042]
设定定时时间t,每达到定时时间后,根据偏差的方向,对本地时基进行反方向的偏差补偿,对本地时基进行反方向的偏差补偿时,每次只补偿一个计数单位。
[0043]
一种基于频差检测和补偿的pcr校正系统,包括:
[0044]
接收模块,所述接收模块用于接收ts码流,从所述ts码流中获取pcr值,从本地计数器中获取本地计数器值;
[0045]
频差检测模块,所述频差检测模块用于根据所述pcr值和本地计数器值计算本地时钟与源端时钟的频差信息;
[0046]
时基同步及补偿模块,所述时基同步及补偿模块用于根据所述频差信息,对本地时基进行同步及频差补偿;
[0047]
pcr校正模块,所述pcr校正模块利用频差补偿后的本地时基对pcr值进行再生校正;
[0048]
优选地,还包括偏差估计模块,所述偏差估计模块将将初步再生校正的pcr值与从ts码流中获取的pcr值比较,判断是否存在偏差,若存在偏差,则对本地时基进行偏差补偿,由偏差补偿后的本地时基得到最终校正的pcr值。
[0049]
与现有技术相比,本发明技术方案的有益效果是:
[0050]
本发明根据pcr值和本地计数器值计算本地时钟与源端时钟的频差信息,相对于传统方法,本发明的频差计算的收敛时间要大大缩短,具有更高的实用意义,同时,本发明利用偏差补偿对由于ts码流传输时由于抖动出现的ts包位置偏差问题进行解决,得到更加精确的pcr校正值。
附图说明
[0051]
图1为本发明的方法流程示意图。
[0052]
图2为实施例提供的在源端发送的ts码流及到本地接收ts码流分别使用计数器计数的结果。
[0053]
图3为实施例提供的由于抖动导致的在源端发送的ts码流及到本地接收ts码流分别使用计数器计数的结果。
[0054]
图4为本发明的系统模块示意图。
[0055]
图5为实施例提供的时基同步和补偿模块的功能框图。
[0056]
图6为实施例提供的频差补偿模块运行过程示意图。
[0057]
图7为实施例提供的偏差补偿模块运行过程示意图。
具体实施方式
[0058]
附图仅用于示例性说明,不能理解为对本专利的限制;
[0059]
为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;
[0060]
对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
[0061]
下面结合附图和实施例对本发明的技术方案做进一步的说明。
[0062]
实施例1
[0063]
本实施例提供一种基于频差检测和补偿的pcr校正方法,如图1所示,包括以下步骤:
[0064]
接收ts码流,从所述ts码流中获取pcr值,从本地计数器中获取本地计数器值;
[0065]
根据所述pcr值和本地计数器值计算本地时钟与源端时钟的频差信息;
[0066]
根据所述频差信息,对本地时基进行同步及频差补偿;
[0067]
利用频差补偿后的本地时基对pcr值进行再生校正。
[0068]
从所述ts码流中获取pcr值,具体为:
[0069]
所述ts码流包括若干pcr包,所述获取pcr值为获取每个pcr包中对应的pcr值。
[0070]
所述从本地计数器中获取本地计数器值,具体为:
[0071]
所述本地计数器值为接收到ts码流中每个pcr包时对应的本地计数器值。
[0072]
根据所述pcr值和本地计数器值计算本地时钟与源端时钟的频差信息,具体为:
[0073]
根据本地时钟计数器值计算本地计数器差值:
[0074]
δcntn'=cntn'-cnt0'
[0075]
式中,δcntn'为第n+1个pcr包时对应的本地计数器差值,cntn'表示接收到ts码流中第n+1个pcr包时对应的本地计数器值,cnt0'表示接收到ts码流中第1个pcr包时对应的本地计数器值;
[0076]
根据所述pcr值计算pcr差值:
[0077]
δpcrn=pcr
n-pcr0[0078]
式中,δpcrn为第n+1个pcr包时对应的pcr差值,pcrn表示第n+1个pcr包对应的pcr值,pcr0表示第1个pcr包对应的pcr值;
[0079]
计算第一参数an:
[0080][0081]
计算第二参数bn:
[0082][0083]
所述本地时钟与源端时钟的频差信息δf'为:
[0084]
δf'=floor(10m×an
/bn)
[0085]
式中,floor()为取整函数,m为大于等于6的整数,因为晶振的频差是ppm,即百万分之几级别的,所以需要先将频差结果乘于10^6或更高精度的值,才能将结果取到合理的精度值,m就代表了取精度的参量。
[0086]
依据该方法计算的频差信息收敛速度快,具体为:
[0087]
首先介绍源端时钟和本地时钟频差对pcr校正的影响。图2示例了在源端发送的ts码流及到本地接收ts码流分别使用计数器计数的结果;
[0088]
ts码流的源端和本地接收端,其所使用的参考27mhz时钟晶振不是同一个,虽然标称值相同,但会存在一定程度的频差,这个频差就是两个时钟非同源所造成的,也是pcr校正中本地再生pcr会产生累积偏差的原因。如图所示,假设源端发送pcr包的时刻点记为(t0、t1、t2、t3、t4、
……
、tn),依照源端的时钟频率f可以推算出两个包之间用频率f计数的时钟个数:
[0089]
cntn=(t
n-t0)*f——(式-1)
[0090]
假设每个ts包从源端传输到接收端接所经历的时延δ一致,则在接收端收到ts包后,在接收端使用本地时钟f

计数的两个包之间的时钟个数为:
[0091]
cnt
′n=((tn+δ)-(t0+δ))*f

=(t
n-t0)*f

——(式-2)
[0092]
通过比对(式-1)和(式-2)并分析可知,频差可以表征为:
[0093][0094]
在上式中,cntn可以通过两个pcr包之间的pcr值相减得到,cnt
′n可以通过在接收到pcr包的时刻使用本地时钟计数得到。因此从理论上分析,只要源端至本地端接收过程中ts包无抖动,且时延一致,则可以通过(式-3)来获得本地端和源端的时钟频差信息。
[0095]
上述计算本地端和源端的时钟频差信息是现有技术的做法,然而在接收端接收ts流时,存在ts流的接收及码流复用所带来的位置抖动,尤其是在ip传输中抖动更为明显,这些抖动可以看作是时间测量噪声,会影响频差检测的结果。一般ts包的抖动可以达到毫秒级别,相对于短时间的频差的累积效应影响较为突出。
[0096]
如图3所示,由于存在传输抖动在接收端复用后pcr包的时延不完全一致,相对位置会发生了变化,时钟计数值cnt
′n的表达式也发生了变化:
[0097]
cnt
′n=(t
n-t0)*f

+(δ
n-δ0)*f

——(式-4)
[0098]
原(式-3)则变为:
[0099][0100]
在(式-5)中相比(式-3)多了右边的加和项这就是由于ts包位置发生抖动而带来的对频差计算的影响。通过(式-5)要获得足够精度的频差结果,即δf
′→
δf,需要至少需要比真实项小数个数量级,即这样δf

才能主要由δf来表征。
[0101]
现在来研究一下加和项其因式中的因此加和项

n-δ0)表示的是经过复用后ts包的位置抖动带来的时间噪声,其值是不固定的,其统计分布规律应服从于正态分布的白噪声,实际应用中有边界,具体的值取决与传输网络的抖动,实际系统中经验边界值可达到20ms左右,对样点的求和平均随样点的增加应趋近于0。(t
n-t0)是第n个pcr包相对于第0个pcr包的时间间隔,其随着n值的递增而逐步增大。因此,随着n的增加将逐步变小,这是一种按线性速度而收敛的一种算法方式。
[0102]
理论上,可以通过时间的推移,n值增大,逐步趋近于0从而得到足够精度的δf

。然而,真实的频差δf本来就非常之小,按当前晶振的制造工艺,相同标称值的晶振频差δf约为10ppm~20ppm,即百万分之10至百万分之20,为了得到足够精度的δf

,的值需要比频差δf小两个数量级以下,在本例中取为小于千万分之1。以(δ
n-δ0)最大偏差20ms及晶振频差以20ppm来估计,(t
n-t0)约为200000秒,即约56小时的时长才能使δf

≈δf。也就是说系统上电后需经过56小时才能获得本地时钟相对于源端时钟的足够精度的频差信息,收敛的时间太长,所以这种按线性级速度收敛的方法是无法在存在传输抖动的场景中应用的。
[0103]
本实施例的一个有益之处在于,设计了一个方法能够快速的检测得出频差信息,其得到足够精度的频差信息是按指数级速度收敛的。下面描述其算法原理。
[0104]
定义δcntn=cnt

n-cntn,替入(式-1)和(式-4),则有:
[0105]
δcntn=(t
n-t0)*(f
′‑
f)+(δ
n-δ0)*f

——(式-6)
[0106]
再定义:
[0107][0108]
(式-7)中随着样点数n递增,噪声求和项由于是正态分布并不会随着求和次数增加而增加,而是被控制在与最大偏差相近数量级的数值范围内。而时间间隔求和项却会随着求和次数而指数级递增,因此其收敛速度是指数级收敛的。假设的最大值是100ms,源端是按20ms发送一个pcr包,则有:则(式-7)变为:
[0109][0110]
为了获得足够的频差精度,同样以小于千万分之1来估算n值,n值只要达到10000即可,时长为10000*20ms=200秒,亦即系统上电运行200秒左右即可获得比较高的频差精度,而且随着时间的推移样点数增加,频差检测的精度会越来越精确。
[0111]
根据所述频差信息,对本地时基进行同步及频差补偿,具体为:
[0112]
根据所述pcr值对本地时基进行初始同步,然后本地时基按照本地时钟进行计数,
在计数过程中使用频差信息对本地计数器进行均匀化补偿。
[0113]
由于得到本地时钟与源端时钟的频差信息δf

的过程中需要对an/bn的预设精度值进行取整,存在舍尾的操作,因此精度上仍有缺失,需要通过频差补偿和偏差补偿两部分进行补偿。
[0114]
频差补偿,即是补偿频差部分带来的影响。由上面的论述可知,δf

是对an/bn取整的结果,假设其值为19ppm,即百万分之19,即表示在本地时基同步之后,需要在此后用本地时钟计数的过程中,每计数100万个时钟节拍,需要补偿插入19个时钟节拍,需要注意的是这个补偿的方式必须是均匀的,即19个时钟节拍是几乎等间隔的每次插入一个节拍,而非一次性的插入补偿。频差的结果可能是负值,假设为-19ppm,即表示每计数100万个时钟节拍,需要补偿扣除19个时钟节拍,同样的,扣除19个时钟节拍也必须是等间隔的操作。
[0115]
偏差补偿,由前面论述可知频差δf

是对an/bn取整的结果,即仍有很小的部分未能完全补偿,加上统计和计算上存在的误差,不可避免仍会对检测结果造成误差,只要有误差就会有积累效应,因此系统长时间运行之后一定仍会造成本地校正后的pcr与源端pcr值的单向偏离。请注意ts包的抖动是随机的,其偏离方向是不固定的,而频差所造成的偏离一定是单向的,只要时间足够长,频差累积效应足够明显,则一定可以监测到本地pcr与源端pcr之间的差值的方向性,即为正值或负值的概率明显偏高,即可以判定偏差的方向。偏差补偿的方法是取一定时器,在定时周期以内观察偏差的方向,如果偏差的结果是正方向,则在定时器定时结束的时刻向负方向补偿1个时钟节拍,如果偏差的结果是负方向,则在定时器定时结束的时刻向正方向补偿一个时钟节拍,可以通过调节定时器的定时长度让偏差补偿有足够的灵敏度。
[0116]
还包括将初步再生校正的pcr值与从ts码流中获取的pcr值比较,判断是否存在偏差,若存在偏差,则对本地时基进行偏差补偿,由本地时基得到最终校正的pcr值。
[0117]
所述将初步再生校正的pcr值与从ts码流中获取的pcr值比较,判断是否存在偏差,具体为:
[0118]
将校正后的pcr值与从所述ts码流中获取的pcr值作差,连续监测n次所述差值,如果所述差值均为正值或负值,则判断存在偏差。
[0119]
所述对本地计数器进行偏差补偿,具体为:
[0120]
判断偏差的方向,所述判断偏差的方向,具体为:根据校正后的pcr值与从所述ts码流中获取的pcr值的差值为正值或负值,判断为正偏或负偏;
[0121]
设定定时时间t,每达到定时时间后,根据偏差的方向,对本地时基进行反方向的偏差补偿,对本地时基进行反方向的偏差补偿时,每次只补偿一个计数单位。
[0122]
本实施例中监测次数n和定时时间t的具体取值,可以在实际使用过程进行经验修正的参量,且其定时时间t与监测次数n的相互配合可以让偏差补偿更趋合理和精准。
[0123]
正常频差补偿完成之后,如果没有误差,那么校正后的pcr值与源端pcr值的比较关系主要取决于源端ts流的抖动,所以其差值可能是正值也可能是负值,类似于噪声。连续监测n次pcr差值,如果均是正值或者是负值,则可以判别为存在偏差,且可以得出偏差的方向。在得出偏差方向之后,可以设定一个定时计数器,该定时计数器定时时间可以根据实际情况进行调整,定时时间到之后根据前述得出的偏差进行正偏或者负偏的补偿,这个补偿是一个细微的补偿,每次补偿一个计数单位。
[0124]
实施例2
[0125]
本实施例提供一种基于频差检测和补偿的pcr校正系统,如图4所示,包括:
[0126]
接收模块,所述接收模块用于接收ts码流,从所述ts码流中获取pcr值,从本地计数器中获取本地计数器值;
[0127]
频差检测模块,所述偏差检测模块用于根据所述pcr值和本地计数器值计算本地时钟与源端时钟的频差信息;
[0128]
时基同步及补偿模块,所述时基同步及补偿模块用于根据所述频差信息,对本地时基进行同步及频差补偿;
[0129]
pcr校正模块,所述pcr校正模块利用频差补偿后的本地时基对pcr值进行再生校正;
[0130]
偏差估计模块,所述偏差估计模块将将初步再生校正的pcr值与从ts码流中获取的pcr值比较,判断是否存在偏差,若存在偏差,则对本地时基进行偏差补偿,由偏差补偿后的本地时基得到最终校正的pcr值。
[0131]
其中,如图5所示,时基同步及补偿模块中,根据频差信息对本地时基进行频差补偿,根据ts码流的同步信息对本地时基进行初始同步,根据偏差信息对本地时基进行偏差补偿。
[0132]
如图6所示,为从上电运行后至频差结果稳定,频差补偿模块运行输出补偿指示至本地时基的运行过程。
[0133]
如图7所示,为偏差补偿模块的运行过程。
[0134]
实施例3
[0135]
本实施例提供一种计算机介质,所述计算机介质上存储有计算机程序,所述计算机程序被处理器执行时实现实施例1所述的基于频差检测和补偿的pcr校正方法。
[0136]
相同或相似的标号对应相同或相似的部件;
[0137]
附图中描述位置关系的用语仅用于示例性说明,不能理解为对本专利的限制;
[0138]
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1