音频基础

声音的定义

声音是振动产生的声波,通过介质(气体、固体、液体)传播并能被人或动物听觉器官所感知的波动现象。

如何分析声音

我们通常听见的声音,是由于物体振动导致空气分子按照一定的频率产生疏密相间的排列而传播。
于是我们可以取一个单点,来测量这个点的气压随时间变化,横轴表示时间,纵轴表示气压,就可以得到一张波形图。

气压距离标准值偏差越大,说明振动越剧烈,所以振幅越大的波形表示声音越大,即响度越大。波形越紧密说明单位时间内振动的次数越多,频率越高,即音调越高。对于上图这样单频率的振动,通过波形图来看声音的相关信息是很简单明了的。而实际情况中,我们听到的声音往往是复杂振动的叠加,比如下图这样:

通过这个波形图,我们很难看出声音的有效信息,因为各个频率的波形都叠加在一起了。这时候我们就需要借助频谱图来帮忙了。
波形可以由多个频率、不同振幅和相位的简单正弦波复合叠加得到的。波形图的横坐标是时间,纵坐标是振幅,表示的是所有频率叠加的正弦波振幅的总大小随时间的变化规律。
将该复合波形进行傅里叶变换,拆解还原成每个频率上单一的正弦波构成,相当于把二维的波形图往纸面方向拉伸,变成了三维的立体模型,而拉伸方向上的那根轴叫频率,现在从小到大每个频率点上都对应着一条不同幅值和相位的正弦波。
频谱图则是在这个立体模型的时间轴上进行切片,形成的以横坐标为频率,纵坐标为幅值的图形。它表示的是一个静态的时间点上,各频率正弦波的幅值大小的分布状况。

数字化音频

声音的采集:对声音进行数字化,首先要使用特定的设备对声音进行采集,比如麦克风就是常见的声音采集设备。麦克风里面有一层碳膜,非常薄而且十分敏感。声音是一种纵波,会压缩空气也会压缩这层碳膜,碳膜在受到挤压时也会发出振动,在碳膜的下方就是一个电极,碳膜在振动的时候会接触电极,接触时间的长短和频率与声波的振动幅度和频率有关,这样就完成了声音信号到电信号的转换。之后再经过放大电路处理,就可以实施后面的采样、量化处理了。
声音的数字化过程是将模拟信号(连续时间信号)转化为数字信号(离散时间信号)的过程,包括 3 个步骤:
● 采样:以一定采样率在时域内获取离散信号。
● 量化:每个采样点幅度的数字化表示。
● 编码:以一定格式存储数据。

1)采样率
对模拟信号的采样一般遵循奈奎斯特采样定理:如果一个信号是带限的(即它的傅立叶变换在某一有限频带范围以外均为零),并且它的样本取得足够密(相对于信号中的最高频率而言),那么这些样本值就能唯一地用来表征这一信号,并且能从这些样本中把信号完全恢复出来。为了不失真地恢复模拟信号,采样频率应该不小于模拟信号频谱中最高频率的 2 倍。一般实际应用中保证采样频率为信号最高频率的 2.56~4 倍。
2)量化位深
量化位深是对模拟音频信号的幅度轴进行数字化,它决定了模拟信号数字化以后的动态范围。比如,8 bit 位深可以拥有 48 分贝的动态范围,16 bit 位深可以拥有 96 分贝的动态范围,24 bit 位深可以拥有 144 分贝的动态范围,32 bit 位深可以拥有 192 分贝的动态范围。这里位深和动态范围的数值对应关系的计算公式可以从上文声压级的计算公式推导而来。位深体现的是能表示的值的范围,比如 16 bit 能表示的最大值是 216 - 1 = 65535,那么取其最大值就能计算它能表示的最大声压级:最大声压级 = 20 × lg(65535) = 96.33。所以 16 bit 的位深可以最大表示 96 分贝。
3)声道
声道是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,所以声道数也就是声音录制时的音源数量或回放时相应的扬声器数量。
● 单声道(Mono):是以单个声道来重现声音。它只用了一个麦克风,一个扬声器或是耳机、并联扬声器,并从同样的信号路径送入信号,在并联扬声器中,虽有多个扬声器,但每个扬声器送入的仍是同一信号。
● 立体声(Stereo):是使用两个或多个独立的音效通道,在一对以对称方式配置的扬声器上出现。以此方法所发出的声音,在不同方向仍可保持自然与悦耳。
● 5.1 声道:包含一个正面声道、左前方声道、右前方声道、左环绕声道、右环绕声道,以及一个用来重放 120 Hz 以下超低频的声道。最早应用于早期的电影院,如杜比 AC-3。
● 7.1 声道:在 5.1 声道的基础上,把左右的环绕声道拆分为左右环绕声道以及左右后置声道。主要应用于蓝光以及现代的电影院。

