首页> 中国专利> 一种检测变长编码码流错误的方法和解码及错误检测装置

一种检测变长编码码流错误的方法和解码及错误检测装置

摘要

本发明公开了一种检测变长编码码流的方法和解码及错误检测装置。该方法包括:解码码流中的数据帧;根据数据帧的长度信息和已解码数据位数判断数据帧是否出错。通过上述方式,本发明实现数据帧在解码过程中即可检测出数据帧是否出错。

著录项

  • 公开/公告号CN103269257A

    专利类型发明专利

  • 公开/公告日2013-08-28

    原文格式PDF

  • 申请/专利权人 联发科技(新加坡)私人有限公司;

    申请/专利号CN201310176084.X

  • 发明设计人 玉靖坚;

    申请日2013-05-13

  • 分类号H04L1/00(20060101);

  • 代理机构深圳市威世博知识产权代理事务所(普通合伙);

  • 代理人李庆波

  • 地址 138628 启汇城大道一号索拉斯大厦三楼之一

  • 入库时间 2024-02-19 20:08:03

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-11-17

    专利权人的姓名或者名称、地址的变更 IPC(主分类):H04L1/00 变更前: 变更后: 申请日:20130513

    专利权人的姓名或者名称、地址的变更

  • 2016-08-24

    授权

    授权

  • 2014-03-26

    专利申请权的转移 IPC(主分类):H04L1/00 变更前: 变更后: 登记生效日:20140305 申请日:20130513

    专利申请权、专利权的转移

  • 2013-09-25

    实质审查的生效 IPC(主分类):H04L1/00 申请日:20130513

    实质审查的生效

  • 2013-08-28

    公开

    公开

说明书

技术领域

本发明涉及音频信号处理领域,特别是涉及一种检测变长编码码流 错误的方法和解码及错误检测装置。

背景技术

变长编码(Variable-Length Coding,VLC)是指对数据采用不同长 度的码字进行编码。具体来说,对出现概率高的数据采用短码字编码, 对出现概率低的数据采用长码字编码,由此提高整体编码的效率。采用 VLC编码,由于码字的长度不固定,在解码完成之前无法知道需要解码 多少数据量。目前对数据帧的解码需要根据码字查询码表继而还原出码 字所对应的初始值。其中,从码表中可以获取得到码字的长度范围、码 字与初始值的对应关系等等。如果在传输过程中,码流中的数据出现位 反转或者其它传输错误,可能出现为了解出采用VLC编码的码流而读 取的数据量发生改变的情况,并导致解出的码流与原码流不一致的问 题。

具体来说,VLC编码包括哈夫曼编码(Huffman)、香农-凡诺算法、 指数哥伦布编码等。以Huffman编码的码流为例来说,假设原码流需要 传送的数据帧内信源符号依次为a1,a5,a7,a1,a3,a4,根据表一Huffman 码表中信源符号与码字的对应关系,对信源符号进行编码可得到原码流 为10,010,0111,10,000,001,其中,原码流共包括6个码字。

表一Huffman码表

信源符号ai概率p(ai) 码字Wi码长Kial0.20 10 2 a20.19 11 2 a30.18 000 3

a40.17 001 3 as0.15 010 3 a60.10 0110 4 a70.01 0111 4

在传送的过程中,可能由于传输信道的不稳定或者其它原因出现传 输错误,导致解码端接收到的码流发生变化。假设解码端接收到的码流 为:10,011,0111,10,000,001。当对接收到的码流进行解码时,解 码端首先读取到数据“10”并解码得到对应的信源符号为a1,继续读取 数据“011”,因无法在表一中找到对应的码字,则继续读取下一位数据 “0”(即读取的数据为“0110”),解码得到对应的信源符号为a6,…… 依次读取数据并进行解码,当解码出6个码字时,最后得到解出的码流 对应的信源符号依次为:a1,a6,a2,a2,a3,a3,且最后一位数据“1” 未进行解码。此时出现解码错误,亦即出现解出码流而读取的数据量变 少,且解出的码流与原码流不一致的情况。

