实验四:DPCM编码
来源:互联网 发布:seo如何添加栏目 编辑:程序博客网 时间:2024/06/12 13:14
一、实验原理
DPCM是差分预测编码调制技术,采用预测编码的方式传输信号。预测编码是根据过去的信号样值来预测下一个信号样值,并仅对预测值与现实样值的差值进行量化,编码后进行数字信号传输。DPCM是采用固定预测器与固定量化器的差值脉冲调制。以下是DPCM编码的发送端与接收端:
s(n)是输入语音信号,sr(n)是重建语音信号,作为预测器确定下一个信号估计值的输入信号。sp(n)是预测语音信号,d(n)是预测误差信号,也称为差值信号。dq(n)是量化后的差值信号,I(n)是dq(n)的代码。
当前样本的重建值=当前样本的反量化误差+当前样本的预测值(即前一样本的重建值)
DPCM的核心思想是负反馈,采用这种结构可以避免量化误差的累积。所以编解码端预测器的输入都是重建值。在DPCM编码器中实际内嵌了一个解码器。
二、实验步骤
本次实验是在实验二(BMP2YUV)8bit量化的基础上,增加一个for循环即可。
①读取一个灰度图像文件,对亮度信号Y的左侧像素做预测。
②开辟三个Buffer,分别存放原始Y(yBuffer)、重建后的样本(pBuffer)和量化后的预测误差(eBuffer)。
③将量化后的误差信号输送给huffman编码器进行编码。
三、相关代码
for (i = 0; i < Height; i++){ for (j = 0; j < Width; j++) { if (j == 0) { *eBuffer = ((*yBuffer - 128)/ 2 + 128); //将第一列的预测值设为128,则预测误差范围为-255到+255。对其进行8bit量化,除以2并下取整,量化后误差范围变为-127-127,而预测误差范围应为0-255,所以要加上128 *pBuffer = 128 + (*eBuffer - 128) * 2; //将量化后的误差进行反量化,再加上预测值,得到对应像素的重建值 eBuffer++; yBuffer++; pBuffer++; } else { *eBuffer = (*yBuffer - *(pBuffer - 1)) / 2 + 128; //上一轮的重建值作为下一像素的预测值,进行新一轮的预测编码 *pBuffer = *(yBuffer - 1) + (*eBuffer - 128) * 2; //当前重建信号为反量化后的差值信号与上一个重建信号的和 eBuffer++; yBuffer++; pBuffer++; } }}
四、实验结果
左图为原始图像,中间为重建图像,右边为差值图像。
分别对以上三幅图做误差图像的概率分布,如下所示:
五、实验结论
1、重建图像和原始图像从肉眼看区别不大,量化误差的概率分布集中在中间(大约128处)。
2、对以上三幅图进行huffman编码和DPCM编码的比较:
结合概率分布图,可以看出预测误差图像概率分布更加集中,压缩比也更大,所以编码效率更高。
阅读全文
0 0
- 实验四-dpcm编码
- 实验四 DPCM编码
- 实验四 DPCM编码
- 实验四:DPCM编码
- 数据压缩实验四:DPCM编码
- 数据压缩实验四:DPCM编码
- 实验四——DPCM编码
- 【实验五】DPCM编码
- 实验4 DPCM编码
- 【数据压缩】实验四 DPCM
- 数据压缩实验4-DPCM编码
- 数据压缩实验四--dpcm压缩系统
- DPCM编码
- DPCM编码
- 实验四 DPCM 压缩系统的实现和分析
- 数据压缩实验四:DPCM 压缩系统的实现和分析
- 数据压缩实验四 DPCM压缩系统的实现与分析
- 《数据压缩》实验报告四·DPCM编解码
- JS 函数 this,call
- C语言编程中return 0是必须的吗?
- JS中的object对象
- jQuery报错:Uncaught ReferenceError: $ is not defined
- Java数据类型
- 实验四:DPCM编码
- 四、教程篇-《生成model类》
- java.lang.Boolean源码
- JS 对象的创建(一)
- C++中的构造函数与拷贝构造的优化处理
- mysql安装
- java.sql.SQLException: ORA-00911: 无效字符 解决方法
- 插入排序
- JS 对象之Json