数字化图像

其实图像的数字化跟声音的数字化也类似,最终都是要把模拟信号转换为数字信号,这种转换包括两种处理过程:采样和量化。
为了产生一幅数字图像,我们需要把连续的感知数据转换为数字形式。一幅平面图像中各个点的颜色值可以用其位置坐标 (x, y) 的函数 f(x, y) 来描述。显然,由于图像的 x、y 坐标和颜色值可能都是连续的,f(x, y) 作为二维连续函数,会有无穷多个取值。这种用连续函数表示的图像无法用计算机进行处理,也无法在各种数字系统中传输和存储,所以必须在坐标值和颜色值上将连续的模拟信号转换为离散的数字信号。对坐标值的数字化称为采样,对颜色值的数字化称为量化。

上图是生成一幅数字图像的简化过程,右上角图中的一维函数是左上角图中沿线段 AB 的连续图像幅度值(灰度级)的曲线。随机变化是由图像噪声引起的。为了对该函数采样,我们沿线段 AB 等间隔的对函数进行采样,如左下角图中所示,每个样本的空间位置由图像底部的垂直刻度指出,样本则由函数曲线上的小方块表示。这样的一组离散位置就给出了采样函数。
但是,样本值仍跨越了灰度值的连续范围。为了形成数字函数,灰度值也必须转换为离散量,图中显示了已经分为 8 个离散区间的灰度标尺,范围从黑到白。垂直刻度标尺赋予了 8 个灰度各自的特定值,通过对每一样本赋予 8 个离散灰度级中的一个,来量化连续灰度级。赋值多少取决于该样本与哪个垂直刻度标记更接近。

我们延用上面提到的 f(x, y) 函数表示法的,上图展示了 3 种数字图像的基本展示方式:
1)第一种用两个坐标轴 x、y 决定空间位置,第三个坐标轴决定 x、y 对应的灰度值。这种展示法对于细节太多的复杂图像来说很难理解。
2)第二种是更一般的展示方法,它显示了图像出现在显示器的情况,这里每个点的灰度与该点处 f 值成正比。比如图中如果仅由三个等间隔且归一化到 [0, 1] 区间的灰度值时,那么图像中的每个点的灰度是 0、0.5、1 中的某一个值,在显示器上就简单的把这三个值变换成黑色、灰色、白色即可。这种展示法可以让我们快速的观察图像结果。
3)第三种则是将 f(x, y) 的数值简单地展示为一个矩阵。这种展示法打印起来麻烦,而且传达的信息也不多,但是在开发图像相关的算法需要做数值分析时就非常有用了。其中,矩阵中的每个元素我们称为像素(图像单元、图像元)。
所以,上面第二种和第三种数字图像的展示方式是最有用的,第二种允许我们快速观察结果,第三种则可用于数值处理和算法开发。
图像基本属性
1)图像分辨率
我们经常听到的一种图像分辨率的说法是:这张图片分辨率是 1024 x 1024 像素。但图像大小本身其实并不能告诉我们全部内容,如果没有规定图像包含的空间维度信息,这种说法意义不大。
图像空间分辨率的度量必须针对空间单位来规定才有意义,所以这里探讨的图像分辨率也称为空间分辨率,表示图像中可辨别的最小细节的度量。空间分辨率有很多方法来说明,其中最通用的是单位距离线对数和单位距离点数(像素数)。
单位距离线对数可以这样来理解:假设我们用交替的黑色和白色垂直线来构造一幅图像,如果一条线宽是 0.1 mm,每单位距离(mm)就有 5 个线对(10 条黑白交替的线)。
单位距离点数是印刷和出版业中常用的图像分辨率的度量。在美国,这一度量常用每英寸点数(dpi)来表示,比如,报纸用 75 dpi 的分辨率来印刷,书页用 2044 dpi 印刷。
单位距离像素数常用在电子设备上。比如我们常常会听到用每英寸像素数(ppi)来衡量显示屏的成像分辨率,比如 iPhone 4 使用 326 ppi 的屏幕,iPhone 13 Pro Max 则使用 458 ppi 的屏幕。下图是图像使用不同空间分辨率时的展示效果:

2)像素深度
像素深度决定了图像每个像素的颜色级数。对于灰度图像,则决定了每个像素的灰度级数。像素深度通常是 2 的整数次幂,比如,当像素深度为 24 位时,那么每个像素的颜色可以是 16777216(224)种颜色中的一种。
提高像素深度,每个像素能显示的颜色种类也就更多了,图像也就更细腻自然。但受到人眼分辨率的限制,像素深度不一定要特别大,人类眼睛感知的颜色种类的上限大概是 1000 万种颜色,24 位的颜色深度已经完全够用。下图是灰度图像使用不同灰度级数时的展示效果:

编码

视频编码

如果直接拿视频的原始数据传输,网络带宽即内存消耗是巨大的,所以视频在传输中是必须经过编码的。
● 变换编码:即将使用空间域描述的图像信号转为使用频率域描述,然后针对其变化后的系数进行处理。一般图像在空间上具有较强的关联,那么将其描述方式改为频率域后,可以实现去除相关性与能量集中。
● 熵编码:熵编码就是在编码过程中,按照熵的基本原理不失去任何信息的编码过程。因此,编码后的平均长度会接近新源的熵值。其一般使用可变字长编码的方式来实现,即对信源中出现机会大的符号赋值为短码,反之赋值为长码。因此,此消彼长,其平均码长就会较短。
● 运动估计和运动补偿:运动估计以及运动补偿是以时间为关联单位来消除重复编码的一种手段。与熵编码不同在同一张图像上进行空间上的消除关联性。运动估计和运动补偿是用多张图片进行比较,消除时间上图片与图片之间的关联。例如,某些视频多为静止图像,那么其每一帧图像之间的区别就较为小,画面之间的关联性就很强,那么我们就不需要对两张图片之间相同的像素重复编码,而只需要对那些变化部分进行编码即可。反之,若是视频图像变化较大,例如动作电影,那么图片之间的关联性就相对较小,那么相邻图片就需要编码相对较多的像素[1]。
(1)运动估计:将当前的编码图像分成多个小图块,例如一帧图像为1280720,首先将其以网格状形式分成4045个尺寸为16*16彼此没有重叠的图像块,然后在一个算法确定的搜索范围内搜索图像,并为每张图片搜索一个最为相似的图块,这个过程即为运动估计。
(2)运动补偿:通过计算由运动估计搜索出的相似图块,与当前编码图块的位置信息进行分析,可以获得一个运动矢量。所以编码过程中,可以依靠这个运动矢量,来将编码图片描绘成一个残缺图片,在解码时,可以通过这个矢量复原图片,所以使用运动补偿可以有效的对视频进行压缩压缩。
● 参考图像类型:正因为运动估计与运动补偿,所以编码器将输入的每一帧图像根据参考图像分成了三种类型:I帧,P帧,B帧。I帧: 也叫关键帧只使用本帧内的数据进行编码,在编码过程中不需要进行运动估计和运动补偿。P帧: 也叫单向预测帧,在编码时需要对前面I帧或P帧的数据进行参考来进行编码,即对之前的I帧的参考图像进行比对,得到差值进行编码。B帧: 也叫双向预测帧,在编码时,需要参考前面I帧或者P帧和后面的I帧或者P帧计算差值,并进行预测。如名字所示:双向预测帧,其需要参考一前一后共计两帧的图像。

