精华内容
下载资源
问答
  • DB4小波

    千次阅读 2017-07-25 10:13:00
    这个用的是 DB4小波,周期延拓,可以实现精确重构的。 #define N0 128 #include "stdio.h" #include "stdlib.h" #include "math.h" #include "string.h" void db4(double *h,double *g,double *hh,double *gg); ...

    这个用的是 DB4小波,周期延拓,可以实现精确重构的。

    
    #define N0 128
    #include "stdio.h"
    #include "stdlib.h"
    #include "math.h"
    #include "string.h"
    void db4(double *h,double *g,double *hh,double *gg);
    void wd(int N,double *h,double *g,double *c0,double *c,double *d);
    void wr(int N,double *h,double *g,double *c, double *d,double *cd);
    void main()
    {
    double fk[N0],c0[N0],c[N0],d[N0];
    double h[8],g[8],hh[8],gg[8];
    float fk0[N0];
    FILE *fp;
    int i,k,j,n,l,N;
    fp=fopen("wdata.dat","rt");
    fscanf(fp,"%d",&N);
    for(k=0;k<N;k++) fscanf(fp,"%f",&fk0[k]);
    fclose(fp);
    db4(h,g,hh,gg);
    for(k=0;k<N;k++) {
    c0[k]=fk0[k];
    c[k]=0;
    d[k]=0;
    }
    wd(N,hh,gg,c0,c,d);
    wr(N,hh,gg,c,d,c0);
    for(k=0;k<N;k++) printf("k=%d c0=%f c=%f\n",k,fk0[k],c0[k]);
    return;
    }
    void wd(int N,double *h,double *g,double *c0,double *c,double *d)
    /* wavelet decomposition */
    {
    int k,n,k2,l;
    double ck,dk;
    for(k=0;k<N;k++) {
    ck=0.0;
    dk=0.0;
    for(l=0;l<8;l++) {
    n=k+l;
    ck+=c0[n%N]*h[l];
    dk+=c0[n%N]*g[l];
    }
    c[k]=ck;
    d[k]=dk;
    }
    for(k=0;k<N/2;k++) {
    k2=2*k;
    c0[k]=c[k2];
    c0[N/2+k]=d[k2];
    }
    return;
    }
    void wr(int N,double *h,double *g,double *c,double *d,double *c0)
    /* wavelet reconstruction */
    {
    int k,n,l,k2;
    double ck,cn,dn;
    for(k=0;k<N/2;k++) {
    k2=2*k;
    c[k2]=c0[k];
    c[k2+1]=0;
    d[k2]=c0[N/2+k];
    d[k2+1]=0;
    }
    for(k=0;k<N;k++) c0[k]=0.0;
    for(k=0;k<N;k++) {
    ck=0.0;
    for(l=0;l<8;l++) {
    n=k-l;
    cn=c[(N+n)%N];
    dn=d[(N+n)%N];
    ck+=cn*h[l]+dn*g[l];
    }
    c0[k]=ck;
    }
    return;
    }
    void db4(double *h,double *g,double *hh,double *gg)
    /* Daubechies 4 wavelet */
    {
    int k,isgn;
    h[7]=-0.0105974017850890;
    h[6]= 0.0328830116668852;
    h[5]= 0.0308413818355607;
    h[4]=-0.1870348117190931;
    h[3]=-0.0279837694168599;
    h[2]= 0.6308807679398597;
    h[1]= 0.7148465705529154;
    h[0]= 0.2303778133088964;
    isgn=1;
    for(k=0;k<8;k++) {
    gg[k]=isgn*h[7-k];
    isgn=-isgn;
    }
    for(k=0;k<8;k++) {
    g[k]=gg[7-k];
    hh[k]=h[7-k];
    }
    return;
    }
    float fun(float x)
    {
    float pi=3.1415926;
    float yx=30*exp(-x/40)*sin(2*pi*x/40);
    return(yx);
    }
    
    

    转载于:https://my.oschina.net/u/582827/blog/1486707

    展开全文
  • 小波分析:db小波的分解与重构

    千次阅读 2020-12-04 16:49:01
    小波分析:db小波的分解与重构 最近在利用行波测距中使用到了小波变换的模极大值提取行波波头的时间,苦于公开资源太少,无从下手。最终经过学习,有所所获,希望可以帮助到有需要的同学。 贴一段matlab的代码: %--...

    小波分析:db小波的分解与重构

    最近在利用行波测距中使用到了小波变换的模极大值提取行波波头的时间,苦于公开资源太少,无从下手。最终经过学习,有所所获,希望可以帮助到有需要的同学。
    贴一段matlab的代码:

    %--------------小波变换-------------------%
    [c1,l1]=wavedec(uf,8,'db8');%多尺度一维小波分解函数。其中C为分解结构变量,L为各分解结构以及原始信号长度变量,X为原始信号,N为分解层度,’wname’为小波类型。
    a8=wrcoef('a',c1,l1,'db8',8);%一维小波系数单支重构函数。其中,当’type’ = ’a’时重构近似序列,当’type’ = ’d’时重构高频系数;C,L,’wname’,N含义同上
    d8=wrcoef('d',c1,l1,'db8',8);
    d7=wrcoef('d',c1,l1,'db8',7);
    d6=wrcoef('d',c1,l1,'db8',6);
    d5=wrcoef('d',c1,l1,'db8',5);
    d4=wrcoef('d',c1,l1,'db8',4);
    d3=wrcoef('d',c1,l1,'db8',3);
    d2=wrcoef('d',c1,l1,'db8',2);
    d1=wrcoef('d',c1,l1,'db8',1);
    subplot(10,1,1);plot(t,uf1);ylabel('s');
    title('Decomposition at level 8:s = a8+d8+d7+d6+d5+d4+d3+d2+d1')
    subplot(10,1,2);plot(a8);ylabel('a8');
    subplot(10,1,3);plot(d8);ylabel('d8');
    subplot(10,1,4);plot(d7);ylabel('d7');
    subplot(10,1,5);plot(d6);ylabel('d6');
    subplot(10,1,6);plot(d5);ylabel('d5');
    subplot(10,1,7);plot(d4);ylabel('d4');
    subplot(10,1,8);plot(d3);ylabel('d3');
    subplot(10,1,9);plot(d2);ylabel('d2');
    subplot(10,1,10);plot(d1);ylabel('d1');
    

    在这里插入图片描述

    展开全文
  • 使用db1小波做3层小波分解

    千次阅读 2021-02-15 03:52:02
    clc ...%%使用db1小波做3层小波分解,产生的近似系数在swa中,细节系数在swd中,而且它们有相同的长度 %显示近似和细节的系数 kp = 0; for i = 1:3 subplot(3,2,kp+1), plot(swa(i,:)); title(['Appr

    clc
    clear
    load j.txt;
    s=j(77:130);%导入原始离散信号
    subplot(4,2,1);
    plot(77:130,s);
    title('原始信号');%原始信号波形图
    [swa,swd] = swt(s,3,'db1');%%使用db1小波做3层小波分解,产生的近似系数在swa中,细节系数在swd中,而且它们有相同的长度
    %显示近似和细节的系数
    kp = 0;
    for i = 1:3
    subplot(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;
    end
    %从系数中重建第3层的近似
    mzero = zeros(size(swd));
    A = mzero;
    A(3,:) = iswt(swa,mzero,'db1');
    %从系数中重建细节
    D = mzero;
     for i = 1:3
     swcfs = mzero;
     swcfs(i,:) = swd(i,:);
     D(i,:) = iswt(mzero,swcfs,'db1');
     end
    %从第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:3
    subplot(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;
    end
     

    展开全文
  • db小波设定不同的尺度,不同的db小波,处理构造的加噪信号,输出去噪前后的对比波形图,和信噪比,并将信噪比存储,可导出到excel中。
  • Mallat算法及C语言实现(一维DB小波分解与重构)

    附:理论部分来源于书籍与网络资源,如有侵权,请于文章作者联系,立即处理!!!

     

    一、Mallat原理分析

    1.1矩阵变换角度看小波分解与重构:

    DB4有4个系数:c0、c1、c2和c3。可以有以下变换矩阵,将它作用于一列数据矢量的左边。即(注意行列对齐,手打不易)

     

    其中,空白处为0,。注意,此矩阵结构,第一行产生一个数据与滤波系数c0、c1、c2、c3卷积的分量,依次类推,第3行、第5行和其余奇数行的结果一样。如果偶数行以这种形式出现,正负交替,那么矩阵将是循环的,也就是一般的卷积,可以用FFT方法计算(注意,最后两行像具有周期边界条件下的卷积那样环绕起来)。但是,偶数行并不是以系数c0、c1、c2、c3进行卷积,而是以系数c3,-c2,c1,-c0进行卷积。整个矩阵的作用就是进行两个相关的卷积,然后各去掉一半数值,将剩下的各一半融合在一起。

    将滤波器c0、c1、c2、c3看成是一个光滑滤波器,称它为H,H有点像4个点的移动平均。而将滤波器c3,-c2,c1,-c0称为G,由于G中滤波器带有负号,因此,G不能看成一个光滑滤波器。在信号处理的文献中,H和G被称为求积镜像滤波器。实际上,c值的选取是使G对光滑的数据矢量尽可能产生零响应。通过以上运算,导致H的输出在去掉以后,精确地代表了数据的“近似”信息。G的输出同样在去掉一半以后,代表了数据的“细节”信息。

    为了能够恢复原始信息,必须能够从它的N/2个近似分量和N/2个细节分量重建长度为N的原始数据矢量。为了能够实现这样的算法,就必须要求矩阵式(1)为正交的,这样它的逆矩阵就和转置矩阵相同。其矩阵如下,即

     

    为使矩阵式(2)成为矩阵式(1)的逆矩阵,必须满足以下两个等式,即

     

    这样用长度为N(可以看出N为2的幂指数)的数据相乘,就能够分解成近似分量和细节分量,再对近似分量按照上面的方法进行分解,依次类推,从而实现Mallat算法。

     

    1.2滤波器角度看小波分解与重构:

    考虑如下问题。用N=2的Daubechies小波分解一个有n个取样值(即s0,….,sn-1)的信号。这些样值首先被当作顶级的近似系数aj,然后让其通过与Daubechies小波相关的高通和低通滤波器。这些滤波器分别称为H和L,响应的冲激响应函数序列分别为h和l:

     

    分别用l和h与aj做卷积,然后下取样。那么对于任何aj(不仅是本例中的仅有8个样值的信号)有:

     

    为计算j-1级的各个系数,需要4个相邻的样值,并且要从偶数位置开始。

    实际中信号为离散序列,用小波分解信号序列,实际上就是让源信号通过对应的高通和低通滤波器,例如,用N=2的Daubechies小波分解一个8样值点s0,….,s7的信号序列,那么为计算近似系数a22,需要s4至s7.,为计算a32,需要s6至s9,但实际上并没有s8和s9!由此并不难理解,在此滤波过程中会很快用尽所有样值点,更麻烦的是,该过程仅在k=0,1,2时可进行。这意味着,对有8个样值点的问题来说,仅能得到3个分解系数,而不是原先期望的4个,该现象称为溢出问题,

    溢出的根本原因在于不知道源信号前后的准确值,所以必须采取某种方式对源信号进行延拓。常用的延拓方法有零延拓、周期延拓、平滑延拓和对称延拓

    平滑延拓:在源信号两端用线性外插法补充样值,进行延拓。若信号信噪比比较高,或者至少在端点处如此,则该延拓方法是适宜的。

     

    在Mallat算法的推导中,假定输入序列是无限长的,而实际应用中常常是分时采样,即输入序列为有限长,此时,滤波器系数与输入序列卷积就会“轮空”现象,因此有必要对原始信号进行边界延拓,减小边界误差,解决办法通常有补零延拓和周期延拓法。

    (1)补零延拓是在输入序列的末尾补零。补零延拓的确定是可能认为的造成输入序列边界的不连续,从而使得较高频的小波系数很大。

    (2)周期延拓法将原来有限长的输入序列拓展成周期序列。周期延拓可适用于任何小波变换,但可能导致输入序列边缘的不连续,使得高频系数较大,这种方式的延拓卷积后与源信号长度一致

    (3)对称延拓(MATLAB默认采取这种方式)可避免输入序列边缘的不连续,但只适用于对称小波变换。

     

    对于正交小波变换来说,补零延拓和对称延拓两种方法实现起来比较简单,但重建时会产生边界效应,而且分解的层数越多,产生的边界效应越显著。补零延拓给人一种跳跃的感觉。至于对称延拓,由于正交小波滤波器一般都是非对称性的(Haar小波虽然是正交的,但它是非连续的),重建图像给人一种错位的感觉。相比较而言,只有周期延拓方式可以得到比较精确地结果,它不仅能保证分解和重建正确计算,而且恢复的质量也好。不过,周期延拓虽然是三种方法中比较好的方法,但会导致信号边缘的不连续性,从而使得较高频率(子带)层的小波系数很大,即使信号本身相当平滑,从信号压缩的角度看,大的系数是希望避免的。信号的对称延拓可避免边缘的非连续性问题。然而,对称延拓只能和对称的小波滤波器一起使用。如果降低正交性要求,选择双正交小波变换,对称性延拓不失为一种好的方法,周期延拓可适用于任何小波变换,但可能导致输入序列边缘的不连续,使得高频系数较大。而对称延拓则避免了输入序列边界的不连续,是当前广泛采用的一种延拓方式

     

    二、软件实现

    离散序列的Mallat算法分解公式

     

    其中,H(n)、G(n)分别表示所选取的小波函数对应的低通和高通滤波器的抽头系数序列,从Mallat算法的分解原理可知,分解后的序列就是原序列与滤波器序列的卷积再进行隔点抽样而来。

    离散序列的Mallat算法重构公式

     

    其中,h(n)、g(n)分别表示所选取的小波函数对应的低通和高通滤波器的抽头系数序列。

     

    设输入信号为f(n),长度为srcLen,滤波器长度为filterLen,边界延拓后信号长度为srcLen+2*(filter-1),取值区间[-(filterlen-1), srcLen+filterLen-2],下面给出信号边界处理几种方法的具体表达式如下:

    周期延拓:

    例1:以[1 2 3 4 5 6 7 8]长度为8的序列信号为例,当滤波器的长度为4时,其具体的延拓长度为6(单边为3)

    [6 7 8 1 2 3 4 5 6 7 8 1 2 3]

     

    对称延拓:

    例2:以[1 2 3 4 5 6 7 8]长度为8的序列信号为例,当滤波器的长度为4时,其具体的延拓长度为6(单边为3)

    [3 2 1 1 2 3 4 5 6 7 8 8 7 6]

     

    零值补填:

    [0 0 0 1 2 3 4 5 6 7 8 0 0 0]

     

    2.1 详细的单级分解过程:

    以DB2小波分解为例,通过对称延拓后的详细计算过程:

     

    从上图可知,小波的Mallat算法分解后的序列长度由原序列长srcLen和滤波器长filterLen决定。从Mallat算法(采用对称拓延)的分解原理可知,分解后的序列就是原序列与滤波器序列的卷积再进行隔点抽取而来。即分解抽取的结果长度为(srcLen+filterLen-1)/2。

    上述方法也是matlab默认采取的方法,在MATLAB中输入代码,查看结果便知:

    对比MATLAB运行结果:

     

    C语言实现:

     

    /***************************************************************************************
    *	功能:一维小波一层分解(下采样),提取奇数位置元素
    *	输入参数:	@srcData : 		源信号
    *				@resData : 		分解结果
    *				@srcLen : 		源信号长度
    *				@filter	:		滤波器系数矩阵
    *				@filterLen : 	滤波器的长度
    *				@ fpAppCoef:	存储近似系数的文件指针
    *				@ fpDetCoef:	存储细节系数的文件指针
    *	返回值:无
    *	说明 : 最终分解结果的长度为延拓后信号长度(srcLen+(filterLen-1)*2)与滤波器卷积长度(filterLen-1)之和,例如信号长度为8,滤波器长度为4,信号经延拓再与滤波器相卷,最终长度为8+(4-1)*2+(4-1)=17
    ***************************************************************************************/
    static uint DWT_Convlution_Decompose(pElement srcData, uint srcLen,
    									pElement resData, uint resLen,
    									Element (*filter)[DBNLEN], uint filterLen,
    									FILE* fpAppCoef, FILE* fpDetCoef)
    {
    	uint i=0, j=0;
    	uint idx = 0;
    	uint extLen = 0, convLen=0, tmpLen=0;
    	pElement pFilter[filterLen];
    
        extLen = srcLen + (filterLen - 1) * 2;		//延拓后信号长度
        Element extData[extLen];		//延拓后信号
        memset(extData, (uchar) 0, sizeof(Element) * extLen);
    
        signalExtend(srcData, srcLen, extData, extLen, METHOD_2, filterLen);		//采用对称延拓方式延拓源信号
    	// for(i=0; i<extLen; i++)
    	// {
    		// printf("%lf ", extData[i]);			//打印延拓后的信号
    	// }
    	// printf("\n\n");
    
    /***************************************求解近似分量********************************************/
    	convLen = extLen + filterLen - 1; 		 //卷积结果信号长度
        Element convData[convLen];
    	memset(convData , 0, sizeof(Element) * convLen);
    
    	for(i=0; i<filterLen; i++)
    	{
    		pFilter[i] = *(filter + 0) + i;
    	}
    	convLen = linear_Convlution(extData, extLen, pFilter, filterLen, convData);		//线性卷积结果
    	// for(i=0; i<convLen; i++)
    	// {
    		// printf("%lf ", convData[i]);
    	// }
    	// printf("\n\n");
    
    	tmpLen = convLen - (filterLen - 1) * 2;		//分解结果长度减去延拓部分
        Element tmpData[tmpLen];
    	memset(tmpData , (uchar) 0, sizeof(Element) * tmpLen);
    
    	for(i=(filterLen - 1), j = 0; i<(convLen - filterLen + 1); i++, j++)
    	{
    		tmpData[j] = convData[i];
    		//printf("%lf ", tmpData[j]);
    	}
    
    	//printf("\n\n");
    
        for (i = 1, idx = 0; i < tmpLen; i += 2, idx++)			//去掉延拓部分,前后的长度为(filterLen - 1)
        {
    		resData[idx] = tmpData[i];  					//下采样隔点采样,提取下标为奇数的元素,得到近似系数
    		//printf("%lf ", resData[idx]);
    
    		fprintf(fpAppCoef, "%lf,", resData[idx]);		//将数据流写入文件
        }
    	//printf("\n\n");
    
    /**************************************求解细节分量*********************************************/
    	convLen = extLen + filterLen - 1; 		 //卷积结果信号长度
    	memset(convData , (uchar) 0, sizeof(Element) * convLen);
    
    	for(i=0; i<filterLen; i++)
    	{
    		pFilter[i] = *(filter+1) + i;
    	}
    	printf("\n");
        convLen = linear_Convlution(extData, extLen, pFilter, filterLen, convData);
    
    	tmpLen = convLen - (filterLen - 1) * 2;		//分解结果长度减去延拓部分
    	memset(tmpData , (uchar) 0, sizeof(Element) * tmpLen);
    
    	for(i=(filterLen - 1), j = 0; i<=(convLen - filterLen + 1); i++, j++)
    	{
    		tmpData[j] = convData[i];
    		//printf("%lf ", tmpData[j]);
    	}
    
    	//printf("\n\n");
        for (i = 1; i < tmpLen; i += 2, idx++)				//去掉延拓部分,前后的长度为(filterLen - 1)
        {
    		resData[idx] = tmpData[i];  					//下采样隔点采样,提取下标为奇数的元素,得到细节系数
    		//printf("%lf ", resData[idx]);
    
    		fprintf(fpDetCoef, "%lf,", resData[idx]);		//将数据流写入文件
        }
    	//printf("\n\n");
    
    	resLen = idx;
    
    	return  resLen;
    }

     

     C语言运算结果:

     

    2.2 详细的单级重构过程

    同样以DB2小波为例,通过对称延拓后的详细重构过程:

     

     

    从上图可知,小波的Mallat算法重构过程是分解过程的逆过程,分解过程得到低频信息(低频系数)和高频信息(高频系数),首先是对分解后的信号隔点插0,并作对称延拓,再与各自的滤波器进行卷积(低频信息与低通滤波器相卷,高频信息与高通滤波器相卷),各自得到的结果再相加,最终去掉延拓部分(filterLen - 1)即可得到原始信号。

    注意在此过程中相对于最初的原始信号有过两次延拓,一个是分解过程中,首先是对原始信号进行延拓的,另一个是在重构过程中,对分解结果的信号进行插零后的延拓。

    MATLAB运行结果:

     

    为了便于对运算过程的理解,这里对信号的长度进行分析,举个例子:假设原始信号有srcLen = 8点,采用DB2滤波器,filterLen = 4。

    分解过程:

    (1)延拓:得到信号长度为extLen = srcLen+ (filterLen-1)*2=14

    (2)与滤波器卷积:得到信号长度为convLen= extLen + (filterLen-1) = 17

    (3)去掉延拓部分:得到信号长度为17 – 6 =11

    (4)隔点取样的到分解结果:resLen  = (11-1)/2 = 5(低频或者高频信息)

    重构过程:

    (1)对低频或者高频信息(分解过程的结果,此时srcLen =5)隔点插零,从第0位置开始,得到信号长度就为11

    (2)延拓:得到的信号长度extLen = srcLen+(filterLen-1)*2=17,

    (3)与各自的滤波器相卷:得到信号长度convLen= extLen + (filterLen-1) = 20

    (4)将上一步各自与高频滤波器和低频滤波器相卷积的结果相加得到结果,此时信号长度不变,还是20,只是多了前后两部分的延拓,因此还原出原始信号长度为20 - (filterLen-1)*2*2=8

     

    由上面详细的分解和重构过程对信号长度进行分析,可见,采用Mallat算法对信号进行分解和重构过程,信号长度有很大的冗余,延拓卷积的结果长度是自身的2倍多。

     

    C语言实现:

     

     

    /***************************************************************************************
    *	功能:一维小波重构(上采样),偶数位置插0
    *	输入参数:	@decData : 		源信号,已被分解的信号
    *				@decLen : 		分解结果长度
    *				@resData : 		重构信号
    *				@resLen	:		重构信号长度
    *				@filter	:		滤波器系数矩阵
    *				@filterLen : 	滤波器的长度
    *	返回值:无
    ***************************************************************************************/
    static void DWT_Convlution_Rebuild(pElement decData, uint decLen,
    									pElement resData, uint resLen,
    									Element (*filter)[DBNLEN], uint filterLen)
    {
    	uint i=0, j=0;
    
    	uint convLen = decLen + 1 + (filterLen-1)*2 + (filterLen-1);
    	Element convData[convLen];
    	memset(convData, 0, sizeof(Element) * convLen);
    
    	uint tmpLen = (convLen - (filterLen - 1));			//卷积结果长度减去(滤波器长度-1)
    	Element tmpData[tmpLen];
    	memset(tmpData, 0, sizeof(Element) * tmpLen);
    
    	convLen = RebuildCoef(decData, decLen, convData, filter, filterLen);
    
    	for(i = filterLen-1, j = 0; i < tmpLen; i++, j++)
    	{
    		tmpData[j] = convData[i];
    	}
    
    	resLen = (tmpLen - (filterLen - 1) * 2); 			//再减去减去延拓部分
    	for(i = filterLen-1, j = 0; i < resLen ; i++, j++)
    	{
    		resData[j] = tmpData[i];
    	}
    
    	return ;
    }

    运算结果:

     

    综上,调试程序,运行结果(gcc编译器):

     

    程序调试成功,对一段音频信号进行分解和重构并且与MATLAB运行对比,最终运行结果良好,精度也很高。附上源程序以及测试数据:

    http://download.csdn.net/detail/kuangzuxiaon/9852417

     

     

     

     

     

     

     

     

     

    参考文献:

    [1]Albert Boggess, Francis J.Narcowich. 小波与傅里叶分析基础[M].电子工业出版社.

    [2]刘涛, 曾祥利, 曾军. 实用小波分析入门[M]. 国防工业出版社.

    [3] http://www.cnblogs.com/IDoIUnderstand/archive/2013/01/30/3280725.html

    [4]http://blog.csdn.net/ebowtang/article/details/40433861

     

     

     

     

    展开全文
  • matlab m文件编写的DB小波分解与重构算法,直接可运行,思路清晰。
  • matlab中的db小波

    热门讨论 2011-11-08 21:05:18
    在Matlab中选择合适的波基,并对信号进行分解。
  • 假设将x用dwt(x,'db4')分解成低频系数ca和高频系数cd,这时修改了ca,再用idwt(ca,cd,'db4')将信号还原成y,然后再用dwt(y,'db4')分解y为低频ca2,高频cd2,此时ca2就不和ca一样了,这正常吗?有没有解决办法让ca和...
  • wname='db4'; [Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wname); % subplot(2,2,1); % stem(Lo_D); % title('分解低通滤波器');...title('平均部分小波系数'); subplot(2,2,4); stem(cD); title('细节部分小波系数');
  • 小波分析中db1,db2,db3小波有何不同?

    万次阅读 2017-11-20 10:57:01
    What is the difference between db1, db2,db3,… in wavelet analysis? 小波分析中db1,db2,db3小波有何不同?
  • db6小波分解

    2019-01-11 21:03:09
    db6小波分解,结果和工具箱一样,有注释,可DIY修改。
  • db8小波分解与重构

    2013-08-31 21:45:02
    是自己关于db8小波分解与重构的作业,第一次做,希望对大家有帮助
  • 使用db3小波进行2层分解,实现对图像的增强,易于初学者使用,使用db3小波进行2层分解,实现对图像的增强,易于初学者使用
  • 本代码以小波db4为基础,对信号进行四层分解,滤除每层的高频信号,并使用第四层低频信号对原始信号进行重构,以此达到低通滤波的效果。 代码:放置在GitHub https://github.com/ShuoLiu-Max/wavelet_db4 欢迎沟通...
  • matlab小波变换函数CWT中小波名称参数 db4,db8,gaus4这些小波后的数字代表什么? %CWT变换 figure(1); Cgama=cwt(gamagama,[32 64 128 256 512 1024],'gaus2','plot'); figure(2); Czhongzi=cwt...
  • A=data_net_1{x,1}.img_... ... s1=A(:,t); [c,s]=wavedec(s1,1,'db4'); ca=appcoef(c,s,'db4',1); cb=detcoef(c,s,1);... 循环中是将时间序列提取低频能量。... Subscripted assignment dimension mismatch. ...
  • 小波变换和小波阈值法去噪

    万次阅读 多人点赞 2017-07-24 18:05:38
    小波分析中经常用到近似和细节,近似表示信号的高尺度,即低频信息;细节表示信号的低尺度,即高频信息。对含有噪声的信号,噪声分量的主要能量集中在小波解的细节分量中。 在以上过程中,小波基和分解层数的选择...
  • 利用小波工具箱进行脑电降噪

    千次阅读 2018-03-30 08:59:09
    小波降噪前后对比 小波降噪流程1. 打开小波工具箱,在MATLAB命令行窗口输入:... 然后选择母小波,与脑电信号比较匹配的是DB小波,选用DB4小波,分解层数选择6,然后点击分析按钮5. 再点击De-noise降噪按钮6. ...
  • matlab小波滤波器使用

    千次阅读 2016-06-04 21:26:17
    研究db小波,用分解和重构滤波器和上下采样函数实现多分辨分析,代码如下: %%% 小波分解与重构 clear;close all; load noissin;Sig=noissin; %% 滤波器分解 [Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('db3'); [c,l] = ...
  • 小波降噪的代码详解

    千次阅读 2018-03-13 09:57:14
    clear all; load woman; %载入带噪声的图像init=2055615866; %生成含噪图像并显示randn('seed',init);XX=X+2*randn(size(X));... %对图像进行消噪处理,用db2小波函数对x进行两层分解a2=wrcoef2(‘a’,c...
  • 小波去噪MATLAB代码

    万次阅读 多人点赞 2018-09-24 10:13:46
    本文基于北京交通大学陈后金教授的课件。我加以整理,若有冒犯还请谅解 1利用MATLAB产生分解与重建滤波器组 计算滤波器组的函数[Ld,Hd,Lr,Hr]=wfilters('wname') Ld:分解低通滤波器h0[-n];...eg1:计算db2小波的四...
  • 离散小波的阶数问题

    2019-03-30 22:27:50
    DWT使用的是滤波器组完成的,不是直接用小波函数,DB小波系先由尺度函数得到低通滤波器(用于计算a)然后得到小波高通滤波器(用于得到d),最后推出相应的小波函数。如何由尺度函数和小波函数得到滤波器组是数学上...
  • 小波分析、小波降噪matlab代码实现

    万次阅读 多人点赞 2020-03-13 17:01:10
    小波降噪matlab代码实现软阈值、硬阈值、固定阈值三种方式1. 简介2. 操作步骤3. 直接上代码4. 运行结果显示1. 噪声信号图像2. 硬阈值去噪图像3. 软阈值去噪图像4. 固定阈值去噪图像5. 去噪结果的误差对比 软阈值、硬...
  • 小波变化与小波降噪

    千次阅读 2018-10-26 16:01:18
    小波变换和小波阈值法去噪 1. 小波变换 小波变换是一种信号的时间——尺度(时间——频率)分析方法,它具有多分辨分析的特点,而且在时频两域都具有表征信号局部特征的能力,是一种窗口大小固定不变但其形状可...
  • 小波问题解答汇集

    千次阅读 2010-09-14 17:23:00
    需要重构的话,应当是双正交的好 在融合上双正交小波不一定好于正交小波,满足了线性相位却带来了信息冗余,效果不一定好,一般大家都用db小波 <br />Q3,各种小波函数如何选取
  • 其根据有用信号和噪声的差异性,选择合适的小波母函数,使小波分解后的有用信号的小波系数幅值大于噪声的小波系数幅值。再通过选择合适的阈值清除幅值较小的噪声信号,剩余有用信号的信息,重构信号,达到滤波消噪的...
  • 4. 然后选择母小波,与脑电信号比较匹配的是DB小波,选用DB4小波,分解层数选择6,然后点击分析按钮 5. 再点击De-noise降噪按钮 6. 选择降噪方法,设置阈值参数,点击降噪按钮 7. 点击 查看降噪信号按钮 8. 查看原始...
  • 小波

    千次阅读 2015-03-15 13:16:23
    定义:wavelet是指小型波(在傅里叶分析里的弦波是大型波),简单说来,小波(wavelet)是一个衰减...小波函数:小波只有时域表示,作为小波函数。例如墨西哥帽小波。   小波历史: 1909年: 第一个小波(Haar小波
  • 小波分析(附源码)

    千次阅读 2013-05-08 23:19:39
    前几天深受小波的毒害,狠狠看了几天,算是有点成果。然后后面附上DB2小波的解构与重构的MATLAB源码。   首先要把傅立叶给弄懂了,傅立叶变换,是把时域的信号,写成了基为不同频率的三角函数的形式,然后,以...
  • 小波的例子

    千次阅读 2013-01-03 20:46:38
    %使用小波“db4”对信号s进行3层分解,分解的系数存到数组c中,各层分解后长度存到数组l中 ca3=appcoef(c,l,'db4',3); %用小波“db4”分解系数[c,l]中提取第3层近似系数,为低频系数 cd1=detcoef(c,l,1); %...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,238
精华内容 7,695
关键字:

db小波