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

📄 lift97.h

📁 基于97提升小波变换的一维信号压缩程序。头文件中包括了提升小波变换的源程序。
💻 H
字号:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>


#define shift 4
#define p_t 0.75
float p_alfa, p_beta, p_gama, p_delta, p_kesa;

void filterset(float t)
{
	float *h, *h1;
	h = new float [9];
	h1 = new float [7];
	*h = (8*t*t*t-6*t*t+3*t)/(1+2*t)*(1/32.)*sqrt(2);
	*(h+1) = (-16*t*t*t+20*t*t-12*t+3)/(1+2*t)*(1/32.)*sqrt(2);
	*(h+2) = (2*t-3)/(1+2*t)*(1/8.)*sqrt(2);
	*(h+3) = (16*t*t*t-20*t*t+28*t+5)/(1+2*t)*(1/32.)*sqrt(2);
	*(h+4) = (-8*t*t*t+6*t*t+5*t+20)/(1+2*t)*(1/16.)*sqrt(2);
	*(h+5) = *(h+3);
	*(h+6) = *(h+2);
	*(h+7) = *(h+1);
	*(h+8) = *(h+0);
	float r0, r1, s0, t0;
	r0 = (*(h+4))-2*(*h)*(*(h+3))/(*(h+1));
	r1 = (*(h+2))-(*h)-(*h)*(*(h+3))/(*(h+1));
	s0 = (*(h+3))-(*(h+1))-(*(h+1))*r0/r1;
	t0 = r0-2*r1;
	p_alfa = (*h)/(*(h+1));
	p_beta = (*(h+1))/r1;
	p_gama = r1/s0;
	p_delta = s0/t0;
	p_kesa = t0;
}
void Dwt1D(float *buffer, int buflen)
{
	int i;
	int itemp;
	float *d, *s, *p;
	p = new float [buflen+2*shift];
	d = new float [(buflen>>1)+shift];
	s = new float [(buflen>>1)+shift];
	for (i=0; i<shift; i++){
		*(p+i) = *(buffer+shift-i);
		*(p+buflen+shift+i) = *(buffer+buflen-i-2);
	}
	for (i=0; i<buflen; i++) *(p+i+shift) = *(buffer+i);
	for (i=0; i<(buflen>>1)+shift; i++){
		itemp = i-(shift>>1);
		*(d+i) = *(p+shift+2*itemp+1) + p_alfa*( *(p+shift+2*itemp)+*(p+shift+2*itemp+2) );
	}
	for (i=0; i<(buflen>>1)+shift-1; i++){
		itemp = i+1-(shift>>1);
		*(s+i+1) = *(p+shift+2*itemp) + p_beta*( *(d+i+1)+*(d+i+1-1) );
	}
	for (i=0; i<(buflen>>1)+shift-1; i++){
		*(p+shift+(buflen>>1)+i) =  *(d+i) + p_gama*( *(s+i)+*(s+i+1)); 
	}
    for (i=0; i<(buflen>>1)+shift-1; i++){
		*(p+i+1) = *(s+i+1) + p_delta*(*(p+(buflen>>1)+shift+i+1) + *(p+(buflen>>1)+shift+i+1-1) );
	}
	for (i=0; i<(buflen>>1); i++)
		*(d+i) = *(p+i+(buflen>>1)+shift+(shift>>1)) +p_kesa*(1-p_kesa)*(*(p+i+(shift>>1)));
	for (i=0; i<(buflen>>1); i++)
		*(s+i) = *(p+i+(shift>>1)) -1/p_kesa*(*(d+i));
	for (i=0; i<(buflen>>1); i++)
		*(buffer+i+(buflen>>1)) = *(d+i) +(p_kesa-1)*(*(s+i));
	for (i=0; i<(buflen>>1); i++)
		*(buffer+i) = *(s+i) + *(buffer+i+(buflen>>1));
    delete []p;
	delete []d;
	delete []s;
}
void Lift97(float *buffer, int buflen, int level)
{
	filterset(p_t);
	int i;
	for(i=0;i<level;i++)
	{
		Dwt1D(buffer,buflen>>i);
	}
}
void IDwt1D(float *buffer, int buflen)
{
	int i;
    float *p1, *p2, *s, *d;
	p1 = new float [(buflen>>1)+shift];
	p2 = new float [(buflen>>1)+shift];
	s  = new float [(buflen>>1)+shift];
	d  = new float [(buflen>>1)+shift];
	for (i=0; i<(buflen>>1); i++)
	   *(s+i) = *(buffer+i) - *(buffer+i+(buflen>>1));
	for (i=0; i<(buflen>>1); i++)
	   *(d+i) =*(buffer+i+(buflen>>1))- (p_kesa-1)*(*(s+i));
	for (i=0; i<(buflen>>1); i++)
	   *(buffer+i) = *(s+i) + (1/p_kesa)*(*(d+i));
	for (i=0; i<(buflen>>1); i++)
	   *(buffer+i+(buflen>>1)) = *(d+i) - p_kesa*(1-p_kesa)*(*(buffer+i));
   	for (i=0; i<(shift>>1); i++){
		p1[i] = buffer[(shift>>1)-i];
		p1[i+(shift>>1)+(buflen>>1)] = buffer[(buflen>>1)-i-1];
		p2[i] = buffer[(buflen>>1)+(shift>>1)-i-1];
		p2[i+(shift>>1)+(buflen>>1)] = buffer[buflen-i-2];
	}
	for (i=0; i<(buflen>>1); i++){
		p1[i+(shift>>1)] = buffer[i];
		p2[i+(shift>>1)] = buffer[i+(buflen>>1)];
	}
	for (i=0; i<(buflen>>1)+shift-1; i++)
	   *(s+i+1) = *(p1+i+1) - p_delta*( *(p2+i+1) + *(p2+i+1-1));
	for (i=0; i<(buflen>>1)+shift-1; i++)
	   *(d+i) = *(p2+i) - p_gama*(*(s+i) + *(s+i+1));
	for (i=0; i<(buflen>>1)+shift-1; i++)
	   *(p1+i+1) = *(s+i+1) - p_beta*( *(d+i+1)+*(d+i+1-1));
	for (i=0; i<(buflen>>1)+shift-1; i++)
	   *(p2+i) = *(d+i) - p_alfa*(*(p1+i) + *(p1+i+1));
	for (i=0; i<(buflen>>1); i++){
	   *(buffer+2*i) = *(p1+i+(shift>>1)) ;
	   *(buffer+2*i+1) = *(p2+i+(shift>>1));
	}
	delete []p1;
	delete []p2;
	delete []s;
	delete []d;
}
void ILift97(float *buffer, int buflen, int level)
{
	filterset(p_t);
	int i;
	for(i=0;i<level;i++)
	{
		IDwt1D(buffer,buflen>>(level-1-i));
	}
}

⌨️ 快捷键说明

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