数字信号处理操作教程_音频解码:3-8 G711A音频解码实验

server/2024/10/18 14:23:04/

一、实验目的

学习G711音频的格式和G711A音频解码的原理,并实现将BIT格式解码为PCM格式。

二、实验原理

G711

G711是国际电信联盟订定出来的一套语音压缩标准,主要用于电话。它主要用脉冲编码调制对音频采样,采样率为8k每秒。它利用一个 64Kbps 未压缩通道传输语音讯号。起压缩率为1:2,即把16位数据压缩成8位。G711是主流的波形声音编解码器。

PCM是对模拟的连续信号进行抽样,G711则是对PCM数据进行再一次的抽样。G711主要是对16bit的PCM进行抽样,取到PCM的高位数据,去掉低位的数据,并且只保留8位。这样压缩的比率就达到了2:1,是有损压缩。

G711 标准下主要有两种压缩算法。一种是µ-law algorithm (又称often u-law, ulaw, mu-law),主要运用于北美和日本;另一种是A-law algorithm,主要运用于欧洲和世界其他地区。其中,后者是特别设计用来方便计算机处理的。这两种算法都使用一个采样率为8kHz的输入来创建64Kbps的数字输出。G711采用一种称为分组丢失隐藏(PLC)的技术来减少丢包带来的实际影响。有效的信号带宽在静默期间通过语音活动检测(VAD)这一过程被减小。

G711编码的声音清晰度好,语音自然度高,但压缩效率低,数据量大常在32Kbps以上。常用于电话语音(推荐使用64Kbps)。

G711A

a-law也叫G711A,输入的是13位(其实是S16的高13位),使用在欧洲和其他地区,这种格式是经过特别设计的,便于数字设备进行快速运算。

G711A的解码过程如下:

拿到8位的g711a编码数据后;

与0x55亦或,还原偶数位,并取强度位;

取得样本位;

根据强度位+还原样本,放大还原;

通过符号位的值取反得到pcm数据的正负。

程序流程设计

程序流程设计中首先要打开/创建输入和输出的文件,接着进行G711解码并将解码后的数据保存到pcm文件,最后关闭文件即可。

image.png

三、操作现象

实验设备

本实验所需硬件为实验板,仿真器和电源。

image.png

硬件连接

(1)连接仿真器和电脑的USB接口。

(2)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。

image.png

软件部分操作

导入工程,选择Demo文件夹下的对应工程

编译工程,生成可执行文件

将CCS连接实验箱并加载程序

点击运行程序

运行程序后,console窗口打印提升信息。

解码过程大约需要5分钟。解码结束后,会打印出提示信息。

此时可看到debug目录下由speech.bit文件解码生成的speech.pcm文件。

实验结束后,先点击黄色按钮暂停程序运行,再点击红色按钮退出CCS与实验箱的连接,最后实验箱断电即可。

image.png

最后可通过专门的工具播放PCM 文件和 BIT 格式文件,

打开软件,点击“文件->导入->原始数据”。

先导入工程目录下的 speech.bit 文件,点击绿色剪头播放音频数据。

再导入工程目录下的 speech.pcm 文件,点击绿色剪头播放音频数据。

对比后可发现 PCM 文件与 BIT 文件播放内容一致

image.png


http://www.ppmy.cn/server/14164.html

相关文章

(六)JSP与Servlet的关系

JSP与Servlet的关系 JSP(Java Server Pages)是继Servlet后Sun公司推出的新技术。JSP技术在传统的HTML文件中插入Java程序段和JSP标记,从而形成JSP文件(*.jsp)。用JSP开发的Web应用是跨平台的,既能在Window…

mermaid 之 (Flowchart) 流程图

(Flowchart) 流程图是一种在Mermaid中常用的图形,用于描述一系列步骤和决策。以下是Mermaid中创建流程图的详细语法介绍: 前言 官网文档 基础语法 图的方向 graph TD:从上到下 (Top Down)graph LR:从左到右 (Left to Right)g…

微信小程序使用echarts组件实现饼状统计图功能

微信小程序使用echarts组件实现饼状统计图功能 使用echarts实现在微信小程序中统计图的功能,具体的实现步骤思路可进我主页查看我的另一篇博文https://blog.csdn.net/weixin_45465881/article/details/138171153进行查看,本篇文章主要使用echarts组件实…

【迅投qmt系列】2、历史数据获取

1、基本思想 在 xtquant 中,历史数据要先下载(download_history_data)到本地的缓存文件中,之后才能获取(get_market_data)使用。 如果确认之前已经下载过,且数据完整,那么后续使用前…

STM32玩转物联网实战篇:5.ESP8266 WIFI模块MQTT通信示例详解

1、准备开发板 开发板功能区分布图 开发板俯视图 2、实验讲解 在之前的章节中,已经讲解过了MQTT的通讯原理和组包过程,现在开始手把手的教大家用代码来实现连接MQTT平台以及数据的交互,实际上这篇文章已经拖更接近两年了,非常…

Oracle Linux 8.8 一键安装 Oracle 11GR2 RAC(231017)

前言 Oracle 一键安装脚本,演示 Oracle Linux 8.8 一键安装 Oracle 11GR2 RAC(231017)过程(全程无需人工干预):(脚本包括 ORALCE PSU/OJVM 等补丁自动安装) ⭐️ 脚本下载地址&…

【Linux】信号的产生

目录 一. 信号的概念signal() 函数 二. 信号的产生1. 键盘发送2. 系统调用kill()raise()abort() 3. 软件条件alarm() 4. 硬件异常除零错误:野指针: 三. 核心转储 一. 信号的概念 信号是消息的载体, 标志着不同的行为; 是进程间发送异步信息的一种方式, 属于软中断. 信号随时都…

Java面试之数据类型

在Java中,数据类型用于声明变量并指定变量能够存储的数据类型。Java的数据类型可以分为两大类:基本数据类型和引用数据类型。 一、基本数据类型: 1.1、整型:用于表示整数值,包括byte、short、int和long。 byte&…