这个例子展示了如何使用区间相关阈值去噪信号。
小波GUI工具通过允许我们微调信号去噪所需的参数,提供了一个精确的去噪过程。然后保存去噪后的信号、小波分解和所有去噪参数。
使用相同的去噪设置来处理多个信号可能会很乏味,有时甚至不可能。使用命令行的批处理模式效率更高。这个例子展示了如何在命令行中工作来简化和解决这个问题。
在这个例子中,我们进行了六次试验去噪电信号nelec使用这些程序:
使用一个带有最小阈值的间隔:4.5
使用一个间隔与最大阈值:19.5
手动选择三个间隔和三个阈值,并使用wthresh
函数设置系数的阈值。
使用utthrset_cmd
功能自动找到间隔和阈值。
使用cmddenoise
命令,自动执行所有进程。
使用cmddenoise
函数带有附加参数。
加载耗电信号nelec.
负载nelec.matsig = nelec;
现在我们用离散小波分析5级与sym4小波。我们将阈值类型设置为“年代”
(软)。
wname =“sym4”;水平= 5;sorh =“年代”;
使用该功能去噪wdencmp
阈值集合4.5,这是GUI工具提供的最小值。
用力推= 4.5;[sigden_1, ~, ~, perf0 perfl2] = wdencmp (gbl(的、团体、wname水平,用力推,sorh, 1);res = sig-sigden_1;次要情节(1,1)情节(团体,“r”)轴紧的标题('原始信号'次要情节(3、1、2)情节(sigden_1,“b”)轴紧的标题('去噪')子图(3,1,3)绘图(RES,'K')轴紧的标题(“残留”)
perf0, perfl2
perf0 = 66.6995.
perfl2 = 99.9756
得到的结果并不好。在信号的开始和结束时,去噪是非常有效的,但在100和1100之间,噪声没有被去除。请注意,perf0值给出设置为零的系数的百分比和perfl2价值给出了保存能量的百分比。
现在,我们用GUI工具为阈值提供的最大值去噪信号,19.5
用力推= 19.5;[sigden_2, cxd lxd、perf0 perfl2] = wdencmp (gbl(的、团体、wname水平,用力推,sorh, 1);res = sig-sigden_2;次要情节(1,1)情节(团体,“r”)轴紧的标题('原始信号'次要情节(3、1、2)情节(sigden_2,“b”)轴紧的标题('去噪')子图(3,1,3)绘图(RES,'K')轴紧的标题(“残留”)
perf0, perfl2
perf0 = 94.7860
perfl2 = 99.9564.
去噪信号非常光滑。它似乎非常好,但如果我们在1100后看剩余剩余,我们可以看到潜在噪声的方差不是恒定的。信号的一些组件可能仍然存在于残余物中,例如靠近位置1300和位置1900和2000之间。
现在我们将使用与间隔相关的阈值,就像去噪GUI工具中那样。
对信号进行离散小波分析。
[系数,多头]= wavedec(团体,水平,wname);
使用GUI工具对信号执行与间隔相关的阈值nelec,并将间隔数设为3,则得到denPAR
可变,可以解释如下:
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(系数、多头);%显示分解系数图次要情节(1,1)情节(团体,“r”)轴紧的标题(“原始信号和细节系数从1到5”) ylabel (“年代”,“旋转”,0)为k = 1:水平次要情节(6 1 k + 1)情节(cfs_beg (k,:)'颜色',[0.5 0.8 0.5]) ylabel([' D 'int2str (k)),“旋转”, 0)轴紧的持有在马克西= max (abs (cfs_beg (k,:)));持有在par = thrparams {k};plotpar = {'颜色','M','linestyle',“-”。};为j = 1:尺寸(par, 1) 1块(((j, 2), par (j, 2)]、[马克西马克西],plotPar {:})结束为j = 1:尺寸(par, 1)情节((par (j, 1),票面(j, 2)]、[par (j, 3)票面(j, 3)], plotPar{:})图((par (j, 1),票面(j, 2)), - - - - - - (par (j, 3)票面(j, 3)], plotPar {:})结束ylim((马克西马克西* 1.05 * 1.05))%推迟结束次要情节(6 1级+ 1)包含(“时间和空间”)
每一个层次的k
,变量thrparams {k}
包含去噪过程的间隔和相应的阈值。
对小波系数逐级阈值,并逐段阈值,使用包含的值thrParams
变量。
使用功能wthresh
,我们通过将水平线之间的小波系数值替换为零来阈值,而其他值则被减小sorh = ' s '
或保持不变sorh = ' h '
.
第一次= cumsum(多头)+ 1;第一= (end-2: 1:1);tmp =多头(end-1: 1:2);=第一+ 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;结束d_beg = x(j)+ d_beg;j_end = x (j + 1);j_ind = (j_beg: j_end);慢性疲劳综合症(j_ind) = wthresh (cfs (j_ind) sorh,刺(j));结束COEFS(第一(k):最后(k))= CFS;结束结束
显示信号的阈值小波系数。
%复制系数。cfs_beg = wrepcoef(系数、多头);%显示分解系数。图次要情节(1,1)情节(团体,“r”)轴紧的标题(“原始信号和细节系数从1到5”) ylabel (“年代”,“旋转”,0)为k = 1:水平次要情节(6 1 k + 1)情节(cfs_beg (k,:)'颜色',[0.5 0.8 0.5]) ylabel([' D 'int2str (k)),“旋转”, 0)轴紧的持有在马克西= max (abs (cfs_beg (k,:)));%抓住par = thrparams {k};plotpar = {'颜色','M','linestyle',“-”。};为j = 1:尺寸(par, 1) 1块(((j, 2), par (j, 2)]、[马克西马克西],plotPar {:})结束为j = 1:大小(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)包含(“时间和空间”)
重构去噪信号。
sigden = waverec(系数、多头wname);Res = sig -符号;
显示原始信号、去噪信号和残余信号。
图次要情节(3、1、1)的阴谋(团体,“r”)举行在情节(sigden“b”)轴紧的标题(“原始信号和去噪信号”)子图(3,1,2)绘图(SIGDEN,“b”)轴紧的标题('去噪')子图(3,1,3)绘图(RES,'K')轴紧的标题(“残留”)
比较信号的三个去噪版本。
图绘制(sigden_1,'G')举行在情节(sigden_2“r”剧情(SIGDEN,'K')轴紧的持有从传奇(“去噪点”,运用马克思的,“去噪IDT”,“位置”,“北”)
看着信号的前半部分,很明显使用阈值的最小值的去噪并不好。现在,我们缩放了信号结束以获取更多细节。
Xlim ([1200 2000]) ylim([180 350])
可以看出,当使用最大阈值时,去噪后的信号平滑过多,信息丢失。
最好的结果是使用基于区间相关阈值方法的阈值,正如我们现在所展示的。
我们可以使用该函数,而不是手动设置每个关卡的间隔和阈值utthrset_cmd
自动计算每个间隔的间隔和阈值。然后,我们通过应用阈值,重建和显示信号来完成该过程。
%小波分析。[系数,多头]= wavedec(团体,水平,wname);siz =大小(系数);thrParams = utthrset_cmd(系数、多头);第一次= cumsum(多头)+ 1;第一= (end-2: 1:1);tmp =多头(end-1: 1:2);=第一+ 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);慢性疲劳综合症(j_ind) = wthresh (cfs (j_ind) sorh,刺(j));结束COEFS(第一(k):最后(k))= CFS;结束结束sigden = waverec(系数、多头wname);图次要情节(2,1,1)情节(团体,“r”)轴紧的持有在情节(sigden'K') 标题(“原始信号和去噪信号”)子图(2,1,2)绘图(SIGDEN,'K')轴紧的持有从标题('去噪')
在命令行模式下,我们可以使用该函数cmddenoise
基于区间相关去噪方法,自动计算去噪后的信号和系数。该方法仅使用这一个函数执行去噪的整个过程,其中包括本例中前面描述的所有步骤。
[sigden, ~, thrParams] = cmddenoise(团体、wname水平);thrParams {1}% 1级去噪参数。
ans =2×3103.×0.0010 1.1100 0.0176 1.1100 2.0000 0.0045
自动过程查找两种用于去噪的间隔:
I1 = [1 1110]
用一个阈值thr1 = 17.6
I2 = [1110 2000]
用一个阈值thr2 = 4.5.
我们可以显示去噪的结果,并看到结果是好的。
图次要情节(2,1,1)情节(团体,“r”)轴紧的持有在情节(sigden'K') 标题(“原始信号和去噪信号”)举行从子图(2,1,2)绘图(SIGDEN,'K')轴紧的标题('去噪')
现在,我们来看一个更完整的自动去噪的例子。
而不是使用输入参数的默认值,我们可以在调用函数时指定它们。这里,选择阈值的类型年代
(软)和间隔数设定为3。
负载nelec.mat;sig = nelec;分析%信号。wname =“sym4”;%小波分析。水平= 5;小波分解的%级别。sorh =“年代”;%阈值类型。nb_Int = 3;阈值的百分比数。[sigddden,cofs,thrparams,int_depthr_cell,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
BestNbOfInt = 2
变量int_DepThr_Cell
包含间隔位置和从1到6的若干间隔的阈值。
int_DepThr_Cell
INT_DEPTHR_CELL =.1×6单元阵列列1到4 {1x3 double} {2x3 double} {3x3 double} {4x3 double}
最后,我们查看对应于5个间隔的位置和阈值的值。
int_DepThr_Cell {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工具相同的去噪功能,同时为您提供对特定参数值的更多控制,以获得更好的结果。