● PTS与DTS:DTS(Decoding Time Stamp),解码时间戳,即通知解码器该帧需要解码的时间。PTS(Presentation Time Stamp),显示时间戳,即通知解码器渲染现实该帧的时间因为B帧为双向预测帧,那么B帧的解码时间应该是在I帧与P帧之后,所以若一个视频流中的帧显示顺序为IBBP时,此时的B帧PTS与DTS应该是不一致的。所以若当视频流中不存在B帧时,视频流中的所有帧的DTS与PTS为一致的。

音频编码

数字音频在压缩编码是,要保证在听觉上不存在失真问题的情况下,对音频数据最大限度的进行压缩。数字音频压缩编码即去除声音的冗余成分。冗余成分指的是音频不能被人耳察觉到的部分信号,丢弃它们对于声音的几乎不存在影响。冗余成分包括,人耳听觉范围外的音频信号以及因为掩蔽效应掩盖住的某些信号。例如,我们能听见的声音频率范围大概在20赫兹到两千赫兹,所以在这频率范围之外的信号我们都无法听见,那么这些信号就被称为冗余信号。掩蔽效应指的是,当一个强音信号和一个弱音信号同时传入人耳,那么弱音信号将会被强音信号所掩盖。这样的话,我们的人耳是察觉不到弱音信号的存在,所以当强音与弱音信号同时存在时,我们也可以将弱音信号视为冗余信号,不需要对其进行压缩编码。
● 频谱掩蔽:当一个频率的声音功率小于某个值时,人耳就无法察觉到,那么这个值就被视为最小的可闻阈值。另外,当强音存在时,这个最小可闻阈值就会提高,形成上述的掩蔽效应。人耳对2KHz~5KHz的声音最敏感,而对频率太低或太高的声音信号都很迟钝,当有一个频率为0.2KHz、强度为60dB的声音出现时,其附近的阈值提高了很多。
● 时域掩蔽:当强音信号和弱音信号同时出现时,还存在时域掩蔽效应,前掩蔽,同时掩蔽,后掩蔽。前掩蔽是指人耳在听到强信号之前的短暂时间内,已经存在的弱信号会被掩蔽而听不到。

