Matlab⼩波⼯具箱的使⽤3⼀维离散平稳⼩波分析离散平稳⼩波分析所⽤到的函数有swt⼩波分解和iswt⼩波重构。在这⼀部分可以学到如下内容:l 加载信号l 执⾏平稳⼩波分解l 从⼩波系数中构造近似和细节l 显⽰第⼀层的近似和细节l 平稳⼩波逆变换恢复原始信号l 执⾏多层平稳⼩波分解l 重构第3层近似l 重构1、2、3层细节l 重构1、2层近似l 显⽰分解的结果l 从3层分解中重构原始信号l 除噪使⽤命令⾏实现⼀维分析1. 加载信号(⼀个噪声污染的多普勒效应信号)2. 设置变量s = noisdopp;对于SWT变换,如果需要在第k层分解信号,那么原始信号需要能够平分成2^k份。所以如果原始信号的长度不满⾜要求,需要使⽤Signal Extension GUI⼯具或使⽤wextend函数来扩展它。3. 执⾏⼀层平稳⼩波分解[swa,swd] = swt(s,1,'db1');函数执⾏将产⽣1层近似和细节的系数,两者和信号的长度是相等的,这也是平稳⼩波和普通⼩波不同的地⽅,从⽽使它在某些领域有好的效果。4. 显⽰近似、细节⼩波系数显⽰⼀层近似和细节的系数subplot(1,2,1), plot(swa); title('Approximation cfs')subplot(1,2,2), plot(swd); title('Detail cfs')5. 使⽤平稳⼩波逆变换恢复原始信号A0 = iswt(swa,swd,'db1');重构的误差为err = norm(s-A0)err =2.1450e-0146. 从系数中构建近似和细节构建⼀层近似和细节,输⼊如下代码nulcfs = zeros(size(swa));A1 = iswt(swa,nulcfs,'db1');D1 = iswt(nulcfs,swd,'db1');显⽰结果如下subplot(1,2,1), plot(A1); title('Approximation A1');subplot(1,2,2), plot(D1); title('Detail D1');7. 执⾏多层平稳⼩波分解使⽤db1⼩波做3层⼩波分解[swa,swd] = swt(s,3,'db1');产⽣的近似系数在swa中,细节系数在swd中,⽽且它们有相同的长度。8. 显⽰近似和细节的系数kp = 0;for i = 1:3subplot(3,2,kp+1), plot(swa(i,:));title(['Approx. cfs level ',num2str(i)])subplot(3,2,kp+2), plot(swd(i,:));title(['Detail cfs level ',num2str(i)])kp = kp + 2;end9. 从系数中重建第3层的近似mzero = zeros(size(swd));A = mzero;A(3,:) = iswt(swa,mzero,'db1');10. 从系数中重建细节D = mzero;for i = 1:3swcfs = mzero;swcfs(i,:) = swd(i,:);D(i,:) = iswt(mzero,swcfs,'db1');End11. 从第3层近似和第2、3层细节中重建第1、2层近似重建2、3层的近似A(2,:) = A(3,:) + D(3,:);A(1,:) = A(2,:) + D(2,:);显⽰第1、2、3层的近似和细节kp = 0;for i = 1:3subplot(3,2,kp+1), plot(A(i,:));title(['Approx. level ',num2str(i)])subplot(3,2,kp+2), plot(D(i,:));title(['Detail level ',num2str(i)])kp = kp + 2;end12. 阈值除噪要去除噪声,先使⽤ddencmp函数计算⼀个默认的全局阈值,再使⽤wthresh函数执⾏细节系数的实际阈值,然后使⽤iswt得到除噪信号。所有在⼀维离散⼩波变换中选择阈值的⽅法在⼀维平稳⼩波变换中都是有效的,GUI中两者的使⽤⽅法也⼀样。[thr,sorh] = ddencmp('den','wv',s);dswd = wthresh(swd,sorh,thr);clean = iswt(swa,dswd,'db1');显⽰原始信号和除噪信号如下subplot(2,1,1), plot(s);title('Original signal')subplot(2,1,2), plot(clean);title('denoised signal')得到的信号仍然有⼀些噪声,结果可以通过考虑对信号进⾏5层分解,然后再除噪来改善,如下[swa,swd] = swt(s,5,'db1');[thr,sorh] = ddencmp('den','wv',s);dswd = wthresh(swd,sorh,thr);clean = iswt(swa,dswd,'db1');subplot(2,1,1), plot(s); title('Original signal')subplot(2,1,2), plot(clean); title('denoised signal')第⼆种实现相同效果的语法如下lev = 5; swc = swt(s,lev,'db1');swcden = swc;swcden(1:end-1,:) = wthresh(swcden(1:end-1,:),sorh,thr);clean = iswt(swcden,'db1');使⽤图形接⼝做⼀维除噪分析1. 开启⼀维平稳⼩波除噪⼯具输⼊wavemenu,选择SWT Denoising 1-D,出现如下GUI2. 加载信号Load Signal3. 执⾏平稳⼩波分解使⽤db1⼩波执⾏5层⼩波分解,得到的是⾮抽取系数(nondecimatedcoefficients),它们是使⽤相同的离散⼩波变换来得到的,只是省略了抽取的步骤。得到的结果如下4. 使⽤平稳⼩波变换除噪可以使⽤GUI默认的参数做除噪处理。右边的滑动条可以控制各级系数的阈值⼤⼩,也可以直接在系数图中直接拖动来调整阈值的⼤⼩,注意近似系数中没有阈值。点击denoise进⾏除噪处理得到的效果是⾮常好的,但似乎在信号不连续的地⽅出现了过平滑,这个可以从残差图中看出来,在800的位置出现了突降点。选择hard阈值模式代替soft模式,再进⾏除噪,结果如下可以看到这次效果⾮常好,⽽且残差图也看起来像⽩噪声序列。为了验证这⼀点,可以点击Residuals按钮查看残差图及相关统计数据来详细说明。