又假设解码端接收到的码流变化为:10,011,0011,10,000,001, 则依次读取数据并进行解码,首先得到前5个码字对应的信源符号依次 为:a1,a6,a7,a3,a3。因编码端传送的原码流共包括6个码字,则解 码端继续进行第6个码字的解码,又因为在完成前5个码字解码后码流 中仅剩余一位数据“1”,而表一中码长范围的最小值为两位数据,因此 解码端将读取紧接的下一数据帧内的至少一位数据以完成对6个码字的 解码。此时,出现为解出码流而读取的数据量变多,并且解出的码流与 原码流不一致的情况。

另一方面,采用VLC编码的码流,如果解码端在对接收到码流进 行解码的过程中,码表发生变化,也将导致解出的码流与原码流不一致。

在实际应用中,当VLC编码应用于不同音频格式,例如,高级音 频编码(Advanced Audio Coding,AAC)、动态影像专家压缩标准音频层 面3(Moving Picture Experts Group Audio Layer III,MP3)、无损音频压 缩编码(Free Lossless Audio Codec,FLAC)格式等的码流中时,如果 传输的过程中因某些原因(例如,传输信道不稳定)而发生码流传输错 误或者码表在存储的过程发生错误,将导致码流中的数据帧因解码错误 而出现声音不连续或尖锐爆音,严重时甚至出现系统当机的情况。

为解决上述问题,现有技术的一种做法是,对于携带循环冗余校验 码(Cyclic Redundancy Check,CRC)的码流,在整个数据帧解码完成 后,对数据帧做CRC校验以检测数据帧是否出错。该方法在数据帧解 码完成后才能通过校验结果判读数据帧是否出错,其在数据帧解码过程 中无法检测数据帧是否出错,从而无法防止出现数据帧出错导致系统运 行异常的问题。

发明内容

有鉴于此,本发明提供一种检测变长编码码流错误的方法和解码及 错误检测装置。

根据本发明一实施例,本发明提供一种检测变长编码码流错误的方 法,该方法包括:

解码码流中的数据帧;

根据数据帧的长度信息和已解码数据位数判断数据帧是否出错。

根据本发明另一实施例,本发明提供一种检测变长编码码流错误的 方法,该方法包括:

依据码表解码码流中的数据帧;

根据码表和当前取位数判断数据帧是否出错。

根据本发明再一实施例,本发明提供解码及错误检测装置,该装置 包括:

解码模块;

第一判断模块,耦接于解码模块;以及

出错处理模块,耦接于第一判断模块,其中在解码模块解码码流中 的数据帧后,第一判断模块根据数据帧的长度信息和已解码数据位数判 断数据帧是否出错,当第一判断模块判断数据帧出错时,出错处理模块 对数据帧进行出错处理。

根据本发明再一实施例,本发明提供一种解码及错误检测装置,该 装置包括:

解码模块;

第一判断模块,耦接于解码模块;以及

出错处理模块,耦接于第一判断模块,其中在解码模块依据码表解 码码流的数据帧后,第一判断模块根据码表和当前取位数判断数据帧是 否出错,当第一判断模块判断数据帧出错时,出错处理模块对数据帧进 行出错处理。

本发明的有益效果是:区别于现有技术的情况,本发明的检测变长 编码码流错误的方法和解码及错误检测装置通过解码码流中的数据帧; 根据数据帧的长度信息和已解码数据位数判断数据帧是否出错,实现了 数据帧在解码过程中即可检测出数据帧是否出错,进而防止数据帧出错 导致系统运行异常的问题。

附图说明

图1是本发明实施例的嵌入式音频解码器的结构示意图;

图2是图1中的解码及错误检测装置第一范例的结构示意图;

图3是图1中的解码及错误检测装置第二范例的结构示意图;

图4是图1中的解码及错误检测装置第三范例的结构示意图;

图5是图1中的解码及错误检测装置第四范例的结构示意图;

图6是本发明第一实施例的检测变长编码码流错误的方法的流程图;

图7是本发明第二实施例的检测变长编码码流错误的方法的流程图;

图8是本发明第三实施例的检测变长编码码流错误的方法的流程图;

图9是本发明第四实施例的检测变长编码码流错误的方法的流程图;

