脉冲编码调制(PCM,Pulse Code Modulation)简介
脉冲编码调制(PCM,Pulse Code Modulation)
脉冲编码调制(PCM,Pulse Code Modulation)是一种将模拟信号转换为数字信号的技术。在音频处理、电话通信以及其他许多领域都有广泛应用。PCM通过采样、量化、编码等三个主要步骤将模拟信号转换为数字信号。
采样(Sampling)
在连续的模拟信号中以固定的时间间隔选取一系列的样本点。采样率(Sampling Rate)是指每秒钟采样的次数,单位是赫兹(Hz)。根据奈奎斯特定理,为了能够无失真地重构原始信号,采样率应至少是信号最高频率的两倍。
常见的采样率包括:
- 8 kHz:通常用于电话语音,因为人声的频率范围大约在300Hz到3400Hz之间,8kHz的采样率足以覆盖这个范围。
- 22.05 kHz:这个采样率通常用于某些低质量的音频传输,能够覆盖大部分人类可听频率的一半。
- 44.1 kHz:这是CD音质的标准采样率,能够覆盖人类可听的整个频率范围(大约20Hz到20kHz)。它是专业音频处理和消费级音频产品中最常用的采样率之一。
- 48 kHz:这个采样率在专业音频领域(如电影和广播)中非常常见,因为它提供了比CD更高的采样率,可以捕捉更多的细节。
- 96 kHz和192 kHz:这些更高的采样率主要用于专业音频录制和一些高分辨率音频格式中。它们能够提供更广的频率范围和更细腻的音质,但相应地也需要更多的存储空间和处理能力。
量化(Quantization)
量化是将每个采样点的模拟值映射到最接近的数字值。量化过程中,由于将连续的模拟值映射到有限的数字值,会引入量化噪声。量化的精度由位深(Bit Depth)决定,位深越高,可以表示的数字值越多,量化噪声越小,音质越好。
量化位深度(Bit Depth)是指在数字音频中,每个采样点可以表示的不同幅度级别的数量。位深度直接影响音频信号的动态范围和信噪比,即能够表示的最大音量和最小音量之间的差异,以及音频的细节和清晰度。常见的量化位深度包括:
- 8位:较低的位深度,每个采样点有256(2^8)个可能的幅度值。8位音频通常用于电话通信和某些低质量的音频文件。由于其较低的动态范围,8位音频的音质相对较差,可能会有明显的量化噪声。
- 16位:这是CD音质的标准位深度,每个采样点有65,536(2^16)个可能的幅度值。16位提供了较好的动态范围,适用于大多数消费级音频应用,能够提供满意的音质。
- 24位:专业音频和一些高分辨率音频格式使用的位深度,每个采样点有16,777,216(2^24)个可能的幅度值。24位音频提供了更宽的动态范围,允许更细腻的音量级别和更低的量化噪声,适用于专业录音和混音。
- 32位浮点:在音频处理和混音中常用的一种格式,尽管它提供的动态范围远远超过人耳的感知能力,但它允许音频工程师在不损失音质的情况下进行大范围的音量调整。32位浮点格式在处理过程中非常有用,因为它可以避免在多次处理和效果应用中累积的量化误差。
编码(Encoding)
编码是将量化后的数字值转换为二进制形式,以便于存储或传输。编码后的数据可以是线性的,也可以是非线性的,线性PCM(LPCM)是最常见的形式,其中数字值直接对应于采样点的幅度。
声道
在音频处理和播放中,声道(Channel)是一个重要的概念,它决定了音频信号的空间分布和听觉体验。声道的不同配置可以提供从简单的单声道到复杂的多声道环绕声体验。
常见的声道配置:
- 单声道(Mono):
- 单声道音频只有一个声道。在单声道配置中,所有的声音都被混合到一个单一的信号中,播放时在所有扬声器中均匀输出。单声道适用于语音播放和环境中只有一个音源的场景。
- 立体声(Stereo):
- 立体声音频有两个声道:左声道和右声道。立体声可以提供一定的空间感,通过调整左右声道的音量和相位,可以模拟声音源在空间中的位置。立体声是最常见的音频配置,适用于大多数音乐和视频播放。
- 环绕声:
- 环绕声配置通过多个声道提供更丰富的空间感和沉浸感。常见的环绕声配置包括5.1声道(前左、前右、中央、后左、后右和一个低音炮)和7.1声道(在5.1的基础上增加两个侧声道)。环绕声配置常用于家庭影院、电影和游戏中。
比特率
比特率(Bitrate)是衡量音频和视频文件数据传输和处理速度的一个重要指标,表示单位时间内传输或处理的比特数(bits),通常以比特每秒(bps)为单位。在音频领域,比特率直接影响音频文件的大小和音质。
对于PCM(脉冲编码调制)音频数据,比特率可以通过以下公式计算:
比特率 = 采样率 × 位深度 × 声道数
例如,一个立体声(2声道)音频文件,采样率为44.1kHz,位深度为16位,其比特率计算如下:
比特率 = 44,100 × 16 × 2 = 1,411,200 bps 或 1,411.2 kbps
信噪比
信噪比(Signal-to-Noise Ratio,简称SNR)是衡量信号质量的一个重要指标,它描述了有用信号强度与背景噪声强度之间的比例。信噪比通常以分贝(dB)为单位表示,数值越高意味着信号中的噪声成分越小,信号质量越好。
相关文章:
脉冲编码调制(PCM,Pulse Code Modulation)简介
脉冲编码调制(PCM,Pulse Code Modulation) 脉冲编码调制(PCM,Pulse Code Modulation)是一种将模拟信号转换为数字信号的技术。在音频处理、电话通信以及其他许多领域都有广泛应用。PCM通过采样、量化、编码等三个主要步骤将模拟信号转换为数…...

