DB4小波及其提升算法

void CWaveletTransform::DB4DWT(double Data[], int n) // DB4小波变换
{
	if ( n>=4 )
	{
		int i=0, j=0;
		int half = n >> 1;
		double *tmp = new double[n];
		for (j=0; j<half; j++)
		{
			tmp[j] = Data[(2*j)%n]*h0+
				Data[(2*j+1)%n]*h1+
				Data[(2*j+2)%n]*h2+	
				Data[(2*j+3)%n]*h3;
		
			tmp[j+half] = Data[(2*j)%n]*g0+
						  Data[(2*j+1)%n]*g1+
						  Data[(2*j+2)%n]*g2+
						  Data[(2*j+3)%n]*g3;
		}
		for (i=0; i<n; i++)
		{
			Data[i] = tmp[i];
		}
		delete []tmp;
	}
}

void CWaveletTransform::DB4LiftDWT(double Data[], int n)
{
	int half = n>>1;
	double *pS = new double[half];	//临时变量存放平滑系数
	double *pD = new double[half];	//临时变量存放细节系数
	for (int i=0; i<half; i++)
	{
		pS[i] = Data[2*i]; //even
		pD[i] = Data[2*i+1]; //odd
	}
	for (int i=0; i<half; i++) //DB4变换Update1
	{
		pS[i] = pS[i] + pD[i] * sqrt(3.0);
	}
	for (int i=0; i<half; i++) //DB4的predict
	{
		pD[i] = pD[i] - sqrt(3.0)*pS[i]/4
			- (sqrt(3.0)-2)*pS[(i-1)>0 ? (i-1) : (half+i-1)]/4;  //边界采用周期延拓
	}
	for (int i = 0; i<half; i++) //DB4的updata2
	{
		pS[i] = pS[i] - pD[(i+1)%half];  //边界采用周期延拓
	}
	for (int i = 0; i<half; i++)
	{
		pS[i] = (sqrt(3.0)-1)*pS[i]/sqrt(2.0); //比例系数
		pS[i] = (sqrt(3.0)+1)*pD[i]/sqrt(2.0);
	}
	for (int i=0; i<half; i++)
	{
		Data[i] = pS[i]; //将平滑系数放回原数组
	}
	for (int i=half; i<n; i++)
	{
		Data[i] = pD[i-half]; //将细节系数放回原数组
	}

	delete []pD;
	delete []pS;
}

转载于:https://my.oschina.net/chain2012/blog/4084

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值