“声音”背后的原理(2):采样、量化和编码

2023-10-11 03:18

本文主要是介绍“声音”背后的原理(2):采样、量化和编码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

采样、量化和编码

  • 1. 模拟信号数字化
    • 1.1 采样
    • 1.2 量化
  • 2. 编码

音频处理的大致流程:

音频
——(采集设备)
——模拟信号(连续)
——(模数转换器ADC)
——数字信号(离散)
——编码
——储存于计算机

1. 模拟信号数字化

在这里插入图片描述

在这里插入图片描述

1.1 采样

采样的原理很简单,就是按照固定的频率对模拟信号的振幅进行取值。这个频率,便是采样率,单位为赫兹,表示每秒钟取得的采样的个数

于一个周期信号,至少需要采样两次:波峰和波谷各采样一次。
因此,给定一个采样率,我们能重建的周期信号的频率是该采样率的一半(这个频率叫做奈奎斯特频率

好像讲的比较清晰,但是其定义依旧比模糊,脑海里也很难形成一个具体的概念,比如,每次采样到底做了什么事?采样的对象具体来说是什么,是一个质子还是全部的质子?具体是如何采样的?采样的时候波形是静止的还是不断变化的?一次采样能采多大的范围?

我想,这些归根到底是对波形图的理解不透彻造成的:

波形图横坐标其实是质子的“坐标”,其纵坐标是质子的振幅。
波形图表现的是某一时刻各个质子不同振幅(位移量)曲线。

更多可以查看:音频特征(3):各种波形图像的小结

其实,音频的采样是按照固定的频率,在时间轴上对模拟信号的振幅进行取值。

所谓采样率就是在某个坐标轴上均匀地做采样的频率。
音频是在时间轴上对振幅进行采样
图片是在 X Y轴上对颜色进行采样
视频是在时间轴上对图片进行采样
运动捕捉就是在时间轴上对XYZ采样

关于采样率

参考知乎某答(1):

音频属于波,属模拟信号,采样是把它变成离散的量。

如果波相当于曲线,采样就相当于用N个点来描述这个曲线。
点越多(间隔是相同的),线就越平滑,越接近于最初的曲线。

音频 - 曲线
采样率 - 单位间隔点的个数
音质 - 相似度

参考知乎某答(2):

声音是连续的,连续就是可以切成1秒一段,然后再切成0.1秒一段,然后可以无限切下去都不会到尽头。但是电脑记录声音是用数字,一组数字只能保存某一时刻或瞬间的声音(时刻,就是一个无限小的时间点),所以电脑记录声音只能在0.0001秒(打个比方,不准确)的时候记录一次,然后0.0002秒的时候再记录一次,0.0003秒的时候再记录一次……这样可以把声音保存下来。这里的采样率就是10000次/秒。

最后用一张图的理解:

在这里插入图片描述

音频(波形)可以理解为一个固定的参考,我们需要的描绘出这一个波形,我们可以做的是每间隔一段时间(可能是0.0002秒),描绘波形图上的一个点。上图所表示得到是:

  • 较高的解析度采集的样本点就会被描绘地更准确;
  • 较高的采样率就会使得采样的时间间隔非常短,最后会使得最后的曲线越来也平滑(趋近连续)

在语音信号中,绝大部分的信息在10000Hz以下,所以通常20000Hz的采样率足以保留这些信息。但是,采样率越高,也往往意味着越大的计算量、储存量以及网络传输数据量。目前,16000Hz的采样率应用十分的广泛。使用16000Hz采样率储存的音频已经能够非常好地保留绝大部分语音信息。激光唱片(CD)通常采用44100Hz的采样率,从而能够对高频信号进行效果比较好的保真。

(说白了,本质上来看,采样也就是对音频模拟信号的一种“降维”吧)

1.2 量化

为了更高效地保存和传输每个采样点的数值,将这些振幅值进行规整,这一过程称为量化
量化的过程会损失一定的精度,按照精度可以将量化分为8位量化16位量化32位量化等。

注:量化的精度等于相邻两个整数所表示的实数的差值(标准),如果两个实数之间的差距小于这个差值,他们便会被量化为同一个整数。(可以看文章开头的那张图,连续的信号号最后被转变为了阶梯状的图像)

在这里插入图片描述

2. 编码

将量化后离散整数序列转化为计算机实际储存所用的二进制字节序列的过程叫做音频编码。反之,将二进制字节恢复成音频信号的过程称为解码
(具体细节暂略)

参考:

  1. 《声纹技术》
  2. 什么是音频的采样率?采样率和音质有没有关系?
  3. 详解音频编解码的原理、演进和应用选型等——很强大的系列连载

这篇关于“声音”背后的原理(2):采样、量化和编码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

hdu4059容斥原理

求1-n中与n互质的数的4次方之和 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWrit

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return