首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

小波包基的选择中的常用代价函数与数据规范化

小波包基的选择中的常用代价函数与数据规范化

在小波包变换的分解与合成中,小波包序列组成了一个基底库,因此存在选择一个最优基的问题。这须要明确的代价准则,即定义某种选择的代价、代价函数。代价函数(cost function)的自变量,是信号在某个基向量组上的分解系数,实的因变量的值即是代价。代价函数,也被称为信息花费函数。这个“代价”,在Matlab的小波工具箱中,也被称为entropy(熵、平均信息量)。

       《现代数学手册·计算机数学卷》(2001年2月第1版,华中科技大学出版社)在第7篇的“5.3最优基的选择”一节中,例举了门限代价、lp范数的p次幂、对数熵,它们分别对应于Matlab中的三个熵准则:threshold、norm(手册中,0< p <= 2;Matlab中,1 <= p <2)、logenergy。

       Matlab使用“sure”熵,表现了一种引人注目的愿望和努力:研究针对降噪问题的特殊的代价函数。

       从Matlab的文件wentropy.m中,可见“Last Revision:27-Jan-2010.”、“ Copyright 1995-2010  The  MathWorks,Inc.”很长的时间可用于修正,而且小波的研究也是涉及到了多个学科的热门,但是Matlab的小波工具箱未能正确使用它自己的“shannon”、“logenergy”、“sure”熵,这很怪异。

       “shannon”熵,在Matlab的小波包变换中被作为默认的选择,而在数学手册的举例中未出现。这使初试Matlab工具箱的失败,更撩人。因为,居士本人,也常用Shannon熵函数计算代价以选择小波包基,而且常直接称之为熵。这种偏向,源于在电子工程和信号处理方面的习惯,当然未必更好。

       正在上面那个出版年、月里,Shannon去世。Shannon信息论、Shannon熵、Shannon采样定理、Shannon小波,都是常见的术语;也算写下了,享受着信息科技成果的人们,对天才的怀念吧!

       如果x是长度为N的能量归一化的二值序列,其中有M个正实数,有N-M个0值,那么,M越大时x的“shannon”熵就越大,M=1时达到最小值0。这看起来,符合选择小波包基的通常愿望:用尽量少的重要(非零的)分量,表达信号或信号中的重要成分。

       在博文《结合移位(Cycle-Spinning)平均的小波包域降噪的程序》(2013-10-15)中,程序TDen3Signals.sci列举了设定Tpwp的最佳基准则的变量Wp.BestRule的几个取值3、6、4,分别对应上述手册中的那三个信息花费函数;5可视为“6”在p=1时的特殊情况,它不需其余参数,也比对数运算、幂运算简单,没有奇异点,所以被特列;其它值,都表示用Shannon熵。

       在Tpwp中,被调用于直接计算代价的子程序,不做数据的“取模”(abs)运算。这可能把某些自由,如《用对偶变换处理复信号的双正交小波包》(2012-11-03)的一些试验,留给调用程序。由调用程序处理必须的“取模”问题,否则lp范数的p次幂、门限代价可能不可解释,当然,在实数的处理中反而不会出现Matlab的wentropy函数的平方运算问题。
       从以前关于wentropy的图片中可见,其shannon熵的计算使用了log(eps+x)。这类处理,用一个微小值,限定非负数据趋于零的程度,对付了奇异点。实际上,如果系数x1、x2都远远小于信号能量,非常接近于零,那么,它们也易受各种数字误差的影响,而且它们之间即使几个数量级的差异也并不值得细分。可以放弃通常的理论约定:“0系数”的代价值为0。“0”和1的log运算结果,可以不必再都为零,这在直观上,更“合理”。但是,Matlab中的对数熵,反而没有这种处理。“0序列”的“shannon”熵、对数熵等,在Tpwp中不必为0,在Matlab中为0。
       在信号分析中,将数据能量归一化,一般是合理的。如果需要,能量因子,可以另存。
       有时,可能需要去除信号均值。真正的小波系数,不包括直流成分。但是,“近似系数”会因“去均值”而受影响。处理零均值白高斯噪声序列时,不得到独立同分布的分解系数序列。
       以双正交条件为立足点,把正交小波包变换、普通离散小波变换作为双正交小波包变换的特例,会使推演、应用研究更具有一般性。Matlab的帮助文档,在“Tutorial Demos Wavelet / Wavelet  Packetsecomposing  the  Details / Wavelet Packets for Compression”部分举例,用了bior6.8的双正交小波包变换;它提到的FBI和JPEG2000运用小波变换的成功,那也涉及了双正交滤波器组CDF5/3、CDF9/7。然而,一般说来,用双正交变换时,系数不必具备能量分布的意义,而且级联可能使误差迅速增长,甚至导致不稳定,所以,通常的代价函数值可变得难以解释。对偶变换、范数调整,可带来某些改善,但并未消除问题。越接近于正交的四元滤波器组,越可能适合于小波包变换。

       把下面附的两段程序,分别复制到Scilab和Matlab的命令窗中,运行得图片1.的结果。它们处理相同的五个信号,都用分解系数的模值之和为代价值时,它们得到的最佳基及其系数,如矩阵WpCoe的前5列所示,是一致;都用“shannon”熵函数时,Matlab的结果(能量累积百分比,如矩阵WpCoe的后5列所示,尤其是蓝条所示)表明,其性能更差。