Pytorch transforms 的研究
绝对路径与相对路径差别 transforms的使用 from torchvision import transforms from PIL import Imageimg_path "dataset/train/bees/16838648_415acd9e3f.jpg" img Image.open(img_path) tensor_trans transforms.ToTensor() tensor_img tensor_trans(img) prin…...

一个C++模板工厂的编译问题的解决。针对第三方库的构造函数以及追加了的对象构造函数。牵扯到重载、特化等
一窥模板的替换和匹配方式:偏特化的参数比泛化版本的还要多:判断是不是std::pair<,>。_stdpair模板参数太多-CSDN博客 简介 在一个项目里,调用了第三封的库,这个库里面有个类用的很多,而且其构…...
《昇思 25 天学习打卡营第 20 天 | Pix2Pix实现图像转换 》
《昇思 25 天学习打卡营第 20 天 | Pix2Pix实现图像转换 》 活动地址:https://xihe.mindspore.cn/events/mindspore-training-camp 签名:Sam9029 Pix2Pix模型概述 Pix2Pix是一种基于条件生成对抗网络(cGAN)的图像转换模型&#x…...

关于c#的简单应用三题
#region 输入一个正整数,求1~这个数的阶乘 public static void Factorial(int a) { int result 1; for (int i 1; i < a; i) { result result * i; } Console.WriteLine(result); } #endregion #region 一个游戏&#…...

(十三)Spring教程——依赖注入之工厂方法注入
1.工厂方法注入 工厂方法是在应用中被经常使用的设计模式,它也是控制反转和单例设计思想的主要实现方法。由于Spring IoC容器以框架的方式提供工厂方法的功能,并以透明的方式开放给开发者,所以很少需要手工编写基于工厂方法的类。正是因为工厂…...
Redission中的Lua脚本写法、理解
对于Redission看门狗机制中的为了保证原子性的Lua脚本的写法规则是什么样的呢 ? 对于源码中的Lua脚本又是什么意思? 我们一起来看一下 首先,我们先基本的熟悉一下lua脚本的逻辑 在Lua脚本中,if (…) then … end 语句的执行过程…...

视频共享融合赋能平台LntonCVS视频监控管理平台视频云解决方案
LntonCVS是基于国家标准GB28181协议开发的视频监控与云服务平台,支持多设备同时接入。该平台能够处理和分发多种视频流格式,包括RTSP、RTMP、FLV、HLS和WebRTC。主要功能包括视频直播监控、云端录像与存储、检索回放、智能告警、语音对讲和平台级联&…...

