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

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.xdnf.cn/news/633583.html

相关文章:

  • ArcGISpro中的空间统计分析(二)
  • CSS传统布局与定位详解与TDK三大标签SEO优化
  • 【二刷力扣】【力扣热题100】今天的题目是:283.移动零
  • 【排序算法】典型排序算法和python 实现
  • 如何使用HiveSQL实现2个字符串间的映射及排序
  • 【排序算法】典型排序算法 Java实现
  • 【排序算法】冒泡排序详解--附详细流程代码
  • CVE-2017-5645源码分析与漏洞复现(反序列化)
  • idea 快捷键大全
  • RabbitMQ核心机制——延迟队列
  • mysql:MVCC机制
  • 【Android】基于SurfaceControlViewHost实现跨进程渲染
  • 【GitHub Pages】部署指南
  • 微信小程序 --三剑客
  • 基于ICEEMDAN-SSA-BP的混合预测模型的完整实现过程
  • 人工智能数学基础实验(三):最小二乘法-数值计算
  • CSS布局(上):浮动基础
  • 使用Python,OpenCV,Tesseract-OCR对自己的运动数据图片进行识别及分析,并使用Matplotlib绘制配速图出来
  • Ubuntu 24.04部署安装Honeyd蜜罐
  • Go 语言基础 2 Func,流程控制
  • Kubernetes(k8s)全面解析:从入门到实践
  • how to do unit test for golang within vscode
  • CentOS 7.6 + Docker:搭建后端常用的开发环境
  • 使用CentOS部署本地DeekSeek
  • PDF 编辑批量拆分合并OCR 识别
  • 非常适合初学者的Golang教程
  • TDengine 对接微软 SSRS 报表系统
  • Go 语言学习 Protobuf 连接 gRPC 实现 AI 接口
  • Linux 的编辑器--vim
  • 初识消息队列