#ifndef _WAVELEFT_20090114_H_
#define _WAVELEFT_20090114_H_

#define WAVELET_LEVEL           6
#define WAVELET_DB              6
#define WAVE_COUNT_EX           6

//由小波分解低通滤波器系数求其它三个滤波器系数
BOOL WaveletCoefficient(const double* pdbLD, int nFilterLength,
		double* pdbHD, double* pdbLR, double* pdbHR);
//Haar小波的分解算法 
BOOL DWT_DB2(float* pfData, int nCount);
//Haar小波的重构算法
BOOL IDWT_DB2(float* pfData, int nCount);
void db4(double *h,double *g,double *hh,double *gg);
float fun(float x);
#ifdef _WINDOWS_
	//调试子函数
	void WriteDebugFile(CFile* pFile, float* pfData, int nCount, BOOL bCR);
	//调试子函数
	void WriteDebugFile(CFile* pFile, double* pdbData, int nCount, BOOL bCR);
#endif
//基于正弦和余弦函数的小波滤波器的统一解析构造
BOOL TriangleWaveletCoefficient(double* pdbCoefficient, int nFiterLength);
//函数功能：小波的分解算法 
//输入参数：float* pfDataSrc--------波形数据输入缓冲区
//          int nCount--------------波形数据输入缓冲区的大小
//          double* pdbCoeffLR------小波分解低通滤波器系数
//          double* pdbCoeffHR------小波分解高通滤波器系数
//          int nFilterLength-------小波滤波器系数的长度
//          BOOL bFormatCoeff-------小波滤波器系数是否已经格式化（已除sqrt(2)）
//输出参数：float* pfDataSrc--------小波包数据输出缓冲区,pfDataDesc为NULL时有效
//          float* pfDataDes--------小波包数据输出缓冲区,pfDataDesc不为NULL时有效
BOOL DWT_1D(float* pfDataDes, float* pfDataSrc, int nCount, double* pdbCoeffLD, 
			double* pdbCoeffHD, int nFilterLength, BOOL bFormatCoeff);
//函数功能：小波的重构算法 
//输入参数：float* pfDataSrc--------小波包数据输入缓冲区
//          int nCount--------------小波包数据输入缓冲区的大小
//          double* pdbCoeffLR------小波重构低通滤波器系数
//          double* pdbCoeffHR------小波重构高通滤波器系数
//          int nFilterLength-------小波重构滤波器系数的长度
//          BOOL bFormatCoeff-------小波重构滤波器系数是否已经格式化（已除sqrt(2)）
//输出参数：float* pfDataSrc--------波形数据输出缓冲区,pfDataDesc为NULL时有效
//          float* pfDataDes--------波形数据输出缓冲区,pfDataDesc不为NULL时有效
BOOL IDWT_1D(float* pfDataDes, float* pfDataSrc, int nCount, double* pdbCoeffLR, 
			double* pdbCoeffHR, int nFilterLength, BOOL bFormatCoeff);

//多层小波分解
BOOL DWT_1D(float* pfDataDes, float* pfDataSrc, int nCount, double* pdbCoeffLD, 
			double* pdbCoeffHD, int nFilterLength, BOOL bFormatCoeff, int nLevel, BOOL bTree = FALSE);
//多层小波重构 
BOOL IDWT_1D(float* pfDataDes, float* pfDataSrc, int nCount, double* pdbCoeffLR, 
			double* pdbCoeffHR, int nFilterLength, BOOL bFormatCoeff, int nLevel, BOOL bTree = FALSE);

//获得Daubechies滤波器系数
void AfxGetDaubechiesCoeff(double* pdbLD, int nFilterLength);

float Wavelet_CalcAmp(WORD* pwData, int nCount,
		float fX1, float fY1, float fX2, float fY2);
float Wavelet_CalcAmp(float* pfData, int nCount,
		float fX1, float fY1, float fX2, float fY2);


#endif