计算机基础(8)——音频数字化(模电与数电)
💗计算机基础系列文章💗
- 👉🍀计算机基础(1)——计算机的发展史🍀
- 👉🍀计算机基础(2)——冯诺依曼体系结构🍀
- 👉🍀计算机基础(3)——计算机的系统组成🍀
- 👉🍀计算机基础(4)——操作系统概述🍀
- 👉🍀计算机基础(5)——进制与进制转换🍀
- 👉🍀计算机基础(6)——编码与解码🍀
- 👉🍀计算机基础(7)——数字图像技术🍀
- 👉🍀计算机基础(8)——音频数字化(模电与数电)🍀
- 👉🍀计算机基础(9)——原码、补码、反码🍀
- 👉🍀计算机基础(10)——编程语言与跨平台🍀
音频的编码与解码
二进制转换音频的过程也叫音频数字化,其过程较为复杂,是模拟声音信号转变为数字信号再由数字信号转换为模拟信号的一个技术实现,其过程涉及到声音的采集,转换为模拟信号,采样、量化等。了解音频数字化之前我们先了解一些关于声音的一些前置知识,
1.1 声波
我们知道声音是以声波的形式在空气中传播的,声波是声音的物理表现形式,它是由物体振动产生的能量传播方式。当物体振动时,它会激发周围介质(如空气、液体或固体)中的分子或原子振动,这些振动随后以波的形式传播开来。
一段声波中包含有声音的频率、振幅、音色等声音元素,通过声波我们可以将声音这一抽象概念通过数据的形式表现出来。声波的采集就是原声音的采集,通过麦克风、话筒等录音设备就可以采集到一段声音的声波。
例如我们通过声波来反映一段声音的频率、振幅、音色等信息。
(1)通过声波的频率反映声音音调,频率低音调低,频率高音调高。
(2)通过声波的振幅反映声音响度,振幅大响度大,振幅小响度小。
(3)通过声波的规律性反映声音音色,一般来说具有规律性的声波听起来悦耳,反之为噪音。
1.2 模拟信号
当录音设备采集到声波数据后将会以电信号的方式模拟出声波信号,声波被电信号模拟出来的信号就是声音模拟信号,这种模拟信号是对声波的一种电子化表示,以便在音响设备中再现出类似原始声波的效果。
模拟信号是连续变化的,模拟信号的最大特点是随着时间连续变化的值,它可以包含无限数量的可能幅度值。
我们可以把模拟信号模拟声波的过程看作是汽车的仪表盘模拟汽车行驶速度的过程,当驾驶员深踩一脚油门时,汽车会迅速提高行驶速度,然而汽车仪表盘的数据并不是从0km/h直接变成80km/h,虽然这个变化的时间很短,但也是从0km/h连续变化到80km/h,期间汽车仪表盘指针肯定指向过10、11.7、12.785、20.491、38.4、69.8、78等这样的数据。同理,当声波的频率忽高忽低,振幅忽大忽小时模拟信号也会随着时间连续不间断的模拟出声波频率的高低以及振幅的大小。
例如汽车行驶速度的通过仪表盘来模拟,如图所示。
通过观察曲线图我们可以看到,取任意一个时间点都可以获取到这个时间点所对应的速度值,通过声音模拟信号模拟声波的变化也类似于这样。如图所示,当通过模拟信号将声波信息模拟出来后,取任意一个时间点所对应的声波幅度数值也能取出来,这就是模拟信号的最大特点——随着时间连续变化的值。
类似于模拟信号的变化还有水银温度计的变化,当我们把水银温度计放置在10°的水温环境下时突然加了一些温水进去,使得水温一下子骤升至50°,然而水银温度计的数值肯定经过了20°、32.7°、39.1°、45.8°等数值,并不是从10°直接变成到50°,而是随着时间的变化温度上数值从10°增加至50°(虽然这个时间可能非常短)。
1.3 数字信号
数字信号是模拟信号的数字化,它是一系列离散的电脉冲(信号),可以利用其某一瞬间的状态来表示具体的数据。数字信号与模拟信号最大的不同点在于模拟信号是随着时间连续变化的值,它可以去任意时间点上的数据。而数字信号则是离散的数值,即取某几个瞬间的状态来表示具体的数据,数字信号包含的是有限数量的可能幅度值。
如图所示,数字信号来模拟声波时,只有某个具体的时间点才会有对应的声波数据,而不是和模拟信号那样任意的时间点上都能查询到对应的声波数据。
数字信号只有某几个时间点上才能有对应的数据,这些时间点并不是连续的,这意味着某些时间上的数据会缺失,将数字信号的这些时间点连接起来可以大致还原模拟信号。
如果将模拟信号看着是汽车上的仪表盘、水银温度计,那么数字信号就可以看做是电动车上面的数字仪表盘和电子温度枪。
不管是数字仪表盘还是电子温度枪,这些设备的数值和时间都是离散的。以电动车的数字仪表盘举例,例如我们骑电动车时突然深拧加速,假设速度从0提速到了40km/h,那么电子仪表盘上的速度很有可能就从10km/h变化到25km/h再变化到34km/h,最后变化到40km/h,在电子仪表盘模拟电动车行驶速度的变化时,只显示了(模拟了)25、34、40这些数值,而25~34
以及34~40
之间的数据都不会被显示(模拟)。
那为什么有了模拟信号还要转换为数字信号呢?因为数字信号相对比模拟信号存在有很多优点,如下:
(1)数字信号抗干扰性强:数字信号在传输和处理过程中可以通过纠错码等技术来提高抗干扰能力,相比之下,模拟信号在传输和处理过程中容易受到噪声和干扰的影响,导致信号失真或丢失。
(2)数字信号的可编程性:数字信号可以通过编程进行处理和操作,例如滤波、压缩、加密等,这使得数字信号在处理和存储方面更加灵活和方便。
(3)数字信号的可复制性:数字信号可以通过复制和传输进行无损的复制和传递,而模拟信号在复制和传输过程中可能会产生失真或损失。
(4)数字信号便于存储和传输:数字信号以二进制数的形式表示,便于计算机进行存储和传输。同时,数字信号可以进行压缩处理,以节省存储空间和提高传输效率。
(5)数字信号便于加密和解密:数字信号可以通过加密算法进行加密处理,以保护信号的安全性和隐私性。而模拟信号则难以实现加密和解密操作。
数字信号相对模拟具有许多优势,使其在现代通信中占据主导地位。
1.4 音频数字化
所谓音频数字化就是把模拟信号如何具体的转换为数字信号,其过程分为采样、量化、编码等。
1.4.1 采样
(1)采样:将连续的模拟声音信号转换为一系列离散的采样点的过程,采样点随后由模拟数字转换器(ADC)转换为数字信号,以便计算机或其他数字设备进行处理、存储、传输和播放。每秒钟对声波幅度值样本的采样次数称为采样频率,单位为HZ,声音的质量受采样频率的影响。
如图所示,在一段模拟信号中,我们对其根据指定时间进行采样,我们可以发现采样的频率越高,与模拟信号越接近,声音还原程度越高,数据量也越大。
1.4.2 量化
(2)量化:将幅度上连续取值(模拟量)的每一个样本转换为离散值(数字量)表示的过程,它实现了在幅度轴上对信号的数字化。通过量化,音频信号被转换为一系列的数字值,这些数字值可以精确地表示原始音频信号的幅度,如图所示。
通过对比不同的量化等级,我们可以发现量化等级越高量化值的精度也越高,更高的量化等级意味着更多的量化值可以用来表示音频样本,就能够更好的还原音频。
计算机底层是以二进制存储的,因此我们需要将量化值转换为二进制。在声音量化过程中,我们使用量化位数来表示量化值所需要的二进制位数,例如在量化等级为4的情况下使用两位二进制数就可以表示量化值,因此它的量化位数就是2bit,量化等级为8的量化位数就是3bit,如图所示。
然而,需要注意的是,量化位数的提高虽然能够提升音质,但也会导致音频文件的数据量增大。因为每个音频样本都需要用更多的二进制位来表示,所以音频文件的存储空间会相应增加。例如,一个16bit的音频文件在数据量上会是8bit音频文件的两倍。
1.4.3 编码
(3)编码
声音通过采样、量化过后就成为了010101的二进制数,编码决定了这些二进制数如何存储,有的编码规则的存储效率非常高,同样一段的音频可以使用非常少的空间将其存储,有的编码规则则更加注重与音频的质量,但可能会花费更多的空间来存储。
不同的编码方式就被分成了不同类型的音频文件类型,常见的音频文件有:
- WAV(Waveform Audio File Format)格式:WAV是一种无损音频格式,音质非常好,因为是无损的,保留了原始音频的所有信息。常用于多媒体开发的中间文件、保存音乐和音效素材。由于WAV是无损压缩,因此文件体积相对较大。
- MP3(MPEG Audio Layer III):MP3是一种有损音频格式,广泛应用于音乐、广播、电视等领域,具有较高的压缩比和较好的音质。音质在128Kbit/s以上表现还不错,但相较于无损格式有所损失。适合需要较小文件体积,且对音质要求不太苛刻的场合,如网络音乐下载、移动设备存储等。
- AAC(Advanced Audio Coding):ACC是一种高压缩比的音频压缩算法,它的压缩比要远超过较老的音频压缩算法,如AC-3、MP3等。适用于需要较高音质,同时文件体积也要相对较小的场合,如在线音乐流媒体、手机铃声等。
相关文章:

