主要内容

小波区间相关去噪

该示例显示了如何使用依赖于时间间隔的阈值对信号进行去噪。

小波图形用户界面工具通过允许我们微调信号去噪所需的参数,提供准确的去噪过程。然后,我们可以保存去噪信号、小波分解和所有去噪参数。

使用相同的去噪设置处理多个信号可能会很繁琐,有时甚至不可能。使用命令行的批处理模式可能会更有效。此示例演示了如何在命令行中工作以简化和解决此问题。

在这个例子中,我们进行了六次试验去噪电信号内莱克使用这些程序:

  1. 使用一个带有最小阈值的间隔:4.5

  2. 使用最大阈值为19.5的一个间隔

  3. 手动选择三个间隔和三个阈值,并使用wthresh函数设置系数的阈值。

  4. 使用utthrset_cmd函数自动查找间隔和阈值。

  5. 使用去噪命令,自动执行所有进程。

  6. 使用去噪具有附加参数的函数。

单区间去噪

加载耗电量信号内莱克.

负载nelec.matsig=nelec;

现在我们使用离散小波分析五级sym4小波。我们将阈值类型设置为's'(软)。

wname=“sym4”;水平= 5;sorh ='s'

使用函数对信号进行去噪wdencmp阈值设置为4.5,这是GUI工具提供的最小值。

