学会System Generator(19)增量调制(DM)编码解码
本文是该系列的第19篇。语音编码压缩的目的是在尽量不损失信息的情况下降低码率,从而节省存储空间和通信带宽。To Multimedia File这个block就提供几种语音压缩方式:CCITT A律、CCITT μ律、GSM 6.10、PCM、ADPCM。本文将介绍一种很简单的增量调制(DM)编码方式。
DM编解码
DM(Delta Modulation)编码的原理很简单,信号处理的学习者对这个概念也不陌生(博主是在《现代通信技术概论》这本书中第一次接触到这个概念)。其编码原理如下:
第一幅图为语音信号,第二幅图为编码后的PWM信号。在对语音信号采样时,编码系统会比较相邻两个时刻的采样值,若信号幅度增加,则编码为1;若信号幅度减少,则编码为0(也可以相反)。系统的编码结果仅仅需要1比特来表示信号的增量关系。
解码时选择一个固定的量化阶数,根据DM编码值为1或0来决定输出信号是加上一个量化阶数、还是减去一个量化阶数。
System Generator设计
在Simulink中添加block按下图连接:
使用Delay做一个单位的延迟,存储“过去时刻的采样值”a,并与当前时刻的采样值b一同输入到Relational这个block中进行对比,构成DM编码;编码结果经过一个非门用来控制加法器(AddSub,Operation配置为Addition or subtraction),决定加上或减去量化阶数,构成DM解码。
编码器输出的1表示正的增量,0表示负的增量;但是AddSub的sub端口为1时执行a-b(减去量化阶数),为0时执行a+b(加上量化阶数)。由于两个部分的逻辑恰好相反,因此中间加一个Invert block取反。
性能分析
运行仿真,播放解码后的音频文件会发现噪声很严重,信号质量明显下降。这也是DM编解码的固有缺陷。PCM编码是对每个采样值的幅度都用一定位宽的数据量化;DM编码每个采用值只用1比特量化。虽然码率降低了很多,但信噪比也大大下降。
DM编码有如下两个固有缺陷:
- 斜率过载:当输入信号变化速率过快时,比较器的输出跟不上输入信号的快速变化。
- 粒状噪声:当输入信号变化较慢时,相邻两个采样值的差值非常接近0,此时比较器的输出会在0和1之间跳变。
用到的block功能如下:
- Invert:对输入的定点数据按位取反;
- Relational:比较器,可判断的等式包括a=b、a!=b、a小于b、a>b、a<=b、a>=b,输出结果为bool类型;
- Constant:输出常数值,但由于设置的位宽有限,软件会选择一个所能表示的与设定值最接近的值。
学会System Generator(19)增量调制(DM)编码解码相关推荐
- matlab相语法,学会System Generator(10)——支持的MATLAB语法
本文是该系列的第10篇,上一篇介绍了在System Generator设计中使用MCode模块调用MATLAB代码来完成逻辑控制.本文将介绍System Generator支持的所有MATLAB语法. ...
- 学会System Generator(2)数字滤波器设计
本文是该系列的第2篇,上一篇介绍了System Generator的基本知识以及软件的安装.本文将以一个简单的数字滤波器的设计为主题,介绍Sysgem Generator的完整设计流程,同时详细介绍使 ...
- 学会System Generator(22)图像采集与输出(数据流方法)
本文是该系列的第22篇.上一篇介绍了使用Image From File和Video Viewer完成图像的采集和输出,并将两部分分别打包为子系统,使其具有通用性.本文将介绍如何使用Simulink提供 ...
- 学会System Generator(10)支持的MATLAB语法
本文是该系列的第10篇,上一篇介绍了在System Generator设计中使用MCode模块调用MATLAB代码来完成逻辑控制.本文将介绍System Generator支持的所有MATLAB语法. ...
- matlab的.m语法,学会System Generator(10)——支持的MATLAB语法
本文是该系列的第10篇,上一篇介绍了在System Generator设计中使用MCode模块调用MATLAB代码来完成逻辑控制.本文将介绍System Generator支持的所有MATLAB语法. ...
- 【Android FFMPEG 开发】FFMPEG 交叉编译配置 ( 下载 | 配置脚本 | 输出路径 | 函数库配置 | 程序配置 | 组件配置 | 编码解码配置 | 交叉编译配置 | 最终脚本 )
文章目录 一.FFMPEG 源码下载 解压 二.交叉编译工具 三.configure 脚本及帮助命令 四.配置 configure 脚本 五.输出目录配置 六.函数库配置 七.程序配置选项 八.组件配 ...
- 条形码和二维码编码解码工具类源码
有一个好的工具,会让你的开发事半功倍.再将讲这个工具类之前,我先给小白补充一点条形码和二维码(以下基础知识选自,我本科阶段的一本教材:<物联网导论>(刘云浩 编著).有对物联网感兴趣的,可 ...
- 数据结构哈夫曼编码解码课程设计
数据结构课程设计 源代码在另一篇博客可以找到:https://blog.csdn.net/qq_40513633/article/details/85055411?ops_request_misc=% ...
- python3 转码的函数_python基础3之文件操作、字符编码解码、函数介绍
内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: 1 #/usr/bin/e ...
- 利用ZYNQ SOC快速打开算法验证通路(5)——system generator算法IP导入IP integrator
一.前言 利用FPGA设计算法一直以来都是热点,同样也是难点.将复杂的数学公式 模型通过硬件系统来搭建,在低延时 高并行性等优势背后极大提高了设计难度和开发周期.Xilinx公司的sysGen(sys ...
最新文章
- 学习jQuery之旅--使用炫酷的jQuery插件
- 边缘计算 — 起源与定义
- C++ Time类重载运算符
- 如何使用soapUI模拟webservice客户端发送请求
- 【项目管理】用LoC衡量程序员的工作效率是不科学的
- java21天打卡day20-集合
- MySQL数据监控案例_zabbix 监控多实例mysql
- 用C语言统计给定文本文件中汉字的个数
- C#与PLC通信开发之松下FP系列PLC
- win10家庭版开启远程桌面(带rdpwrap.ini)
- 文件另存为GBK编码格式
- adt变频器故障代码ol2_变频器常见故障代码及处理实例
- android显示微博sdk,android微博sdk发图文微博图片不显示35
- Redhat linux命令行连接wifi
- bouncycastle
- Rasa原文-生成NLU数据
- 基于OpenCASCADE自制三维建模软件(三)搭建开发环境
- Mysql数据库备份(一)
- 微信小程序判断手机系统
- DirectSound简单的概述|DirectSound SDK文档翻译