DCPM编码的原理及程序实现
目录
一、DCPM编码原理
1、预测编码
预测编码: 利用信源相邻符合之间的相关性
- 根据某一模型利用以往的样本值对新样本进行 预测,然后将样本的实际值与其预测值相减得 到一个误差值,最后对这一误差值进行编码。
- 如果模型足够好,且样本序列在时间上相关性 较强,则误差信号的幅度将远远小于原始信号 ,从而得到较大的数据压缩。
2、图片说明
在DPCM系统中有两个因素需要设计,一个是量化器,一个是预测器。理想情况下预测其和量化器应进行联合优化,实际中采用一种次优的设计方法:分别进行线性预测器和量化器的设计。在本次试验中我们采用固定预测器和均匀量化器,预测器采用左侧、上侧均可(代码中采用左侧),量化器采用8bit量化。
二、具体内容实现
1、c++语言程序
- 头文件 DCPM.h
#pragma once
#define DCPM_H_INCLUDED
#include"iostream"
#include"math.h"
#include"stdio.h"
#include"malloc.h"
using namespace std;
void DpcmEn(unsigned char* yBuff, unsigned char* preerr, unsigned char* level, int h, int w, int q) {
int prediction;
int err;
int i;
int j;
int a;
int b;
for (i = 0; i < h; i++) {
prediction = 128;
err = yBuff[i * w] - prediction;
a = (err + 128) / pow(2, 8 - q);
if (a > pow(2, q) - 1) {
a = pow(2, q) - 1;
}
if (a < 0) {
a = 0;
}
preerr[i * w] = a;
b = preerr[i * w] * pow(2, 8 - q) - 128 + prediction;
if (b > 255) {
b = 255;
}
if (b < 0) {
b = 0;
}
level[i * w] &#