图10是本发明第五实施例的检测变长编码码流错误的方法的流程 图;

图11是本发明第六实施例的检测变长编码码流错误的方法的流程 图。

具体实施方式

在说明书及权利要求书当中使用了某些词汇来指称特定的组件。所 属领域中的技术人员应可理解,制造商可能会用不同的名词来称呼同样 的组件。本说明书及权利要求书并不以名称的差异来作为区分组件的方 式,而是以组件在功能上的差异来作为区分的基准。在通篇说明书及权 利要求书当中所提及的「耦接」一词在此包含任何直接及/或间接的电气 耦接手段。因此,若文中描述第一装置耦接于第二装置,则代表第一装 置可直接电气耦接于第二装置,或透过其它装置或耦接手段间接地电气 耦接至第二装置。下面结合附图和实施例对本发明进行详细说明。

请参照图1,图1是本发明实施例的嵌入式音频解码器的结构示意 图。如图1所示,嵌入式音频解码器包括:异步先进先出存储器1、取 位器2、帧大小判别器3、控制器4、解码及错误检测装置5、后处理模 块6、音频输出模块7和模数转换器8。

异步先进先出存储器1用于对连续的待解码的码流进行缓存。

取位器2与异步先进先出存储器1耦接,用于从异步先进先出存储 器1获取待解码的码流数据。在嵌入式系统中,取位操作可采用硬件取 位电路来实现,也可采用软件取位来实现。其中,采用硬件取位电路的 取位器2具有很好的实时性。采用软件取位的取位器2可方便地实现缓 冲错误保护(Buffer Error Protection)功能,保证取位操作的准确性。本 说明书在此不做限制。

帧大小判别器3与异步先进先出存储器1耦接,用于检查异步先进 先出存储器1中是否缓存有长度至少为当前解码所需数据长度的数据。 以解码AAC帧头为例来说,AAC数据帧中帧头长度固定为7个字节, 则帧大小判别器3检查异步先进先出存储器1中是否缓存有至少7个字 节的数据。

在本实施例中,取位器2采用硬件取位电路来实现。由于实现缓冲 错误保护功能需要加大电路面积以及采用更复杂的设计,大大增加成 本,因此硬件取位电路一般不带有缓冲错误保护功能,而帧大小判别器 3可有效防止硬件取位电路出错。因此在本实施例中,取位器2在取位 前通过帧大小判别器3确认异步先进先出存储器1是否保存有足够量数 据,以保证取位器2的正确取位。控制器4分别与帧大小判别器3、解 码及错误检测装置5和后处理模块6耦接,用于控制和协调整个音频解 码器的工作。当帧大小判别器3检查到异步先进先出存储器1中缓存有 至少当前解码所需数据长度的数据时,控制器4控制取位器2执行获取 异步先进先出存储器1中的数据的操作,并控制取位器2将获取到的数 据传递给解码及错误检测装置5以对待解码的码流进行解码操作以及错 误检测。当解码及错误检测装置5完成解码操作以及错误检测后,控制 器4进一步控制解码及错误检测装置5将已解码的码流数据传递给后处 理模块6进行后续处理以还原出原始的音频数据。

解码及错误检测装置5分别与取位器2和后处理模块6耦接,用于 解码码流中的数据帧,并根据数据帧的长度信息和已解码数据位数判断 数据帧是否出错。其中,数据帧的长度信息可从数据帧的帧头提供的信 息、或数据帧的规格书(Specification)中提供的信息、或通过其它途径 传递到解码端的信息获取得到。

以AAC为例来说,解码及错误检测装置5通过取位器2从异步先 进先去存储器1获取若干数据位数后,通过查表(例如,二叉树搜索方 法)得到解码出来的尺度因子或频谱数据。在解码的过程中,解码及错 误检测装置5进一步判断数据帧是否出错,若出错,进行出错处理。

后处理模块6分别与解码及错误检测装置5和音频输出模块7耦接, 用于接收解码后的码流数据并对接收到的数据进行后续处理,接着将完 成处理的数据输出给音频输出模块7。以AAC为例,后处理模块6对解 码后的尺度因子或频谱数据进行反量化、应用尺度因子、预测、声强/ 耦合、瞬时噪声定形、滤波器组和增益控制等处理后,得到脉冲编码调 制(Pulse-code modulation,PCM)音频数据。本领域技术人员了解音频 处理中后处理模块6,在此不再赘述。

