#include #include #include #include #include #include #include #include #define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr class adpw { public: int reg_sig_len; float* reg_sig; int irreg_sig_len; float* irreg_sig; int* irreg_locs; int recon_sig_len; float* recon_sig; float* wt; int filt_len; float* filt; float* err; float max_err; float* Data; float* xd; int Done; int Fs; int Bw; int iter_num; int max_iter; float thresh; float relax; float total_time; adpw(); adpw(float* rs, int rsl,float* is, int* il, int isl,double tsh,int mi,double bw,double fs); void reset(float* rs, int rsl,float* is, int* il, int isl,double tsh,int mi,double bw,double fs); ~adpw(); void four1(float data[], unsigned long int nn, int isign); void SetParam(int mi,float tol,float rlx); void SetWeights(); void SetFilter( int* index); float* GetReconstSig(); float* GetErrorSig(); int* GetBW(float* data, int len,float frac); result next_iter(); void initialise(); void start(); friend ostream& operator << (ostream& os, adpw& p); }; void adpw::four1(float data[], unsigned long nn, int isign) { unsigned long n,mmax,m,j,istep,i; double wtemp,wr,wpr,wpi,wi,theta; float tempr,tempi; n=nn << 1; j=1; for (i=1;i i) { SWAP(data[j],data[i]); SWAP(data[j+1],data[i+1]); } m=n >> 1; while (m >= 2 && j > m) { j -= m; m >>= 1; } j += m; } mmax=2; while (n > mmax) { istep=mmax << 1; theta=isign*(6.28318530717959/mmax); wtemp=sin(0.5*theta); wpr = -2.0*wtemp*wtemp; wpi=sin(theta); wr=1.0; wi=0.0; for (m=1;m=len/2;i--) { energy=energy+data[2*i]*data[2*i]; } cout << energy << endl; temp=0.0; for(i=len-1;i>=len/2;i--) { temp=temp+data[2*i]*data[2*i]; if(frac<=(temp/energy)) break; } cout << temp << endl; bw1[1]=i; return bw1; }; void adpw::initialise() { int i,*index=new int[2]; cout << "Regular Signal Length : " << reg_sig_len << endl << "Irregular Signal Length: " << irreg_sig_len << endl << "Reconstructed Signal Length: " << recon_sig_len << endl << "Filter Leength: " << filt_len << endl << "Sampling Frequency: " << Fs << endl << "BandWidth: " << Bw << endl << "Relaxation Parameter: " << relax << endl << "Maximum number of Iterations: " << max_iter << endl << "Threshhold Error: " << thresh << endl; for(i=0;iindex[0]) { index[0]=temp; index[1]=filt_len-temp; } cout << "index =" << index[0] << " " << index[1] << endl; SetFilter(index); for(i=0;i