/**************************************************************** * NUMERICAL DECONVOLUTION OF A SUSPENDED CAPTOR'S MASS ACCELE- * * RATION RESPONSE SIGNAL TO OBTAIN SPEED AT BASIS AND COMPUTE * * THE ACCELERATION SHOCK SPECTRUM OF THIS SPEED WITH OR WITHOUT * * SIGNAL FILTERING OF HIGH FREQUENCIES * * ------------------------------------------------------------- * * The shock captor is considered as a damped elementary oscil- * * lator of one degree of freedom (M,K) with a resonance fre- * * quency F0 and a relative damping factor dzeta. Q is the * * quality factor used to compute the shock spectrum. * * * * C++ version by J-P Moreau, Paris * * (in double precision) * * (www.jpmoreau.fr) * * * * SAMPLE RUN: * * * * Read data from file signal.dat * * Write results to file vsignal.lst. * ****************************************************************/ #include #include #include #include #include int i,iordre,iordre1,ndata,nspec; FILE *fp_in, *fp_out; REAL df,dzeta,f0,fc,fc1,finf,fmax,fr,fsup,q,temp,temp1,ts; char Title[80]; char input[13],output[13]; char nom[9]; REAL *ACC,*VIT,*S; void *vmblock; void DECON(REAL frequence, REAL * Signal, REAL * x_y, REAL Sampling_Incr, REAL Dzeta, int Ndata) { REAL Omega,Omega2,Q,OmegaQ,OmegaT,OmegaQT, q0,q1,q2,T,T2sur6,expA,yn,ypn,ynm1, xn,xpn,xnm1,xpnm1,xppn,xppnm1; int i; Omega=2*PI*frequence; Omega2=Omega*Omega; Q=1/(2*Dzeta); T=Sampling_Incr; T2sur6 =T*T/6; OmegaT =Omega*T; OmegaQ =Omega*Q; OmegaQT=Omega*Q*T; expA =(exp(-OmegaQT)); q2=OmegaQ*expA; q0=(1-expA)/(Omega*OmegaT)+T/2; q1=T+Q/Omega*expA-q0; yn=0;xn=0; xpn=0;xppn=Signal[1]; x_y[1]=xpn; for (i=2; i *CMAX) *CMAX=C[I]; if (C[I] < *CMIN) *CMIN=C[I]; } } void SPEC(REAL * VIT,REAL DZETA,REAL FMIN,REAL FMAX,int N,REAL T,int NFREQ,REAL * S) { REAL DELTAF,F,YMIN,YMAX; int I; DELTAF=(FMAX-FMIN)/(NFREQ-1); //the algorithm fails if FMIN=0 if (FMIN < DELTAF) FMIN=DELTAF; for (I=1; I fmax) fsup=fmax; //print speed results to output file fprintf(fp_out,"\n\n 3RD COLUMN: SPEED OBTAINED BY DECONVOLUTION FROM\n"); fprintf(fp_out," UNFILTERED MASS ACCELERATION.\n"); fprintf(fp_out," 4TH COLUMN: SPEED OBTAINED BY DECONVOLUTION FROM\n"); fprintf(fp_out," FILTERED MASS ACCELERATION IF IT EXISTS.\n\n"); fprintf(fp_out," TIME (S) ACC M/S2 BASIS SPEED M/S \n"); fprintf(fp_out," --------- ------------ --------------- \n"); for (i=1; i