音频输出模块7分别与后处理模块6和模数转换器8耦接,用于接 收处理后的数据,并通过模数转换器8将处理后的数据转换为模拟信号, 接着输出给喇叭(未图示)。

请参照图2,图2是图1中的解码及错误检测装置第一范例的结构 示意图。如图2所示,解码及错误检测装置5包括:解码模块10、第一 判断模块11和出错处理模块12。

解码模块10分别与取位器2和后处理模块6耦接,用于从取位器2 获取待解码的码流数据后,解码码流中的数据帧,进一步将解码后的码 流数据传送给后处理模块6。第一判断模块11与解码模块10耦接,在 解码模块10执行解码码流中的数据帧的操作时,根据数据帧的长度信 息和已解码数据位数判断数据帧是否出错。出错处理模块12与第一判 断模块11耦接,在第一判断模块11判断数据帧出错时,对数据帧进行 出错处理。

请参照图3,图3是图1中的解码及错误检测装置第二范例的结构 示意图。如图3所示,解码及错误检测装置5包括:解码模块20、第一 判断模块21和出错处理模块22。

解码模块20、出错处理模块22和图2解码及错误检测装置第一范 例中的解码模块10、出错处理模块12类似,在此不再赘述。

当解码模块20依据码表解码数据帧时,第一判断模块21根据码表 和当前取位数判断数据帧是否出错。具体来说,第一判断模块21包括 码长范围获取单元211和第二判断单元212。

码长范围获取单元211与解码模块20耦接,用于获取与码表中当 前取位数据对应的码字的码长范围。

第二判断单元212与码长范围获取单元211耦接,从码长范围获取 单元211获取码长范围后,判断当前取位数是否在码长范围内。其中, 当第二判断单元212判断当前取位数未在码长范围内时,出错处理模块 22对数据帧进行出错处理。

请参照图4,图4是图1中的解码及错误检测装置第三范例的结构 示意图。如图4所示,解码及错误检测装置5包括:解码模块30、第一 判断模块31和出错处理模块32。

解码模块30、出错处理模块32和图2解码及错误检测装置第一范 例中的解码模块10、出错处理模块12类似,在此不再赘述。

当解码模块30依据码表解码数据帧时,第一判断模块31根据长度 信息判断累计取位数是否在数据帧的长度范围内以判断数据帧是否出 错。具体来说,第一判断模块31包括剩余数据位数获取单元311、预定 数据位数范围获取单元312和第一判断单元313。

剩余数据位数获取单元311与解码模块30耦接,用于根据累计取 位数获取数据帧内未解码的剩余数据位数。具体来说,剩余数据位数获 取单元311用于根据长度信息和累计取位数获取数据帧内未解码的剩余 数据位数。其中,剩余数据位数对应于数据帧的长度和累计取位数之差。

预定数据位数范围获取单元312与解码模块30耦接,用于根据码 表获取数据帧内未解码的码字对应的预定数据位数范围。具体来说,预 定数据位数范围获取单元312分别获取数据帧内未解码的码字所使用的 码表的码长范围,根据未解码的码字所使用的码表的码长范围获取未解 码的码字对应的预定数据位数范围。其中,预定数据位数范围对应于未 解码的码字所使用的码表的码长范围的累计求和值。

第一判断单元313分别与剩余数据位数获取单元311和预定数据位 数范围获取单元312耦接,用于从剩余数据位数获取单元311获取剩余 数据位数,从预定数据位数范围获取单元312获取预定数据位数范围, 判断剩余数据位数是否在预定数据位数范围内。其中,当第一判断单元 313判断剩余数据位数未在预定数据位数范围内,出错处理模块32对数 据帧进行出错处理。

请参照图5,图5是图1中的解码及错误检测装置第四范例的结构 示意图。如图5所示,解码及错误检测装置5包括:解码模块40、第一 判断模块41、出错处理模块42和第二判断模块43。