thr=4.5;[sigden_1,~,~,perf0,perfl2]=wdencmp(gbl(的,sig,wname,level,thr,sorh,1);res=sig-sigden_1;子地块(3,1,1)图(sig,“r”)轴心牢固的头衔(“原始信号”)子地块(3,1,2)图(sigden_1,“b”)轴心牢固的头衔(“去噪信号”)子地块(3,1,3)图(res,“k”)轴心牢固的头衔(“残留”)

图中包含3个轴对象。标题为“原始信号”的轴对象1包含一个类型为line的对象。标题为“去噪信号”的轴对象2包含一个类型为line的对象。带有标题剩余的轴对象3包含一个类型为line的对象。

perf0, perfl2
性能0=66.6995
性能L2=99.9756

所得结果并不理想。在信号开始和结束时,去噪非常有效,但在100到1100之间,噪声不会被去除。请注意性能值给出设置为零的系数百分比和性能2值给出保留能量的百分比。

现在,我们使用GUI工具为阈值提供的最大值对信号进行去噪,19.5

thr=19.5;[sigden_2,cxd,lxd,perf0,perfl2]=wdencmp(gbl(的,sig,wname,level,thr,sorh,1);res=sig-sigden_2;子地块(3,1,1)图(sig,“r”)轴心牢固的头衔(“原始信号”次要情节(3、1、2)情节(sigden_2,“b”)轴心牢固的头衔(“去噪信号”)子地块(3,1,3)图(res,“k”)轴心牢固的头衔(“残留”)

图中包含3个轴对象。标题为“原始信号”的轴对象1包含一个类型为line的对象。标题为“去噪信号”的轴对象2包含一个类型为line的对象。带有标题剩余的轴对象3包含一个类型为line的对象。

perf0, perfl2
perf0 = 94.7860
性能L2=99.9564

去噪后的信号非常平滑。它看起来很好,但如果我们观察位置1100后的残差,我们可以看到基本噪声的方差不是恒定的。信号的某些成分可能保留在残差中,例如,位置1300附近以及位置1900和2000之间。

利用区间相关阈值(IDT)去噪

现在,我们将使用与时间间隔相关的阈值,就像在去噪GUI工具中一样。

对信号进行离散小波分析。

[系数,多头]= wavedec(团体,水平,wname);

使用GUI工具对信号执行间隔相关阈值内莱克,并将间隔数设为3,则得到登帕变量,可解释如下:

  • I1 = [1 94]用一个阈值thr1 = 5.9

  • I2 = [94 1110]用一个阈值thr2=19.5

  • I3 = [1110 2000]用一个阈值thr3=4.5

定义依赖于时间间隔的阈值。

denPAR = {[1 94 5.9;94 1110 19.5;1110 2000 4.5]};thrParams =细胞(1级);thrParams (:) = denPAR;

显示信号的小波系数和每一级离散分析的间隔依赖阈值。

%复制系数cfs_beg=wrepcoef(coefs,longs);%显示分解的系数图子地块(6,1,1)图(sig、,“r”)轴心牢固的头衔(“原始信号和细节系数从1到5”) ylabel ('S',“轮换”,0)对于k = 1:水平次要情节(6 1 k + 1)情节(cfs_beg (k,:)“颜色”,[0.5 0.8 0.5]) ylabel([“D”int2str(k)],“轮换”, 0)轴牢固的持有最大值=最大值(abs(cfs_beg(k,:));保持PAR=TrPARAMS {K};PrtPARP= {“颜色”,“我是,“线条样式”,'-.'};对于j=1:size(par,1)-1绘图([par(j,2),par(j,2)],[-maxi-maxi],plotPar{:})终止对于j=1:size(par,1)图([par(j,1),par(j,2)],[par(j,3)par(j,3)],plotPar{:})图([par(j,1),par(j,2)],-[par(j,3)par(j,3)],plotPar{:})终止ylim((马克西马克西* 1.05 * 1.05))%拖延终止子批次(6,1,级别+1)xlabel(“时间或空间”)

图中包含6个轴对象。标题原始信号和细节系数为1到5的轴对象1包含类型为line的对象。轴对象2包含9个line类型的对象。轴对象3包含9个line类型的对象。轴对象4包含9个line类型的对象。轴对象5包含9个line类型的对象。轴对象6包含9个line类型的对象。

对于每个级别K,变量thrParams{k}包含去噪过程的间隔和相应阈值。

使用中包含的值对小波系数逐层和逐区间设置阈值苏帕兰斯变量。

使用函数wthresh,我们通过将水平线之间的小波系数值替换为零来阈值,而其他值则被减小sorh = ' s '或保持不变,如果sorh='h'.

first=累计长度(长度)+1;first=第一个(末端-2:-1:1);tmp=长度(末端-1:-1:2);last=第一个+tmp-1;对于k=1:级别thr_par=thrParams{k};如果~isempty(thr_par) CFS = coefs(first(k):last(k));nbCFS =多头(end-k);NB_int =大小(thr_par, 1);X = [thr_par(:,1);thr_par (NB_int, 2)];阿尔夫= (nbCFS-1) / (x(结束)- x (1));Bet = 1 - alf*x(1);x =圆(阿尔夫* x +打赌);x (x < 1) = 1;x (x > nbCFS) = nbCFS; thr = thr_par(:,3);对于j=1:NB_int如果j==1 d_=0;其他的d_beg = 1;终止j_beg=x(j)+d_beg;j_end=x(j+1);j_ind=(j_beg:j_end);cfs(j_ind)=wthresh(cfs(j_ind),sorh,thr(j));终止coefs(first(k):last(k))=cfs;终止终止

显示信号的阈值小波系数。

%复制系数。cfs_beg=wrepcoef(coefs,longs);%显示分解系数。图子地块(6,1,1)图(sig、,“r”)轴心牢固的头衔(“原始信号和细节系数从1到5”) ylabel ('S',“轮换”,0)对于k = 1:水平次要情节(6 1 k + 1)情节(cfs_beg (k,:)“颜色”,[0.5 0.8 0.5]) ylabel([“D”int2str(k)],“轮换”, 0)轴牢固的持有maxi=max(abs(cfs_-beg(k,:));%抓住PAR=TrPARAMS {K};PrtPARP= {“颜色”,“我是,“线条样式”,'-.'};对于j=1:size(par,1)-1绘图([par(j,2),par(j,2)],[-maxi-maxi],plotPar{:})终止对于j=1:size(par,1)图([par(j,1),par(j,2)],[par(j,3)par(j,3)],plotPar{:})图([par(j,1),par(j,2)],-[par(j,3)par(j,3)],plotPar{:})终止ylim([-maxi*1.05 maxi*1.05])保持终止子批次(6,1,级别+1)xlabel(“时间或空间”)

图中包含6个轴对象。标题原始信号和细节系数为1到5的轴对象1包含类型为line的对象。轴对象2包含9个line类型的对象。轴对象3包含9个line类型的对象。轴对象4包含9个line类型的对象。轴对象5包含9个line类型的对象。轴对象6包含9个line类型的对象。

重建去噪后的信号。

sigden = waverec(系数、多头wname);Res = sig -符号;

显示原始信号、去噪信号和残余信号。

图子地块(3,1,1)图(sig,“r”)举行阴谋(西格登,“b”)轴心牢固的头衔(“原始信号和去噪信号”)子地块(3,1,2)图(sigden,“b”)轴心牢固的头衔(“去噪信号”)子地块(3,1,3)图(res,“k”)轴心牢固的头衔(“残留”)

图中包含3个轴对象。具有标题原始和去噪信号的轴对象1包含2个line类型的对象。具有标题去噪信号的轴对象2包含line类型的对象。具有标题剩余的轴对象3包含line类型的对象。

比较信号的三个去噪版本。

图绘制(sigden_1,“g”)举行地块(sigden_2,“r”)阴谋(西格登,“k”)轴心牢固的持有传奇(“去噪点”,运用马克思的,“去噪IDT”,“位置”,“北方”)

图中包含一个Axis对象。Axis对象包含3个line类型的对象。这些对象表示去噪最小值、去噪最大值和去噪IDT。

查看前半部分信号,很明显,使用阈值的最小值去噪效果不好。现在,我们放大信号的末尾以了解更多细节。

Xlim ([1200 2000]) ylim([180 350])

图中包含一个Axis对象。Axis对象包含3个line类型的对象。这些对象表示去噪最小值、去噪最大值和去噪IDT。

可以看出,当使用最大阈值时,去噪后的信号平滑过多,信息丢失。

最好的结果是使用基于区间相关阈值方法的阈值,正如我们现在所展示的。

间隔相关阈值的自动计算

我们可以使用该函数,而不是手动设置每个关卡的间隔和阈值utthrset_cmd自动计算间隔和每个间隔的阈值。然后,我们通过应用阈值、重建和显示信号来完成该过程。

%小波分析。[系数,多头]= wavedec(团体,水平,wname);siz =大小(系数);thrParams = utthrset_cmd(系数、多头);first=累计长度(长度)+1;first=第一个(末端-2:-1:1);tmp=长度(末端-1:-1:2);last=第一个+tmp-1;对于k=1:级别thr_par=thrParams{k};如果~isempty(thr_par) CFS = coefs(first(k):last(k));nbCFS =多头(end-k);NB_int =大小(thr_par, 1);X = [thr_par(:,1);thr_par (NB_int, 2)];阿尔夫= (nbCFS-1) / (x(结束)- x (1));Bet = 1 - alf*x(1);x =圆(阿尔夫* x +打赌);x (x < 1) = 1;x (x > nbCFS) = nbCFS; thr = thr_par(:,3);对于j=1:NB_int如果d_beg = 0;其他的d_beg = 1;终止j_beg=x(j)+d_beg;j_end=x(j+1);j_ind=(j_beg:j_end);cfs(j_ind)=wthresh(cfs(j_ind),sorh,thr(j));终止coefs(first(k):last(k))=cfs;终止终止sigden=waverec(coefs,longs,wname);图子地块(2,1,1)图(sig,“r”)轴心牢固的持有阴谋(西格登,“k”)头衔(“原始信号和去噪信号”)子地块(2,1,2)图(sigden,“k”)轴心牢固的持有头衔(“去噪信号”)

图中包含2个轴对象。带有标题原始和去噪信号的轴对象1包含2个line类型的对象。带有标题去噪信号的轴对象2包含一个line类型的对象。

自动区间相关去噪

在命令行模式下,我们可以使用该函数去噪基于区间相关去噪方法,自动计算去噪后的信号和系数。该方法仅使用这一个函数执行去噪的整个过程,其中包括本例中前面描述的所有步骤。

[sigden, ~, thrParams] = cmddenoise(团体、wname水平);thrParams{1}% 1级去噪参数。
ans=2×3103.× 0.0010 1.1100 0.0176 1.1100 2.0000 0.0045

自动程序会找到两个去噪间隔:

  • I1=[1110]用一个阈值thr1 = 17.6

  • I2 = [1110 2000]用一个阈值thr2=4.5.

我们可以显示去噪的结果,并看到结果是好的。

图子地块(2,1,1)图(sig、,“r”)轴心牢固的持有阴谋(西格登,“k”)头衔(“原始信号和去噪信号”)举行子地块(2,1,2)图(sigden,“k”)轴心牢固的头衔(“去噪信号”)

图中包含2个轴对象。带有标题原始和去噪信号的轴对象1包含2个line类型的对象。带有标题去噪信号的轴对象2包含一个line类型的对象。

高级自动区间相关去噪

现在,我们来看一个更完整的自动去噪示例。

我们可以在调用函数时指定输入参数,而不是使用默认值s(软)并且间隔数设置为3。

负载nelec.mat;sig=nelec;%要分析的信号。wname=“sym4”%小波分析。级别=5;%小波分解的层次。sorh ='s'%阈值类型。nb_Int=3;%阈值化的间隔数。[sigden、coefs、thrParams、内部深度单元、BestNbOfInt]=...cmddenoise(团体、wname级别、sorh nb_Int);

对于输出参数,变量thrParams{1}给出从1到5级的去噪参数。例如,这是第一级的去噪参数。

thrParams{1}
ans=3×3103.× 0.0010 0.0940 0.0059 0.0940 1.1100 0.0195 1.1100 2.000 0.0045

我们发现了与本示例前面设置的值相同的值。它们对应于我们在输入参数中将间隔数固定为3所做的选择:nb_Int=3.

自动程序表明2.作为去噪的最佳间隔数。此输出值BestNbOfInt = 2与本示例前面步骤中使用的相同。

贝斯恩博菲特
BestNbOfInt = 2

变量内部深度单元包含从1到6的多个间隔的间隔位置和阈值。

内部深度单元
内部深度单元=1×6单元阵列列1到4 {[1 2000 8.3611]}{2x3 double} {3x3 double} {4x3 double}

最后,我们查看对应于5个间隔的位置和阈值的值。

内部深度单元{5}
ans=5×3103.× 0.0010 0.0940 0.0059 0.0940 0.5420 0.0184 0.5420 0.5640 0.0056 0.5640 1.1100 0.0240 1.1100 2.0000 0.0045

总结

这个示例展示了如何使用命令行模式来实现与GUI工具相同的去噪功能,同时为您提供对特定参数值的更多控制,以获得更好的结果。

另见

||

相关的话题