1.Scilab程序:

clear;   n =0:255;   x5 =zeros(5,256);   WpCoe =zeros(8,10);
x5(1, =0.98.^n.*cos(0.51*n)+0.97.^n.*cos(0.70*n)+0.96.^n.*cos(1.40*n);
x5(2, =0.91.^n.*cos(0.91*n)+0.93.^n.*cos(0.94*n)+0.84.^n.*cos(1.30*n);
x5(3, =0.90.^n.*cos(0.79*n)+0.93.^n.*cos(0.96*n)+0.89.^n.*cos(1.48*n);
x5(4, =0.92.^n.*cos(0.61*n)+0.83.^n.*cos(0.79*n)+0.99.^n.*cos(0.80*n);
x5(5, =0.99.^n.*cos(1.25*n)+0.91.^n.*cos(1.31*n)+0.96.^n.*cos(1.42*n);
format('v',8);    load TpwpSubs.bin;  load  MatOrtWlts.bin;
function  [xp0] = wptest0(x00,br1),
   [h0,h1] =WltFilters(42);             // get  Daubechies-4 filter
   [ph,pg,ph1,pg1] =TpwpAllGH(h0,h1,256,8,-1,1,0,0,-1); // basis vectors
   [d0] =TpwpDec(x00,8,ph,-pg,1);       // decomposition
   [c0] = TpwpCost( abs(d0), br1,[],[]); // cost, entropy.!scaling,sign
   [b0,c0] =TpwpBest(c0,8);             // best basis  selection
   [i0] =TpwpCoeIndx(b0,8,256);         // best coefficient  index
   xp0 =d0(i0);                         // return coefficients
endfunction;
for  i1=1:5,
   x0 =x5(i1,;        x0 = x0-mean(x0();   x0 =x0/norm(x0();
   [x1] =wptest0(x0,5);  [x2,i2] =gsort(abs(x1(),'g');
   x2 =x1(i2);          WpCoe(:,i1) = round(x2(1:5:40)*1e5);
   [x1] =wptest0(x0,1);  x2 =x1(.^2;        x2 = gsort(x2,'g');
   x2 =cumsum(x2)*100;   WpCoe(:,i1+5) =round(x2(1:5:40)); //percentage
end,                     disp(WpCoe');

2.Matlab程序(用于运行clc和dwtmode('per')之后):

clear;   n =0:255;   x5 =zeros(5,256);   WpCoe =zeros(8,10);
x5(1,:) =0.98.^n.*cos(0.51*n)+0.97.^n.*cos(0.70*n)+0.96.^n.*cos(1.40*n);
x5(2,:) =0.91.^n.*cos(0.91*n)+0.93.^n.*cos(0.94*n)+0.84.^n.*cos(1.30*n);
x5(3,:) =0.90.^n.*cos(0.79*n)+0.93.^n.*cos(0.96*n)+0.89.^n.*cos(1.48*n);
x5(4,:) =0.92.^n.*cos(0.61*n)+0.83.^n.*cos(0.79*n)+0.99.^n.*cos(0.80*n);
x5(5,:) =0.99.^n.*cos(1.25*n)+0.91.^n.*cos(1.31*n)+0.96.^n.*cos(1.42*n);
for  i1=1:5,
x0 =x5(i1,:);    x0= x0-mean(x0(:));   x0 =x0/norm(x0(:));
t1 =wpdec(x0,8,'db4','norm',1);        t1 = besttree(t1);
x1 = read(t1,'data');  [~,i2] =sort(abs(x1(:)),'descend');
x2 =x1(i2);          WpCoe(:,i1) = round(x2(1:5:40)*1e5);
t1 =wpdec(x0,8,'db4');                 t1 =besttree(t1);      
x1 = read(t1,'data'); x2 = x1(:).^2; x2 = sort(x2,'descend');
x2 = cumsum(x2)*100;  WpCoe(:,i1+5) = round(x2(1:5:40));
end,                  disp( int2str(WpCoe'));

继承事业,薪火相传
返回列表