⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 process.h

📁 这是一个有关一维信号小波分解与重构的VC++源程序
💻 H
字号:
#include"WaveletDlg.h"

#include "stdafx.h"
#include "Wavelet.h"

///////////////////////////////
#define DD 23
#define DD3 13
///////////////////////////////
double h2[]={-0.002,-0.003,0.006,0.006,-0.013,
		-0.012, 0.030, 0.023,-0.078,-0.035,
		0.307,0.542,0.307,-0.035,-0.078,
		0.023,0.030,-0.012,-0.013,0.006,
		0.006,-0.003,-0.002};  //Haar小波低通滤波系数

double g2[]={0.002,-0.003,-0.006,0.006,0.013,-0.012,
		-0.030,0.023,0.078,-0.035,-0.307,0.542,
		-0.307,-0.035,0.078,0.023,-0.030,-0.012,
		0.013,0.006,-0.006,-0.003,0.002};   //Haar小波高通滤波系数
////////////////////////////
double h[]={0.332670552950,0.806891509311,0.459877502118,
		-0.135011020010,-0.085441273882,0.035226291882};  //Daubechies小波低通滤波系数
double g[]={0.0352263,0.08544127,-0.135011,
		-0.459877502118,0.8068915,-0.33267055};   //Daubechies小波高通滤波系数
////////////////////////////////

double h3[DD3]={-0.00332761,0.00569794,0.0196637,-0.0482603,-0.0485391,
0.292562,0.564406,0.292562,-0.0485391,-0.0482602,-0.0196637,0.00569794,-0.0033276};
//Morlet小波低通滤波系数
double g3[DD3]={0.00332761,0.00569794,-0.0196637,-0.0482603,0.0485391,
0.292562,-0.564406,0.292562,0.0485391,-0.0482602,0.0196637,0.00569794,0.0033276};
//Morlet小波高通滤波系数
///////////////////////////////////////////
void DWT(double g[], double h[], int wlen, double c[], double d[], int m, int sca[])  //Daubechies小波变换
{
	int i,j,k,mid,flag[20];
	double p,q;
	
	for(flag[0]=0,i=0;i<m;i++)
	{
		flag[i+1]=flag[i]+sca[i];
	}
	
	for(j=1;j<=m;j++)
	{
		for(i=0;i<sca[j];i++)
		{
			p=0;
			q=0;
			
			for(k=0;k<wlen;k++)
			{
				mid=k+2*i;
				if(mid>=sca[j-1])  mid=mid-sca[j-1];
				
				p=p+h[k]*c[flag[j-1]+mid];
				q=q+g[k]*c[flag[j-1]+mid];
			}
			
			c[flag[j]+i]=p;
			d[flag[j]+i]=q;
		}
	}
	
}

void IDWT(double g[], double h[], int wlen, double c[], double d[], int m, int sca[])
{
	int i,j,k,mid,flag[20];
	double p,q;

	for(flag[0]=0,i=0;i<m;i++)
	{
		flag[i+1]=flag[i]+sca[i];
	}
	
	for(k=m;k>0;k--)
	{
		for(i=0;i<sca[k];i++)
		{
			p=0;
			q=0;
			
			for(j=0;j<wlen/2;j++)
			{
				mid=i-j;
				if(mid<0)  mid=sca[k]+(i-j);
				
				p+=h[2*j]*c[flag[k]+mid]+g[2*j]*d[flag[k]+mid];
				q+=h[2*j+1]*c[flag[k]+mid]+g[2*j+1]*d[flag[k]+mid];
			}
			
			c[flag[k-1]+2*i]=p;
			c[flag[k-1]+2*i+1]=q;
		}
	}
	
}
////////////////////////////
void Radom05(int n, double random[],double mean,double fangcha)
{
	
	int i,j,m;
	double s,w,v,r,t;
	s=65536.0;
	w=2053.0;
	v=13849.0;
	r=0.0;
	
	for(i=0;i<=n-1;i++)
	{
		t=0.0;
		for(j=0;j<=11;j++)
		{
			r=w*r+v;
			m=r/s;r=r-m*s;
			t=t+r/s;
		}
		
		random[i]=mean+fangcha*(t-6.0);
	}
	
	return;
}
////////////////////////////////////////////////////////
int edge_function(int x,int xsize)
{
    if(x<0)
		x=-x;
    if(x>=xsize)
        x=xsize*2-x-2;
    return(x);
}
void DWT1(double c[], double d[], int m, int sca[])  //Haar小波变换
{
	int i,j,k,mid,flag[20];
	double p,q;
	
	for(flag[0]=0,i=0;i<m;i++)
	{
		flag[i+1]=flag[i]+sca[i];
	}
	
	for(k=1;k<=m;k++)
	{
		for(i=0;i<sca[k-1];i+=2)
		{
			p=0;
			q=0;
			for(j=-(DD-1)/2;j<=(DD-1)/2;j++)
				p=p+h2[j+(DD-1)/2]*c[flag[k-1]+edge_function(i+j,sca[k-1])];
			for(j=-(DD-1)/2+1;j<=(DD-1)/2+1;j++)
				q=q+g2[j+(DD-1)/2-1]*c[flag[k-1]+edge_function(i+j,sca[k-1])];
		
			c[flag[k]+i/2]=p;
			d[flag[k]+i/2]=q;
		}

	}
	
}

