本文是该系列的第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)编码解码相关推荐

  1. matlab相语法,学会System Generator(10)——支持的MATLAB语法

    本文是该系列的第10篇,上一篇介绍了在System Generator设计中使用MCode模块调用MATLAB代码来完成逻辑控制.本文将介绍System Generator支持的所有MATLAB语法. ...

  2. 学会System Generator(2)数字滤波器设计

    本文是该系列的第2篇,上一篇介绍了System Generator的基本知识以及软件的安装.本文将以一个简单的数字滤波器的设计为主题,介绍Sysgem Generator的完整设计流程,同时详细介绍使 ...

  3. 学会System Generator(22)图像采集与输出(数据流方法)

    本文是该系列的第22篇.上一篇介绍了使用Image From File和Video Viewer完成图像的采集和输出,并将两部分分别打包为子系统,使其具有通用性.本文将介绍如何使用Simulink提供 ...

  4. 学会System Generator(10)支持的MATLAB语法

    本文是该系列的第10篇,上一篇介绍了在System Generator设计中使用MCode模块调用MATLAB代码来完成逻辑控制.本文将介绍System Generator支持的所有MATLAB语法. ...

  5. matlab的.m语法,学会System Generator(10)——支持的MATLAB语法

    本文是该系列的第10篇,上一篇介绍了在System Generator设计中使用MCode模块调用MATLAB代码来完成逻辑控制.本文将介绍System Generator支持的所有MATLAB语法. ...

  6. 【Android FFMPEG 开发】FFMPEG 交叉编译配置 ( 下载 | 配置脚本 | 输出路径 | 函数库配置 | 程序配置 | 组件配置 | 编码解码配置 | 交叉编译配置 | 最终脚本 )

    文章目录 一.FFMPEG 源码下载 解压 二.交叉编译工具 三.configure 脚本及帮助命令 四.配置 configure 脚本 五.输出目录配置 六.函数库配置 七.程序配置选项 八.组件配 ...

  7. 条形码和二维码编码解码工具类源码

    有一个好的工具,会让你的开发事半功倍.再将讲这个工具类之前,我先给小白补充一点条形码和二维码(以下基础知识选自,我本科阶段的一本教材:<物联网导论>(刘云浩 编著).有对物联网感兴趣的,可 ...

  8. 数据结构哈夫曼编码解码课程设计

    数据结构课程设计 源代码在另一篇博客可以找到:https://blog.csdn.net/qq_40513633/article/details/85055411?ops_request_misc=% ...

  9. python3 转码的函数_python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: 1 #/usr/bin/e ...

  10. 利用ZYNQ SOC快速打开算法验证通路(5)——system generator算法IP导入IP integrator

    一.前言 利用FPGA设计算法一直以来都是热点,同样也是难点.将复杂的数学公式 模型通过硬件系统来搭建,在低延时 高并行性等优势背后极大提高了设计难度和开发周期.Xilinx公司的sysGen(sys ...

最新文章

  1. 学习jQuery之旅--使用炫酷的jQuery插件
  2. 边缘计算 — 起源与定义
  3. C++ Time类重载运算符
  4. 如何使用soapUI模拟webservice客户端发送请求
  5. 【项目管理】用LoC衡量程序员的工作效率是不科学的
  6. java21天打卡day20-集合
  7. MySQL数据监控案例_zabbix 监控多实例mysql
  8. 用C语言统计给定文本文件中汉字的个数
  9. C#与PLC通信开发之松下FP系列PLC
  10. win10家庭版开启远程桌面(带rdpwrap.ini)
  11. 文件另存为GBK编码格式
  12. adt变频器故障代码ol2_变频器常见故障代码及处理实例
  13. android显示微博sdk,android微博sdk发图文微博图片不显示35
  14. Redhat linux命令行连接wifi
  15. bouncycastle
  16. Rasa原文-生成NLU数据
  17. 基于OpenCASCADE自制三维建模软件(三)搭建开发环境
  18. Mysql数据库备份(一)
  19. 微信小程序判断手机系统
  20. DirectSound简单的概述|DirectSound SDK文档翻译

热门文章

  1. 【FlexSim2019】仿真软件入门笔记:基本操作、快捷键、事件驱动、控制与程序
  2. ​17 款程序员神级 Chrome 插件,爱了爱了!
  3. sql连接本地数据库
  4. Tomcat8安装步骤-win10-64位系统
  5. 数据库基本知识点总结
  6. SVN可视化管理iF.SVNAdmin+LDAP认证
  7. (HDRP)全局光照技术初探(一)-光照模式与阴影技术
  8. c语言ascii码表查询,ascii码表查询_ascii码表怎么看
  9. 小程序毕设作品之微信积分商城小程序毕业设计成品(6)开题答辩PPT
  10. 情人节送男生什么礼物好,情人节送礼清单