GraphRAG + GPT-4o mini 低成本构建 AI 图谱知识库
更好的效果,更低的价格,听起来是不是像梦呓? 限制 首先,让我们来介绍一个词:RAG。 简单来说,RAG(Retrieval-Augmented Generation,检索增强生成) 的工作原理是将大型文档…...
全国区块链职业技能大赛第十套区块链产品需求分析与方案设计
任务1-1:区块链产品需求分析与方案设计 养老保险平台中涉及到参保人、社保局、公安局、工作单位等参与方,他们需要在区块链养老保险平台中完成账户注册、身份上链、社保代缴、信息核查等多种业务活动。通过对业务活动的功能分析,可以更好的服务系统的开发流程。基于养老保险…...

分布式Apollo配置中心搭建实战
文章目录 环境要求第一步、软件下载第二步、创建数据库参考文档 最近新项目启动,采用Apollo作为分布式的配置中心,在本地搭建huanj 实现原理图如下所示。 环境要求 Java版本要求:JDK1.8 MySql版本要求:5.6.5 Apollo版本要求&…...
Android monkey命令和monkey脚本详解
Monkey命令 monkey 是 Android 平台上一个非常有用的工具,它可以帮助开发者在设备上生成随机的用户事件流,如按键输入、触摸屏手势等,以此来测试应用的稳定性。这对于发现应用中的崩溃、异常和性能问题特别有用。 基本语法 adb shell monk…...
vue 实现对图片的某个区域点选, 并在该区域上方显示该部分内容
目录 1、通义灵码实现: 2、csdn的C知道: 3、百度comate: 1、通义灵码实现: 在 Vue 中实现对图片某个区域的点选并显示该区域属于哪一部分,通常涉及到几个关键步骤: 图片区域划分: 首先&#…...
配置文件格式 INI 快速上手
文章目录 1.简介2.语法节键值对注释大小写空白行数据类型字符串 (String)整数 (Integer)浮点数 (Float)布尔值 (Boolean)列表 (List) 3.示例4.解析参考文献 1.简介 INI 的全称是 Initialization,即为初始化文件,最早是 Windows 系统配置文件所采用的格式…...

基于WebGoat平台的SQL注入攻击
目录 引言 一、安装好JAVA 二、下载并运行WebGoat 三、注册并登录WebGoat 四、模拟攻击 1. 第九题 2. 第十题 3. 第十一题 4. 第十二题 5. 第十三题 五、思考体会 1. 举例说明SQL 注入攻击发生的原因。 2. 从信息的CIA 三要素(机密性、完整性、可用性&…...

SpringMvc有几个上下文
你好,我是柳岸花明。 SpringMVC作为Spring框架的重要组成部分,其启动流程和父子容器机制是理解整个框架运行机制的关键。本文将通过一系列详细的流程图,深入剖析SpringMVC的启动原理与父子容器的源码结构。 SpringMVC 父子容器 父容器的创建 …...

k8s部署rabbitmq集群
1 部署集群 1.1 安装 # 创建一个中间件的命名空间 kubectl create namespace middleware # 创建ConfigMap,包含RabbitMQ的配置文件内容 kubectl apply -f rabbitmq-configmap.yaml # 配置用于存储RabbitMQ数据的PersistentVolume(PV)和PersistentVolum…...
Python利用包pypinyin汉字转拼音(处理多音字)
一、汉字转拼音 在python中将汉字的拼音输出可以采用pypinyin包,一下是简单的demo示例: 默认调用pinyin方法转换时时默认时带声调的,不带声调需要添加“styleStyle.NORMAL”参数。 from pypinyin import pinyin, Styledef pinyin_transfer…...

推荐系统三十六式学习笔记:工程篇.常见架构24|典型的信息流架构是什么样的
目录 整体框架数据模型1.内容即Activity2.关系即连接 动态发布信息流排序数据管道总结 从今天起,我们不再单独介绍推荐算法的原理,而是开始进入一个新的模块-工程篇。 在工程实践的部分中,我首先介绍的内容是当今最热门的信息流架构。 信息…...
解决QEMU无法从非0x80000000处开始执行
解决QEMU无法从非0x80000000处开始执行 1 背景介绍2 问题描述3 原因分析4 解决办法5 踩坑回忆5.1 坑1 - 怀疑设备树有问题5.2 坑2 - 怀疑QEMU中内存未写入成功5.3 QEMU地址空间分析过程 1 背景介绍 在使用NEMU与QEMU做DiffTest的场景下,运行的固件为《RISC-V体系结…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...