資源簡介
可實現多層小波分解,使用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????{??
????????cov[i]?=?0;??
????}??
??
????//****************************************************???
????//奇數行用h[]進行卷積???
????//****************************************************???
????//前m/2+1行???
????i?=?0;??
????for(j?=?0;?j?????{??
????????for(k?=?m/2-j;?k?????????{??
????????????cov[i]?+=?data[k-(m/2-j)]?*?h[k];//k針對core[k]???
???????}??
?
????????for(k?=?n-m/2+j;?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?????????{??
????????????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???????{??
???????????cov[i]?+=?data[k]?*?h[m-j-k];//k針對data[k]???
???????}??
?
??????for(k?=?0;?k???????{??
????????????cov[i]?+=?h[k]?*?data[n-(m-j)+k];//k針對core[k]???
??????}??
???}??
?
???//****************************************************???
????//偶數行用g[]進行卷積???
????//****************************************************???
????//前m/2+1行???
????i?=?1;??
????for(j?=?0;?j?????{??
???????for(k?=?m/2-j;?k????????{??
???????????cov[i]?+=?data[k-(m/2-j)]?*?g[k];//k針對core[k]???
????????}??
?
???????for(k?=?n-m/2+j;?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????????{??
????????????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?????????{??
???????????cov[i]?+=?data[k]?*?g[m-j-k];//k針對data[k]???
???????}??
?
???????for(k?=?0;?k????????{??
- 上一篇:STC12c4052ad AD程序
- 下一篇:log算子的邊緣檢測算法
評論
共有 條評論