void IDWT1(double c[], double d[], int m, int sca[])
{
	int i,j,k,n,mid,flag[20];
	double p,q;
	double temp1,temp2;
	double ctemp[SHUZU],dtemp[SHUZU];
	
	for(flag[0]=0,i=0;i<m;i++)
	{
		flag[i+1]=flag[i]+sca[i];
	}
	
	for(k=m;k>0;k--)
	{
		for(n=0;n<sca[k];n++)
		{
			ctemp[flag[k-1]+n*2]=c[flag[k]+n];
			ctemp[flag[k-1]+n*2+1]=0;

			dtemp[flag[k-1]+n*2]=d[flag[k]+n];
			dtemp[flag[k-1]+n*2+1]=0;
		}
		for(i=0;i<sca[k-1];i++)
		{
			temp1=0;
			for(j=-(DD-1)/2;j<=(DD-1)/2;j++)
				temp1=temp1+h2[j+(DD-1)/2]*ctemp[flag[k-1]+edge_function(i+j,sca[k-1])];
			c[flag[k-1]+i]=temp1;
		}
		for(i=0;i<sca[k-1];i++)
		{
			temp1=0;
			for(j=-(DD-1)/2-1;j<=(DD-1)/2-1;j++)
				temp1=temp1+g2[j+(DD-1)/2+1]*dtemp[flag[k-1]+edge_function(i+j,sca[k-1])];
			temp2=temp1+c[flag[k-1]+i];
			c[flag[k-1]+i]=temp2;
			
			c[flag[k-1]+i]=2*c[flag[k-1]+i];
		}
		
	}
	
}
///////////////////////////////////
void DWT3(double c[], double d[], int m, int sca[])   //Morlet小波变换
{
	int i,j,k,mid,flag[20];
	double p,q;
	
	for(flag[0]=0,i=0;i<m;i++)
	{
		flag[i+1]=flag[i]+sca[i];
	}
	
	for(k=1;k<=m;k++)
	{
		for(i=0;i<sca[k-1];i+=2)
		{
			p=0;
			q=0;
			for(j=-(DD3-1)/2;j<=(DD3-1)/2;j++)
				p=p+h3[j+(DD3-1)/2]*c[flag[k-1]+edge_function(i+j,sca[k-1])];
			for(j=-(DD3-1)/2+1;j<=(DD3-1)/2+1;j++)
				q=q+g3[j+(DD3-1)/2-1]*c[flag[k-1]+edge_function(i+j,sca[k-1])];
			
			c[flag[k]+i/2]=p;
			d[flag[k]+i/2]=q;
		}
		
	}
	
}

void IDWT3(double c[], double d[], int m, int sca[])
{
	int i,j,k,n,mid,flag[20];
	double p,q;
	double temp1,temp2;
	double ctemp[SHUZU],dtemp[SHUZU];
	
	for(flag[0]=0,i=0;i<m;i++)
	{
		flag[i+1]=flag[i]+sca[i];
	}
	
	for(k=m;k>0;k--)
	{
		for(n=0;n<sca[k];n++)
		{
			ctemp[flag[k-1]+n*2]=c[flag[k]+n];
			ctemp[flag[k-1]+n*2+1]=0;
			
			dtemp[flag[k-1]+n*2]=d[flag[k]+n];
			dtemp[flag[k-1]+n*2+1]=0;
		}
		for(i=0;i<sca[k-1];i++)
		{
			temp1=0;
			for(j=-(DD3-1)/2;j<=(DD3-1)/2;j++)
				temp1=temp1+h3[j+(DD3-1)/2]*ctemp[flag[k-1]+edge_function(i+j,sca[k-1])];
			c[flag[k-1]+i]=temp1;
		}
		for(i=0;i<sca[k-1];i++)
		{
			temp1=0;
			for(j=-(DD3-1)/2-1;j<=(DD3-1)/2-1;j++)
				temp1=temp1+g3[j+(DD3-1)/2+1]*dtemp[flag[k-1]+edge_function(i+j,sca[k-1])];
			temp2=temp1+c[flag[k-1]+i];
			c[flag[k-1]+i]=temp2;
			
			c[flag[k-1]+i]=2*c[flag[k-1]+i];
		}
		
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -