数字音频的采样和量化

news2024/12/26 11:43:12

一.PCM(Pulse-Code Modulation 脉冲编码调制)

PCM是一个无损无压缩的(相较于有损压缩,如果相对于模拟信号是有损的)数字化编码方式(PCM不单单应用于音频领域,本文只介绍在音频领域中的应用)。

先从PCM讲起是因为PCM是最常用,并且最为简单理解的模拟信号转换成为数字信号的方法。

PCM编码方式是将模拟信号经过采样→量化→编码来实现A/D(数模转换)

1.采样

采样是从连续时间域上的模拟信号转换到离散时间域上的离散信号的过程

简单来说,声波在时间上本身是连续的,时间可以被分割成无数的时间点,采样就是在这无限的时间点上,以固定周期对时间进行划分。

采样的过程,首先将连续的时间域中以特定时间为单位(通常为1s)分割成数个时间区域(周期性采样)。在对单个时间域中的信号进行特定次数的采样(取决于采样率)。

2.采样率

采样率定义了每秒从连续信号中提取并组成离散信号的采样个数,单位为Hz(赫兹)。

那么,采样率究竟需要多快才不会造成明显的音频失真呢?

结论:

采样率必须大于被采样信号带宽的两倍,否则就会发生混叠现象而发生失真

人耳能够感知的声音频率范围在20Hz~20KHz之间,按照上述采样定理,如果需要存储人耳能够感知的声音,就必须以20KHz*2=40KHz以上的频率进行采样。

(所以音乐CD的采样标准为44.1KHz)

3.量化(位深)

采样是以时间为单位,标识出以每秒多少次划分时间点进行抽样,采样过后依然属于模拟信号范畴,其每个采样点的样本所对应的值仍然为无数个值。 那么如果要以数字化存储这些值,我们就必须对这些值进行量化处理。

因为量化规则遵循四舍五入原则,不正好处于在分级中的样值,均四舍五入后进行存储。那么也就不可避免的会造成数据损失,从而失真。

那么我们如果将量化位深提升到4bit,如上图所示,可以发现,当位深越大,越能反映出数据幅度的变化。

这种以四舍五入方式进行分级取整,将取值范围内的样值由离散信号描述的无限多的值变为有限个值,并用数字码进行存储的过程称为量化。

4.编码

编码本质上就是使用某种特定规范,使得采样量化后的数据按照规定方式进行存储、传输。

PCM编码本身是无损无压缩的,那么就说明其数据体积会很大。

PCM数据体积计算方式为:采样率(Hz) x 位深(bit) x 声道数 x 时长(s)

一段常见的4分钟立体声(双声道)的音乐,我们以CD标准(44.1KHz采样率 16bit位深)在进行PCM编码后,其体积为

44100Hz x 16bit x 2 x 240 = 338,688,000 bit(比特)= 40.37MB

在计算机存储中最小存储单位为位,而一位能存储的数据即为1bit(存储0或1),其中8bit为一个Byte(字节),1024Byte=1KB,1024KB=1MB

总结:采样是在声波的时间上周期抽取数个时间点,量化将对应时间点的声波幅度进行规范存储。采样率越高,位深越高,存储的声波越接近于原始声波。

5.PCM的音频领域的应用

PCM在音频领域中的应用极其广泛,无论是语音通话、音乐播放、视频多媒体,其中都离不开PCM的应用。

电脑、手机、随身听等设备播放音乐时,其实就是将PCM数据,转换为模拟信号,在通过扬声器、耳机等设备还原出声波。

应用PCM进行声波存储的流程如下:

6.采样数据与DA转换输出声音

一般的数据采样用的是AD会有一个最大采样值,最小值当然就是0了。

如果声音芯片内的DA是16位,那么最小值为0,最大值为65535即0xffff。

但是由于振内振是上下振的,故中点为32767,故区间范围为-32768到32767之间。因此为了标识我们的数值,需要对采集的数字信号进行归一化处理(转换为在-32768到32767之间).

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1660753.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EmploLeaks:一款针对企业安全的组织员工信息收集OSINT工具

关于EmploLeaks EmploLeaks是一款针对企业安全的组织员工信息收集OSINT工具,在该工具的帮助下,企业内部的安全人员和管理员可以有效地收集组织内员工的各种信息,并以此来判断组织内部的网络安全态势。 工作机制 首先,该工具会在…

暴力法解决最近对问题和凸包问题-实现可视化

目录 最近对问题 凸包问题 最近对问题 顾名思义就是采用蛮力法求出所有点之间的距离,然后进行比较找出第一个最近对,一个一个进行比较。 大概思路就是如图(每个圈代表一个数对) 第一个和其他四个比较 第二个和其他三个比较 …

vite开发的项目如何打包build不同环境的代码?适配不同环境api接口

vite配置官方文档:环境变量和模式 | Vite 官方中文文档 其实vite打包的时候,主要是根据不同的环境来生成不同的打包文件的,所以不同的环境是怎么区分呢?这个在vite官方已经说明白了,那就是:环境变量和模式…

Linux 操作系统线程1

目录 一、线程 1.1线程的基本概念 1.2 线程相关的API函数 1.2.1 线程的创建 1.2.2 线程退出 1.2.3 线程等待函数 1.2.4 获取线程ID 1.2.5 线程取消 1.2.6 线程的清理函数 一、线程 1.1线程的基本概念 线程是属于进程;一个进程可以有多个线程&#xff…

