MPEG2标准的压缩分层和编码原理

2023-10-17 06:58

本文主要是介绍MPEG2标准的压缩分层和编码原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

在多媒体信号传输中,只有对音频和视频信号进行有效的编码,才能最后解析出高质量的声音和图像。本文介绍了MPEG2标准的压缩分层和编码原理,并说明了如何在芯片上实现MPEG2音频编码。

 

MPEG2是当今最为流行的AV压缩标准,可用于视频、音频和数字信息存储。完整的MPEG2标准可满足STB等广播应用和DVD或D-VHS等多媒体应用。MPEG2并非对MPEG2编码器进行标准化,而是为经过MPEG2编码的位流提供了一种标准化格式,另一方面,它也为MPEG2解码器提供了一个标准模式。

 

MPEG2标准的音频部分大致基于MPEG1标准,因此二者兼容性很强。这一点使得现有的MPEG1设备可对MPEG2信号中兼容MPEG1的部分信号进行解码,而MPEG2设备也可解码MPEG1信号,从而实现前向兼容。

 

压缩分层

 

MPEG2和MPEG1音频压缩可分为三层。层数越高,压缩的程度、所需CPU处理能力以及声音质量也相应增加;而传输所需的带宽则相应减少。因此,第一层的压缩率最低、所需CPU处理能力最低、延迟也最少。由于压缩率最低同时声音质量最差,因此它所需的传输带宽最大。而第三层的声音质量最佳,压缩率可达1:10。处理时间也几乎是第一层的三倍。表1可很好地说明这一点。

 

之所以将压缩分为三个层,一部分是基于需要,一部分则是历史原因。

 

首先,它很大程度取决于所压缩信号将用于哪种应用中。例如,当我们主要希望能再现高品质的声音,其次才关注处理能力/成本,那么应选择第三层。而如果主要考虑的是处理能力和成本,则可选择第一层或第二层。不过,如果选用的不是第三层,则声音在重现时会有所欠缺,因此,用户必须权衡考虑,选择适合于其特殊应用的那一层。

表1:MPEG2和MPEG1音频压缩可分为三层。

 

其次,压缩层的概念是逐渐发展而来的。第三层规范比第一、二层定得晚。当第三层规范开始流行时,采用第一、二层规范的设备已十分普及,消费者也非常熟悉了。因此,必须让消费者能自由地选择适合自己应用的那一层规范。

 

MPEG2音频压缩及编码

 

三层规范的音频压缩及编码过程如图1所示。滤波器组采用快速傅利叶变换(FFT)将时域采样转换成同样数目的频域采样。输出是一系列带宽相等的子带。心理声学模式过程计算每一子带的信号掩蔽比(SMR),以便决定每一子带可用于编码的信号位数。在信号位或噪声分配过程中,通过滤波器组的输出及SMR信息来决定每个子带可承受的量化噪声。量化噪声越高,这一子带所分配的信号位数就越低。在位流格式化模块中,子带频率采样与分配给该层的信号位及一些其它信息相结合,形成一个音频帧,这个帧包括一个信号头和其它信息段。

图1:三层规范的音频压缩及编码过程。

 

MPEG2音频增强功能

 

与MPEG1相比,MPEG2在以下方面有所改善。

 

1. 半采样率

 

在MPEG2中,仅需使用MPEG1中一半的采样率便可保持极佳的声音质量。这一点对评论频道、多语频道及多媒体等应用尤其有益,这些频道的频率范围为20Hz到20kHz,但极少使用。

 

2. 多频道扩展

 

MPEG2支持5个音频信道,共同实现一种“环绕”立体声效果,以便获得更为逼真的立体声。这5个信道分别是左信道(L)、右信道(R)、中央信道(C)、左后环绕信道(Ls)和右后环绕信道(Rs)。这种情况下,在前面布置3个高音音箱,在后面布置2个,因此也可称为3/2立体声。如图2所示。

图2:MPEG2支持5个音频信道,共同实现一种“环绕”立体声效果,以便获得更为逼真的立体声。

 

在芯片上实现MPEG2音频编码

 

MPEG2音频编码可以单独或与MPEG2视频编码一起在硬件上实现。在后一种情况下需要增加多路复用器或多路输出选择器,以进行相应的编码或解码;也可以采用一个编解码器来完成两个功能。通常MPEG2音频编码是通过DSP来实现的,这种方案成本更低而且更为灵活。MPEG2音频解码器芯片电路方块图如图3所示。

 

许多电子设备厂商生产的MP3播放器中都有这一系统,并带有MPEG2音频第三层解码器。一些MP3播放器可存储约1-2小时的音乐,这种情况下通常存储在记忆棒或闪存中。带有硬盘的播放器则可存储更多信息。图3:MPEG2音频解码器芯片电路方块图。

 

如果要同时实现MPEG2音频和视频编码,则两种数据流的多路复用是一个关键问题。可以在同一块芯片上进行音频和视频信号编码,也可以采用另一块芯片。这一过程由ITU 13818-3标准控制,可选择使用程序流(program stream)或传输流(transport stream)。在多路复用的情况下,MPEG2音频和视频信号共用带宽。除了音频和视频信号外,数据流中还携带了有关两种信号的合成信息。这种情况下,总的比特率(也称为系统比特率)是音频和视频信号比特率以及数据头和字节填充的总和。显然,视频部分占用了大部分带宽。当系统比特率高时,音频信号的比特率比视频信号或多路复用数据流的比特率低。这种情况下,由于带宽十分丰富,因此用户可对音频流的各种参数进行设置以获得最佳的声音质量。然而,如果比特率较低,情况就不太一样。如果音频部分稍稍浪费一些带宽,视频部分的带宽便会不够用。最后解析出来的视频质量便会严重受损。这种情况下应小心设置MPEG2音频参数。如将“音频PES调节”关闭,音频比特率也应该降低到192kbps或甚至128kbps。这些设置对改善MPEG2信息流解析质量十分有效。

 

作者:


Waqar Saleem


应用工程师


技术解决方案组


富士通微电子美国公司

这篇关于MPEG2标准的压缩分层和编码原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/223700

相关文章

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

VSCode中C/C++编码乱码问题的两种解决方法

《VSCode中C/C++编码乱码问题的两种解决方法》在中国地区,Windows系统中的cmd和PowerShell默认编码是GBK,但VSCode默认使用UTF-8编码,这种编码不一致会导致在VSC... 目录问题方法一:通过 Code Runner 插件调整编码配置步骤方法二:在 PowerShell