• 大小: 7KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: C/C++
  • 标签: 小波  

资源简介

可实现多层小波分解,使用DB4,用于电网数据压缩。

资源截图

代码片段和文件信息

#include    
#include    
#include    
#define LENGTH 40//信号长度   
/***************************************************************** 
* 一维卷积函数 

* 说明: 循环卷积卷积结果的长度与输入信号的长度相同 

* 输入参数: data[]输入信号; h[]Daubechies小波基低通滤波器系数; 
*            g[]Daubechies小波基高通滤波器系数; cov[]卷积结果; 
            n输入信号长度; m卷积核长度. 

*****************************************************************/  
void Covlution(double data[] double h[] double g[] double cov[]   int n int mint nStep)  
{  
   int i = 0;  
    int j = 0;  
    int k = 0;  

    
//  int knl;
 // double ckdk;
 // double e[]f[];
//  for(k=0;k//   {
//   ck=0.0;
//   dk=0.0;
//   for(l=0;l<8;l++) 
//   {
// n=k+l;
// ck+=data[n%LENGTH/pow(2i)]*h[l];
// dk+=data[n%LENGTH/pow(2i)]*g[l];
//   }
//   e[k]=ck;
//   f[k]=dk;
//  }





  
   //将cov[]清零   
   for(i = 0; i < n; i++)  
   {  
        cov[i] = 0;  
    }  
  
    //****************************************************   
    //奇数行用h[]进行卷积   
    //****************************************************   
    //前m/2+1行   
    i = 0;  
    for(j = 0; j < m/2; j+=2 i+=2)  
    {  
        for(k = m/2-j; k < m; k++ )  
        {  
            cov[i] += data[k-(m/2-j)] * h[k];//k针对core[k]   
       }  
 
        for(k = n-m/2+j; k < n; k++ )  
       {  
            cov[i] += data[k] * h[k-(n-m/2+j)];//k针对data[k]   
       }  
    }  
  
   //中间的n-m行   
   for( ; i <= (n-m)+m/2; i+=2)  
   {  
        for( j = 0; j < m; j++)  
        {  
            cov[i] += data[i-m/2+j] * h[j];  
        }  
    }  
  
   //最后m/2-1行   
//  i = ( (n - m) + m/2 + 1 )/2*2;//**********   
    for(j = 1; j <= m/2; j+=2 i+=2)  
    {  
       for(k = 0; k < j; k++)  
      {  
           cov[i] += data[k] * h[m-j-k];//k针对data[k]   
       }  
 
      for(k = 0; k < m-j; k++)  
      {  
            cov[i] += h[k] * data[n-(m-j)+k];//k针对core[k]   
      }  
   }  
 

   //****************************************************   
    //偶数行用g[]进行卷积   
    //****************************************************   
    //前m/2+1行   
    i = 1;  
    for(j = 0; j < m/2; j+=2 i+=2)  
    {  
       for(k = m/2-j; k < m; k++ )  
       {  
           cov[i] += data[k-(m/2-j)] * g[k];//k针对core[k]   
        }  
 
       for(k = n-m/2+j; k < n; k++ )  
      {  
            cov[i] += data[k] * g[k-(n-m/2+j)];//k针对data[k]   
        }  
    }  
 
   //中间的n-m行   
   for( ; i <= (n-m)+m/2; i+=2)  
   {  
        for( j = 0; j < m; j++)  
       {  
            cov[i] += data[i-m/2+j] * g[j];  
        }  
    }  
  
    //最后m/2-1行   
//  i = ( (n - m) + m/2 + 1 ) ;//*********   
   for(j = 1; j <= m/2; j+=2 i+=2)  
   {  
       for(k = 0; k < j; k++)  
        {  
           cov[i] += data[k] * g[m-j-k];//k针对data[k]   
       }  
 
       for(k = 0; k < m-j; k++)  
       {  

评论

共有 条评论