计算机基础(8)——音频数字化(模电与数电)
💗计算机基础系列文章💗 👉🍀计算机基础(1)——计算机的发展史🍀👉🍀计算机基础(2)——冯诺依曼体系结构🍀👉ἴ…...

手搓单链表(无哨兵位)(C语言)
目录 SLT.h SLT.c SLTtest.c 测试示例 单链表优劣分析 SLT.h #pragma once#include <stdio.h> #include <assert.h> #include <stdlib.h>typedef int SLTDataType;typedef struct SListNode {SLTDataType data;struct SListNode* next; }SLTNode;//打印…...
代码随想录算法训练营第18天|二叉树
513. 找树左下角的值 最左边的结点的特性 1.只能是叶子结点, 2.必须考虑是最底层,所以要考虑树的深度 3.同样的深度考虑左子树 考虑迭代法,层序遍历 递归优点难搞的 /*** Definition for a binary tree node.* function TreeNode(val, left, righ…...

使用tftpd更新开发板内核
我们升级内核可以通过原厂提供的升级软件来进行,比如瑞芯微的RKDevTool.exe,只不过这种方式必须通过指定的OTG升级口,还得借助按键进入loader模式后才可以。 其实还可以利用一些通用的工具来进行升级,比如tftpd工具。 下载地址p…...

MySQL数据库整体知识点简述
目录 第一章:数据库系统概述 第二章:信息与数据模型 第3章 关系模型与关系规范化理论 第四章——数据库设计方法 第六-七章——MySQL存储引擎与数据库操作管理 第九章——索引 第10章——视图 第11章——MySQL存储过程与函数 第12章——MySQL 触…...

深入理解MySQL索引下推优化
在MySQL中,索引的使用对于查询性能至关重要。然而,即使有合适的索引,有时查询性能仍然不尽如人意。索引下推(Index Condition Pushdown,ICP)是一项能够进一步优化查询性能的技术。本文将详细讲解索引下推的…...

论文降重技巧:AI工具如何助力论文原创性提升?
论文降重一直是困扰各界毕业生的“拦路虎”,还不容易熬过修改的苦,又要迎来降重的痛。 其实想要给论文降重达标,我有一些独家秘诀。话不多说直接上干货! 1、同义词改写(针对整段整句重复) 这是最靠谱也是…...

el-date-picker的使用,及解决切换type时面板样式错乱问题
这里选择器的类型可以选择日月年和时间范围,根据类型不同,el-date-picker的面板也展示不同,但是会出现el-date-picker错位,或者面板位置和层级等问题。 源代码: <el-selectv-model"dateType"placeholder&…...
Flutter 中的 ToggleButtonsTheme 小部件:全面指南
Flutter 中的 ToggleButtonsTheme 小部件:全面指南 Flutter,作为由 Google 开发的跨平台 UI 框架,为开发者提供了丰富的组件来构建现代化的应用程序。ToggleButtons 是 Material Design 组件库中的一个组件,它允许用户从一组选项…...

新手教程之使用LLaMa-Factory微调LLaMa3
文章目录 为什么要用LLaMa-Factory什么是LLaMa-FactoryLLaMa-Factory环境搭建微调LLaMA3参考博文 为什么要用LLaMa-Factory 如果你尝试过微调大模型,你就会知道,大模型的环境配置是非常繁琐的,需要安装大量的第三方库和依赖,甚至…...
Java函数笔记
1. Statement.executeQuery 和 Statement.executeUpdate 作用: 用于执行SQL查询和更新操作。 问题: 容易导致SQL注入攻击。 解决方法: 使用PreparedStatement进行参数化查询。 // 不安全的做法 Statement stmt connection.createStat…...

Maven实战: 从工程创建自定义archetype
在上一节中(创建自定义archetype)我们手动创建了一个项目模板,经过5步能创建出一个项目模板,如果我有一个现成的项目,想用这个项目作为模板来生成其他项目呢?Maven提供了基于项目生成archetype模板的能力,我们分3步来讲…...

初识JAVA中的包装类,时间复杂度及空间复杂度
目录: 一.包装类 二.时间复杂度 三.空间复杂度 一.包装类: 在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java 给每个基本类型都对应了一个包装类型。 1 基本数据类型和对应的包装类 &am…...

RapidMiner如何利用Hugging Face中的模型实现更有趣的事
RapidMiner Studio最新发布的功能更新,重点是嵌入Hugging Face和Open AI,Hugging face中含有大量的可用模型,包含翻译、总结、文本生成等等强大的模型,Open AI更不必说了,生成界的鼻祖。那么今天主要介绍一下RapidMine…...
Vue3 自定义Hooks函数的封装
1、如何理解vue3中的自定义hooks 在Vue 3中,自定义hooks允许开发者封装和重用逻辑代码。自定义hooks是使用Composition API时创建的函数,这些函数可以包含任意的组合逻辑,并且可以在多个组件之间共享。 自定义hooks通常遵循这样的命名约定&…...
python的DataFrame和Series
Series、DataFrame 创建 pd.Series() pd.DataFrame() # 字典{列名:[值1,值2],} [[]] [()] numpy Pandas的底层的数据结构,就是numpy的数组 ndarray 常用属性 shape (行数,) (行数,列数) values → ndarray index 索引名 siz…...

ARP欺骗的原理与详细步骤
ARP是什么: 我还记得在计算机网络课程当中,学过ARP协议,ARP是地址转换协议,是链路层的协议,是硬件与上层之间的接口,同时对上层提供服务。在局域网中主机与主机之间不能直接通过IP地址进行通信,…...

25、DHCP FTP
DHCP 动态主机配置协议 DHCP定义: 服务器配置好了地址池 192.168.233.10 192.168.233.20 客户端从地址池当中随机获取一个ip地址,ip地址会发生变化,使用服务端提供的ip地址,时间限制,重启之后也会更换。 DHCP优点&a…...
spark学习记录-spark基础概念
背景需求 公司有项目需要将大容量数据进行迁移,经过讨论,采用spark框架进行同步、转换、解析、入库。故此,这里学习spark的一些基本的概念知识。 Apache Spark 是一个开源的大数据处理框架,可以用于高效地处理和分析大规模的数据…...
BGP数据包+工作过程
BGP数据包 基于 TCP的179端口工作;故BGP协议中所有的数据包均需要在tcp 会话建立后; 基于TCP的会话来进行传输及可靠性的保障; 首先通过TCP的三次握手来寻找到邻居; Open 仅负责邻居关系的建立,正常进收发一次即可;携带route-id; Keepli…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...