主要内容

小波间隔依赖的去噪

这个例子展示了如何使用区间相关阈值去噪信号。

小波GUI工具通过允许我们微调信号去噪所需的参数,提供了一个精确的去噪过程。然后保存去噪后的信号、小波分解和所有去噪参数。

使用相同的去噪设置来处理多个信号可能会很乏味,有时甚至不可能。使用命令行的批处理模式效率更高。这个例子展示了如何在命令行中工作来简化和解决这个问题。

在这个例子中,我们执行六次试验以发现电信号Nelec.使用这些程序:

  1. 使用一个间隔,最小阈值:4.5

  2. 使用一个间隔,最大阈值:19.5

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

  4. 使用utthrset_cmd功能自动找到间隔和阈值。

  5. 使用cmddenoise.功能自动执行所有进程。

  6. 使用cmddenoise.函数带有附加参数。

单间隔去噪

加载耗电信号Nelec.

负载nelec.matsig = nelec;

现在我们用离散小波分析5级与之符号4.小波。我们将阈值类型设置为“年代”(柔软的)。

wname ='符号4';水平= 5;索赫=“年代”

使用该功能去噪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')轴紧的标题('剩余的'

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

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')轴紧的标题('剩余的'

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

perf0,perfl2.
perf0 = 94.7860.
perfl2 = 99.9564.

去噪信号非常光滑。它似乎非常好,但如果我们在1100后看剩余剩余,我们可以看到潜在噪声的方差不是恒定的。信号的一些组件可能仍然存在于残余物中,例如靠近位置1300和位置1900和2000之间。

使用间隔相关阈值(IDT)的去噪

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

执行信号的离散小波分析。

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

使用GUI工具执行信号的间隔依赖性阈值Nelec.,并在三个中设置间隔数,我们得到了内容丹麦可变,可以解释如下:

  • 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 = Cell(1,级别);thrparams(:) =丹麦;

显示信号的小波系数和离散分析的每个级别的间隔相关阈值。

%复制系数CFS_BEG = WREPCOEF(COEFS,WHORS);%显示分解的系数图形子图(6,1,1)plot(sig,“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([ -  maxi * 1.05 maxi * 1.05])%抵消结束子图(6,1,级+ 1)XLabel(“时间和空间”

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

每一个层次的k,变量thrparams {k}包含去噪过程的间隔和相应的阈值。

对小波系数逐级阈值,并逐段阈值,使用包含的值thrParams多变的。

使用功能withresh.,通过用零替换它们,我们将小波系数值阈值替换为水平线,而其他值会减少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 = cofs(first(k):last(k));nbcfs = longs(eN-K);nb_int = size(thr_par,1);x = [thr_par(:,1);thr_par(nb_int,2)];alf =(nbcfs-1)/(x(end)-x(1));bet = 1  -  alf * x(1);X =圆形(ALF * x + BET);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;结束结束

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

%复制系数。CFS_BEG = WREPCOEF(COEFS,WHORS);%显示分解系数。图形子图(6,1,1)plot(sig,“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)XLabel(“时间和空间”

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

重构去噪信号。

sigddden = waverec(cofs,wongs,wname);res = sig  -  sigden;

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

图次要情节(3、1、1)的阴谋(团体,“r”) 抓住情节(sigden'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”剧情(SIGDEN,'K')轴紧的持有离开传奇('去世分钟''denoised max''去世idt''地点'“北”

图包含轴。轴包含3个类型的线。这些物体代表了去噪的Min,去噪最大,去噪。

看着信号的前半部分,很明显使用阈值的最小值的去噪并不好。现在,我们缩放了信号结束以获取更多细节。

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

图包含轴。轴包含3个类型的线。这些物体代表了去噪的Min,去噪最大,去噪。

我们可以看出,当使用最大阈值时,Denoised信号被平滑太多,信息丢失。

通过基于间隔依赖的阈值化方法使用阈值,根据我们将立即显示,通过使用阈值来给出最佳结果。

自动计算间隔相关阈值

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

%小波分析。[系数,多头]= wavedec(团体,水平,wname);siz = size(cofs);thrparams = Utthr​​et_cmd(cofs,wongs);第一次= cumsum(多头)+ 1;第一= (end-2: 1:1);tmp =多头(end-1: 1:2);=第一+ tmp-1;k = 1:级别thr_par = thrparams {k};如果〜isempty(thr_par)cfs = cofs(first(k):last(k));nbcfs = longs(eN-K);nb_int = size(thr_par,1);x = [thr_par(:,1);thr_par(nb_int,2)];alf =(nbcfs-1)/(x(end)-x(1));bet = 1  -  alf * x(1);X =圆形(ALF * x + BET);x(x <1)= 1;x(x> nbcfs)= nbcfs; thr = thr_par(:,3);j = 1:nb_int如果j == 1 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;结束结束sigddden = waverec(cofs,wongs,wname);图次要情节(2,1,1)情节(团体,“r”)轴紧的持有情节(sigden'K') 标题('原始和去噪的信号')子图(2,1,2)绘图(SIGDEN,'K')轴紧的持有离开标题('去噪'

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

自动Interval-Dependent去噪

在命令行模式下,我们可以使用该功能cmddenoise.根据依赖于间隔的去噪方法自动计算去噪信号和系数。该方法仅使用该方法执行全部去噪,该功能包括在该示例中前面描述的所有步骤。

[sigddden,〜,thrparams] = cmddenoise(sig,wname,水平);thrParams {1}级别1级的百分比参数。
ans =.2×310.3.×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')轴紧的标题('去噪'

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

先进的自动间隔依赖性去噪

现在,我们看看自动去噪的更完整的例子。

而不是使用输入参数的默认值,我们可以在调用函数时指定它们。这里,选择阈值的类型年代(软)和间隔数设定为3。

负载nelec.mat;sig = nelec;分析%信号。wname ='符号4'%小波分析。水平= 5;小波分解的%级别。索赫=“年代”%阈值类型。nb_Int = 3;阈值的百分比数。[sigddden,cofs,thrparams,int_depthr_cell,bestnbofint] =......cmddenoise(sig,wname,level,sorh,nb_int);

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

thrParams {1}
ans =.3×310.3.×0.0010 0.0940 0.0059 0.0940 1.1100 0.0195 1.1100 2.0000 0.0045

我们发现此示例前面设置的相同值。它们对应于我们在输入参数中将间隔数定位为三个的选择:nb_int = 3.

自动程序表明2为去噪的最佳间隔数。这个输出值Bestnbofint = 2与此示例的前一步中使用的相同。

BestNbOfInt
Bestnbofint = 2

变量int_DepThr_Cell包含间隔位置和从1到6的若干间隔的阈值。

int_DepThr_Cell
INT_DEPTHR_CELL =.1×6个单元阵列列1到4 {[1 2000 8.3611]} {2x3 double} {3x3 double} {4x3 double}列5到6 {5x3 double} {6x3 double}

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

int_DepThr_Cell {5}
ans =.5×310.3.×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工具相同的功能,同时为您提供更好的参数值以获得更好的结果。

另请参阅

||

相关话题