一.实验原理
1.DPCM
它是利用声音信号的相关性找出可反映信号变化特性的一个差值编码。是对模拟信号幅度抽样的差值进行量化编码的调制方式(抽样差值的含义请参见“增量调制”)。这种方式是用已经过去的抽样值来预测当前的抽样值,对它们的差值进行编码。差值编码可以提高编码频率,这种技术已应用于模拟信号的数字通信之中。DPCM与预测编码类似,只是它有一个量化步骤。量化步骤和PCM中的量化步骤类似,可以是均匀量化,也可以是非均匀量化对于有些信号(例如图像信号)由于信号的瞬时斜率比较大,很容易引起过载,因此,不能用简单增量调制进行编码,除此之外,这类信号也没有像话音信号那种音节特性,因而也不能采用像音节压扩那样的方法,只能采用瞬时压扩的方法。但瞬时压扩实现起来比较困难,因此,对于这类瞬时斜率比较大的信号,通常采用一种综合了增量调制和脉冲编码调制两者特点的调制方法进行编码,这种编码方式被简称为脉码增量调制,或称差值脉码调制,用DPCM表示。其原理是减少或除去声音信号的多余成分以提高通信的有效性。
2.系统设计
在一个DPCM系统中,有两个因素需要设计:预测器和量化器。理想情况下,预测器和量化器应进行联合优化。实际中,采用一种次优的设计方法:分别进行线性预测器和量化器的优化设计。在本次实验中,我们采用固定预测器和均匀量化器。预测器采用左侧、上方预测均可。量化器采用8比特均匀量化。
二.实验流程
1. 写入BMP文件,利用实验2的程序将其转化为YUV文件,并提取Y部分。
2. 对该灰度图像进行预测,计算预测误差(预测器的输入为上一个样点的重建值)。
3. 对预测误差进行8bit均匀量化。
4. 对量化后的预测误差进行反量化,求出重建值。
5. 将预测误差图像写入文件,并将该文件输入Huffman编码器,得到输出码字的必要信息。将原始灰度图像输入Huffman编码器,得到码字必要信息。比较两种系统(DPCM+熵编码和仅进行熵编码)之间的编码效率。
三.实验代码分析
FILE* qFile = NULL;
FILE* reFile = NULL;
u_int8_t* qBuf = NULL;
u_int8_t* reBuf = NULL;
qBuf = (u_int8_t*)malloc(frame_width * frame_height); //定义指针指向预测误差图像缓冲区
reBuf = (u_int8_t*)malloc(frame_width * frame_height); //定义指针指向重建图像缓冲区
//预测器为左侧预测
for (int j = 0; j<frame_height; j++) //逐行遍历
{
for (i = 0; i< frame_width; i++)
{
if (