解码模块40、出错处理模块42和图2解码及错误检测装置第一范 例中的解码模块10、出错处理模块12类似,在此不再赘述。

解码模块40依据码表解码数据帧时,第一判断模块41根据长度信 息判断累计取位数是否在数据帧的长度范围内,以及判断当前取位数是 否在码长范围内来判断数据帧是否出错。

具体来说,第一判断模块41包括剩余数据位数获取单元411、预定 数据位数范围获取单元412、第一判断单元413、码长范围获取单元414 和第二判断单元415。

剩余数据位数获取单元411、预定数据位数范围获取单元412、第 一判断单元413和图4中剩余数据位数获取单元311、预定数据位数范 围获取单元312、第一判断单元313类似,码长范围获取单元414和第 二判断单元415和图3中码长范围获取单元211和第二判断单元212类 似,为简洁起见,此处不再赘述。

另外,第二判断模块43分别与第一判断单元413和解码模块40耦 接,当第一判断单元413判断剩余数据位数在预定数据位数范围内时, 第二判断模块43进一步判断是否已完成数据帧内所有码字的解码;若 第二判断模块43判断未完成数据帧内所有码字的解码,解码模块40依 据码表解码当前数据帧中的码字;若第二判断模块43判断已完成数据 帧内所有码字的解码,解码模块40依据码表解码码流中的下一数据帧。

图6是本发明第一实施例的检测变长编码码流错误的方法的流程 图。需注意的是,若有实质上相同的结果,本发明的方法并不以图6所 示的流程顺序为限。如图6所示,该方法包括如下步骤:

步骤S201:解码码流中的数据帧;

步骤S202:根据数据帧的长度信息和已解码数据位数判断数据帧是 否出错。

在步骤S201中,码流可以为AAC、MP3、APE、FLAC、APLC或 其他变长编码音频格式的码流,码流以数据帧的格式传输编码后的音频 数据,码流中的数据帧被解码后还原出码流中的音频数据。

在步骤S202中,数据帧的长度信息可从数据帧的帧头提供的信息、 或数据帧的规格书(Specification)中提供的信息、或通过其它途径传递 到解码端的信息获取得,已解码数据位数为数据帧中已解码的帧数据的 比特数。根据数据帧的长度信息和已解码数据位数之间的差异,可以判 断数据帧在解码的过程中是否发生数据帧解码错误,进而进行相应的出 错处理。

通过上述实施方式,本发明第一实施例的检测变长编码码流错误的 方法通过数据帧的长度信息和已解码数据位数来判断数据帧是否出错, 实现了在CRC校验前即能检测出数据帧出错,从而避免数据帧出错导 致的系统异常。具体来说,上述方法避免了因数据帧解码错误而出现声 音不连续或尖锐爆音,甚至导致系统当机的问题。

图7是本发明第二实施例的检测变长编码码流错误的方法的流程 图。需注意的是,若有实质上相同的结果,本发明的方法并不以图7所 示的流程顺序为限。如图7所示,该方法包括如下步骤:

步骤S301:解码码流中的数据帧;

在本实施例中,步骤S301与图6中的步骤S201类似,在此不再赘 述。

步骤S302:根据长度信息判断累计取位数是否在数据帧的长度范围 内,若是,返回步骤S301,若否,执行步骤S303;在步骤S302中,累 计取位数为从数据帧中累计已解码的数据位数。

举例来说,假设数据帧中有5个码字,其分别为A1、A2、A3、A4、 A5,其对应的数据位数(以字节(Byte)为单位)分别为2、3、4、3、 2。通常,对数据帧的解码是顺序进行的,也即解码出A1后再解码A2, 解码出A2后再解码A3,……,依此类推,直至解码出数据帧中所有数 据。在正常解码的条件下,假设已解码出A2,则对应的累计取位数为 A1、A2的数据位数之和,即5字节;又假设已解码出A3,则对应的累 计取位数为A1、A2、A3的数据位数之和,即9字节。

下面将承接上述举例阐述根据数据帧的长度信息判断累计取位数 是否在数据帧的长度范围内的具体操作。

