1.音频基础知识

音频数字化的全过程

1.采样:以一定采样率,在时间轴上对模拟信号进行数字化

将模拟数据以固定的时间间隔对声音进行采样,按照固定的时间间隔 T(假设 T=0.1s),依次取多个点(如图中 1~10 所对应波上的点)。此时 T 称为取样周期,T 的倒数为本次取样的采样率(f=1/T=10Hz),f 即表示每秒钟进行采样的次数,单位为赫兹(Hz)。

人耳能听到的频率范围为20HZ~20KHZ,根据香农奈奎斯特采样定理(为了不失真地恢复模拟信号,采样频率应该大于等于模拟信号频谱中最高频率的2倍。f s≥2f max),采样频率一般为44.1Khz。然后对音频进行采样,测量音频电平,计算机每隔几微秒就会抓拍一次信号,比如44.1KHz,即每秒采集44100次。

2.量化:以一定精度,在幅度轴上对模拟信号进行数字化

完成采样后,接下来进行音频数字化的第二步,量化。采样是在时间轴上对音频信号进行数字化,得到多个采样点;而量化,则是在幅度方向上进行数字化,得到每个采样点的幅度值。

如上图中所示,设定纵轴的坐标取值范围为 0 ~8,得到每个采样点的纵坐标(向上取整),这里的坐标值即为量化后的幅度值。 因为我们将幅度轴分为了 8 段,有 8 个值用于量化取整,即本次量化的精度为 8。显然,如果分段越多,则幅度的量化取值将越准确(取整带来的误差就越小),也能越好的表示原波形。对于幅度的量化精度,有一个专有术语描述 ------ 位深。

计算机将这些抓拍到的信号转换成数字,定义振幅的变化。然后对获取到的数字进行二进制编码,代表被测瞬间波形的电压值,完成量化的过程。

3 编码:按特定格式,记录采样/量化后的数据

那么如果我们想要将这些声音再播放出来,需要通过数模转换器,将数字信号转换会模拟信号,再由反折叠滤波器对模拟信号内的极差加以平滑,还原成初始的模拟信号。

经过量化后,我们得到了每个采样点的幅度值。接下来,就是音频信号数字化的最后一步,编码。编码是将每个采样点的幅度量化值,转化为计算机可理解的二进制字节序列。

如上图,参照编码部分的表格,样本序号为样本采样顺序,样本值(十进制)为量化的幅度值。而样本值(二进制)即为幅度值转换后的编码数据。最终得到了"0"、"1"形式的二进制字节序列,也即离散的数字信号。这里得到的,是未经压缩的音频采样数据裸流,也叫做PCM 音频数据(Pulse Code Modulation,脉冲编码调制)。实际应用中,往往还会使用其他编码算法做进一步压缩。

音频数字信号质量三要素

1 采样率

音频采样率,指的是单位时间内(1s)对声音信号的采样次数。

对于最大频率为 f 的音频信号,当我们分别采用 f、2f、4f/3 的采样率进行采样时,所得到的采样结果参考下图。显然,只有当采样率为 2f 时,才能有效的保留原信号特征。采样率 f 和3f/4 下得到的结果,都和原波形差别很大。

2 采样位深

在学习音频数字化过程的"量化"步骤时,就提及了量化精度-位深的概念。采样位深,指的是在音频采集量化过程中,每个采样点幅度值的取值精度,一般使用bit作为单位。比如,当采样位深为 8bit,则每个采样点的幅度值可以用 2^8=256 个量化值表示;采样位深为 16bit 时,则每个采样点的幅度值可以用 2^16=65536 个量化值表示。显然,16bit 比 8bit 可存储、表示的数据更多、更精细,量化时产生的误差损失就越小。位深影响声音的解析精度、细腻程度,我们可以将其理解为声音信号的"分辨率",位深越大,音色也越真实、生动。

采样位深选择和采样率的选择类似,虽然理论上来说位深越大越好,但是综合带宽、存储、实际听感的考虑,我们应该为不同场景选用不同的位深。

16bit指的是采样位深,意思是原始模拟信号被采样后,每一个采样点在计算机中用16位(两个字节)来表示。采样精度越高越能精细地表示模拟信号的差异。

3 声道数

我们常说的单声道、双声道,其实就是在描述一个音频信号的声道数.声道数一般指声音采集录制时的音源数量或播放时的扬声器数量。

如果是单声道的音频文件,采样数据按时间的先后顺序依次存入(有的时候也会采用LRLRLR方式存储,只是另一个声道的数据为0),如果是双声道的话就按照LRLRLR的方式存储,存储的时候还和机器的大小端有关。大端模式如下图所示:

4 音谱码率(比特率)

音频码率,又称为比特率,指的是单位时间内(一般为1s)所包含的音频数据量,可以通过公式计算。比如采样率 44.1K Hz,位深16bit的双声道音频PCM数据,它的原始码率为:原始码率 = 采样率/s x 位深/bit x 声道数 x 时长(1s)

44.1 * 1000 * 16 * 2 * 1 = 1411200 bps = 1411.2 kbps = 1.411 Mbps (bit per second,位/秒)

如果一个PCM文件时长为1分钟,则传输/存储这个文件需要的数据量为:1.411 Mbps * 60s = 86.46Mb。

采样率、采样位数、比特率三者之间的关系

例:根据一个文件的大小推算出文件时长

譬如 "Windows XP 启动.wav" 的文件长度是 424,644 字节, 它是 "22050HZ / 16bit / 立体声" 格式(这可以从其 "属性->摘要" 里看到),

那么它的每秒的传输速率(位速, 也叫比特率、取样率)是 2205016 2 = 705600(bit/s), 换算成字节单位就是 705600/8 = 88200(字节/秒),

播放时间:424644(总字节数) / 88200(每秒字节数) ≈ 4.8145578(秒)。

但是这还不够精确, 包装标准的 PCM 格式的 WAVE 文件( .wav)中至少带有 42 个字节的头信息, 在计算播放时间时应该将其去掉,
所以就有:(424644-42) / (22050
16*2/8) ≈ 4.8140816(秒). 这样就比较精确了。也就是:

(文件总大小 - 头信息)/ (采样率 * 采样位数 * 通道数 / 8) [也就是比特率] ≈ 文件时长。

相关推荐
2401_857622664 小时前
SpringBoot框架下校园资料库的构建与优化
spring boot·后端·php
2402_857589364 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
哎呦没5 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
_.Switch6 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
杨哥带你写代码7 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端
AskHarries8 小时前
读《show your work》的一点感悟
后端
A尘埃8 小时前
SpringBoot的数据访问
java·spring boot·后端
yang-23078 小时前
端口冲突的解决方案以及SpringBoot自动检测可用端口demo
java·spring boot·后端
Marst Code8 小时前
(Django)初步使用
后端·python·django
代码之光_19808 小时前
SpringBoot校园资料分享平台:设计与实现
java·spring boot·后端