#include #include #include #include #include #include #include #include "project.cxx" #define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr class adpw { private : long int reg_sig_len; float* reg_sig; long int irreg_sig_len; float* irreg_sig; long int* irreg_locs; long int recon_sig_len; float* recon_sig; float* wt; long int filt_len; float* filt; float* err; float max_err; int Done; long int Fs; long int Bw; int iter_num; int max_iter; float thresh; float relax; float total_time; public: adpw(float* rs,long int rsl,float* is,long int* il,long int isl,double tsh,int mi,double bw,double fs); void reset(float* rs,long int rsl,float* is,long int* il,long int isl,double tsh,int mi,double bw,double fs); ~adpw(); void four1(float data[], unsigned long nn, int isign); void SetParam(int mi,float tol,float rlx); void SetWeights(); void SetFilter(long int* index); float* GetReconstSig(); float* GetErrorSig(); long int* GetBW(float* data,long 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; float 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[2]=i; return bw1; }; void adpw::initialise() { long int i,*index=new long 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; float* data; data=new float[2*recon_sig_len]; for(i=0;iindex[1]) { index[1]=temp; index[2]=filt_len-temp; } cout << "index =" << index[1] << " " << index[2] << endl; SetFilter(index); for(i=0;i