科学网

 找回密码
  注册

tag 标签: 降噪

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

[转载]容许疯长成分的有限长复指数和序列的拟合和降噪
SciteJushi 2016-8-11 08:25
原载http://blog.sina.com.cn/s/blog_729a92140102wiuj.html 信号极点估计、阻尼指数和信号模型,已有较长的历史。自然的物理振荡信号,常会因为发生系统的能量耗散而衰减至消失。因果的稳定系统的冲激响应,不可能随时间推移按指数规律增长而趋于无穷大。然而,基于有限长观测时间的数字序列的分析和估算,却可能遇见落在了单位圆之外的极点、指数增长的成分。这时,人们可能据先验知识或预设条件,直接剔除不需要或明显不合理的极点和拟合成分,基于幅度(或功率)谱峰的位置和形状的分析考虑,把极点强行挪到单位圆上、或用复数共轭及倒数运算移到单位圆内,或者,抛弃应用分析结果中的某些极端状况,引入某些人机交互选择。这类不容许增长成分的观念和处理技术,已不是很罕见的。 本短文,容许疯(用此字以强调反常性)长成分作为被处理序列的正当组件,而且,在形式上,仍然使用极点、留数等术语,采用基于奇异值分解(SVD)的线性拟合方法、极点估计方法,实现降噪。用互联网络,还未搜到这种先例。 图片1.的右半部,给出了一个演示和测验的程序ExpFitDen.m。其中语句 =PoleStSp(y,O0),以及 =PoleFitRes(po0,y,1), 用所谓的状态空间算法估计序列 y的O0个极点的参数po0,再用这些极点生成复指数信号分量以逼近y,得到降噪后的信号z,这二者都要用奇异值分解。差序列z-x(x是未添噪声时的信号序列)的范数与差序列y-x的范数的比值,就刻画了噪声抑制的水平,越接近0越好。 这个拟合程序PoleFitRes,与《试试小波包变换降噪与复指数和信号模型拟合的串联》(2014-01-22)中的相比,其功能扩展增强了。当它有第3个输入变量且其值大于0时,它可直接使用模值不超过1的增长序列为分量,不强行修改单位圆外的极点。 测验程序主体有4层for循环,从外到内,依次对应已知的信号极点的基本参数集(6个)、指定的信噪比参数(输入向量NFSA)、随机试验的计数器(受输入值Tn0所限)、合成一个无噪声的信号时需要极点参数的数目(3个)。 在最内层的for循环中,一个极点成分的初始值为exp(a1+j*p1),随机数a1服从区间(-0.5,0.5)内的均匀分布,随机相位p1服从区间(0,pi+pi)内的均匀分布。从零均值正太分布随机数发生器,读取一数,若它大于0,则使振荡频率参数反号。从零均值正太分布随机数发生器,再读取另一个数,若它大于0,那么在叠加之前,先把该极点成分的序列做倒序(“衰减”就变为“增长”)处理。 在最内层的for循环结束后,再将无噪声的信号据所需信噪比定标,且添加上高斯白噪声,并用于降噪试验。 在最外层的for循环中,最后依次显示:用最后一个无噪声的测试信号估计的极点参数(2行),从内部的3层循环中得到的噪声抑制比的最小值、最大值、均值、标准差(4行,每列对应一个信噪比值)。 图片1.的左半部的命令窗中,显示了一组试验结果。信噪比参数为-5、0、5、10、20dB。随机试验的次数Tn0为100。“最小值、均值、标准差”的行的数值,表明,信噪比显著改善了。“最大值”的行,有大于1的数,指示,模型参数估计出现了显著偏差,但是,这种偏差的发生几率小(参考4个值的大小关系)。疯长或衰减的比例系数因子的值越分散,各成分的子序列的能量高低越不同或振荡频率越接近,巧遇了极端的噪声数值,都越可能使模型参数的估计出现偏差。 新浪赛特居士SciteJushi-2016-08-11。 图片 1.容许疯长成分的有限长复指数和信号的降噪的试验程序和结果
779 次阅读|0 个评论
[转载]Tpwp的降噪阈值处理中可能存在Bug
SciteJushi 2015-4-20 09:49
单干,靠反复举些例子,继续测试了Tpwp。在Scilab-5.5.0中,已注意到了一个“被零除”的错误警告。 其中的降噪软阈值处理,不同于Matlab工具箱的处理,使用的是“乘以权系数”的方法。权系数用“1-t/a”形式计算,正常时,除数a不小于阈值t。这不影响阈值t。 以前的测试和应用中,未遇见这个警告、 非数字量、空值、无穷量、实序列经处理后的复数值 ,结果不受影响。但是,仅从源代码看起来,使用有的阈值时,子程序确实未排除系数值已经为零和除数 a为零的隐患,例如,a=t=0时, 零除以零。 警告的问题在于“rigrsure”中。借用的这个阈值涉及到名家,居士欲更谨慎。 图片1.是在Scilab-5.5.0和Matlab-R2011a中的“反常测试”的结果,表明问题在使用了rigrsure软阈值的方法6中,但是向量result0显示了输出中零值的数目正确、无非数字值、也没有无穷值,降噪函数子程序TcyspDenois能正确控制了这种情况。并未贬低了“阈值计算方法”。 说图示的测试是“反常”的,因为把噪声标准差强行地定为了1,然而给的输入的被处理序列的数值全为零。Dr.Donoho的SURE(参见本文末附Wavelab850中源代码ValSUREThresh.m)阈值计算方法中,假定噪声标准差为1、输入数据序列是信号的稀疏描述、阈值就是序列中某个元素的模值。真降噪时 , 阈值t为零的概率为零 , 除数a也就不为零 , 若a=t则加权值1-t/a正好为零。但是,在反常情况下,找到的阈值t为零时有a=t=0。 Tpwp在使用heursure软阈值时,已附加了条件a大于非负阈值t,而且 阈值计算本 身原也有了一种条件选择机制,所以没有遇见警告。 继续保留这一“Bug”,可能更明确SURE阈值的原特点,作为去年用Matlab工具箱的降噪函数已做测试的补充。可以说,那时的测试,主要针对了阈值t本身包含重要信号成分而噪声很小的问题,比如,分尺度处理时极可能发生在某个尺度上的情况。本文末附Wavelab850中的软阈值处理源代码(SoftThresh.m和HybridThresh.m),表明模值abs(y)等于阈值t时的系数y将被置为零。 新浪赛特居士SciteJushi-2015-04-20(22)。 图片 1.反常降噪试验的结果 附Wavlab850的3个源程序 1. function thresh = ValSUREThresh(x) % ValSUREThresh -- Adaptive Threshold Selection Using Principle of SURE % Usage % thresh = ValSUREThresh(y) % Inputs % y Noisy Data with Std. Deviation = 1 % Outputs % thresh Value of Threshold % % Description % SURE referes to Stein's Unbiased Risk Estimate. % a = sort(abs(x)).^2 ; b = cumsum(a); n = length(x); c = linspace(n-1,0,n); s = b+c.*a; risk = (n - ( 2 .* (1:n )) + s)/n; = min(risk); thresh = sqrt(a(ibest)); % % Copyright (c) 1993-5. Jonathan Buckheit, David Donoho and Iain Johnstone % % % Part of Wavelab Version 850 % Built Tue Jan 3 13:20:40 EST 2006 % This is Copyrighted Material % For Copying permissions see COPYING.m % Comments? e-mail wavelab@stat.stanford.edu 2. function x = SoftThresh(y,t) % SoftThresh -- Apply Soft Threshold % Usage % x = SoftThresh(y,t) % Inputs % y Noisy Data % t Threshold % Outputs % x sign(y)(|y|-t)_+ % res = (abs(y) - t); res = (res + abs(res))/2; x = sign(y).*res; % % Copyright (c) 1993-5. Jonathan Buckheit, David Donoho and Iain Johnstone % % % Part of Wavelab Version 850 % Built Tue Jan 3 13:20:39 EST 2006 % This is Copyrighted Material % For Copying permissions see COPYING.m % Comments? e-mail wavelab@stat.stanford.edu 3. function xhat = HybridThresh(y) % HybridThresh -- Adaptive Threshold Selection Using Principle of SURE % Usage % xhat = HybridThresh(y) % Inputs % y Noisy Data with Std. Deviation = 1 % Outputs % xhat Estimate of mean vector % % Description % SURE refers to Stein's Unbiased Risk Estimate. % % References % ``Adapting to Unknown Smoothness by Wavelet Shrinkage'' % by D.L. Donoho and I.M. Johnstone. % = dyadlength(y); magic = sqrt(2*log(n)); eta = (norm(y).^2 - n)/n; crit = J^(1.5)/sqrt(n); if eta crit xhat = SoftThresh(y,magic); else T = min(ValSUREThresh(y), magic); xhat = SoftThresh(y ,T); end % % Copyright (c) 1993-5. Jonathan Buckheit, David Donoho and Iain Johnstone % % % Part of Wavelab Version 850 % Built Tue Jan 3 13:20:39 EST 2006 % This is Copyrighted Material % For Copying permissions see COPYING.m % Comments? e-mail wavelab@stat.stanford.edu 参见 http://blog.sina.com.cn/s/blog_729a92140102vli8.html
1062 次阅读|0 个评论
[转载]用Matlab的小波包变换搜索降噪阈值以明差距
SciteJushi 2014-7-5 08:26
原载 http://blog.sina.com.cn/s/blog_729a92140102ux2n.html 作为一个例子,试验程序文件wpth_polelp.m,如图片1.所示。 在程序中,Matlab小波工具箱的函数wpdec、besttree和read一起,实现小波包正变换、获取最佳基(以l1范数为熵)系数(与阈值无关)。 阈值处理,用Matlab工具箱的函数wthresh实现。它允许使用 硬(‘ h’)、软(‘s’)两种阈值。 做阈值处理后,再用Matlab工具箱的函数write和wpcoef(也可用wprec或nodejoin)实现小波包逆变换,取出重建信号。 程序主体有3层嵌套for循环,从外到内,依次对应:无噪信号的5种强度,即0、5、10、15、20dB,对应下文中的参数误差矩阵e的列的编号;100次(变量Te0)随机试验;不同的阈值,对应下文中的矩阵e的行。 于程序文件所在目录中,运行 clc; dwtmode('per'); 设置 Matlab-R2011a的小波变换模式:最小周期化变换。再运行 clear;format compact;format shortG; % after clc;dwtmode('per'); 以清理现场,并设置显示格式。 然后,运行 =wpth_polelp( =wpth_polelp( ,'h'), % default, 3-SD, Hard 都可以看到,直接用 3倍噪声标准差作为硬门限处理后的改善结果。 如图片2.所示,有两个行的误差矩阵e,作为阈值搜索试验结果的比较基础。第一行,是不做降噪处理(即,阈值为0)时的参数估计误差;第二行,是用小波包变换域降噪处理后的信号做参数估计时的误差。 向量p是无噪信号的参数。《结合移位平均的小波包域降噪处理后的参数估计误差》(2014-01-16),使用前向预测模型,可以直接显示,信号表达式中的参数0.98;这里,使用后向预测模型参数,无噪信号的参数为0.98的倒数;但它们都可给出,表达式中的频率参数值0.51。 运行 =wpth_polelp( ,'h'), disp(datestr(now)); 可见,误差矩阵 e。其各行依次,分别为用2.6、2.8、…、3.8、4(向量,即第一个输入变量),做硬阈值降噪时的结果。 运行 tic; =wpth_polelp( ,'s'), toc, 可见,误差矩阵 e。各行依次,分别为用1.6、1.8、…、2.8、3,做软门限降噪时的结果。 在该例中,最后一列数值,由大变小后,再增大,这表明:硬阈值在3.0至3.6间为宜;软阈值在1.8至2.4间为宜。第一列数据显示,在信噪比很低的条件下,可用偏高的阈值。 基于预测多项式的求根的参数估计,要求的信噪比条件高,对噪声污染等很敏感;而基于奇异值分解的状态空间方法,具有优秀的抗白噪声影响的能力。信号的小波包最佳基描述,模仿了奇异向量坐标系统;系数的阈值处理以降噪,直接模仿奇异值截取技术。把小波包降噪结果,置于两参数估计方法之间考察,可能明示某些问题和差异,然而,这无意于揭示某种信号非用某方法或某个方案是最佳。 新浪赛特居士SciteJushi-2014-07-05。 图片 1. 用Matlab的小波包工具搜索阈值的程序段 图片 2. 用图片1.的程序得到的结果
1514 次阅读|0 个评论
[转载]为小波包变换降噪经典的试验而宽容些待sure
SciteJushi 2014-6-30 10:52
原载 http://blog.sina.com.cn/s/blog_729a92140102uwlk.html 进入小波工具箱后,“SURE”,是令人不舒服的东西之一。某种阈值处理,而已,若属居士写的东西,不被喜欢就拉倒。但它与“名校名家”、“无偏”、“自适应”、“最佳”相关联,却易使人面临混乱。 《 小波工具箱中 sure不比shannon更危险吗 》 (2013-09-16)称: 可以肯定,现在 Matlab的主要问题不在于“Shannon”本身。后来《改善Matlab的小波包处理的一个简单例子》(2013-12-14)已表明:Shannon熵本身,是可以使用的,人们常用它是不奇怪的,虽然Wavelab的作者Dr.Donoho等质疑了其合理性、认为它最差,也许它确实有不足。 那两个熵准则的Matlab的定义式中,都有对“未取模值”的数据的直接取平方的运算,表明未准备复信号的处理。当然,把复信号的实部和虚部分开处理,是一种方法,但是,小波理论,实际上一般使用复数域、复信号空间。早在Matlab小波工具箱诞生之前,小波包基系数的Shannon熵的计算表达式,就常有数据取模和能量归一化运算。然而,工具箱的文档资料中,一直没有采用这些。 小波包变换用的那个SURE阈值的计算形式,不如普通离散小波变换降噪中的rigrsure似的繁琐,而类似sqtwolog的计算。虽然,普通的小波变换,只是小波包变换树中的一个局部,但是两个阈值计算相似而不相同。这里,反映了Dr.Donoho的小波包降噪的一个基本特点,它与Tpwp循着不同的思路(不论是非)。 按Matlab-R2011a的帮助文档所述,把它用于一个可与“Shannon”并列的最佳小波包基的选择准则,这很抬举了,所以也使其不得不面临信号定标和作为代价函数的那种一般问题的拷问。 现在宽容退步。依据用户手册,可认为它是只为降噪而设计的。即使如此,有同样问题:实际噪声标准差,和要求输入的阈值参数,都乘以同一个适当的常数后,类似《用Matlab的小波包变换试验能量阈值降噪方法》(2014-06-26)中那样,结果会怎样? 可能试一试,但是注意到,最早和最新的手册都称:在白噪声的方差为“1”时,其工具箱的小波包降噪的性能良好(For now, suffice it to say that this method works well if your signal is normalized in such a way that the data fit the model x ( t ) = f ( t ) + e ( t ), where e ( t ) is a Gaussian white noise with zero mean and unit variance.)。 所以,直接再厚道些,就使试验中的实际噪声标准差只为1!要求用户对被处理数据用噪声定标,也不一定过分。当然,这已略使人不自在,因为,既如此,如果有了被处理信号时,阈值实际也就定了,那么,真正的SURE准则,实际无需其它“输入参数”。 干脆,由工具箱的函数ddencmp,自动确定降噪参数。 依据手册和帮助文档的长期的内容重复,可以假定:SURE、不寻常的代价准则、Donoho、自动设置参数的函数ddencmp、小波包降噪和压缩的函数wpdencmp、试验信号生成函数wnoise、常见数据长度、滤波器选择,在小波工具箱中应该已经磨合为一体了,可以构成小波包降噪的“金标准”。 从可选基的数目、对DFT的频率分辨率的逼近方面看,在累积误差、存储空间、时间开销都允许时,分解越深的小波包处理,对不同信号的自适应性就越强。但是,在与Dr.Donoho有关的小波变换和小波包变换降噪方法中,常见:选择(人为)适当的分解深度参数。 为保险起见,把好人做到底:做“金标准”时,用循环语句试验不同深度分解的处理结果,可看其中最好的。 设置一个“无所谓最不最佳的伪SURE”,当作灯泡:依据《 小波工具箱举例不当与 Donoho阈值》(2013-09-26),用“3倍标准差”作为硬阈值,强行替换自动的SURE的默认参数。 试验程序,如图片1.所示。其主体有4层嵌套for循环,从外到内,依次对应:由wnoise给出的6种基本测试信号,无噪信号的6种强度,10次(变量Te0)随机试验,不同的分解深度。 误差数据阵列Ea的三维寻址指标,依次为:无噪信号的编号,信噪比条件的编号,分解深度和准则参数的编号。 显示时,以整数1或0开始的行中,这第一个数字,“1”表示直接用ddencmp给的参数;“0”表示以“3倍标准差”做“硬阈值”的“伪SURE”。同一行中,第二个整数,表示分解深度;第三、四、五、六个数,分别表示,紧随其后的6个行显示的误差(范数比)矩阵中的元素的均值、标准差、最小值、最大值。 保存这一行数据。在程序结束时,以“IsDefault_Depth_Mean_Std_Min_Max”为名,再集中显示它们,如图片2所示。 此前的一行,显示一下默认参数,确认“SURE”。 从均值 、标准差、最大值看来,默认处理的结果,明显最差;“伪 SURE”的结果,最好;《用Matlab的小波包变换试验能量阈值降噪方法》的结果,处于二者之间。从可以实现的很低信噪比时的最小的误差值看,那个rigrsure最差,这里的默认处理中,存在比其它方法都更好的少数例子。 新浪赛特居士SciteJushi-2014-06-30。 图片 1. 设置Matlab小波包降噪的“金标准”的程序段 图片 2. 图片1.中的程序运行的结果(末尾部分)
1123 次阅读|0 个评论
[转载]用Matlab的小波包变换试验能量阈值降噪方法
SciteJushi 2014-6-26 09:10
原载 http://blog.sina.com.cn/s/blog_729a92140101qfn0.html 试验程序,如图片1.所示。其主体有4层嵌套for循环,从外到内,依次对应:由wnoise给出的6种基本测试信号,无噪信号的6种强度,10次(变量Te0)随机试验,Tpwp中需要序列的具体数值才能求阈值的5种处理方法(依次为软阈值rigrsure、软阈值heursure、SoftPower、HardPower、PowerSplit) 误差数据阵列Ea的三维寻址指标,依次为:无噪信号的编号,信噪比条件的编号,阈值处理方法的编号。 显示时,以整数1、2、3、4或5开始的短行中,这第一个数字,表示阈值处理方法的编号,指示:紧随其后的6个长行显示了误差(范数比)矩阵。同一行中,第二、三、四、五个数,分别表示,这个矩阵中的元素的均值、标准差、最小值、最大值。 保存这一行数据。在程序结束时,以“Rule__Mean__Std__Min__Max”为名,再集中显示它们,如图片2所示。 其中Matlab小波工具箱的函数wpdec、besttree和read一起实现小波包正变换、获取最佳基(以l1范数为熵)系数,经阈值处理后,再用Matlab小波工具箱的函数write和wpcoef实现小波包逆变换、取出重建信号。 与前面用Matlab的普通离散小波变换的试验相比,这里的噪声的标准差,是随机数,在区间(0.1,10)上均匀分布。同时,无噪信号,也被乘以了相同的系数。这时的结果表达,实际仍与过去用的NFSA-RMSE一致,但包含了线性增益对处理系统的影响的测试内容。 使用Tpwp中的函数 TcyspDenois(《 结合移位 (Cycle-Spinning)平均的小波包域降噪的程序 》, 2013-10-15),而完全不用Matlab工具箱的小波包处理函数,也可获得 图片 2.,而且约快6倍。 新浪赛特居士SciteJushi-2014-06-26。 图片 1. 用Matlab的小波包工具测验能量阈值的程序段 图片 2. 图片1.的程序产生的结果
1550 次阅读|0 个评论
[转载]当分尺度的简易门限的降噪法直面经典时
SciteJushi 2014-5-25 08:59
原载 http://blog.sina.com.cn/s/blog_729a92140101pw2s.html 在《小波包域降噪的三种简易门限》(2013-07-16)和《普通离散小波变换的局限以及小波包域能量分裂降噪法》(2013-09-29)中,可见基于噪声能量的三种门限(阈值)处理方法。在前面的博文的一系列的降噪结果曲线中,它们被分别表示为HardPower、SoftPower、PowerSplit,已与其它阈值处理在某些方面作比较。 正如《经典阈值不分软硬而依赖于尺度给降噪带来混乱》(2014-05-18)所述,Matlab的小波工具箱的自动降噪函数wden的结果,堪称小波变换阈值降噪研究的“金标准”。近日,居士试着将能量阈值,用于模仿wden的分尺度降噪,有点难以相信结果:简易的噪声能量门限降噪法,看起来几乎是最佳。 尤其有趣的是,“其基础的简易”:与经典降噪法形成鲜明对比,噪声能量门限降噪法,其提出是启发式的,未对信号强加先验假设,未限定是用普通小波基还是用最优小波包基,回避了时间离散化采样的困扰,没用优化理论,其阈值计算程序的算法简单,其数据序列甚至可以是复数值的。 “能量门限”降噪法,现在与经典阈值的计算一样都假设噪声标准是已知的,但在原则上不排斥优化。假设“真实的噪声标准差”为s,是未知的,而提供给门限计算的“标准差参数”为p=ks (k与s的积),那么,调整“偏置系数”k即调整了阈值。如果自动估计出“某种意义上最佳”的p、或k、或能量分割点、或模的阈值,即确定了“唯一”的参数——那样再无需用户输入的处理,就可称为“自适应的”。 图片1.,是据《经典阈值不分软硬而依赖于尺度给降噪带来混乱》中wden的“最佳”结果,重组的一段程序。 5层嵌套for循环,从外到内,依次对应:可变的分解深度,由wnoise给出的6种基本测试信号,无噪信号的8种强度,50次随机试验,由wden使用的4种阈值处理准则(依次为软阈值rigrsure、软阈值heursure、硬阈值sqtwolog、硬阈值minimaxi) 三维数据阵列Ea,在最里面的4重循环之外,被初始化、被显示。其三维寻址指标,依次为:无噪信号的编号,信噪比条件的编号,阈值处理方法的编号。 显示时,以整数1、2、3、4开始的短行中,这第一个数字,表示阈值处理方法的编号,指示:紧随其后的6个长行显示了误差(范数比)矩阵。同一行中,第二个数,也是整数,表示分解深度值;第三个数,是这个矩阵的元素的均值;第四个数,是矩阵元素的标准差。 这一短行数据,被保存。在程序结束时,以“MeanAndStd”为名,再集中显示它们,如图片3.的左半部所示。 可以说,这里的实验设置,让经典方法占尽了便宜,然而,把 简易的能量门限的降噪法,抓来就比 。在评估结果时,“误差”中不仅有“残余噪声” 而且包括了“偏差”。这也可以更有利于,据“无偏估计”的理论而设计的方法。 图片 2.,是测试噪声能量阈值降噪的程序。其中最外的 5重for循环,与前述的 图片 1.的 程序中的 5重for循环的意义相似。但是,其中有5种阈值处理方法,依次对应:软阈值rigrsure、软阈值heursure、SoftPower、HardPower、PowerSplit。最内的第六重循环( for n ),实现分尺度的门限处理。 这一程序,不需要Matlab工具箱的降噪函数(如wden、thselect、wthresh) ,但是,使用 Matlab的离散小波正变换函数wavedec和逆变换函数waverec 。其中用TbestThres.p计算阈值,它是TpwpSubs.bin中相应函数的直译版本,是单个独立的小程序文件(约900字节,占用4096字节空间,时间为2013-10-18),不需调用Tpwp中和Matlab工具箱中所特有的其它函数。 在某尺度上,信号占绝对优势的可能性或全是噪声的可能性都存在,所以,将TbestThres用于分尺度降噪时,遇见“无噪声”或“无信号”的情况的可能性很大。为了避免太多“警告(Warning)”烦人,运行 图片 2.的 程序前,先执行命令warning(‘off’)。 命令窗中的结果的末尾部分, 如图片 3.的右半部所示。 对比图片3.的左、右两半部分,可见,由“1”和“2”开始的行的数据,虽然来至不同程序,但是对应相等。这证实,图片2的程序(第14至第21行)正确地实现了Matlab中wden的相应的功能,所以本文的研讨有了合理的基础。 某些因素可能造成结果误差。例如,程序已用输入变量指定wnoise的随机数种子,但是,不能忽视wnoise之外的rng(1e9),如果改为rng(1e4),在同一机器环境中,再重复运行,那么可见: 1 11 8.51 18.4 这与图片 3中的数字,已有差别。然而,由于Donoho阈值的固有特点,即使不同程序的演算流程有异,其结果也易一致,这是一个优点。而且,一般在“正常”的情况下,如rng造成的这种小误差,也不至于影响主要结论。 比较由“3”和“4”开始的行的数据,可见,右半部分更好些。 由“5”开始的行的数据,与其余所有行的数据比较,是“最佳”的。 新浪赛特居士SciteJushi-2014-05-25。 图片 1. 用wden的依赖于尺度的阈值降噪(金标准)的程序段 图片 2. 试用依赖于尺度的简易阈值降噪的程序段 图片 3. 比较图片1和2中的程序的结果的末尾部分
1194 次阅读|0 个评论
[转载]经典阈值不分软硬而依赖于尺度给降噪带来混乱
SciteJushi 2014-5-18 08:40
原载 http://blog.sina.com.cn/s/blog_729a92140101prve.html 研究降噪时,用先验知识决定是否分尺度处理,并确定“用软的”或“用硬的”,再考虑用什么“准则”计算具体的阈值。 据居士的理解和经验,一般地(均匀白噪声时),不使用Matlab的自动降噪函数wden时的全局门限处理,性能更稳定,而且整体看来最好。由rigrsure和heursure准则,得到的阈值,更宜用于软门限处理。由sqtwolog和minimaxi准则,尤其是前者,得到的阈值,不宜用于软门限处理。可以抛弃minimaxi。在wden的分尺度处理中,涉及的系数序列越短时,使用rigrsure越危险。 这些陈述,不支持经典和文献资料中的某些重要观念或应用,要证据。当然最好用它们的测试信号。 值得先强调的是:借鉴基于给定数据序列而计算的阈值,以抑制噪声,这不等同于,Dr.Donoho等逼近某类假设的连续时间函数,虽然他们常用“denoising”。 在小波工具箱2001年的用户指南(User’s Guide , Version 2.1)里的门限设置管理函数wthrmngr(第8-309页)的表格中,对于rigrsure、heursure、sqtwolog、minimaxi(方法,METHOD)的描述(Description)都是参见thselect 和wden (See … option in thselect , and see also wden)。在计算阈值的函数thselect(第8-170页) 、生成小波降噪试验信号的函数wnoise(第8-256页)的说明中,列举的参考文献都是Dr.Donoho的,都指出(See Also wden)只参见wden。 启动Matlab-R2011a后,查帮助文档(Help),可见到与上面相同的情况。所以, 人们可以相信: Matlab中函数 wden与thselect以及wnoise一起,应反映了Dr.Donoho的小波变换域 阈值降噪的思想精髓和方法关键;而且,它们已经过了,相当长时间的考验、甚至优化提高。 尤其引人注意的是,在 wden中, 可用各个尺度上的分解数据分别做为 thselect的输入,计算得相应尺度上的Donoho阈值。其中rigrsure,代表了真正的基于SURE的方法,其计算中混合使用了分解系数的序列长度和数值。 从Dr.Donoho的Wavelab850中,可找出函数文件 ValSUREThresh.m(时间为2006-1-4,2:20)。它计算自适应的SURE阈值(Adaptive Threshold Selection Using Principle of SURE),对应于Matlab中的rigrsure准则的结果。如图片1.所示,用长度随机变化(1至16384)的1000个白高斯序列的比较试验表明,函数thselect与ValSUREThresh的结果,完全相同。它们的程序,都没有设置,输入序列长度的下限!图中的红色错误信息,表明ValSUREThresh不接受列向量,然而,行向量和列向量都可以作为thselect的输入。所以thselect的编程,无损于Dr.Donoho的方法。 从 2014年的最新手册和Matlab-R2011a的帮助文档中,找出使用wden的一些例子(如 leleccum数据、 Cycle-Spinning),试运行,比较结果,例如图片1.中的曲线图。图片1.还证实,Matlab的minimaxi阈值,与Dr.Donoho的牛文所列出的值一致。可见,Matlab小波工具箱中的降噪,在居士的机器系统中发挥着应有水平。 图片2.显示了一段测验程序。四重for循环,从外到内,依次对应:可变的分解深度,由wnoise给出的6种基本测试信号,无噪信号的8种强度(标准差,对应的NFSA约为0、6、12、…、42dB),50次随机试验。 把程序中的“6”改为“4”,可更集中注意力于最为经典的4种测试信号。 每次随机测试,有3种降噪方法,处理被N(0,1)白噪声污染的同一个样本:全局门限(不用wden,“软”或“硬”由变量SH指定)方法、用wden的自动软门限方法、用wden的自动硬门限方法。降噪后的输出序列的误差范数,与输入序列的误差(白噪声)范数之比值,分别记入矩阵Eg、Es、Eh中。这3个矩阵(50次试验的均值),在三重内循环之外,被初始化、被显示。 结果的矩阵元素的行号,对应无噪信号的编号;列号,对应于信噪比条件的编号。 显示时,以“0”、“1”、“2”开始的短行,分别提示,紧随其后的6个长行显示了Eg、Es或Eh的数据。同一行中,第二个数,是整数,表示分解深度值;第三个数,是矩阵元素的均值;第四个数,是矩阵元素的标准差。 部分结果数据,示于图片3.和图片4.中。如果矩阵元素或其均值大于1,例如图中的“113”,那么“噪声”(包括偏差、畸变、失真等概念)被放大了,如113倍。数值 越趋近于 0,表示结果越好。 虽然这里的信噪比条件适中,用rigrsure的软门限处理的wden的结果,也可能出现极端病态的结果,如: 1 11 8.5312 18.454 1 9 6.0728 17.135 这里,尤其要求控制分解的深度。它实现的“最佳深度”时的结果: 1 5 0.55514 0.26878 1 3 0.60383 0.23715 与 Eg (均值0.60,标准差 0.24) 相比,也并无突出优势。 幸运的是,从结果中看到:可能直接限制分解深度,如参考Matlab的函数wmaxlev, 以减小上面看到的wden使用“太深”分解时的危险。实际上,分解深度增加一级时,输出的近似系数序列,对应的频带宽度减半,其中包含的噪声能量也就减半,清除其中噪声的意义和必要性也就越小。 Matlab的Help中wden的例子用:2048点数据,sym8滤波器,5级分解,无噪信号标准差snr=3。 修改程序中的TR和SH,可以试验其它处理方法。用 TR='heursure'; SH='s';可见: 0 11 0.60219 0.24164 1 11 0.58774 0.26848 2 11 0.6363 0.2915 0 9 0.60292 0.24068 1 9 0.58644 0.269 2 9 0.63624 0.29157 0 7 0.60594 0.23676 1 7 0.57244 0.2761 2 7 0.63589 0.29189 0 5 0.63215 0.21191 1 5 0.56888 0.27078 2 5 0.63904 0.28827 0 3 0.72583 0.14786 1 3 0.61396 0.23961 2 3 0.66725 0.25918 这里,混合入 sqtwolog机制后,避免了仅用rigrsure时的极端病态的结果,性能变得更稳健,但没有超越用rigrsure时最好的结果。 在图片2.所示的程序段中,改用 TR='sqtwolog';SH='h';可见: 0 11 0.66018 0.40892 1 11 1.4075 1.0126 2 11 0.66018 0.40892 0 9 0.66034 0.40884 1 9 1.3967 1.0178 2 9 0.65897 0.4096 0 7 0.65853 0.41068 1 7 1.3562 1.0398 2 7 0.65473 0.41174 0 5 0.67362 0.40345 1 5 1.2825 1.0668 2 5 0.65038 0.41363 0 3 0.7777 0.36191 1 3 1.1977 1.0504 2 3 0.68593 0.38283 在图片2.所示的程序段中,改用 TR='minimaxi';SH='h';可见: 0 11 0.63674 0.25361 1 11 0.9729 0.66349 2 11 0.63674 0.25361 0 9 0.63674 0.25364 1 9 0.96689 0.66641 2 9 0.63646 0.25369 0 7 0.63648 0.25415 1 7 0.94515 0.67813 2 7 0.63566 0.25397 0 5 0.64351 0.25273 1 5 0.90953 0.69041 2 5 0.63898 0.25399 0 3 0.70178 0.22701 1 3 0.89532 0.66207 2 3 0.67761 0.23435 由于,使用了强度已知的白噪声,所以,程序中设置SC=‘one’。然而,据文献,在wden中可用SC=‘sln’或SC=‘mln’。例如,图片1.中,以wnoise的bumps信号为例,演示Cycle-Spinning降噪方法,这来至于Matlab的2014年的最新用户手册。在处理leleccum数据( load leleccum)的例子中,函数wden的输入使用了'sqtwolog','s'(软门限),'mln' 。在条件定界不清时,这些复杂化可能雪上加霜,使降噪结果更荒诞。 在图片2.所示的程序段中,改用 SC = 'sln'; TR = 'rigrsure';可见: 1 11 12.859 25.015 2 11 10.307 20.462 1 9 10.737 24.352 2 9 7.7532 19.692 1 7 5.2982 18.725 2 7 5.216 18.412 1 5 5.2062 18.689 2 5 5.205 18.387 1 3 5.1393 18.236 2 3 5.1794 18.204 在图片2.所示的程序段中,改用 SC = 'sln'; TR = 'heursure';可见: 1 11 5.6033 19.936 2 11 5.4145 19.347 1 9 5.5966 19.916 2 9 5.4121 19.338 1 7 5.565 19.855 2 7 5.409 19.327 1 5 5.4836 19.557 2 5 5.399 19.272 1 3 5.197 18.26 2 3 5.1762 18.264 在图片2.所示的程序段中,改用 SC = 'sln'; TR = 'sqtwolog';可见: 1 11 6.653 20.345 2 11 5.6895 19.848 1 9 6.6209 20.268 2 9 5.667 19.764 1 7 6.5352 20.109 2 7 5.648 19.713 1 5 6.3257 19.608 2 5 5.5689 19.429 1 3 5.8731 18.203 2 3 5.2991 18.241 如果,矩阵元素的均值偏小时,而标准差更大,那么,其中一定有部分“更好(最好)”的结果。但是,如果它们的范围狭窄,要求“用户确知的内容”太多甚至复杂敏感,那么方法未必可取。 不管怎样,Matlab工具箱的函数wden作为一个工具软件,可以设计各种选项,这并不是问题。 新浪赛特居士SciteJushi-2014-05-18。 图片 1. 经典与Wavelab850以及Matlab的阈值相同 图片 2. 测试wden用依赖于尺度的阈值以降噪的方法的程序段 图片 3. 图片2的测试程序显示结果的开始部分 图片 4. 图片2的测试程序显示结果中rigrsure的最好部分
1678 次阅读|0 个评论
[转载]降噪实验的功率限制以及Donoho阈值的复杂依赖性
SciteJushi 2014-4-12 10:07
原载 http://blog.sina.com.cn/s/blog_729a92140101p6ob.html 在信噪比很高的实验条件下,降噪后的波形图可能看起都很“完美”,但是,实际上,失真和畸变可能已经引入了相当大的绝对误差、和信噪比下降。例如,即使在变换域不做任何处理,经某“正变换、逆变换对”的处理后,也可能造成了误差。 在低信噪比条件下,对降噪后的波形的主观评价,更可能相当不一致。看起来,更好(如,光滑,舒服感)的结果,实际上均方根误差却更大、信噪比较低;均方根误差减小时,而视觉效果反而很差,例如残余的成簇噪声可给人以变态、面目全非的印象。在陈述降噪结果时,专门找“坏的”波形例子,一般不必要,只找“好的”,则可能使人感到“吹牛”——某名人在谈到写自传时,表达了类似的意思。 单个实验的波形图,可作为初级示例,是易于被普通观众感知的直观表达,但是专业参考价值太低,不能反映成功的几率,更不能取代批量处理的统计结果。幸运的是,计算机技术的发达,使研究者可以更快地浏览和统计大量的实验数据样本,尽可能少地引入主观选择、主观判断,发现问题,解决问题,明确各方法的适用条件,步步高升。 实际上,信噪比(SNR)这个概念术语的使用中,“信号”和“噪声”的内涵也并未绝对统一。例如,直流成分的问题。 在Matlab-R2011a的小波工具箱中,用函数wnoise生成小波变换降噪的测试信号(Donoho与Johnstone),其用输入参数SQRT_SNR的平方表示SNR( % = WNOISE(FUN,N,SQRT_SNR) returns the previous vector X % rescaled such that std(x) = SQRT_SNR. The returned vector XN % contains the same test vector X corrupted by an % additive Gaussian white noise N(0,1). Then XN has a % signal-to-noise ratio of (SQRT_SNR^2))。 SQRT_SNR即是居士在博客中使用的NFSA。 在最新的Matlab的《R2014a用户指南》(“Wavelet ToolboxTM User’s Guide”)中,峰值信噪比“ Peak Signal to Noise Ratio ( PSNR )”,在5-67页,用像素的最大值的平方,表示图像信号的功率。用均方误差表示“噪声”功率,与居士用RMSE评估降噪的结果相一致。 该手册,在5-17页,谈到Cycle Spinning和普通离散小波变换降噪的经典函数wden时,使用的信噪比SNR定义式,把本该在分母上的表示序列长度的N,误放到了分子上。居士认为,其程序不可能这样计算,这属于“行文Bug”,是小问题。它不致理论障碍、和方法致命缺陷。但是,那里说的也正是wnoise的bumps信号,该信号有较大的直流成分,其SNR定义式,用序列值的模的平方和,表示信号能量,对直流的处理未明确交代,那么已不必就与过去的SQRT_SNR一致。 在以分贝( dB)为单位时,使用MSE(均方误差、误差的模平方的均值)与使用RMSE(均方根误差、MSE的平方根)是一样的,使用“幅度”和使用“幅度的平方”表示无噪信号的强度是相同的,也都有0的对数log(0)的问题。 在前面讨论小波包时,关于最佳基的选择的代价函数,提到了一个习惯:E(0)=0,即0的熵(log(0)无意义)被约定为0。这在文献中很常见。问题在于,log(1)=0,这使1的熵也为0。为避免这个麻烦,数据常需要适当地规范化。为叙述方便,不妨称这种“冲突”为,“零熵模糊”。 如果, 与上面零熵的情形类似,令SNR式中的log(0)=0,那么也不能区别于log(1)=0。不妨称这种现象为,“零分贝模糊”。使用NFSA为横轴(dB)、负RMSE为纵轴(dB),可图示降噪结果。一般说来纵轴可表示SNR的增量,但是,如果降噪处理前的NFSA(横坐标值)小于零,横、纵坐标值之和也不“显著”大于零,那么,即使纵坐标值非常大,这种结果的意义,已变得模糊。例如,直接令降噪结果信号恒为0值,可能得RMSE约等于NFSA,也就得增量为NFSA的相反数。宜避免用小于零的NFSA值。 在居士的降噪程序中设置了“无信号”警告,可能强调这一问题。然而,在大批量重复实验中,太多的警告烦人时,不得不先运行warning(‘off’)予以屏蔽。 纵坐标值为负,不管怎样,都表明“处理性能差”。计算引入的数字误差、门限处理时引入的损伤等,已起主导作用,超过了原有的白噪声的“危害”。在极高信噪比的试验中,也可能看到在程序中设置的“无噪声”警告。相应方法已不能降噪。 使用博文《结合移位(Cycle-Spinning)平均的小波包域降噪的程序》(2013-10-15)中的程序,TDen3Signals.sci,仅修改NFSA的赋值(80:20:180)和极少的图形标注字符,然后运行,可得结果如图片1.所示。用软门限方法或阈值偏大时,例如“Soft Power”,在高信噪比的实验条件下,更易出现信噪比不增加反而下降的情形。 在用Donoho阈值的处理中,不做“无噪声”和“无信号”警告。但并不允许随意而为,而且情况更复杂。在图片1.中,基于Donoho的“SURE”的结果,从一个信号到另一个信号之间,表现出了更剧烈的性能“跳变”。过去,在利用“先验基”和整顿“额外极点”的试验中,也可以察觉性能“跳变”。这些不是居士将Donoho阈值用于小波包的特有问题,而可能是Donoho处理方法固有的隐患。 Donoho阈值的计算,假设了噪声标准差是已知固定的( %THSELECT Threshold selection for de-noising. % THR = THSELECT(X,TPTR) returns threshold X-adapted value % Threshold selection rules are based on the underlying % model y = f(t) + e where e is a white noise N(0,1).)。 数据序列的长度,卷入其中,未必显示了对 SNR的考虑结果。早期的Matlab小波工具箱,就已把Donoho的离散小波变换降噪,置于重要地位,但其变换的主体,并不支持per模式(此外:它也还不能直接做居士已离开的“连续小波变换”——这绝不意味着谁更好或更差,但最新的手册,已显示了丰富的连续变换的内容)。函数wden中,用输入参数SCAL对噪声重定标,不同尺上用不同的阈值,非per模式中的变换结果的数据序列的长度随滤波器和分解深度的不同而不同,这些都更使阈值计算难被“直观地”把握。 在Matlab命令窗中,运行: clear; format shortG; format compact dwtmode('zpd'); % common, in the Help tR={'rigrsure';'sqtwolog';'heursure';'minimaxi'}; init = 2055615866; Er0 = zeros(100,4); % error lv = wmaxlev(2^8, 'sym8');% allowed maximal level for tN = 1:4, % soft-threshold-rule index for sp = 1:100, % wnoise,signal 6,snr=(sp/2)^8 = wnoise(6, 8, (sp/2)^8, init); xd = wden(xn, tR{tN},'s','one', lv, 'sym8'); Er0(sp,tN) = norm(xd-x)/norm(xn-x); end % error norm ratio, in Er0 end % almost invariable norm(xn-x) disp(date); disp(max(Er0)); % display subplot(2,1,1);loglog(((1:100)/2).^8',Er0);% plot axis tight; grid on; xlabel('snr in =wnoise(6,8, snr, init)'); ylabel('norm(xd-x)/norm(xn-x)'); % RMSE ratio title('Error Increase in xd=wden(xn, ...) ?'); legend(tR,'Location','NorthWest'); subplot(2,1,2); plot(x); axis tight; title('Last x in =wnoise(...)'); 可得图片 2.的曲线图。 这里使用了Matlab文档资料中常见的降噪函数及其主要参量设置(如随机数种子、zpd模式、计算得分解深度)。所用的信号,其时间带宽积大,是与Donoho有关的测试信号中难以处理的一个例子。大部分情况下,Er0的几条曲线,都“在 1 以上”,表明了,“噪声”不减小,反而“被放大”。尤其引人注意的是,与“rigrsure”有关的“值超过2000的短暂突起”,以及相应的阈值“heursure”在阈值“rigrsure”与阈值“sqtwolog”之间的复杂切换。 把上段程序中的dwtmode(‘zpd’)改为dwtmode(‘per’),即用最小周期化模式;分解深度改为lv=8,即做最彻底的分解。再运行,得图片3.的结果。“突起”部分,更宽;更高,达几百万。 用前面提到的信号bumps, 用R2014a最新手册中的长度参数(10)、小波名称(sym4),且强行减小一级分解(10-1=9)。再实验,得图片4.,比图片3.的结果,还更糟十万倍。 新浪赛特居士SciteJushi-2014-04-12。 图片 1. 高信噪比条件下的Tpwp降噪使信噪比下降 图片 2. 小波变换(zpd,wmaxlev)降噪的性能对信噪比条件的依赖 图片 3. 小波变换(per,max level)降噪的性能对信噪比条件的依赖 图片 4. 小波变换(per,max-1 level)降噪的性能对信噪比条件的依赖
1293 次阅读|0 个评论
[转载]预置小波包基及其矩阵表示可显著提高降噪实验
SciteJushi 2014-3-16 11:02
原载 http://blog.sina.com.cn/s/blog_729a92140101opnz.html 用FFT和普通离散小波变换降噪时,分解信号的基底都是已知的、不变的。然而,此前所述的小波包降噪方法和程序中,最佳基是由各个含噪声的数据向量完全独立地确定的,这比基于FFT和普通离散小波变换的降噪,使用了少得多的先决条件约束:假定无噪信号是未知的、描述信号的最佳基底也是未知的。 小波包降噪,也可以根据先验知识,预定好“最佳”基,例如限制使用普通离散小波变换。处理含有噪声的数据时,再无需最佳基搜索过程,甚至无需计算出完整的小包分解树上的数据。为此,居士又做了基于Tpwp的几片小程序,存在TpwpSubs_E01.bin中,作为TpwpSubs.bin的扩充,稍后将其与某个测试程序一同上传到科学网。 此前的小波包降噪程序中,语句 =TcyspDenois(xn0,Wp,DenMode1); 是做降噪的语句。其中 cysp, 指 Cycle-Spinning移位。矩阵 xpwpd0,是降噪结果。 向量 DenMode1,指定门限处理模式;结构变量Wp,包含了小包处理的设置;向量xn0,是噪声污染后的信号。可以被替换为 =PsbmCyspDen(xn0,Wp,DenMode1,sbm0,sbm1); 这要求两个附加输入 sbm0和sbm1,是先验小波包基向量组的矩阵表示。正交时sbm1= =PsbSelect(RawX00,Wp); =PsbMatrix(CoeIndx,Wp.DecL,Wp.DatL,hc0,gc0,Wp.RightShift); =PsbMatrix(CoeIndx,Wp.DecL,Wp.DatL,hc1,gc1,Wp.RightShift); 即可生成先验基矩阵 sbm0和sbm1。 先验基向量的序号,由 PsbSelect处理无噪数据RawX00时,所得的最佳小包基系数确定。 此前的程序的load( ‘TpwpSubs.bin’ );后附加一句 load( ‘TpwpSubs_E01.bin’ ); 以装载上述处理所需的子程序。 图片1.是用《小波包域降噪和移位平均处理后的参数估计误差》(2014-01-16)的程序做上述调整后所得的结果。那里的实验,用时约900秒;而这里的整个实验(包括准备基矩阵),约需38秒! 至此,仍然没有利用先验基上系数的分布知识,不抽取子矩阵块作为PsbmCyspDen的输入。不同移位的信号的小波包系数分布是变化的。可以说,这比已知通频带和阻带的滤波以及在不同尺度上做不同处理的离散小波变换降噪,使用的先验约束条件,仍更弱。 显然,不排除更充分地利用先验知识。例如,在“阻带内”的节点上增高门限值,或者使某些基向量预先乘以权系数甚至干脆不出现在降秩变换矩阵中。 数据向量太长时,基矩阵和所需存储空间都可能太大,那么,可以放弃基矩阵而用约束小波包分解(子程序PsbsDec),删除上面的PsbMatrix语句,并用 =PsbCyspDen(xn0,Wp,DenMode1,CoeIndx,hc0,gc0,hc1,gc1); (未在上传程序包中)代替PsbmCyspDen一句。虽然,这可以自动识别并限制于所必须的节点分解,但是一般说来,比 TcyspDenois用完整分解树时所节省的时间 ,量较小。例如,即使直接指定小波基,分解也需要覆盖过半树;如果约束中包含了最大分解尺度上的全部节点,那么实际上分解仍需要覆盖全树。 命名“ PsbsDec”的Psb后的s,强调它不同于 PsbMatrix和小波包常规合成重建处理中的约束,它的输入可以包括任意多个基底的节点,不检测约束节点相互冲突的问题,然而后二者却要求约束节点属于“同一基底”。 新浪赛特居士SciteJushi-2014-03-16。 图片 1.用预置最佳基矩阵快速降噪(16步移位平均)
1046 次阅读|0 个评论
[转载]用复信号试验小波包变换降噪与复指数和模型拟合的串联的程序
SciteJushi 2014-2-20 14:38
原载 http://blog.sina.com.cn/s/blog_729a92140101obm9.html 附件 Den6Comp.zip 在居士看来,以前的博文中提及的小波包降噪、参数估计等的子程序,已可以处理复(值)信号,但是,要处理复信号,涉及加噪声、RMSE和NFSA等的主程序还需要修改。 如图片1.所示,Scilab-5.3.3中的计算方差(variance,其帮助文档表明其输入可以为复数序列)和标准差(stdev, 其帮助文档指明输入为实数序列或矩阵)的函数的输出结果(format(‘v’,8),mode(0)),是复数。它们与Matlab-R2011a的std和var的结果(都为实数),基于不同的概念。据居士所知,Matlab给出的这些结果,更符合通常的信号处理文献的表述,看起来与零均值的复高斯噪声的平均功率、功率谱密度的概念也一致。 对于复信号,计算RMSE值时,必须插入abs以取“差”的模值;而对于实(值)信号,可以直接求差值的平方。 试验所加噪声的方差,已知,为1。实部、虚部独立同分布,均分能量。与实信号时一样,处理结果相对于无噪信号的RMSE值的倒数(分子1,可视为处理前的RMSE、原加噪声的平均功率的平方根),表示了信噪比的“增量”。 无噪信号被放大(NFSA, dB)前,其交流功率被设定为1,那么,NFSA值就是忽略直流功率时的降噪前的信噪比。但是,在功率归1化时,信号不能除以stdev输出的结果,而除以相对于其均值的RMSE。 在命令窗中,运行 clear; TestNum0=50; Gr2=0; RealOnly=0; exec('TDen6Comp.sci'); 可以得到 (约需2500秒)图片2.的结果。复制、粘贴后,在回车前,把Gr2的赋值改为Gr2=3,可以得到图片3.的结果。在warning(‘on’)状态,处理强阻尼信号时,可能看到一些“警告”提示:未分解的数据序列已被认为是最佳的;可事先用warning(‘off’),将“警告”关闭。 在回车前,把 RealOnly的赋值改为RealOnly =1,则强行限制只使用信号的实部做试验。这可以重复博文 《试试小波包变换降噪与复指数和信号模型拟合的串联》 (2014-01-22)的处理,但是可看到比在哪里更好的结果。尤其是低信噪比时用Donoho阈值的处理,变化更明显。产生差别的原因是,哪里在做线性拟合时未限定“阻尼”因子。结果变化越明显,那么,处理越可能具有某种不稳定性。这里上传的拟合子程序,强制调整单位圆外的极点,“掩饰”了这一问题,但是实用的程序,必需这种控制。 降噪的不少部件集成在了一起。简单地修改TDen6Comp.sci,可以进行若干试验。没有证据表明,各个部件或方面选择,都达到了最佳。实际上,某种“最佳”的定义,也未必在任何情形都合理、适用;技术环节的强强组合,其结果未必更佳,反而可能更失败。 程序包Den6Comp.zip上传在科学网附件中。主程序如下: // TDen6Comp.sci // wavelet packet denoising with cycle-spins,+State_space_SVD,+linear fitting // copy/paste following line modify value press Enter: // clear; TestNum0=50; Gr2=0; RealOnly=0; exec('TDen6Comp.sci');// Gr2=0 or 3 // TestNum0: total averages of tests // Gr2 =0: use first 3 signals; = 3: use other 3 signals // RealOnly = positive number: use the real part of complex signal vector; // otherwise, use complex signal // !! TDen6Comp.sci, TpwpSubs.bin, MatOrtWlts.bin, SsSvdLfit.bin, // must be in Scilab current directory !! // reference: TDen3Signals.sci, uploaded in 2013-10-15 mode(0); xdel(winsid()); // kill all figures ieee(1); date1=getdate(); date1=date1( ); disp( ); tic(); // timing function =TwltDenoise(Ordr,RawX00,WavNum,NFSAs,TestNum,PlotF,PlotP); // Wp: used settings // AveRMSE: result, RMSE; row: NFSA; column: method // Ordr: pole-model order // RawX00: original signal, SD( like std, RMSE )=1 // WavNum: filter case No. // NFSAs: values of NFSA for tests // TestNum: TestNum noisy tests per NFSA // PlotF: NFSA value for plotting waveform // PlotP: plot position // in Scilab-5.3.3,Baiyu Tang,2013-Dec // last revised,in Scilab-5.3.3,Baiyu Tang,2014-Feb // Tang.Baiyu@gmail.com // ---signal and wavelet settings--- Wp.WltNum=WavNum(1); // filter case No. Wp.DatL=length(RawX00); if Wp.DatL32 then error('Too Short Data Length.'); end // length of signal vector, not less than 32 Wp.DecL=0; tem=Wp.DatL; while tem==(fix(tem/2)*2), tem=tem/2; Wp.DecL=Wp.DecL+1; end if Wp.DecL2 then error('Odd Data Length.'); end // tree height // ---basis selection settings--- Wp.Thres=3; Wp.NormP=1.5; Wp.BestRule=5; // 5: l_1 norm // 4: log-energy // 6: l_p (Wp.NormP) norm // 3: threshold (Wp.Thres) entropy // otherwise: Shannon entropy Wp.FixWavelet=-1; // 0 : directly use wavelet decomposition // otherwise: find the best basis // ---biorthogonal specific settings--- Wp.ExchangeR_D=-1; // 0 : reversed filters h and h1 // otherwise: usual use Wp.AdjBioNorm= : no adjustment // 0 : unit analysis // 0 : unit synthesis // = 0 : equal Wp.DualYes=1; // 0 : dual transforms for selection. // otherwise: usual transform // ---common settings--- Wp.PeriodFirst=1; // 0 : G from periodized H // otherwise: first make g from h, then periodize them Wp.FlipFirst=-1; // 0 : flip h1 and h, before nothing else is done // otherwise: do not flip Wp.MatchFilter=-1; // 0 : make filter match first, equal length // and make time-zero at the first // otherwise: normal Wp.LowT_zero=0; // low-pass filter time-zero shift // arbitrary integer Wp.HighT_shift=0; // 2M+1 shifts, from h to g // arbitrary integer Wp.FlipTime=-1; // 0 : -t, like convolution // otherwise: like correlation // ! after periodization Wp.AlterL4fSign=1; // 0 : Alter the sign of periodized high-pass basis // prepared for simple compatibility with 'wavedec' of Matlab-R2011a // otherwise: do not alter. Wp.RightShift=1; // 0 : right shift to generate all basis vectors // otherwise: left shift // ---noise reduction settings--- Wp.MaxSpin=max(min(Wp.DecL*2, 16)-1, 0); // integer, 16, =0, maxima shifts, for cycle-spinning Wp.NoiseSD=1; // noise, std deviation // ======================== DenMode1= ; // threshold mode index, integers in ModeNam1= ; // threshold mode names AveRMSE=zeros(length(NFSAs),length(DenMode1)); // RMSE // =========label string======== AuLabel1= ; // ==============test========== Ir0=isreal(RawX00); // real or complex vector ? for kkk=1:length(NFSAs), SNR=NFSAs(kkk); // SNR in dB RawX=RawX00(:).'*10^(SNR/20); // amplify rand('seed',1.0e9); for iii=1:TestNum, if Ir0 then // real xn0=RawX+rand(1,Wp.DatL,'normal'); // a row vector else // complex xn0=RawX+complex(rand(1,Wp.DatL,'normal'),rand(1,Wp.DatL,'normal'))/sqrt(2); end =TcyspDenois(xn0,Wp,DenMode1); // xpwpd0: denoised vectors, one row means one mode // xn0 : noisy data // Wp : settings // DenMode1: thresholding mode No., vector. for jjj=1:size(xpwpd0,'r'), =PoleStSp(xpwpd0(jjj,:),Ordr); // pole estimate =PoleFitRes(pole1,xpwpd0(jjj,:)); // linear fitting RMSE=sqrt(mean(abs(yn0(:)-RawX(:)).^2)); AveRMSE(kkk,jjj)=AveRMSE(kkk,jjj)+RMSE; if (iii==1)(SNR==PlotF(1))(jjj==1) then // save yn0 for plot xpwpd0(jjj,:)=yn0(:).'; end end if (iii==1)(SNR==PlotF(1)) then // plot waveforms scf(10000); subplot(3,2,PlotP*2-1); if Ir0 then // real signal plot(xn0,'g'); plot(real(xpwpd0(1,:)),'r'); plot(RawX,'b'); xtitle( ,' ',' '); else // display the imaginary part of complex signal xn0=imag(xn0); plot(xn0,'g'); plot(imag(xpwpd0(1,:)),'r'); plot(imag(RawX),'b'); xtitle( ,' ',' '); end set(gca(),'tight_limits','on'); set(gca(),'box','on'); ypos=0.99*min(xn0)+0.01*max(xn0); xstring(1,ypos,AuLabel1); end end AveRMSE(kkk,:)=-20*log10(AveRMSE(kkk,:)/TestNum+%eps); // 1/average, to dB end scf(10000); subplot(3,2,PlotP*2); // plot the RMSE LinStyl= ; NumPlot=size(AveRMSE,'c'); for jjj=1:NumPlot(1), plot(NFSAs,AveRMSE(:,jjj),LinStyl(DenMode1(jjj))); end if PlotP==3 then legend(ModeNam1(DenMode1),-3,%f); end set(gca(),'tight_limits','on'); set(gca(),'box','on'); set(gca(),'grid', ); xtitle( ,... 'NFSA (dB): Noise-Free Signal Amplification',... '1/RMSE (dB) of Final Result'); ypos=0.99*min(AveRMSE)+0.01*max(AveRMSE); xstring(min(NFSAs),ypos,AuLabel1); endfunction // ********************* load('TpwpSubs.bin'); // load all the functions for WP processing load('MatOrtWlts.bin'); // load filter cases // ***** orthogonal filter cases,in MatOrtWlts.bin, // mostly extracted from Matlab-R2011a: // 1-35, Symlets 1 ... Symlets 35 // 36-40, 35+ ..., Coiflets 1,2,3,4,5 // 41, Meyer // 42-80, 38+ ..., Daubechies 4 ... Daubechies 42 // 81-98, 80+ ..., biorthogonal cases. // =WltFilters(filter-case-No), // one empty: forward/inverse transforms use the same basis vectors. load('SsSvdLfit.bin'); // signals,functions for pole estimate,linear fitting =PoleSignal(); // get 6 test signals format('v',8); for j1=1:3, // 3 signals per group WltNum=96; // 96, equivalent: CDF9/7, Matlab_bior4.4 NFSAs0= ; PlotFlg=NFSAs0(1); j2=j1+Gr2(1); ordr0=length(s0(j2).P); if RealOnly0 then // use the real part only RawX0=real(s0(j2).S); ordr0=ordr0*2; else RawX0= ; end std0=sqrt(mean(abs(RawX0-sum(RawX0)/length(RawX0)).^2)); // std., RMSE RawX0=RawX0/std0; =TwltDenoise(ordr0,RawX0,WltNum(1),NFSAs0,TestNum0,PlotFlg,j1); TestRMSE, end NFSAs0, Tic_Toc_In_Second=toc(), 新浪赛特居士SciteJushi-2014-02-20。 图片 1.Scilab与Matlab的方差计算的差别 图片 2. 处理复信号1至3的结果 图片 3. 处理复信号4至6的结果
1758 次阅读|0 个评论
[转载]试试小波包变换降噪与复指数和信号模型拟合的串联
SciteJushi 2014-1-22 11:14
转载 http://blog.sina.com.cn/s/blog_729a92140101nx8p.html 暂且假设:已知两个关键参数,即,复指数和信号模型的阶数、噪声的标准差。 小波包变换降噪,以博文《结合移位(Cycle-Spinning)平均的小波包域降噪的程序》(2013-10-15)中的处理为基础。但是,在程序中增加一段小程序,把小波包降噪的结果,再用状态空间方法估计极点,用线性拟合法估计权系数 (博文《抑制有限时间序列中噪声的有效方法》,2011-04-08)。这种级联“降噪”的最终结果,用于计算RMSE值。 这不必是降噪,可以是对小波的选择、门限处理技术、有损压缩等对可参数化模型的损伤的一种评估。 使用小波滤波器组CDF9/7 (博文《国际标准中和美国联邦调查局用啥小波滤波器组--维基百科添乱》,2013-12-12) 时,处理6信号的结果,如图片1.(信号1、2、3)和图片2. (信号4、5、6)所示。第6个信号,是3个正弦序列的和,这3个频率,在以前的博文中近似地出现过;其余信号,也是前面与Matlab和Scilab的小波工具箱比较最佳基和Donoho阈值时,用到过的。 正弦序列,代表频域描述的局部化的极端例子;第5个序列,在时域的局部化,最极端。其余4信号,介于这二者之间。它们是不同大小的“波”。 小波包变换的设置,与TDen3Signals.sci中的设置,基本相同,但是令Wp.AdjBioNorm=[]、Wp.DualYes=1,使用对偶变换选择“最佳”基,直接用2的平方根对尺度序列定标然而不调整基向量的范数。 新浪赛特居士SciteJushi-2014-01-22。 图片 1.处理信号1至3的结果 图片 2. 处理信号4至6的结果
1543 次阅读|0 个评论
[转载]结合移位平均的小波包域降噪处理后的参数估计误差
SciteJushi 2014-1-16 16:38
原载 http://blog.sina.com.cn/s/blog_729a92140101nu5d.html 如本文末尾的图片1.的左半部所示,在有噪声时,参数估计中可能产生很大误差(相对误差的平均值)。前向预测,与后向预测,它们的参数误差相似。前向预测参数比后向预测参数,与信号的表达式之间的关系,更显明、直接。《离散正交小波包及其在噪声抑制中的应用》(北京理工大学学报18(1):70,1998),用了这种误差,验证小波包域降噪方法的性能。 《结合移位(Cycle-Spinning)平均的小波包域降噪的程序》(2013-10-15, 科学网附件TDden3Signals.sci)用RMSE的倒数作为评价指标,研究比较了几种门限降噪方法。使用其中的方法,对本文图片1.里的 = polelp(x,2)中的x,在估计参数之前先做降噪处理,再用参数估计误差代替那里的RMSE的倒数,可得到本文末尾图片中的曲线图(100次平均),计算约需900秒。其中,第一(左)列数字,是无降噪时的参数误差;第二列数字,是以3倍标准差做硬门限降噪、而无移位平均时的误差,比有移位平均时的误差约大1倍。 下面是小波包设置参数: // Wp = // WltNum: 40 // DatL: 256 // DecL: 8 // Thres: 3 // NormP: 1.5 // BestRule: 1 // TDen3Signals.sci: 5 // FixWavelet: -1 // ExchangeR_D: -1 // AdjBioNorm: 0 // DualYes: -1 // PeriodFirst: 1 // FlipFirst: 1 // TDen3Signals.sci: -1 // MatchFilter: 1 // TDen3Signals.sci: -1 // LowT_zero: 0 // HighT_shift: 0 // FlipTime: -1 // AlterL4fSign: 1 // RightShift: 1 // MaxSpin: 15 // NoiseSD: 1 TDden3Signals.sci中对这些参数有注释说明。这里特别指明了修改了的几个参数。使用Shannon熵准则。Wp.FlipFirst=1、Wp.MatchFilter=1,表示:在生成基向量前,首先将尺度序列倒序、并且匹配位置。使用的30阶滤波器的数据,来自Matlab-R2011a的Coiflets 5,但是,是倒序的。这种设置,不与Matlab的小波工具箱兼容。 由于普通离散小波基是特殊的小波包基,所以,对于某些信号,可以限定使用小波分解系数(《普通离散小波变换降噪的局限与小波包域能量分裂降噪法》,2013-09-29)。这是利用先验信息的一种方式,先验信息可能用于弱化噪声对最佳基搜索的影响(尤其在低信噪比、噪声占主导地位的情形)。设置Wp. FixWavelet=1、Wp.MaxSpin =0、Wp.FlipFirst=-1、Wp.MatchFilter=-1、Wp.DecL=3(Matlab小波工具箱wmaxlev允许的最大分解深度), 然后重复运行上述处理程序,可以得到图片 2.所示的结果。这一特殊信号可以简捷地用 普通离散小波变换 。序列后半部分,看起来可被置为零,它对参数估计的重要性较低,然而更易受噪声污染,所以在参数估计问题中可能更简化为:选择适当的数据截断;在用 FFT的谱分析中可能更简化为:乘以适当的衰减序列,牺牲分辨率以换取更高信噪比。 附图片1.中的程序段: clc; mode(0); clear; format('v',8); function = polelp(dat, ordr) x=dat(:); L=length(x); lpm=zeros(L-ordr,ordr+1); for ii = 1:ordr+1 lpm(:,(ordr+2-ii))=x(ii:(ii+L-ordr-1)); end a1=pinv(lpm(:, 2:ordr+1))*lpm(:,1); a= ; po0=conj(roots(a,'e')); a0=imag(log(po0)); // sort by =gsort(a0); po0=po0(i1); endfunction // estimate poles x=0:255; x0=0.98.^x.*cos(0.51*x); x0=x0/stdev(x0); = polelp(x0,2); p0= ; i0=0; er=zeros(1,5); for NFSA = 0:5:20 i0=i0+1; rand('seed',1.0e9); x1 = x0*10^(NFSA/20); for j0 = 1:100 x = x1 + rand(x0, 'normal'); = polelp(x,2); p1=abs( -p0); er(i0)=er(i0) + mean(p1./abs(p0)); end // parameter order, match end // 北京理工大学学报18(1):70,1998. disp(er/100); // without denoising 新浪赛特居士SciteJushi-2014-01-16。 图片 1.用最佳基降噪(16步移位) 图片 2.直接使用普通离散小波分解系数(无移位平均)
1685 次阅读|0 个评论
[转载]比较三个程序中的Donoho阈值
SciteJushi 2014-1-8 15:22
原载 http://blog.sina.com.cn/s/blog_729a92140101nphm.html 从Scilab的那个小波工具箱swt的网页上列举的更新换代的历史,可知:其0.1.9版,就有了离散小波变换降噪的函数;0.1.15版,称搞定了wentropy和所用的计算门限值(阈值)的thselect中的bug。那个wentropy已经被讨论过了,这里再看看thselect。 从互联网上查到了Matlab和Scilab的小波工具箱的一些早期资料。发现Matlab的工具箱比Scilab的,约早10年。介绍Scilab工具箱的2006年的幻灯片中,没有per模式。从Matlab的用户指南(User’s Guide)可知,per模式并没有被正式列入早期dwtmode的设置中、也不被图形用户接口(GUI)支持。直至R2011a版,per模式已还被排斥在“正式的”表格之外。实际上,用户指南指出,周期化变换明显一般是决不合理的:“This method supposes that signals or images are periodic. It is clear that in general it is far from a reasonable assumption.” 早期的小波工具箱及其中的降噪结果,可能还难与居士的处理相连通,然而居士未意识到这一问题便已离开了小波研究。 工具箱里的函数thselect、wthresh(门限处理)、wden(用离散小波变换自动降噪)等,以及Donoho降噪阈值与那些试验信号,从开始就已有了。通过GUI,可以做降噪。它们有了很长的历史,应该已被很多人使用过。无论如何,借用其中的阈值,未必评述某阈值及其思想基础,也并无大碍。 在居士上载的程序包中,如果把Donoho阈值(《普通离散小波变换的局限以及小波包域能量分裂降噪法》,2013-09-29) 计算错了,那么就可能有损Donoho。Matlab和Scilab是科学计算的超级大腕,如果“对不住”Dr. Donoho,那么,他也许很快就知道了;但是,在某偏僻角落里的赛特居士SciteJushi,无人监督,就只有自觉地尽量多做检查了。 如图片所示,比较结果中,未发现谬误。所用的测试信号组x5,与《小波包基的选择中的常用代价函数与数据规范化》(2013-12-22)中的相同。与那里的图片比较,这里的Scilab窗的菜单栏,多了Toolboxes,其中包含swt。 使用由x5生成的5个复数序列x。从图片左下角的20个数据可知,Matlab的小波工具箱与Scilab的小波工具箱都有的thselect,计算出的rigrsure和heursure门限值,都是一致的。如果heursure与rigrsure的值不同,那么就必等于由序列长度完全确定的sqtwolog的值。 在程序包TpwpSubs.bin中,没有对应的thselect、wthresh和wden等。但是,有函数TbestThres可计算那两个阈值以用于全局软门限处理,其有三个输入:数据序列、噪声标准差、准则名称;有两个输出:加权因子序列、阈值。原数据与加权因子序列,相乘,即可以得到相当于wthresh的软门限处理的结果。在Scilab命令窗中,最后显示:阈值完全一致(th = 0),门限处理的结果之间的相对误差(范数)极小(er = 3.122e-16)。 两个软件窗口,朴素、端庄,内凝了人类智慧,蕴藏着强大力量。但愿居士放的丁点字符簇,无损它们的形象与英名。万能的天理大道呵,接纳人的感恩、谦卑与敬畏,宽恕蒙昧、误解和过失,怜悯生命之微渺艰辛而不吝更多启示!人类社会,岂是生物学意义上的代代重复? 图片 新浪赛特居士SciteJushi-2014-01-08。
1311 次阅读|0 个评论
[转载]结合移位(Cycle-Spinning)平均的小波包域降噪的程序
SciteJushi 2013-10-15 18:49
原载 http://blog.sina.com.cn/s/blog_729a92140101mbpo.html 普通线性滤波法,不能滤除通频带内的噪声。小波皱缩(shrinkage)降噪法,试图估计出某种光滑函数以近似无噪信号,但终归也只是门限处理。信噪比提高几个dB(分贝),不是小事情,但结果依然可能有很强的噪声,例如,-3dB时即使提高了8dB结果也仍才5dB,而且还可能引入了畸变。畸变包括,NFSA为负值时,信号被直接判定恒为0的情形。结合各种思想、理论、技术,提高降噪性能的探索,仍是有意义的,在这一方面,基于有限维向量空间的处理,显得更自然灵活。 移位(Cycle-Spinning)组合法,是Coifman等的主意,居士已在前面提到的小波包域降噪方法处理中实现了“移位平均”。 本文后的图片1、2,是结合16步移位的平均后的结果。图片1,包括了三种典型信号:正弦信号,可以在FFT域处理;阻尼指数和信号,与矩阵奇异值分解、低秩逼近等参数估计算法相连;其中的quadchirp,以及图片2使用的信号,是用普通离散小波变换降噪的文献中常见的特殊例子。它们未必是最适合小波包处理的信号,但是,小波包方法,努力处理尽可能多的信号。三种信号的处理中,使用的尺度序列分别是:Symlets 13、Daubechies 4、Symlets 17,波形图,是用3倍标准差硬门限时(Hard 3-SD)的例子。图片2的6个信号(512点)的处理,分别使用Symlets 1、6、7、9、17、33。 硬门限处理法,不仅调整门限值很方便,而且,这里结合移位平均后,增效更显著,表现优于普通软门限处理。 本文末,是生成(约15分钟) 图片1的程序TDen3Signals.sci。在博客中贴的程序,居士都复制回去再运行过,用“记事本”复制、存储,可以避免或减少不可见格式符等造成的运行困难(尤其是…表示的单句分行的情况!)。所有子程序和98组滤波器的bin文件上载 于科学网的附件中 Den3Signal.zip ,zip文件不到100k大。在基本平台中运行,无需特别的工具箱。安装Scilab-5.3.3时,不用互联网连接以下载特别库文件。  其中,参数(Wp)是居士常用的设置之一,并包括了最近玩过的一些变种的说明。程序涉及的小波包变换,希望对Wp.PeriodFirst、Wp.RightShift、Wp.FlipFirst、Wp.MatchFilter、Wp.LowT_zero、Wp.HighT_shift、Wp.FlipTime、Wp.AlterL4fSign的随机取值,即:是否先于周期化生成高通滤波器、是用左移系还是右移系、是否首先将尺度序列倒序、是否匹配长度和位置、任意指定的时间零点、任意指定由低通转换到高通时的时间平移、是否将基向量的时间再反转、滤波器系统的序列长度能被4整除时是否强制改变高通基的符号,它们的随机组合,可能生成不同分解系数,但满足完全重建(排除滤波器系数本身的误差、条件数太大等造成的数字计算问题)。Cycle-Spinning的成功,是这些考虑的重要意义的一个例证。 这里装载的滤波器系数(MatOrtWlts.bin),除41号外,在《周期化约100个小波滤波器组以分解单位矩阵的误差》(2012-10-13)中已列出。81号至98号,分别是那里的case 1至case 18,为双正交滤波器组。正交滤波器系数,全部取自于Matlab-R2011a: 1至35号,分别是Symlets 1至Symlets 35; 36至40号,分别是Coiflets 1至Coiflets 5; 42至80号,分别是Daubechies 4至Daubechies 42。 41号,是离散Meyer小波,但是在Matlab中,其端点原有一个“0”,这里已将零删除。 用 =WltFilters函数,加入新“case”,即可装入其它尺度滤波器序列。程序不检验正交或双正交,但识别其中任一个尺度序列是否为“空”;对于长度不相等的双正交滤波器对,假设其短序列端点未被补零。 在居士看来,设置 Wp.FlipFirst=-1、 Wp.MatchFilter=-1、 Wp.LowT_zero=0、Wp.HighT_shift=0、 Wp.FlipTime=-1、 Wp.AlterL4fSign=1、 Wp.RightShift=1的组合 ,可以使这里的小波包分解的系数,包含 Matlab-R2011a中的普通离散小波变换的函数wavedec在per模式时的正交变换数据。Matlab代表了某种传统和习惯。但是,Wp.AlterL4fSign不大于零,在理论上,更工整和谐。 // TDen3Signals.sci. // wavelet packet denoising,with cycle-spins. xdel(winsid()); // kill all figures mode(0); ieee(1); clear; // clean work space clc; date1=getdate(); date1=date1( ); disp( ); tic(); // timing load(TpwpSubs.bin); // load all the functions function =TwltDenoise(RawX00,WavNum,NFSAs,TestNum,PlotF,PlotP) // Wp: used settings // AveRMSE: result, RMSE; row: NFSA; column: method // RawX00: original signal, SD=1 // WavNum: filter case No. // NFSAs: values of NFSA for tests // TestNum: TestNum noisy tests per NFSA // PlotF: NFSA value for plotting waveform // PlotP: plot position // in Scilab-5.3.3,Baiyu Tang,2013-June. // last revised,in Scilab-5.3.3,Baiyu Tang,2013-Oct. // Tang.Baiyu@gmail.com . // ---signal and wavelet settings--- Wp.WltNum=WavNum(1); // filter case No. Wp.DatL=length(RawX00); if Wp.DatL32 then error(Too Short Data Length.); end // length of signal vector, not less than 32 Wp.DecL=0; tem=Wp.DatL; while tem==(fix(tem/2)*2); tem=tem/2; Wp.DecL=Wp.DecL+1; end if Wp.DecL2 then error(Odd Data Length.); end // tree height // ---basis selection settings--- Wp.Thres=3; Wp.NormP=1.5; Wp.BestRule=5; // 5: l_1 norm // 4: log-energy // 6: l_p (Wp.NormP) norm // 3: threshold (Wp.Thres) entropy // otherwise: Shannon entropy Wp.FixWavelet=-1; // number 0 : directly use wavelet decomposition // otherwise: find the best basis // ---biorthogonal specific settings--- Wp.ExchangeR_D=-1; // number 0 : reversed filters h and h1 // otherwise: usual use Wp.AdjBioNorm=0; // Adjust biorthogonal norm // ; // threshold mode index, integers in ModeNam1={'Hard 3-SD ';'Hard Power';'Soft Power';'Power Split';... ' sqtwolog';' rigrsure';' heursure'}; // threshold mode names AveRMSE=zeros(length(NFSAs),length(DenMode1)); // RMSE // =========label string======== AuLabel1= ; // ==============test========== for kkk=1:length(NFSAs); SNR=NFSAs(kkk); // SNR RawX=RawX00(:).'*10^(SNR/20); // amplify rand(seed,1.0e9); for iii=1:TestNum; xn0=RawX+rand(1,Wp.DatL,'normal'); // a row vector =TcyspDenois(xn0,Wp,DenMode1); // xpwpd0: denoised vectors, one row means one mode // xn0 : noisy data // Wp : settings // DenMode1: thresholding mode No., list. if (iii==1)(SNR==PlotF(1)) then // plot waveforms scf(10000); subplot(3,2,PlotP*2-1); plot(xn0,'g'); plot(xpwpd0(1,:),'r'); plot(RawX,'b'); set(gca(),tight_limits,on); set(gca(),box,on); xtitle( , , ); ypos=0.99*min(xn0)+0.01*max(xn0); xstring(1,ypos,AuLabel1); end for jjj=1:size(xpwpd0,'r'); // RMSE RMSE=sqrt(mean((xpwpd0(jjj,:)-RawX).^2)); AveRMSE(kkk,jjj)=AveRMSE(kkk,jjj)+RMSE; end end AveRMSE(kkk,:)=-20*log10(AveRMSE(kkk,:)/TestNum+%eps); // 1/average, to dB end scf(10000); subplot(3,2,PlotP*2); // plot the RMSE LinStyl={'-rs';'-rv';'-r^';'-r*';'-b';'-bs';'-b+';'-b'}; NumPlot=size(AveRMSE,'c'); for jjj=1:NumPlot(1); plot(NFSAs,AveRMSE(:,jjj),LinStyl(DenMode1(jjj))); end legend(ModeNam1(DenMode1),1,%f); set(gca(),tight_limits,on); set(gca(),box,on); set(gca(),'grid', ); xtitle( ,... NFSA (dB): Noise-Free Signal Amplification,... 1/RMSE (dB) of Reconstruction); ypos=0.99*min(AveRMSE)+0.01*max(AveRMSE); xstring(min(NFSAs),ypos,AuLabel1); endfunction // ********************* load('HNwnoise.bin'); // ***** generate signal 3, // the wnoise.sci Author: Holger Nahrstaedt - 2010-2012 // load TcdfWlts.bin; // biorthogonal filter, 100 cases load('MatOrtWlts.bin'); // ***** orthogonal filter cases,in MatOrtWlts.bin, // mostly extracted from Matlab-R2011a: // 1-35, Symlets 1 ... Symlets 35 // 36-40, 35+ ..., Coiflets 1,2,3,4,5 // 41, Meyer // 42-80, 38+ ..., Daubechies 4 ... Daubechies 42 // 81-98, 80+ ..., biorthogonal cases. // =WltFilters(filter-case-No), // one empty: forward/inverse transforms use the same basis vectors. format('v',10); for j1=1:3 select j1 case 1 then WltNum=13; // 13, symlets 13; 97, biorthogonal NFSAs0= ; PlotFlg=-5; TestNum0=10; RawX0=2*sin(linspace(0,%pi*120,256))+sin(linspace(0,%pi*7,256)); case 2 then WltNum=42; // 42, Daubechies 4; NFSAs0= ; PlotFlg=0; TestNum0=10; RawX0= ; RawX0=(0.92).^RawX0.*cos(0.61*RawX0)+... (0.83).^RawX0.*cos(0.79*RawX0)+(0.99).^RawX0.*cos(0.80*RawX0); case 3 then WltNum=17; // 17, Symlets 17 NFSAs0= ; PlotFlg=15; TestNum0=10; =wnoise(5,9);// wnoise(fn1,n),fn1=signal No.1-6;length=2^n else disp('Specify Signal ?'); break; end // RawX0=RawX0-mean(RawX0); RawX0=RawX0/(stdev(RawX0)+%eps); , =TwltDenoise(RawX0,WltNum(1),NFSAs0,TestNum0,PlotFlg,j1); NFSAs0, TestRMSE, end Tic_Toc_In_Second=toc() 新浪赛特居士SciteJushi-2013-10-15。 图片 1. 三个典型信号的小波包域 7 种门限降噪法结合 16 步移位平均的结果 图片 2. 用 6 个标准信号(512点)测试结合了移位平均的小波包域降噪方法
1492 次阅读|0 个评论
[转载]普通离散小波变换降噪的局限与小波包域能量分裂降噪法
SciteJushi 2013-9-29 18:57
原载 http://blog.sina.com.cn/s/blog_729a92140101m26j.html 普通离散小波变换的结果,包含在小波包变换中,只是完整的小波包树的一部分。如果需要它或已知它是合适的,那么可以直接从小波包树上获取相应的部分。搜索最佳小波包基,原则上,可以自动涵盖普通离散小波变换时最佳分解深度的抉择。所以,直观地、一般地、概念性地,小波包变换优于普通离散小波变换,这不言自明,无需例证。 普通离散小波变换中,分解加深一级,对应了频带被进一步一分为二。这种粗糙而死板的频率分辨定位,使其不能稀疏地表达太多的常见信号,其门限降噪具有较强的局限性。基于一些特殊的先验假设或知识,选择适当小波、决定最佳分解深度、估计噪声强度、使用依赖于尺度的门限值等,普通变换降噪也可能达到特别的性能,但这些也意味着适用范围更窄。更何况,在小波包基(或树)上,并不必排斥类似的处理,这些处理只是问题的一个方面。 门限法降噪的第一位的问题,是使“通带”尽可能地窄、“阻带”尽可能地宽,小波包变换正好可为此提供丰富的选择、也克服普通小波变换的缺点。 当然,在现实中,某种特定的“代价准则”、“最佳”、处理方案等,未必利用好了小波包变换的框架基础、未必已发挥好了其优势或潜力。 在Matlab-R2011a的命令窗中运行: clear; clc; format short g; x0=2*sin(linspace(0,pi*120,256))+sin(linspace(0,pi*7,256)); % original x0=x0*(10^(10/20)/std(x0)); % noise-free, 10dB rng(0,'twister'); x=x0+randn(size(x0)); % noisy, std=1 RMSE=zeros(1,8); dwtmode('zpd'); WavNam='sym8'; % mode and filter =ddencmp('den','wv',x); % default values, using wavelet for l=1:8; xd=wdencmp('gbl',x,WavNam,l,thr1,soh1,kac1); RMSE(l)=sqrt(mean((x0-xd).^2)); end; RMSE, 可得 RMSE= 。 这里的无噪信号很简单,是两个正弦序列之和;所加噪声,是零均值的,其标准差为1。结果RMSE不小于1,而是原有噪声标准差的2至3倍。所以,用系统自动设置的普通小波变换降噪遭到了惨败。即使,直接用另一自动降噪函数wden, 并利用标准差条件,指定门限选择准则“sqtwolog”、“rigrsure”、“heursure”或“minimaxi”,结果也都显示了失败。 普通小波变换降噪局限性明显,但是它的“Donoho阈值”是可以借鉴的。 修改博文 《 小波包域降噪的三种简易门限 》 (2013-07-16)提到的Scilab程序,以增加从 Matlab吸收的“Donoho阈值” :用“ sqtwolog”值做硬门限,用“rigrsure”和“heursure”方法计算软门限值。但是,仍只用普通的一些熵准则,定义最佳基。此外,在“Soft Power”的基础上,开发了“能量分裂(Power Split)”降噪法。 设门限值为T,某小波包系数的模值为A,AT,修正后系数的模值为B。在普通软门限(包括“Soft Power”)方法中,它们满足B=A-T;然而“能量分裂(Power Split)”法,强调能量叠加关系,令B*B=A*A-T*T。 用7种门限处理上面的双频信号,结果在本文后图1中。滤波器为上面程序中的“sym 8”。 用小波包域能量分裂法和Daubechies 3 滤波器,处理6个“标准信号”,结果如本文后图2所示。与 的“Soft Power”结果比较,低信噪比时对噪声的滤除作用减弱,信噪比逐渐增高时的性能提高了,避免了畸变,几乎没有了信噪比不增反降的结果。 如果允许信号使用各自不同的滤波器,那么性能还可能提高。例如,本文后图3,是6信号分别使用Haar和Symlets 6、7、9、17、33的结果。 用Scilab-5.4.1换了Scilab-5.3.3。过去在Scilab-5.3.3中的tic()-toc()记时约540秒的处理,这会儿在新版本中记时约为740秒。 新浪赛特居士SciteJushi-2013-09-29. 图 1. 小波包域 7 种门限降噪法结果 图 2. 用 6 个标准信号测试小波包 (Daubechies 3 ) 域能量分裂降噪法 图 3. 各信号用不同滤波器 (Haar , Symlets 6、7、9、17、33 ) 时的结果
1540 次阅读|0 个评论
[转载]小波工具箱举例不当与Donoho阈值
SciteJushi 2013-9-26 07:31
原载 http://blog.sina.com.cn/s/blog_729a92140101lzn3.html 近来看Matlab小波工具箱的文档资料,有些吃惊地发现,在小波(包)降噪方面,Dr. Donoho D L似乎才是代表人物。Matlab是世界上最顶级的科技软件系统之一。其在计算降噪和压缩的系统默认参数的函数ddencmp、降噪门限选择函数thselect的帮助文档中,列出的参考文献都是他的;用普通小波变换做自动降噪的函数wden列了5篇参考文献,其中有4是Donoho的;小波包降噪与压缩函数wpdencmp列出的参考文献,也有一半是Donoho的。当然,多是重复的。 直率地讲,居士对这些,以前真还没有印象。自此,不妨把这些函数设置的门限值都称为“Donoho阈值”,这也可能加深其影响。 在居士的旧印象中,小波包,包括有关滤波器组、降噪等,主要始于Wickerhauser和Coifman,或者说居士的知识基础主要来自于他们的著述。至于在变换域内将某些项置零以降噪或除去干扰的观念,可能人们很早就已有了,例如《心电信号处理与特征参数提取的研究》(北京理工大学学位论文,1993)中的FFT域镶边滤波的程序设计。 查了查Donoho的论文,发现其被引用次数极高,但感觉从学习研究小波包变换的角度看,不必定需要它们。不过,Matlab中的软门限方法,是它们的贡献。它们重点在统计学分析,如果那些统计学描述,能像中学几何证明似地明朗,可就好了。 虽然它们有明确的风险函数、有无偏估计理论,但从很多方面和结果看,具体的门限值有待研究,可能视情况而定。例如,以前曾提到小波包的sure的门限值,即使sqrt(2*log(n)) (准则sqtwolog类型中的计算,n为序列长度)乘以噪声标准差,都可能偏大。然而《On Denoising and Best Signal Representation》(IEEE Trans IT 45(7):2225,1999),似乎也推崇大门限值。 大的门限值和软门限方法,利于除净纯噪声的系数,惩罚了噪声与信号系数的同号叠加所遗留的尖峰误差;但是,也意味着,奖励了噪声与信号系数的反号相消所带来的误差。实际上,局部尖峰误差,也可能用支集大的滤波器而受到抑制,这类似于:FFT变换域处理时,小的门限值反而可能减小吉布斯伪影。 博文《从降噪看Matlab小波工具箱的举例不当》(2013-09-23),用了工具箱里函数wpdencmp的文档中比较小波包变换和普通小波变换降噪的例子,部分如下: dwtmode('zpd'); % mode, zero-padding =wnoise(5,11,7,2055615866); % signals n=length(x); thr=sqrt(2*log(n*log(n)/log(2))), % threshold xwpd=wpdencmp(x,'s',4,'sym4','sure',thr,1); % wavelet packet,denoising format short g; RMSE=sqrt(mean((xref-xwpd).^2)), % root mean square error 其中,用“软门限方法”,门限值thr=sqrt(2*log(n*log(n)/log(2))),约为4.477。在命令窗中运行得:RMSE=1.8342。 如果,用“软门限方法”,门限值thr=sqrt(2*log(n)),约为3.905 , 那么:RMSE=1.6558。 如果,用“软门限方法”,门限值thr=3,即3倍标准差 , 那么:RMSE=1.372。 如果,用“硬门限方法”,门限值thr=sqrt(2*log(n*log(n)/log(2))) , 那么:RMSE=0.9381。 如果,用“硬门限方法”,门限值thr=sqrt(2*log(n)) , 那么:RMSE =0.8881。 如果,用“硬门限方法”,门限值为thr=3 , 那么得:RMSE=0.81641。 这些试验中,软门限方法,使信噪比,不增大、反而减小了;硬门限方法,都比软门限方法更好;门限值,“越小越好”。改用per模式,再重复上述试验,仍然可见这种“结论”。越被推崇的选择,其结果可能更差。所以,Matlab系统自己的小波包的应用例子的设置、门限参数,可能是最不利于小波包的。 有趣的是,这里最好的结果RMSE=0.81641,碰巧支持《离散正交小波包及其在噪声抑制中的应用》(北京理工大学学报18(1):70,1998)使用的门限取值,把thr=3改为2.999或3.001,结果也几乎不变。当然,那里的研讨,直接置于了有限维离散时间信号空间,不必定要普通小波理论的无穷时间模拟信号空间;也就回避了Donoho对函数光滑性等的关切;对于门限方法的考虑,是启发式的,无特定的优化,显得简单。 学问处处有,研讨无终结。 新浪赛特居士SciteJushi-2013-09-26。
1523 次阅读|0 个评论
[转载]什么使Matlab小波工具箱容忍了或摧毁了sure呢
SciteJushi 2013-9-24 08:27
原载 http://blog.sina.com.cn/s/blog_729a92140101ly6e.html 前面已经提到“sure”出身不凡,在Matlab小波工具箱中有重要的地位,并以处理图例证实居士的机器系统工作正常。不妨,再试段程序: e=zeros(1,5); format short g; for ii=1:1000 Num0=randi(256,1,1); x=zeros(1,Num0); e1=wentropy(x,'shannon'); e(1)=abs(e1)+e(1); e2=wentropy(x,'log energy'); e(2)=abs(e2)+e(2); thr=rand(1,1); e3=wentropy(x,'norm',1+thr); e(3)=abs(e3)+e(3); e4=wentropy(x,'threshold',thr); e(4)=abs(e4)+e(4); e5=wentropy(x,'sure',thr); e(5)=abs(e5+Num0)+e(5); end; e, 可得 e= 。 这表明:随机(随机试验,1000次)长度的“零序列”,除去“sure熵”外,其余所有熵始终为零;然而,其“sure熵”e5始终等于,序列长度的负值。 在Matlab的函数wentropy的帮助文档资料中,在列出几种熵的定义式之前,如本文后图片所示,明确指出了:The entropy E must be an additive cost function such that E (0) = 0。 所以,其计算的“sure熵”e5并不满足熵的条件: E (0) = 0。但是Matlab的小波工具箱为什么收容了它呢? 依居士看,根据图片中的定义,e5似乎应该为零,而不该是这个wentropy的结果。可以写新的计算程序,使定义的“sure熵”始终为零。那么,Matlab的函数wentropy的计算可能是错误的,但是,前一博文中的曲线图表明这一问题似乎不是新的孤立的,而且最早发现Matlab用“shannon熵”处理居士的信号失败时信号范数实际上也是归一化了的。 系统的很多例子用zpd模式。熵的定义式中,包含了序列长度的话,那么使用不同滤波器或不同分解深度时,小波包方法的性能是否变化,这还不清楚。 新浪赛特居士SciteJushi-2013-09-24。
1825 次阅读|0 个评论
[转载]从降噪看Matlab小波工具箱的举例不当
SciteJushi 2013-9-23 08:21
原载 http://blog.sina.com.cn/s/blog_729a92140101lxhn.html 降噪,是Matlab的小波工具箱中的重要部分。下面的屏幕截图,显示了其小波包降噪/压缩函数(wpdencmp)中的一个例子。 其中的变量 init= 2055615866,是随机数发生器的种子。这一函数,和离散小波变换、小波包变换等所涉及的一系列(容易看到二三十个)计算函数,它们的帮助文档资料中的例子(Examples)部分的第一句都是:% The current extension mode is zero-padding (see dwtmode)。即使其降噪函数ddencmp、thselect、wden、wdencmp、wnoisest,也粘在zpd(边界补零)模式,而未用per模式。这指明了,例子的运行条件是zpd模式,这一模式是工具箱的若干自带例子运行的基础、合适的配置,忽略了噪声系数独立同分布的问题。 据此,居士拼了小段程序如下,可在命令窗中运行(复制、粘贴、回车): % ---part 1, the example, in the Help about wpdencmp dwtmode('zpd'); % mode, zero-padding =wnoise(5,11,7,2055615866); % signals n=length(x); thr=sqrt(2*log(n*log(n)/log(2))), % threshold xwpd=wpdencmp(x,'s',4,'sym4','sure',thr,1); % wavelet packet,denoising xwd=wden(x,'rigrsure','s','one',4,'sym4'); % common wavelet,denoising % ---part 2, error, RMSE format short g; RMSE(1)=sqrt(mean((xref-x).^2)); RMSE(2)=sqrt(mean((xref-xwpd).^2)); RMSE(3)=sqrt(mean((xref-xwd).^2)), % ---part 3, plots axlim1= ; subplot(4,1,1); plot(xref); axis(axlim1); title('Noise-Free'); subplot(4,1,2); plot(x); axis(axlim1); title('Noisy'); subplot(4,1,3); plot(xwpd); axis(axlim1); title('Wavelet Packet Denoising ??'); subplot(4,1,4); plot(xwd); axis(axlim1); title('Wavelet Denoising'); 其中第一部分 (part 1),如前所述;第二部分,计算显示RMSE;第三部分,画波形曲线图。 波形曲线图,如本文末所示,看起来与帮助文档资料中的图一致,因而,居士使用的机器系统产生特殊问题的可能性就可被排除了。 在低频(起始)部分,小波包处理结果,看起来很干净,似乎比普通小波变换的结果更好些;而高频部分信号的峰峰值,压缩较大,暗示小波包处理结果可能很糟。在命令窗中有,RMSE= ,表明基于“Stein无偏风险估计”的小波包处理,带来了显著的失真,以至使RMSE超过了原有噪声标准差的1.8倍。其sure中的“最佳”、门限、“无偏”等,在该例中,是不适当的。 博文《 小波包域降噪的三种简易门限 》( 2013-07-16),没有统计学的复杂形式,带了一个朴素观念:门限处理“有奖有惩”,信号系数“有得有失”,但被抛弃的部分的总量受噪声能量的制约。因此,软门限值一般应该小于硬门限值;不是估计出一个门限值然后就用于“软、硬”处理均可。 这里的门限值thr=4.477,比3倍标准差大了很多,有利于抑制突发性的局部误差,较适合很低信噪比的情形;调整信噪比,可以看到RMSE的变化。但是,在更多信号情况下,从RMSE结果可以看到,这种大门限值,即使作硬门限也偏高了,在上述例子中用作软门限就更不当了。 上面程序中的小波包,如果改用硬门限处理,则可得RMSE= 。第二个数字,显著变小了。这表明,系统自己的例子,是不良的;由于Matlab的特殊地位,用户可能被例子误导。如果,有人据这种个例以为:小波包降噪不如普通离散小波变换,那也糟了。 新浪赛特居士SciteJushi-2013-09-23.
2660 次阅读|0 个评论
[转载]小波包域降噪的三种简易门限
SciteJushi 2013-7-16 15:19
原载 http://blog.sina.com.cn/s/blog_729a92140101kobc.html 普通线性滤波方法、小波变换,都可以被小波包处理含盖。在小波包方法中,实数滤波器序列的频谱特性是确定的;周期化,等效于频域下抽样,不改变频带;零时间点、时间反转、卷积运算、相关运算的选择可不同,只是说明幅频特性确定后相频特性的选择不是唯一的。被处理数据的下抽样,是离散变换中的牛点,它使同一数字频率对应的“模拟频率”发生了变化、频带被拉伸、转换,就使不变的数字滤波器切割频带、实现了连续变换的多尺度处理。总之,小波包分解树上,任意位置的频带是确定的、易知的,这可以指导某过渡带内系数的加权,可选择出纯噪声系数以用于估计噪声功率。然而,一般性方法的考量,宜争取不利用信号频谱的先验信息。 已知 参数: 零均值高斯白噪声的标准差,S。 无噪信号: 完全未知,只是小波的选择可能利用了关于它的模糊的先验知识。 门限方法1, Hard 3-SD: 硬门限处理,使绝对值大于3倍标准差3S的最佳基系数保持不变,其余系数被置为0。 门限方法 2, Hard Power: 硬门限处理,使被置为0的最佳基系数的数目越多越好,只要它们的总能量不大于噪声的能量E。S的平方是噪声功率,能量等于功率乘以时间长度。 门限方法 3, Soft Power: 软门限处理,使被置为0的最佳基系数的数目越多越好,只要它们的总能量加上M*T*T (被保留项的数目M,乘以门限值T的平方) 的和值等于噪声能量E。如果M等于时间长度,那么直接令重建信号等于未被分解的数据;M等于0时,直接令重建信号恒等于0。 双正交分解数据,近似地按正交分解系数对待,不用增益与范数太不协调的滤波器对(在以前的图中,当横轴为尺度滤波器编号时,只有整数才有意义,居士使用连续曲线只为方便)。 试验方法: 用Scilab-5.3.3 (无小波工具箱) 编程。程序的输入量为:1. 不含噪声的原始信号X;2. 尺度滤波器编号(在以前列出的100组中);3. 增益向量NFSA (Noise-Free Signal Amplification),指定加噪声前将原始信号放大的倍数(分贝);4. 每一个放大后的信号的加噪声的试验次数;5. 波形图对应的信号放大倍数g。 有噪声的信号Y为: Y=U+n,U=10^(G/20)*X 。G,是NFSA中的一个元素。n,是随机数函数rand生成的高斯白噪声,其标准差在试验中始终被视为1。 小波包分解深度,自动至周期长度为奇数。 小波包降噪后重建的结果,与U的误差的均方根值为RMSE (root-mean-square-error)。完成指定试验次数后,RMSE取平均。 当G=g时,将第一个噪声样本(种子为1.0e9)的软门限处理的波形,绘于图形窗的左半部。 整个试验结果,绘于图形窗的右半部。横轴为NFSA,纵轴为RMSE的倒数(分贝),纵轴即是信噪比(SNR)的增量。每一增益值的噪声试验次数,显示在标题栏尾。 程序的输出量:NFSA-RMSE曲线图的数据,小波包设置参数。 除非特别声明,试验、小波包、门限处理等程序模块,全由居士本人完成。 结果: 文末的第1图至第7图,分别是sine、blocks、bumps、heavysine、doppler、 quadchirp、mishmash的结果。sine是居士以前用过的信号,其图示结果共用了1200个噪声样本,波形图对应的增益值为-5dB;其余6种,是常见的“标准”信号,用其他人的程序(wnoise.sci,Holger Nahrstaedt - 2010-2012)生成以使其合标准,每一信号试验了800个噪声样本,波形图对应的增益值为15dB。七种信号,分别共耗时(tic, toc):81、117、133、123、125、129、139秒 (用前单位提供的联想手提式电脑T61, 其处理器为x86 Family 6 Model 15 Stepping 11 GenuineIntel ~2194 Mhz,总的物理内存为2GB、虚拟内存为2GB)。所用的尺度滤波器分别为:91 (Symlet 31)、4 (双正交)、13 (双正交)、18 (双正交)、27 (Daubechies 9)、77 (Symlet 17)、93 (Symlet 33)。 NFSA加上输入信号的功率(dB),即是信噪比。在输入试验程序前,原始信号的标准差被归一化,所以图中的NFSA即是仅计算信号交流功率时的SNR。各信号的小波变换设置相同,用滤波器序列时间反转后的周期化右平移系,构成基向量。 用相同的小波(Daubechies 3)、软门限方法,处理6标准信号,结果同绘于第8图和第9图。可见,性能与信号和小波都有关。 不少人用强力的Matlab平台和Dr. Donoho等的优化方法,研究小波降噪问题。Dr. Donoho的论文被引用次数之高,在工程技术论文中是罕见的。他对重建结果的光滑性的关注及优化方法,给人以深刻的印象。本文(未专门调查是否雷同)中,处理完全由噪声驱动而非信号驱动,门限与噪声能量(等价地,标准差)“恒定地联系”起来,两参数成为一个参数的问题。这个参数的估计,本身不排斥其它优化方法。 利用信号的先验知识的优化,可能是从历史中学习信号的小波包系数的统计约束,即已知某部分系数时其余部分的条件概率。 新浪赛特居士SciteJushi-2013-07-16。
1309 次阅读|0 个评论
27、各生理信号小波包消噪
baishp 2012-11-30 00:46
27、各生理信号小波包消噪
将脉搏信号序列MB2917_r、收缩压信号序列GY2917_r、舒张压信号序列DY2917_r、均压信号序列JY2917_r、差压信号序列CY2917_r分别导入小波分析GUI工具,以与前篇体温信号序列TW4860_r消噪相同的方式、参数进行消噪。发现各消噪信号与原信号的相似度(模数比、标准差比、平均绝对差比)基本上都略小于0.9,较TW4860_r消噪的相似度明显为小。因此将阈值都改为低惩罚阈值penalize low,以提高其相似度。以下是各信号消噪过程截图。 (一)脉搏信号序列MB2917_r: 图27-1 MB2917_r用sym5小波作6层小波包分解截图 图27-2 MB2917_r用低惩罚阈值penalize low消噪 图27-3 MB2917_r消噪残差 图27-4 MB2917_r消噪信号(黑)与原信号(红)时域局部放大波形对比 将消噪信号导出,记为MBpsy5den_low。 normr=norm(MBpsy5den_low)/norm(MB2917_r)%模数比 stdr=std(MBpsy5den_low)/std(MB2917_r)%标准差比 madr=mad(MBpsy5den_low)/mad(MB2917_r)%平均绝对差比 smnr=smn(MBpsy5den_low)/smn(MB2917_r)%光滑度比 运行,得: normr = 0.8969 stdr = 0.8969 madr = 0.8897 smnr = 1.9992 跟前篇TW4860_r消噪比起来,相似度normr、stdr、madr下降了,但光滑度比smnr也下降了。 将阈值改为中度惩罚阈值penalize medium消噪,导出消噪信号,记为MBpsy5den_med。 normr_med=norm(MBpsy5den_med)/norm(MB2917_r)%模数比 stdr_med=std(MBpsy5den_med)/std(MB2917_r)%标准差比 madr_med=mad(MBpsy5den_med)/mad(MB2917_r)%平均绝对差比 smnr_med=smn(MBpsy5den_med)/smn(MB2917_r)%光滑度比 运行,得: normr_med = 0.8815 stdr_med = 0.8814 madr_med = 0.8731 smnr_med = 2.3035 跟上面低惩罚阈值penalize low消噪比起来,相似度normr、stdr、madr下降了,但光滑度比smnr提高了。所以“相似度提高则光滑度降低,光滑度提高则相似度降低”只能用在同一信号不同消噪方式之间,不能在不同的信号消噪时进行绝对的比较。 完全相同的消噪方式、参数设置,不同的信号,其消噪相似度、光滑度改变比例为什么会不一样?这个肯定跟信号本身的属性、结构有关了。 下面各图仍是低惩罚阈值penalize low消噪记录: 图27-5 MB2917_r(蓝)消噪信号(紫)残差(黄)功率谱对比 (二)收缩压信号序列GY2917_r: 图27-6 GY2917_r用sym5小波作6层小波包分解截图 图27-7 GY2917_r用低惩罚阈值penalize low消噪 图27-8 GY2917_r消噪残差 图27-9 GY2917_r消噪信号(黑)与原信号(红)时域局部放大波形对比 将消噪信号导出,记为GYpsy5den_low。 normr=norm(GYpsy5den_low)/norm(GY2917_r)%模数比 stdr=std(GYpsy5den_low)/std(GY2917_r)%标准差比 madr=mad(GYpsy5den_low)/mad(GY2917_r)%平均绝对差比 smnr=smn(GYpsy5den_low)/smn(GY2917_r)%光滑度比 运行,得: normr = 0.9041 stdr = 0.9037 madr = 0.8942 smnr = 2.5718 图27-10 GY2917_r(蓝)消噪信号(紫)残差(黄)功率谱对比 (三)舒张压信号序列DY2917_r: 图27-11 DY2917_r用sym5小波作6层小波包分解截图 图27-12 DY2917_r用低惩罚阈值penalize low消噪 图27-13 DY2917_r消噪残差 图27-14 DY2917_r消噪信号(黑)与原信号(红)时域局部放大波形对比 将消噪信号导出,记为DYpsy5den_low。 normr=norm(DYpsy5den_low)/norm(DY2917_r)%模数比 stdr=std(DYpsy5den_low)/std(DY2917_r)%标准差比 madr=mad(DYpsy5den_low)/mad(DY2917_r)%平均绝对差比 smnr=smn(DYpsy5den_low)/smn(DY2917_r)%光滑度比 运行,得: normr = 0.9256 stdr = 0.9255 madr = 0.9175 smnr = 3.0569 图27-15 DY2917_r(蓝)消噪信号(紫)残差(黄)功率谱对比 (四)均压信号序列JY2917_r: 图27-16 JY2917_r用sym5小波作6层小波包分解截图 图27-17 JY2917_r用低惩罚阈值penalize low消噪 图27-18 JY2917_r消噪残差 图27-19 JY2917_r消噪信号(黑)与原信号(红)时域局部放大波形对比 将消噪信号导出,记为JYpsy5den_low。 normr=norm(JYpsy5den_low)/norm(JY2917_r)%模数比 stdr=std(JYpsy5den_low)/std(JY2917_r)%标准差比 madr=mad(JYpsy5den_low)/mad(JY2917_r)%平均绝对差比 smnr=smn(JYpsy5den_low)/smn(JY2917_r)%光滑度比 运行,得: normr = 0.8816 stdr = 0.8815 madr = 0.8738 smnr = 2.2232 图27-20 JY2917_r(蓝)消噪信号(紫)残差(黄)功率谱对比 (五)差压信号序列CY2917_r: 图27-21 CY2917_r用sym5小波作6层小波包分解截图 图27-22 CY2917_r用低惩罚阈值penalize low消噪 图27-23 CY2917_r消噪残差 图27-24 CY2917_r消噪信号(黑)与原信号(红)时域局部放大波形对比 将消噪信号导出,记为CYpsy5den_low。 normr=norm(CYpsy5den_low)/norm(CY2917_r)%模数比 stdr=std(CYpsy5den_low)/std(CY2917_r)%标准差比 madr=mad(CYpsy5den_low)/mad(CY2917_r)%平均绝对差比 smnr=smn(CYpsy5den_low)/smn(CY2917_r)%光滑度比 运行,得: normr = 0.9079 stdr = 0.9079 madr = 0.8963 smnr = 2.4868 图27-25 CY2917_r(蓝)消噪信号(紫)残差(黄)功率谱对比 附:用小波消噪GUI工具需知道的英语单词: sorted排序 absolute values绝对值 colored有色 terminal nodes叶子节点 styles方式 export输出 entropy熵 action作用,行为 label标签 current当前 minimaxi最小极大方差 regression回归 estimation估计 density密度 structure结构 value值 int.诠释。 superimpose叠加 scroll滚动 decomposition分解 reconstructed重建 detail细节 approximation近似 synthesized合成 propagate传播传递 medium中等 penalize惩罚 heuristic启发式 rigorous严格 sure确定 fixed固定 form形式 interval间隔 delimiters分隔符 dependent依赖 threshold阈值 settings设置 residuals残差 range范围 absolute绝对 standard标准 deviation偏差 median中位数 scaled缩放 reconstruct重建 split分割 merge合并 visualize想像 node节点 action行动 initial初始 terminal终端 depth深度 Invalid无效 value值 bins垃圾箱 detail细节 approximation近似 show显示 synthesize综合 fractional分数 brownian布朗 generation代 generate产生 balance平衡 sparsity稀疏 norm规范,模数 de-noise消噪 histograms直方图 continuous连续 complex复杂 coefficients系数 number of zeros in零数 retained energy in保留的能量需要 global全局 compress/compression压缩 original原 analyze分析 extension延期 specialized专门 multiple多 multivariate多元 denoising去噪 multiscale多尺度 separate分开 (本文首发于: http://blog.sina.com.cn/s/blog_6ad0d3de01013jt0.html 首发时间:2012-03-05 22:59:36)
个人分类: 斤斤计较|3557 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-12 22:20

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部