数据帧的长度信息可从数据帧的帧头提供的信息、或数据帧的规格 书中提供的信息、或通过其它途径传递到解码端的信息获取得到。在本 实施例中,获取得到的数据帧的长度为2+3+4+3+2,即14字节。

假设解码出A4时解到的位置是数据帧中的第15个字节,即累计取 位数为15字节,此时累计取位数(15字节)大于长度信息(14字节), 则可以判断出解码出A4时所对应的累计取位数大于数据帧的长度,也 即解码出A4时所对应的累计取位数不在数据帧的长度范围内,数据帧 出错。

假设已解码出最后一个编码数据,也即A5,此时解到的位置是数 据帧中的第12个字节,也即累计取位数为12字节,此时,累计取位数 小于长度信息,也即12字节小于14字节,可以判断出解码出A5所对 应的累计取位数小于数据帧的长度,也即解码出A5所对应的累计取位 数不在数据帧的长度范围内,数据帧出错。

步骤S303:对数据帧进行出错处理。在步骤S303中,出错处理包 括丢弃码流中的出错帧或者将码流中的出错帧输出静音等等。

通过上述实施方式,本发明第二实施例的检测变长编码码流错误的 方法根据数据帧的长度信息判断累计取位数是否在数据帧的长度范围 内来判断数据帧是否出错,具体来说,当未完成数据帧的解码而出现累 计取位数超出数据帧的长度范围,或当完成数据帧的解码而出现累计取 位数小于数据帧的长度范围,则可判断出数据帧出错,从而解决了现有 技术在数据帧解码完成后才能通过CRC校验检测出数据帧出错,避免 数据帧出错导致的系统异常。

图8是本发明第三实施例的检测变长编码码流错误的方法的流程 图。需注意的是,若有实质上相同的结果,本发明的方法并不以图8所 示的流程顺序为限。如图8所示,该方法具体包括如下步骤:

步骤S401:依据码表解码码流中的数据帧。

步骤S402:根据累计取位数获取数据帧内未解码的剩余数据位数; 在步骤S402中,根据数据帧的长度信息和累计取位数获取数据帧内未 解码的剩余数据位数,其中,累计取位数为从数据帧中累计已解码的数 据位数。

以AAC单声道码流为例,AAC单声道码流结构如下所示:

数据帧的结构如下所示:

数据帧包括帧头(FRAME HEADER),单声道单元 (Signal_Channel_Element,简写为SCE)和结束单元(Terminator,简 写为TERM)。具体来说,帧头包括12比特的帧头同步字(Syncword) “1111 1111 1111”和13比特的帧长度字(AAC_Frame_Length);SCE包 括独立通道流信息(Ics_info)数据和缩放因子带(Scalefactor Band,SFB) 数据,SFB数据采用huffman VLC编码,每个SFB数据就是一个码字, SFB数据位于帧尾;TERM固定为0X07,以标识数据帧的结束。

在对数据帧解码的过程中,通过读取AAC_Frame_Length的值可以 获取数据帧长度,该长度为数据帧的整个长度,可以理解为其它数据长 度和SFB数据长度之和。其中,其它数据长度为帧头长度、Ics_info长 度等等的累计和。

假设从AAC_Frame_Length得到数据帧的长度为163个字节,从 Ics_info获取得到传输的SFB数据的总数(MAX_SFB)为36个。

数据帧解码的过程中,假设已解码出第1个SFB,此时解到的位置 是数据帧中的第120个字节,也即累计取位数为120字节-其它数据长度, 此时,数据帧内未解码的剩余数据位数RENAIN_BITS=SFB数据长度- 累计取位数,而根据上述文件结构可知,SFB数据长度=163字节-其它 数据长度,故数据帧内未解码的剩余数据位数:

REMAIN_BITS=SFB数据长度-累计取位数=163-120=43字节。

步骤S403:根据码表获取数据帧内未解码的码字对应的预定数据位 数范围;在步骤S403中,首先分别获取数据帧内未解码的码字对应于 其所使用的码表的码长范围,然后根据码长范围获取所有未解码的码字 对应的预定数据位数范围。其中,预定数据位数范围对应于未解码的码 字所使用的码表的码长范围的累计求和值。

