?? rwdrcoef.c
字號:
/*Use Daubechies wavelet to transform inter turn short circuit signal*/
#include"stdio.h"
#include"math.h"
#define N 1024 /*the length of the original signal*/
#define wdlev 4 /*decomposition lever*/
#define dbwlen 6 /*the length of the g,h filter*/
int flag[10];
double cd2[N];
main()
{int i,j,sca[wdlev+2],l[wdlev+2];
double d[N]; /*a,d是存放所有低頻和高頻部分*/
/*low_pass filter relates to scale function*/
static double lowp[dbwlen]={0.332670552950,0.806891509311,0.459877502118,-0.135011020010,-0.085441273882,0.035226291882};
/*high_pass filter relates to wavelet function*/
static double highp[dbwlen]={0.0352263,0.08544127,-0.135011,-0.459877502118,0.8068915, -0.33267055};
void dwt();
void wdrcoef();
double a[2*N]={0.023200,
0.021600,
0.023200,
0.021600,
0.022400,
0.021600,
0.022400,
0.020000,
0.022400,
0.020800,
0.021600,
0.020800,
0.021600,
0.020800,
0.022400,
0.020800,
0.021600,
0.018400,
0.022400,
0.019200,
0.023200,
0.020000,
0.021600,
0.020000,
0.020800,
0.020800,
0.021600,
0.020000,
0.021600,
0.019200,
0.021600,
0.019200,
0.021600,
0.020000,
0.020800,
0.020000,
0.020800,
0.020000,
0.020800,
0.020000,
0.021600,
0.019200,
0.020800,
0.019200,
0.020800,
0.019200,
0.021600,
0.018400,
0.019200,
0.019200,
0.020800,
0.019200,
0.020800,
0.019200,
0.020800,
0.019200,
0.020800,
0.019200,
0.020800,
0.019200,
0.020800,
0.018400,
0.020800,
0.018400,
0.020000,
0.018400,
0.019200,
0.017600,
0.019200,
0.019200,
0.019200,
0.017600,
0.019200,
0.018400,
0.020000,
0.018400,
0.019200,
0.018400,
0.019200,
0.018400,
0.020000,
0.018400,
0.019200,
0.017600,
0.019200,
0.016800,
0.020000,
0.017600,
0.019200,
0.017600,
0.019200,
0.016800,
0.018400,
0.016800,
0.019200,
0.016800,
0.018400,
0.016800,
0.018400,
0.016800,
0.018400,
0.016800,
0.017600,
0.016000,
0.017600,
0.016000,
0.017600,
0.016800,
0.017600,
0.016000,
0.018400,
0.016000,
0.016800,
0.014400,
0.017600,
0.015200,
0.016800,
0.016000,
0.017600,
0.016000,
0.016800,
0.014400,
0.016800,
0.015200,
0.016000,
0.015200,
0.016800,
0.014400,
0.016000,
0.015200,
0.016800,
0.014400,
0.016000,
0.014400,
0.016000,
0.014400,
0.015200,
0.014400,
0.016000,
0.014400,
0.015200,
0.013600,
0.015200,
0.014400,
0.015200,
0.012800,
0.016000,
0.012800,
0.014400,
0.012800,
0.014400,
0.012800,
0.014400,
0.012800,
0.014400,
0.012000,
0.013600,
0.012800,
0.014400,
0.012800,
0.013600,
0.011200,
0.012800,
0.011200,
0.012000,
0.011200,
0.012000,
0.010400,
0.012000,
0.010400,
0.011200,
0.010400,
0.011200,
0.010400,
0.011200,
0.010400,
0.012000,
0.011200,
0.012800,
0.012000,
0.014400,
0.014400,
0.017600,
0.018400,
0.021600,
0.022400,
0.027200,
0.027200,
0.032800,
0.034400,
0.040800,
0.041600,
0.047200,
0.049600,
0.053600,
0.056800,
0.060800,
0.062400,
0.066400,
0.068000,
0.071200,
0.072000,
0.072800,
0.072800,
0.074400,
0.072800,
0.073600,
0.069600,
0.071200,
0.064800,
0.068000,
0.059200,
0.064000,
0.054400,
0.057600,
0.048000,
0.053600,
0.042400,
0.048000,
0.036800,
0.040800,
0.032000,
0.035200,
0.025600,
0.029600,
0.023200,
0.024800,
0.019200,
0.021600,
0.016000,
0.018400,
0.014400,
0.016000,
0.012800,
0.014400,
0.011200,
0.013600,
0.011200,
0.012000,
0.010400,
0.012000,
0.009600,
0.011200,
0.010400,
0.011200,
0.009600,
0.011200,
0.009600,
0.011200,
0.009600,
0.010400,
0.008000,
0.010400,
0.008800,
0.010400,
0.008000,
0.008800,
0.008000,
0.008800,
0.007200,
0.008800,
0.007200,
0.008000,
0.007200,
0.008000,
0.007200,
0.007200,
0.007200,
0.008000,
0.006400,
0.008800,
0.005600,
0.008000,
0.007200,
0.007200,
0.006400,
0.007200,
0.006400,
0.008000,
0.005600,
0.007200,
0.005600,
0.007200,
0.005600,
0.008000,
0.005600,
0.007200,
0.005600,
0.006400,
0.005600,
0.006400,
0.005600,
0.007200,
0.005600,
0.007200,
0.006800,
0.006400,
0.005600,
0.006400,
0.007200,
0.008000,
0.008000,
0.009600,
0.010400,
0.012800,
0.012800,
0.017600,
0.019200,
0.023200,
0.024800,
0.030400,
0.021840,
0.026320,
0.026880,
0.032480,
0.033600,
0.038080,
0.038640,
0.042560,
0.043120,
0.047600,
0.048160,
0.048720,
0.049280,
0.050400,
0.050400,
0.050960,
0.049840,
0.050400,
0.046480,
0.048720,
0.042000,
0.045920,
0.039200,
0.042000,
0.034720,
0.039200,
0.030240,
0.033600,
0.025760,
0.029120,
0.021840,
0.025760,
0.016800,
0.021280,
0.021600,
0.024000,
0.017600,
0.020000,
0.014400,
0.016800,
0.012800,
0.013600,
0.010400,
0.012800,
0.009600,
0.011200,
0.008000,
0.009600,
0.007200,
0.008800,
0.006400,
0.008000,
0.006400,
0.008000,
0.005600,
0.007200,
0.005600,
0.007200,
0.006400,
0.007200,
0.004800,
0.007200,
0.004800,
0.007200,
0.003200,
0.005600,
0.004000,
0.004800,
0.003200,
0.004000,
0.002400,
0.004000,
0.002400,
0.004000,
0.002400,
0.004800,
0.003200,
0.003200,
0.003200,
0.003200,
0.003200,
0.004000,
0.002400,
0.004000,
0.002400,
0.004000,
0.003200,
0.004000,
0.004000,
0.004800,
0.003200,
0.004800,
0.003200,
0.005600,
0.004000,
0.004800,
0.003200,
0.004800,
0.003200,
0.004000,
0.003200,
0.004000,
0.003200,
0.004000,
0.003200,
0.004000,
0.004000,
0.004800,
0.004000,
0.005600,
0.004800,
0.007200,
0.007200,
0.009600,
0.008800,
0.013600,
0.014400,
0.018400,
0.019200,
0.025600,
0.026400,
0.032000,
0.033600,
0.042400,
0.044000,
0.049600,
0.051200,
0.056800,
0.058400,
0.064000,
0.064800,
0.068800,
0.068800,
0.069600,
0.070400,
0.072000,
0.069600,
0.070400,
0.065600,
0.069600,
0.061600,
0.064800,
0.056000,
0.060000,
0.049600,
0.054400,
0.042400,
0.047200,
0.036000,
0.040800,
0.029600,
0.035200,
0.024800,
0.028800,
0.020800,
0.023200,
0.016000,
0.019200,
0.012000,
0.016000,
0.011200,
0.012800,
0.010400,
0.010400,
0.008000,
0.008800,
0.007200,
0.008000,
0.007200,
0.007200,
0.005600,
0.007200,
0.005600,
0.007200,
0.004000,
0.006400,
0.005600,
0.005200,
0.004800,
0.005600,
0.004800,
0.004800,
0.004000,
0.004800,
0.004800,
0.004800,
0.001600,
0.003200,
0.002800,
0.002400,
0.001600,
0.002400,
0.002000,
0.001600,
0.000800,
0.001600,
0.000000,
0.001600,
0.000800,
0.001600,
0.000800,
0.001600,
0.000800,
0.002400,
0.000000,
0.002400,
0.000800,
0.002400,
0.001600,
0.002400,
0.001600,
0.002400,
0.001600,
0.003200,
0.002400,
0.002400,
0.002400,
0.004000,
0.002400,
0.004000,
0.002400,
0.002400,
0.000800,
0.002400,
0.001600,
0.002400,
0.002400,
0.004000,
0.002400,
0.004000,
0.004000,
0.005600,
0.006400,
0.008800,
0.007200,
0.012800,
0.011200,
0.018400,
0.019200,
0.023200,
0.025600,
0.032000,
0.032800,
0.040000,
0.041600,
0.048000,
0.048800,
0.056800,
0.058400,
0.062400,
0.064000,
0.067200,
0.068000,
0.069600,
0.070400,
0.072000,
0.070400,
0.070400,
0.066400,
0.068800,
0.061600,
0.065600,
0.056800,
0.060800,
0.050400,
0.055200,
0.043200,
0.049600,
0.037600,
0.041600,
0.031200,
0.035200,
0.024800,
0.029600,
0.020000,
0.024000,
0.016800,
0.020800,
0.012800,
0.016000,
0.011200,
0.008000,
0.009600,
0.007200,
0.008800,
0.006400,
0.008000,
0.006400,
0.008000,
0.005600,
0.007200,
0.005600,
0.007200,
0.006400,
0.007200,
0.004800,
0.007200,
0.004800,
0.007200,
0.003200,
0.005600,
0.004000,
0.004800,
0.003200,
0.004000,
0.002400,
0.004000,
0.002400,
0.004000,
0.002400,
0.004800,
0.003200,
0.003200,
0.003200,
0.003200,
0.003200,
0.004000,
0.002400,
0.004000,
0.002400,
0.004000,
0.003200,
0.004000,
0.004000,
0.001600,
0.003200,
0.001600,
0.002400,
0.002400,
0.004000,
0.001600,
0.004000,
0.002400,
0.003200,
0.002400,
0.003200,
0.001600,
0.003200,
0.001600,
0.003200,
0.002400,
0.003200,
0.002400,
0.003200,
0.002400,
0.004000,
0.002400,
0.004000,
0.003200,
0.004000,
0.004000,
0.006400,
0.004800,
0.006400,
0.005600,
0.009600,
0.010400,
0.014400,
0.015200,
0.020000,
0.020800,
0.027200,
0.028000,
0.035200,
0.037600,
0.044000,
0.045600,
0.052000,
0.054400,
0.062400,
0.062400,
0.067200,
0.068000,
0.070400,
0.072000,
0.073600,
0.073600,
0.074400,
0.071200,
0.072800,
0.068000,
0.070400,
0.064000,
0.066400,
0.056800,
0.062400,
0.050400,
0.054400,
0.042400,
0.048800,
0.037600,
0.044000,
0.030400,
0.036800,
0.026400,
0.028800,
0.021600,
0.025600,
0.016800,
0.020800,
0.013600,
0.016000,
0.012000,
0.013600,
0.010400,
0.012000,
0.007200,
0.009600,
0.007200,
0.009600,
0.007200,
0.008000,
0.006400,
0.007200,
0.005600,
0.007200,
0.006400,
0.007200,
0.006400,
0.007200,
0.006400,
0.007200,
0.005600,
0.006400,
0.005600,
0.006400,
0.004800,
0.007200,
0.004000,
0.006400,
0.004800,
0.005600,
0.004000,
0.005600,
0.004800,
0.005600,
0.004000,
0.006400,
0.004800,
0.005600,
0.004800,
0.005600,
0.004800,
0.005600,
0.004800,
0.005600,
0.004800,
0.007200,
0.004800,
0.006400,
0.004800,
0.006400,
0.006400,
0.006400,
0.005600,
0.006400,
0.004800,
0.006400,
0.004800,
0.006400,
0.005600,
0.006400,
0.004000,
0.005600,
0.004800,
0.006400,
0.004000,
0.005600,
0.004800,
0.005600,
0.005600,
0.006400,
0.006400,
0.007200,
0.007200,
0.009600,
0.010400,
0.014400,
0.015200,
0.017600,
0.020000,
0.024800,
0.025600,
0.032800,
0.034400,
0.040000,
0.041600,
0.050400,
0.051200,
0.059200,
0.060000,
0.065600,
0.066400,
0.070400,
0.071200,
0.076000,
0.075200,
0.076000,
0.075200,
0.076800,
0.072800,
0.075200,
0.069600,
0.072000,
0.064800,
0.069600,
0.057600,
0.063200,
0.052000,
0.057600,
0.045600,
0.051200,
0.040000,
0.044800,
0.034400,
0.037600,
0.028800,
0.032000,
0.024000,
0.027200,
0.020000,
0.022400,
0.017600,
0.018400,
0.015200,
0.016800,
0.013600,
0.015200,
0.012000,
0.014400,
0.012000,
0.012800,
0.012000,
0.013600,
0.010400,
0.012000,
0.011200,
0.012800,
0.011200,
0.012000,
0.011200,
0.012000,
0.011200,
0.012800,
0.010400,
0.012000,
0.010400,
0.013600,
0.010400,
0.012000,
0.010400,
0.011200,
0.009600,
0.011200,
0.009600,
0.012000,
0.010400,
0.011200,
0.010400,
0.012000,
0.010400,
0.012000,
0.011200,
0.012000,
0.011200,
0.012000,
0.010400,
0.012000,
0.011200,
0.012800,
0.010400,
0.012000,
0.011200,
0.012800,
0.011200,
0.012000,
0.011200,
0.012800,
0.011200,
0.013600,
0.012000,
0.013600,
0.012800,
0.013600,
0.012800,
0.014400,
0.012800,
0.014400,
0.012000,
0.013600,
0.012800,
0.014400,
0.012800,
0.014400,
0.012800,
0.013600,
0.012800,
0.014400,
0.012800,
0.013600,
0.012800,
0.014400,
0.012800,
0.015200,
0.013600,
0.014400,
0.012800,
0.014400,
0.013600,
0.015200,
0.013600,
0.016000,
0.014400,
0.015200,
0.014400,
0.016800,
0.014400,
0.016000,
0.015200,
0.016000,
0.015200,
0.017600,
0.015200,
0.016000,
0.014400,
0.017600,
0.016000,
0.016800,
0.016000,
0.017600,
0.016000,
0.017600,
0.015200,
0.016800,
0.016000,
0.016800,
0.015200,
0.016800,
0.015200,
0.016800,
0.016000,
0.016800,
0.015200,
0.016800,
0.016000,
0.016800,
0.015200,
0.016800,
0.015200,
0.016800,
0.016000,
0.017600,
0.016000,
0.016800,
0.016000,
0.017600,
0.015200,
0.017600,
0.016000,
0.016800,
0.016000,
0.016000,
0.016000,
0.016800,
0.016800,
0.017600,
0.016800,
0.018400,
0.016800,
0.018400,
0.017600,
0.018400,
0.017600,
0.018400,
0.017600,
0.018400,
0.018400,
0.019200,
0.016800,
0.018400,
0.017600,
0.019200,
0.017600,
0.019200,
0.017600,
0.018400,
0.016800,
0.018400,
0.018400,
0.018000,
0.017600,
0.019200,
0.017600,
0.019200,
0.018400,
0.020000,
0.018400,
0.020000,
0.018400,
0.019200,
0.019200,
0.020000,
0.018400,
0.020800,
0.019200,
0.020800,
0.019200,
0.020800,
0.018400,
0.020800,
0.019200,
0.021600,
0.019200
};
/*注意n=N不能寫在函數定義前面*/
j=N; /*n=1024*/
flag[0]=0; /*在a數組中保存是從第0層,即原始數據開始的*/
for(i=0;i<=wdlev;i++) /*flag表示每層分解的高,低頻部分保存在數組a,d中起始位置*/
{flag[i+1]=flag[i]+j; /*且定義了flag為外部變量,便于子函數的調用*/
sca[i]=j;
l[i]=j; /*從No.0層開始的長度define l vector!!!!!*/
j=j/2;
}
/******start decomposing******/
dwt(lowp,highp,dbwlen,a,d,wdlev,sca);
/*******reconstruct the No.2 lever high frequency portion**********/
wdrcoef('d',d,l,lowp,highp,2);
}
/*subfunction for decomposing original signal with db3 wavelet*/
void dwt(lowp,highp,wlen,a,d,m,sca)
int m,wlen,sca[wdlev];
double a[2*N],d[N],lowp[dbwlen],highp[dbwlen];
{int i,j,k,mid,flag1[wdlev+2];
double p,q;
for(flag1[0]=0,i=0;i<m;i++)
{flag1[i+1]=flag1[i]+sca[i];}
for(j=1;j<=wdlev;j++)
{for(i=0;i<sca[j];i++)
{p=0;
q=0;
for(k=0;k<wlen;k++)
{mid=k+2*i;
if(mid>=sca[j-1]) mid=mid-sca[j-1];
p=p+lowp[k]*a[flag1[j-1]+mid];
q=q+highp[k]*a[flag1[j-1]+mid];
}
a[flag1[j]+i]=p;
d[flag1[j]+i-flag1[1]]=q;
}
}
}
/*high frequency portion reconstruction,save wdrcoef of per lever*/
void wdrcoef(r_char,d,l,lowp,highp,lev) /*wrcoef('d',c,l,g,h,1) 重構第一層高頻信號*/
char r_char; /*r_char='d' or r_char='a'*/
int lev,l[wdlev];
double d[N],lowp[dbwlen],highp[dbwlen]; /*void idwt(g,h,wlen,c,d,m,sca)*/
{int i,j,k,mid,temp;
double pd,qd; /*存放每次卷積的結果*/
double cd[N]; /*可供查看的中間變量*/
for(temp=0,i=1;i<lev;i++)
temp=temp+l[i];
if(r_char=='d') /*如果是想重構細節部分*/
{for(i=0;i<l[lev];i++)
cd[i]=d[i+temp];/*transform c to cd,access the No.2 lever high_frequency portion*/
for(k=lev;k>=1;k--) /*假設重構的次數,k為每層*/
{for(i=0;i<l[k];i++)
{pd=0;
qd=0;
for(j=0;j<dbwlen/2;j++) /*starting reconstruction*/
{ mid=i-j;
if(mid<0) mid=l[k]+(i-j);
pd+=highp[2*j]*cd[mid];
qd+=highp[2*j+1]*cd[mid];
}
cd2[2*i]=pd;
cd2[2*i+1]=qd;
} /*two datas of uplever come out*/
for(i=0;(i<l[lev-1])&&(lev>1);i++) /*transform cd1 to cd*/
cd[i]=cd2[i];
} /*all levers ends*/
} /*end if*/
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -