定义时域数据序列{x(n)|n=0,1,2,…,N-1}在DCT域中的归一化信号能量分布为:
m=0,1,2,…,N-1
由DCT变换示意图可以看出信号能量在变换域中的分布具有低频高幅和高频低幅的特点,当频率越高时DCT分量的值逐渐趋于零,所以信号能量主要集中地分布在前M(M)个分量。当M足够大时,总能保证前M个分量的能量达到一定值,即:
E (M-1)×100≥Eth
式中Eth为根据实际要求预选设定的门限值。在压缩过程只存储或传输这前M个分量,其余的N-M个分量被忽略,从而达到压缩的目的。在解压缩过程进行反变换时,首先将被被忽略掉的N-M个分量用零补充(由变换示意图高频分量的幅值趋近于零),让对调整或的N个变换系数进行IDCT,便可具有很好保真度地恢复重现原数据序列。
5.编码实现
Blackfin处理器是16位定点DSP,对于DCT变换压缩算法必须使用特定的浮点处理方法。常见的方法有Q0,Q15法表示浮点数。本程序使用Q0法表示,即16位全部表示整数,不含小数。针对DSP的算法优化主要体现在浮点运算和查表运算上。比如cos值为0到1之间的小数,用Q0法表示需要对cos值按照预定精度增大一定的比例。本程序需要使用三个表,一是COS表:将cos值预先乘上128,并将0~PI/2的范围分成512份,生成COS表。
cos(x), 0当x>PI/2时,根据cos的周期性将它调整至0~2PI内,再根据cos的对称性调整x和结果的符号。二是SQR平方根表;三是除法表:由于Blackfin处理器进行除法运算很耗时间,在这里采用预乘一个参数再左移m位的办法代替除法运算。这个参数就构成了除法表。
N / I = n * k [I] << m;
其中表项K[I] = 1 / I * 2^m