以AAC单声道码流为例来说,SCE中包括区段数据(Section_Data), 从Section_Data可获取得到SCE中每个SFB数据使用的码表信息。具 体来说,从Section_Data可获取得到未解码的码字对应的码表信息。例 如,根据Section_Data得知,第2-36个SFB使用的码表分别为:第2-14 个SFB使用码表6,第15-27个SFB使用码表4,第28-36个SFB使用 码表2。举例来说,码表6中的码字的码长范围为大于等于4比特小于 等于11比特,码表4中的码字的码长范围为大于等于4比特小于等于 11比特,码表2中的码字的码长范围为大于等于3比特小于等于9比特。

未解码的码字的预定数据位数范围的最大值MAX_BITS为第2-36 个SFB所使用的码表的最大码长的累计求和值,即当第2-14(共13)个 SFB的码长取11比特,第15-27(共13)个SFB的码长取11比特,第 28-36(共9)个SFB的码长取9比特时,最大码长范围为:

MAX_BITS=11*13+11*13+9*9=367比特。

未解码的码字的预定数据位数范围的最小值MIN_BITS为第2-36 个SFB所使用的码表的最小码长的累计求和值,即当第2-14个SFB的 码长取4比特,第15-27个SFB的码长取4比特,第28-36个SFB的码 长取3比特时,最小码长范围为:

MIN_BITS=4*13+4*13+3*9=131比特。

步骤S404:判断剩余数据位数是否在预定数据位数范围内,若在预 定数据位数范围内,执行步骤S405,若不在预定数据位数范围内,执行 步骤S407;

以AAC单声道码流为例来说,已解码出第1个SFB后剩余数据位 数为43字节,也即344比特,预定数据位数范围为大于等于131比特 小于等于367比特,因344比特在131比特与367比特的范围内,说明 在解码出第1个SFB后,剩余数据位数在预定数据位数范围内,则继续 执行步骤S405。

假设已解码出第1个SFB后,此时解到的位置是数据帧中的第116 个字节,则剩余数据位数=163-116=47字节=374比特,其大于预定数据 位数范围的最大值367比特,说明在解码出第1个SFB后,剩余数据位 数不在预定数据范围内,继续执行步骤S407。

步骤S405:判断是否已完成数据帧内所有码字的解码,若未完成, 继续执行步骤S401,若已完成,执行步骤S406;在步骤S405中,可将 已解码的最大码字序号与数据帧中码字的总数相比较并判断两者是否 相等;若不相等,则表示未完成数据帧内所有码字的解码,继续执行步 骤S401;若相等,则表示已完成数据帧内所有码字的解码,继续执行步 骤S406。

以AAC单声道码流为例来说,假设已解码出第20个SFB,则已解 码的最大码字序号为20,其小于MAX_SFB36,需继续解码数据帧中的 第21个SFB。假设已解码出第36个SFB,则已解码的最大码字序号为 36,其等于MAX_SFB,则表示数据帧已解码完毕,继续进行码流中下 一数据帧的解码。

步骤S406:依据码表解码码流中下一数据帧;

步骤S407:对数据帧进行出错处理。在步骤S407中,对数据帧进 行出错处理后,对排列在出错帧后的数据帧,可以通过寻找帧同步头的 方式确定数据帧的起始位置,继而通过对数据帧继续进行解码操作以还 原出原始数据。

过上述实施方式,本发明第三实施例的检测变长编码码流错误的方 法根据未解码的剩余数据位数是否在预定数据位数范围来判断数据帧 是否出错,可检测出因码流位反转或者其它传输错误而导致的数据帧出 错,避免了数据帧出错导致的系统异常。

图9是本发明第四实施例的检测变长编码码流错误方法的流程图。 需注意的是,若有实质上相同的结果,本发明的方法并不以图9所示的 流程顺序为限。如图9所示,该方法包括如下步骤:

步骤S501:依据码表解码码流中的数据帧;在本实施例中,步骤 S501与图8中的步骤S401类似,在此不再赘述。

步骤S502:根据码表和当前取位数判断数据帧是否出错。在步骤 S502中,获取与码表中当前取位数对应的码字的码长范围;判断当前取 位数是否在码长范围内;若当前取位数未在码长范围内,则对数据帧进 行出错处理。

