当前位置: 首页 > article >正文

PCM音频数据的编解码

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、PCM是什么?

PCM(Pulse Code Modulation,脉冲编码调制)音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样、量化、编码及调制转换成的标准数字音频数据

PCM是一种用数字表示采样模拟信号方法。主要包括采样,量化,编码三个主要过程。

描述PCM数据的主要参数:
Sample Rate : 采样频率。8kHz(电话)、44.1kHz(CD)、48kHz(DVD)。
◆ Sample Size : 量化位数。常见值为8-bit、16-bit。
◆ Number of Channels : 通道个数。常见的音频有立体声(stereo)和单声道(mono)两种类型,立体声包含左声道和右声道。另外还有环绕立体声等其它不太常用的类型。
◆ Sign : 表示样本数据是否是有符号位,比如用一字节表示的样本数据,有符号的话表示范围为-128 ~ 127,无符号是0 ~ 255。
◆ Byte Ordering : 字节序。字节序是little-endian还是big-endian。通常均为little-endian。
◆ Integer Or Floating Point : 整形或浮点型。大多数格式的PCM样本数据使用整形表示,而在一些对精度要求高的应用方面,使用浮点类型表示PCM样本数据

需求:为了降低传输带宽,需要对音频数据进行压缩

压缩首先想到的是把16bit的音频数据转为8bit。最简单的方式是均匀量化, >>8 (右移8位),但这样做会使得声音的噪音变大。最好的做法是使用非均匀量化(如A-Law),其原理是对于小音量的声音,其蕴含的信息量更大,人耳对小音量更敏感;而大音量部分则影响没那么大。因此使用非均匀量化的方式,对于小音量部分保留更多的数据,大音量部分则保留更少的数据。

二、算法原理

1.音频编解码国际标准

即可以用A-Law(A律)算法,也可以用uLaw(μ律),两种算法可相互转化。

令量化器过载电压为1,相当于把输入信号进行归一化,那么A律对数压缩定义为:

当0 <= x <

2.A律算法原理

即可以用A-Law(A律)算法,也可以用uLaw(μ律),两种算法可相互转化。

令量化器过载电压为1,相当于把输入信号进行归一化,那么A律对数压缩定义为:

当0 <= x <= 1/A时,f(x)=(Ax)/(1+lnA)
当1/A <= x <= 1时,f(x)=(1+lnAx)/(1+lnA)

现行的国际标准中A=87.6,此时信号很小时(即小信号时),从上式可以看到信号被放大了16倍,
 这相当于A压缩率与无压缩特性比较,对于小信号的情况,量化间隔比均匀量化时减小了16倍,
 因此,量化误差大大降低;而对于大信号的情况例如x=1,量化间隔比均匀量化时增大了5.47倍,
 量化误差增大了。这样实际上就实现了“压大补小”的效果。

在程序中实现该曲线比较复杂。因此用8段折线来近似表示。

把x轴划分为不均匀的8份,第一点取1/2处,第二点取1/4处,第三点取1/8处……第七点取1/128.

把y轴划分为均匀的8分段。

2.读入数据

代码如下(示例):

data = pd.read_csv('https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

http://www.lryc.cn/news/2386189.html

相关文章:

  • WebView2 Win7下部分机器触屏失效的问题
  • Ubuntu 通过指令远程命令行配置WiFi连接
  • 线程池优雅关闭的哲学
  • 11.8 LangGraph生产级AI Agent开发:从节点定义到高并发架构的终极指南
  • 8天Python从入门到精通【itheima】-41~44
  • 深度图数据增强方案-随机增加ROI区域的深度
  • [Java恶补day6] 15. 三数之和
  • Django模板及表单
  • 两个mysql的maven依赖要用哪个?
  • Kafka Consumer工作流程
  • 大腾智能 PDM 系统:全生命周期管理重塑制造企业数字化转型路径
  • GATT 服务的核心函数bt_gatt_discover的介绍
  • 【短距离通信】【WiFi】WiFi7关键技术之4096-QAM、MRU
  • C 语言学习笔记
  • 【MySQL成神之路】MySQL函数总结
  • 线程池实战——数据库连接池
  • 修改 vue-pdf 源码升级 pdfjs-dist 包, 以解决部分 pdf 文件显示花屏问题
  • 基于moonshot模型的Dify大语言模型应用开发核心场景
  • 华为OD机试真题——字符串序列判定(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 在Java的list.forEach(即 Stream API 的 forEach 方法)中,无法直接使用 continue 或 break 语句的解决办法
  • Java面向对象高级学习笔记
  • LLM之Agent:Mem0的简介、安装和使用方法、案例应用之详细攻略
  • 工商总局可视化模版-Echarts的纯HTML源码
  • Spring AI 和 Elasticsearch 作为你的向量数据库
  • 阿里云OSS Api工具类不使用sdk
  • 集群聊天服务器学习 配置开发环境(VScode远程连接虚拟机Linux开发)(2)
  • rabbitmq的使用介绍
  • 前端的core-js是什么?有什么作用?
  • 【Python 命名元祖】collections.namedtuple 学习指南
  • 系统编程day04