【音视频开发笔记】音视频基础相关推荐

  1. iOS音视频开发八:视频编码,H.264 和 H.265 都支持

    我们将通过拆解采集 → 编码 → 封装 → 解封装 → 解码 → 渲染流程并实现 Demo 来向大家介绍如何在 iOS/Android 平台上手音视频开发. 这里是第八篇:iOS 视频编码 Demo. ...

  2. linux视频应用程序开发,Linux平台音视频开发和音视频SDK应用

    Linux平台音视频开发和音视频SDK应用 下面介绍一款强大的音视频即时通讯平台给大家,它就是--云智真音视频SDK. 云智真提供一套跨平台的音.视频即时通讯解决方案,基于先进的H.264视频编码标准 ...

  3. 直播软件搭建音视频开发中的视频采集

    直播软件搭建音视频开发中的视频采集 前言 在直播和短视频行业日益火热的发展形势下,音视频开发(采集.编解码.传输.播放.美颜)等技术也随之成为开发者们关注的重点,本系列文章就音视频开发过程中所运用到的 ...

  4. 音视频学习笔记1--音视频基础知识(1)

    音视频基础知识 1 音视频开发是什么? 2 音视频数据处理流程 2.1 音视频数据采集 2.2 封装与解封装 2.3 音视频输出 2.4 音视频同步 3 视频中的基础概念 3.1 视频码率 3.2 视 ...

  5. 企业级Android音视频开发笔记分享,快来get正确的学习姿势

    随着传统的图文媒体向以音视频为主的新媒体转变,音视频开发逐渐成为Android领域内的小热门.但音视频开发涉及的层面较广,相关的技术繁多且复杂,想要深入确有一定难度.且目前网络上关于Android 音 ...

  6. python音视频开发_Python音视频开发:消除抖音短视频Logo的图形化工具实现

    一.引言 在<Python音视频开发:消除抖音短视频Logo和去电视台标的实现详解>节介绍了怎么通过Python+Moviepy+OpenCV实现消除视频Logo的四种方法,并提供了详细的 ...

  7. 音视频开发—抖音GsyVideoPlayer视频底层分析使用

    theme: channing-cyan 一.初始化分析 1.初始化主要是构造了一个StandardGSYVideoPlayer 2.设置全屏布局的容器 代码如下: listVideoUtil = n ...

  8. iOS音视频开发七:视频采集

    将通过拆解采集 → 编码 → 封装 → 解封装 → 解码 → 渲染流程并实现 Demo 来向大家介绍如何在 iOS/Android 平台上手音视频开发. 这里是第七篇:iOS 视频采集 Demo.这个 ...

  9. iOS音视频开发十三:视频渲染,用 Metal 渲染

    本系列文章通过拆解采集 → 编码 → 封装 → 解封装 → 解码 → 渲染流程并实现 Demo 来向大家介绍如何在 iOS/Android 平台上手音视频开发. 这里是第十三篇:iOS 视频渲染 De ...

  10. 音视频开发 ● Android 音视频开发总结

    关于视频中的黑屏.花屏.绿屏问题 我们在做音视频开发的时候难免会遇到一些很棘手的问题,但是我们只要找准问题出现的阶段,定位问题的根源就会轻松很多. 前几天我看了一篇总结这些问题的文章,写的很好,根据自 ...

最新文章

  1. 05Observer/Event(观察者)模式
  2. Java面试通关要点汇总集之核心篇参考答案
  3. SharePoint2010-CustomAction中的ContentTypeId属性已经消失了
  4. 计算机组成原理作业1王诚,计算机组成原理 王诚 董长洪 宋佳兴
  5. 用神经网络分类一维矩阵
  6. (转)使用 /proc 文件系统来访问 Linux 内核的内容
  7. VTK:可视化之BackgroundColor
  8. nest 架构_当有人打来您的Nest Hello时,如何让Google Home通知您
  9. ASP.NET Core - 关于标签帮助器值得了解的五点
  10. mysql 两个时间相差大于24小时的数据_MySQL 主从同步延迟的原因及解决办法(仅学习)...
  11. 浅谈渗透测试之前期信息搜集
  12. 《深入理解Java虚拟机》——垃圾收集器的具体实现
  13. Spark采用分区方式读取数据库时partitionColumn, lowerBound, upperBound, numPartitions的理解与验证
  14. vue.js 带有正则选择的车牌控件组件
  15. matlab实现QPSK调制解调
  16. LINUX内核编译选项-4
  17. 企业邮箱登录入口:企业邮箱oa管理系统
  18. 暴雪正在等待另一项_守望先锋更新一直显示正在等待另一项安装或更新怎么办...
  19. 什么样的作品才能上抖音热门?
  20. 强推!阿里数据科学家一次讲透数据中台

热门文章

  1. 我只喜欢你,我不去爱你
  2. CloudStack 4.17 安装部署
  3. uniapp 图片裁剪插件推荐
  4. 2019年个人学习计划完成进度表:
  5. python 打包 exe_python pyinstaller打包exe报错的解决方法
  6. 关于docker remote api未授权访问漏洞的学习与研究
  7. linux中mp3转wav格式
  8. java高并发系列 - 第3天:有关并行的两个重要定律
  9. nginx搭建rtmp协议流媒体服务器
  10. HTTPS相关面试题