【机器学习300问】83、深度学习模型在进行学习时梯度下降算法会面临哪些局部最优问题?

梯度下降算法是一种常用的优化方法,用于最小化损失函数以训练模型。然而,在使用梯度下降算法时,可能会面临以下局部最优问题。 (一)非凸函数的局部极小值 问题描述:在复杂的损失函数中,如果目…

5.2 Java全栈开发前端+后端(全栈工程师进阶之路)-服务端框架-Spring框架-相信我看这一篇足够

1.Spring框架 1.1.Spring框架简介 Spring是一个基于java的轻量级的、一站式框架。 虽然Spring是一个轻量级框架,但并不表示它的功能少。实际上,spring是一个庞然大物,包罗万象。 时至今日,Spring已经成为java世界中事实上的标准…

代码随想录算法训练营第36期DAY24

DAY24 235二叉搜索树的最近公共祖先 迭代法: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solutio…

笔记本电脑怎么多选删除文件?误删除文件怎么办

在日常使用笔记本电脑中,我们可能会遇到需要删除大量文件的情况,例如清理临时文件、整理文档或卸载不再需要的程序。手动一个一个地删除不仅效率低下,还可能遗漏某些文件。那么,如何在笔记本电脑上高效地进行多选删除操作呢&#…

C补充1—1章1.0—C程序语言设计(许宝文,李志)

二手书到了,好消息,前主人看的很认真,坏消息,只看到这页了 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊最后几题好难啊啊啊啊啊,再议 目录 1.1 入门 1.2 变量与算数表达式 练习1-3 //打印温度对照表 练习1-4 //摄氏-华氏温…

vscode 实现本地服务器部署小结

在查阅 MDN 网站的时候,偶然发现的原来 vscode 也可以实现本地化服务器部署,来模拟服务器的运行。 安装插件 在VSCode的插件市场搜索并安装以下插件: – Live Server(用于开启本地服务器) – Debugger for Chrome&a…

bash: docker-compose: 未找到命令

bash: docker-compose: 未找到命令 在一台新的服务器上使用 docker-compose 命令时,报错说 docker-compose 命令找不到,在网上试了一些安装方法,良莠不齐,所以在这块整理一下,如何正确快速的安装 docker-compose cd…

英飞凌TC3xx 启动逻辑梳理(1)

目录 1.启动时序总览 2.Boot Firmware干了什么? 2.1 BMHD梳理 2.2 HWCFG 2.3 ABM 2.4 BMHD 无效时处理方案 2.5 HSM启动如何影响SSW启动 3.小结 在调TC3xx的板子时,最害怕的就是刷UCB;稍不注意板子就上锁,调试器也连不上了…

BL207分布式I/O模块能源管理系统升级的智慧之选

能源管理领域智能化、网络化趋势的不断深入,如何高效、准确地采集并分析能源消耗数据成为众多企业优化能源利用、降低成本的关键所在。钡铼电子的BL207 BACnet IP分布式远程I/O模块,正是在这样的背景下应运而生,为能源管理系统(EM…

zookeeper启动 FAILED TO START

注意:启动zookeeper时,需要使用zkServer.sh start命令将所有主机启动后,再查看状态 如果,启动一台主机,查看当前主机状态,则会报错 如果出错,进入到$ZOOKEEPER_HOME/logs,查看日志 …

C++数据结构——AVL树

前言:本篇文章将紧随二叉搜索树的节奏,分享一个新的数据结构——AVL树。 目录 一.AVL树概念 二.AVL树插入规则 三.AVL树实现 1.基本框架 2.插入 3.旋转 1)左\右单旋 2)左右/右左双旋 4.遍历 5.求树高度 6.判断平衡 7.…

WireShark对tcp通信数据的抓包

一、抓包准备工作 安装wireshark sudo apt update sudo apt install wireshark 运行 二、WireShark工具面板分析 上图中所显示的信息从上到下分布在 3 个面板中,每个面板包含的信息含义如下: Packet List 面板:显示 Wireshark 捕获到的所…

Vision Mamba:高效视觉表示学习双向状态空间模型,超越Vision Transformer!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model 引言:探索视觉领域的新方向 在计算机视觉领域&…

【RSGIS数据资源】1980-2021年中国土地利用覆盖和变化数据集

文章目录 摘要1. 数据集概况2. 数据集组织形式2.1 1980-2015年中国森林覆盖数据集CFCD2.2 1980-2021年中国土地利用覆盖与变化数据集 3. 数据生产服务单位4. 引用 摘要 通过融合森林资源清查数据和20种遥感土地利用产品,重建生成了1980-2015年中国森林覆盖数据集&a…

JAVA大量数据导出excel

背景:因项目需要导出3万行,90列的数据到excel,使用传统的apache poi 直接导出,导致504连接超时无法导出。然后改造方法,异步导出。 一、准备一个导出类,属性有id,outputstrream,finleName,err,e…

五、Redis五种常用数据结构-SET

Redis的Set结构存储的数据和Java中的HashSet类似,都是无序且不重复的。其底层的数据结构有两种,一是当value为整数时,且数据量不大时采用intset来存储。其他情况使用dict字典存储。集合中最多存储232-1(40多亿)个数据。 1、常用命令 sadd k…