当前取位数为当前解码的码字所对应的取位数。在嵌入式系统中, 码表一般保存在静态随机存储器(SRAM)或动态随机存储器(DRAM) 中,其与系统中的其它数据统一编址。本领域技术人员可以了解,不管 是SRAM还是DRAM,其存储单元的内容可按需随意取出或存入。如 果解码出错或者其它解码异常,在对SRAM或DRAM的存储单元进行 存入操作时,有可能导致码表的内容被修改或覆盖,进而导致当前取位 数不在码长范围内。

举例来说,假设码表中有6个码字a1,a2,a3,a4,a5,a6分别为10、 11、000、001、010、0110,可知当前码表的码长范围为大于等于2比特 小于等于4比特。若在解码的过程中码表中的码字a1被修改为11011, a2被修改为10,假设待解码的码流为1101101011,则根据码表解码出第 1个码字的原始值为a1,解码出第1个码字对应的当前取位数为5比特, 依次为11011,其大于当前码表的最大码长4比特,说明当前取位数不 在码表的码长范围内,由此可判断出在数据帧解码的过程中发生错误, 进而进行出错处理。

在本实施例中,进行出错处理可以为重新初始化存储在存储器中的 码表,以保证后续数据帧的正确解码。

通过上述实施方式,本发明第四实施例的检测变长编码码流错误的 方法根据码表和当前取位数来判断数据帧是否出错,可以检测出因存储 在随机存储器中码表发生变化而导致的数据帧出错,避免数据帧出错导 致的系统异常。

图10是本发明第五实施例的检测变长编码码流错误的方法的流程 图。需注意的是,若有实质上相同的结果,本发明的方法并不以图10 所示的流程顺序为限。

如图10所示,图10与图8中第三实施例主要区别在于:

在步骤S401后,图10进一步包括步骤S601和S602,具体如下所 示:

步骤S601:获取与码表中当前取位数对应的码字的码长范围;

具体而言,在图8实施例的基础上,当步骤S401执行完毕后,获 取当前已解码的码字对应的码长范围,也就是说,获取当前已解码的码 字所使用的码表的码长范围。

步骤S602:判断当前取位数是否在码长范围内,若在码长范围内, 则继续执行步骤S402,若不在码长范围内,则继续执行步骤S407。在 步骤S602中,若当前取位数在码长范围内,则表示数据帧的当前码字 的解码正常。若当前取位数不在码长范围内,则表示数据帧的解码在当 前码字已经发生错误。

图10所示流程图的其他步骤均已揭露于图8中,为简洁起见,此 处不再赘述。通过上述实施方式,本发明第五实施例的检测变长编码码 流错误的方法,首先通过判断当前取位数是否在码长范围内判断数据帧 是否出错,然后通过判断未解码的剩余数据位数是否在预定数据位数范 围进一步判断数据帧是否出错,可检测出因为码流位反转或者其它传输 错误,以及因存储在随机存储器中码表发生变化而导致的数据帧出错, 避免了数据帧出错而导致的系统异常。

图11是本发明第六实施例的检测变长编码码流错误的方法的流程 图。需注意的是,若有实质上相同的结果,本发明的方法并不以图11 所示的流程顺序为限。

如图11所示,图11与图8中第三实施例主要区别在于:

在步骤S404后,图11进一步包括步骤S701和S702。

图11所示流程图中的步骤S701和步骤S702与图10中的步骤S601 和步骤S602类似,图11所示流程图的其他步骤均已揭露于图8中,为 简洁起见,此处不再赘述。

通过上述实施方式,本发明第六实施例的检测变长编码码流错误的 方法,首先通过判断未解码的剩余数据位数是否在预定数据位数范围判 断数据帧是否出错,然后通过判断当前取位数是否在码长范围内进一步 判断数据帧是否出错,可检测出因为码流位反转或者其它传输错误,以 及因存储在随机存储器中码表发生变化而导致的数据帧出错,避免了数 据帧出错而导致的系统异常。

以上所述仅为本发明的实施方式,并非因此限制本发明的专利范 围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变 换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的 专利保护范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号