DSP语音压缩设计_第1页
DSP语音压缩设计_第2页
DSP语音压缩设计_第3页
DSP语音压缩设计_第4页
DSP语音压缩设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设计报告 项目名称 DSP 应用系统 题 目 语音压缩技术研究 专业班级 电子信息工程 1102 学生姓名 学 号 指导教师 2014 年 6 月 5 日 目目 录录 一 概述 1 二 研究内容 1 三 研究方案 算法原理说明 1 四 程序设计 调试与结果分析 5 五 总 结 10 参考文献 11 0 一 概述一 概述 当今的通信应该是人与人之间方便快捷 可多种手段实现信息交换的形式 其中 通过 语音传递信息是人类最重要的 最有效和最方便的通信方式 因此语音通信在现代数字通信 系统中占有重要的地位 随着信息社会的快速发展 通信信道资源变得非常宝贵 各种语音 压缩编码技术应运而生 高速数字信号处理器的出现 使得语音编码算法可以实时的实现 并且带动语音压缩技术得到了突飞猛进的发展 另外 移动通信技术飞速发展 已经越来越 深入的渗透到每个人的生活当中 对讲机系统随着移动通信技术也迅速发展着 在公安 交 通运输等多个领域得到广泛的应用 低速率语音编码以及在此基础上的数字对讲机技术已 成为数字通信中的一个重要的研究领域 本文首先介绍了一种多带激励语音 MBE 低速率 编码算法 这种算法在很大范围内改善了解码合成后的语音质量 而算法的复杂度并没有明 显增加 它不仅在低速率上能恢复出音质比传统声码器好得多的语音 可达到 2 4k bps 或 更低的编码速率 而且具有良好的自然度和容忍环境噪声的能力 是目前较为理想的低速率 语音编码方案 在低速率的语音编码基础之上 本文又提出了几种窄带数据加密技术的方案 并 对这几种数字对讲方案进行了分析和仿真 语音压缩技术指的是对原始数字音频信号流运用适当的数字信号处理技术 在不损失 有用信息量 或所引入损失可忽略的条件下 降低 压缩 其码率 也称为压缩编码 它 必须具有相应的逆变换 称为解压缩或解码 音频信号在通过一个编解码系统后可能引入 大量的噪声和一定的失真 数字信号的优势是显而易见的 而它也有自身相应的缺点 即 存储容量需求的增加及传输时信道容量要求的增加 本次实验采用DSP C5402实验板实现语音信号的压缩解压的 SEED VC5402 DSK实验板 上集成了SRAM FLASH 音频输入输出接口等部件 这些外设为我们提供了极大的方便 语音信号的幅度 发音强度 并非均匀分布 由于小信号占的比例比大信号大很多 因此可以进行非均匀量化 达到这一目标的基本做法是 对大信号使用大的量化间隔 而 小信号则使用小的台阶 ITU T G 711建议的PCM A律和 律语音压缩标准可以分别将13比特 和14比特压缩为8比特 达到语音压缩的目的 二 研究内容二 研究内容 1 设计要求及目标 基本部分 1 使用DSP实现语音压缩和解压缩的基本算法 算法类型自定 例如可以采用 G 711 G 729等语音压缩算法 2 采用A D转换器从MIC输入口实时采集语音信号 进行压缩后存储到DSP的片内和 片外RAM存储器中 存储时间不小于10秒 3 存储器存满之后 使用DSP进行实时解压缩 并从SPEAKER输出口进行回放输出 4 使用指示灯对语音存储和回放过程进行指示 使用多种算法进行语音的压缩 存 储和解压缩 比较它们之间的优缺点 三 三 研究方案 算法原理说明研究方案 算法原理说明 1 语音算法与芯片特点 在本项目中 我们选择了 DSP 集团的语音压缩最新算法 Triple Rate Coder 其压缩比 达到了46 1 且音质良好 MOS 指标达到了3 98 该算法的基本思想是 首先将语音分为若干小段 由于语音信号的谱变化是一个缓变量 因此在每一小段内信号是平稳变化的 然后用一个数字滤波器和一个激励函数来表示这一段 1 时域波形的离散采样序列 在实际算法中是采用了一个十阶的线性预测滤波器 计算时还将 每一帧分为4个子帧 每一子帧的滤波器系数矢量由上一帧和本帧数据计算得到 而最后一子 帧的滤波器系数矢量则由矢量分解预测法得到 激励函数采用的是伪随机多脉冲激励函数 由最大似然算法得到 对每一帧计算得到滤波器系数矢量和函数生成元后 将这些系数再压 缩打包就得到了最后的语音压缩数据 当对语音压缩数据进行解压时 首先将打包的数据展 开 然后建立起线性预测滤波器 将重新生成的伪随机多脉冲激励函数输入滤波器 这样在滤 波器的输出端就可得到被恢复的语音信号序列了 该算法的实时运算需要22MIPS 以上的运算速度 为此 DSP 集团将 DSP 内核和算法代码 集成在 D6571系列芯片内 以满足除 PC 用户以外的更广泛应用 D6571原理框图如图1所示 其本身可直接外挂并管理4兆位的 flash 8K 采样速率时在2 8KB 的数据率下可提供25分钟 的回放时间 该芯片具备工业标准的编解码器接口 可直接与串行 PCM 接口的音频编解码芯 片相连 如美国国家半导体的 TP3054或韩国三星半导体的 KS8620 D6571可外接两片音频编 解码芯片 上电后可用设置命令对外接音频编解码芯片的工作模式进行设置 例如 设置外接 芯片的时钟是外同步还是自同步 设置外接芯片处于输出方式还是输入方式等 根据实际开发经验 我们认为 D6571芯片与其它公司所提供的某些 DSP 内核芯片相比 其最大的优点是几乎不需要任何开发工具或软件就可使用 因为该芯片的数据是双向的 既 可由上位机将压缩后的语音数据通过它解压转变成语音 也可输入语音通过它进行实时压缩 后传送给上位机 这就大大方便了长回放时间语音开发用户的使用 更何况目前许多语音压 缩芯片对语音数据的管理是不公开的 例如 某些数字录音电话的语音压缩芯片 2 系统构成 与语音处理有关的系统构成如图2所示 语音数据存放在一片32兆位的 flash 中 采用三星的 K29W3200 这是一种8位并行接口 的闪存 并行接口有利于提高代码效率和满足实时性要求 在语音数据的压缩和回放过程中 D6571和 flash 之间的数据吞吐均通过上位机进行 上 位机采用89C52 系统还有64 64的点阵液晶模块 ACM6464等外围设备 所有的设备均使用一 条公共的8位数据总线 即 CPU 的 P0口 P2口的六根口线用于键盘管理 P3口的两根口线作为 两条串口线 这样用于外设管理的口线还剩余16根可用 系统实际使用了其中的14根线 与 flash 管理有关的使用6根 与 D6571有关的使用4根 还有4根用于液晶显示管理 音频编解码接口芯片采用一片 TP3054 TP3054工作所需的同步脉冲 采样时钟 数据 信号等只需要与 D6571的四根控制线相连即可得到 3 系统开发 本系统的语音开发分为上载 数据合成及下载三个过程 上载是指获得语音压缩数据 数据合成是指将全系统的数据按一定的结构组织成一个文件 下载是指仪器装配出厂时将文 件烧录到 flash 中 这三个过程均通过 PC 机进行 由于系统板上 MCU 的串行信号直接输出的 是 TTL 电平 因此 本系统的语音开发唯一需要另外制作的硬件就是使用一片 MAX232来完成 与 PC 机之间的电平转换 2 D6571具有16位宽度的总线 但也允许以分时方式使用8位总线 这时上位机须用 HL 信号 表示送上总线的是高8位还是低8位 而当 D6571主动将数据送上总线时 会发出 ACK 信号通 知上位机读取数据 HRD 和 HWR 则是读和写的控制线 由于 Triple Rate Coder 算法是按30 毫秒分帧采样 然后再进行分析压缩的 因此无论是读取压缩数据还是回送压缩数据 均必须 在一帧之内完成 否则 D6571会自行进入休眠状态 向 D6571输送语音数据的过程如下 首先 送出解压控制命令 然后接收一个回送状态字 状态字中包含了当前帧所需要的字节数 上位 机就连续送出规定数目的数据 待一帧处理完毕后 D6571会继续送出状态字 如此循环就可 连续回放出语音了 而利用 D6571进行语音压缩的数据处理过程正好相反 状态字中包含的 是当前帧压缩所得到的字节数 上位机就应连续接收规定数目的数据 上载时 首先要得到的是各个语音段的压缩数据 作为准备工作 先用 PC 机的录音机工 具将我们所需的语音录制成 WAV 文件 然后对 MCU 和 PC 机分别编写共同配合工作的两段程 序来完成以下功能 PC 机通过声卡播放声音给 D6571 89C52控制 D6571进行语音压缩并读回 压缩数据 然后通过串口线回送给 PC 机 PC 机则将每段的压缩数据存盘 由于每段语音播放时均要有一定的中文点阵字符显示 数据合成的任务就是要将每段数 据加上索引和字符点阵数据后再合成为一个完整的近32兆位的二进制文件 文件形成时为了 使数据定位和读出编程方便 数据块以 flash 的页为单位 一页为528字节 下载工作则较简单 在设备出厂前直接使用系统89C52的串口将数据合成形成的文件下 载到闪存中即可 D6571的压缩率极高 使用和开发也比较方便 因此尽管本系统的语音容量长达200分钟 但系统整体设计十分简洁 经济 几乎不需调试 主要开发工作是 MCU 和 PC 机的一些程序开 发使用 C51和 VB 编程 开发速度也比较快 由于 D6571的控制命令很丰富 系统用户界面的软件是很容易编写的 例如 由于该芯片 具有30阶的音量控制命令 我们未添任何硬件就为设备增加了数字音量控制功能 D6571的控 制命令还包含自动增益控制 变速回放 数字滤波器等更加高级的命令 因此 它几乎可应 用于任何语音场合 4 语音的 u 律压缩与解压原理 u 率限制采样模值为 13 比特 u 律的压缩可定义为 1ln 1ln sgn u xu xxF 11 x 从线性到 u 律的压缩转换如下表所说明 压缩后的码字组成 比特 0 3 表示量化值 比特 4 6 表示段值 压缩后的码字符号放在比特 7 为了简化未写出 U 律二进制编码表 压缩前的码字压缩后的码字 输入值 丢弃的 比特数段值 量化值 3 比特 12 11 10 9 8 7 6 5 4 3 2 1 0比特 6 5 4 3 2 1 0 0 0 0 0 0 0 0 1 a b c d x 10 0 0 a b c d 0 0 0 0 0 0 1 a b c d x x2 0 0 1 a b c d 0 0 0 0 0 1 a b c d x x x3 0 1 0 a b c d 0 0 0 0 1 a b c d x x x x4 0 1 1 a b c d 0 0 0 1 a b c d x x x x x5 1 0 0 a b c d 0 0 1 a b c d x x x x x x6 1 0 1 a b c d 0 1 a b c d x x x x x x x7 1 1 0 a b c d 1 a b c d x x x x x x x x8 1 1 1 a b c d 在扩展前 u 律码字再次反转 低位的有效比特原是丢弃的 但是为了减少精度损失 用中间值近似 为了简化 扩展后的码字符号左溢 U 率二进制解码表 压缩过的码字 段值 量化值 偏值的输入 比特 6 5 4 3 2 1 0比特 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 a b c d 0 0 0 0 0 0 0 1 a b c d 1 0 0 1 a b c d 0 0 0 0 0 0 1 a b c d 1 0 0 1 0 a b c d 0 0 0 0 0 1 a b c d 1 0 0 0 1 1 a b c d 0 0 0 0 1 a b c d 1 0 0 0 1 0 0 a b c d 0 0 0 1 a b c d 1 0 0 0 0 1 0 1 a b c d 0 0 1 a b c d 1 0 0 0 0 0 1 1 0 a b c d 0 1 a b c d 1 0 0 0 0 0 0 1 1 1 a b c d1 a b c d 1 0 0 0 0 0 0 0 5 5 程序设计思路及流程图 程序设计思路及流程图 思路 DSP 程序设计应包括用户程序 存储器配置程序 为了实现语音信号的采集与回放 先将语音信号采集 运用 a 律压缩算法将信号压缩并存入存贮器中 当放音开始时运用 a 律解压算法将信号解压并从存储器中释放出来 实现语音的回放 流程图 2 3 4 5 6 7 初始化 DSP 及串行口 初始化 A D 转换器 D A 转换器 语音经 A D 转换器输入 数据压缩 数据存储 开始 4 8 9 10 11 四 程序设计 调试与结果分析四 程序设计 调试与结果分析 1 1 程序设计 程序设计 1 用 2812dsp 实现语音的 A 率压缩解压有两种方法 a 使用多通道缓冲串口 McBSP 的缩展器 在多缓冲通道串口 McBSP 内部装置了硬件电路 支持 A 律格式缩展器 对数据进行 压缩与扩展 A 律缩展器允许 14 比特的动态范围 首先描述一下 McBSP 硬件如何能够同时处理 A 律 如图显示的是 McBSP 缩展器硬件工 作流程 在接受端 McBSP 接收压缩的 非线性的数据然后扩展为线性数据写道 CPU 或 DMA 在发送端 从 CPU 或 DMA 得到的线性数据在发送前必须按着 A 律压缩 RSR RBR RJUST DRR DLB 模式非 DSB 模式 b 用软件实现 主程序的功能是从 McBSP 的接收通道读取 A D 转换的值 然后经过压缩解压后将其发 送到 McBSP 的发送通道 构成 AD50 CODEC 模拟输入和输出通道的自环 是否能接收到 A D 转换的数据是通过查询串口 1 的接收标志 RRDY 来进行的 程序为 while 1 while MCBSP RRDY HANDSET CODEC data volatile int DRR1 ADDR HANDSET CODEC temp1 data2alaw data data alaw2data temp2 volatile int DXR1 ADDR HANDSET CODEC data 2 实验程序及相关功能解释如下 头文件 include include 接收移位 寄存器 接收缓冲寄 存器 扩展器 发送移位寄存器压缩 器数据发送寄 存器 从 CPU DMA 输入 数据接收 寄存器 调整模式控 制位 解压缩经 D A 转换器回放 结束 到 CPU 或 DMA 5 include include 声明函数 void delay s16 period unsigned char data2alaw int int alaw2data unsigned char 定义变量 HANDLE hHandset int data0 int data1 long i j 0 long k l 0 unsigned int temp1 unsigned char temp2 unsigned int m unsigned int buffer 50000 主程序 void main s16 cnt1 2 s16 cnt2 10 if brd init 100 初始化DSK板 失败退出 return while cnt1 指示灯依次先亮后灭 brd led toggle BRD LED0 delay 1000 brd led toggle BRD LED1 delay 1000 brd led toggle BRD LED2 delay 1000 AD50的初始化 hHandset codec open HANDSET CODEC 初始化串口1 设置成功返 回codec的句柄放在变量hHandset中 codec dac mode hHandset CODEC DAC 15BIT 15bit D A转换 codec adc mode hHandset CODEC ADC 15BIT 15bit A D转换 codec ain gain hHandset CODEC AIN 6dB 输入6dB增益 codec aout gain hHandset CODEC AOUT MINUS 12dB 输出 12dB增益 codec sample rate hHandset SR 8000 8K采样率 while 1 brd led disable BRD LED1 关闭led1 brd led disable BRD LED2 关闭led2 brd led toggle BRD LED0 录音指示灯亮 6 while MCBSP RRDY HANDSET CODEC 采集语音信号 data0 volatile u16 DRR1 ADDR HANDSET CODEC temp1 data2alaw data0 A律压缩 存储压缩后的数据 i i 1 if i 2 1 buffer j temp1 100000 i 0 if j 50000 j 0 brd led disable BRD LED0 brd led disable BRD LED2 while cnt2 灯闪烁 brd led toggle BRD LED1 brd delay msec 1000 delay 2000 cnt2 10 brd led disable BRD LED0 放音指示灯亮 brd led disable BRD LED1 brd led toggle BRD LED2 取出压缩数据 for k 0 k 8 else temp2 buffer l l if l 50000 l 0 7 data1 alaw2data temp2 解压缩数据 while MCBSP XRDY HANDSET CODEC 输出解压后的数据 volatile u16 DXR1 ADDR HANDSET CODEC data1 4 delay 2000 for m 0 m 0 1 0 判定符号 正数 1 负数 0 for i 0 i 16 i 确定temp中出现1的最高位 output temp if output break temp 左移i位后最高位为1 temp 1 achord 11 i 求出段值 if achord 1 段值为0 将absol右移1位得到量化值 else astep absol achord 段值不为0 将absol右移 achord 4095 超过最大值4095 输出最大值0 x7f output 0 x7F if sign return output 0 xFF 返回含有符号信息的输出值 else return output 0 x7F A律解压子程序 int alaw2data unsigned char input unsigned char sign achord astep unsigned int temp 8 int data temp input 0 xFF 得到含有符号信息的压缩值 sign temp 得到符号位 achord temp 得到段值 astep temp 得到量化值 astep 1 if achord 段值为0 输出值为量化值左移1位后加1 data astep 1 else data astep 33 扩展后数值中的6位非零值 data 0 1 0 判定符号 正数 1 负数 0 for i 0 i 16 i 确定temp中出现1的最高位 output temp if output break temp 左移i位后最高位为1 temp 1 achord 10 i 求出段值 if achord 1 段值为0 将absol右移1位得到量化值 else achord astep absol achord 段值不为0 将absol右移 achord 8191 超过最大值8191 输出最大值0 x7f output 0 x7F if sign return output 0 xFF 返回含有符号信息的输出值 else return output 0 x7F u率解压子程序 int ulaw2data

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论