void TimeSeriesMotion::calculate() { // Compute the next largest power of two int n = 1; while (n <= m_accel.size()) n <<= 1; // Pad the acceleration data with zeroes QVector<double> accel(n, 0); for (int i = 0; i < m_accel.size(); ++i) accel[i] = m_accel.at(i); // Compute the Fourier amplitude spectrum. The FAS computed through this // method is only the postive frequencies and is of length n/2+1 where n is // the lenght of the acceleration time history. fft(accel, m_fourierAcc); // Test the FFT/IFFT methods // QVector<double> test; // ifft(m_fourierAcc, test); // for (int i = 0; i < test.size(); ++i) // Q_ASSERT(fabs(test.at(i) - accel.at(i)) < 1E-5); // Compute FAS of the velocity time series fft(integrate(accel), m_fourierVel); // Create the frequency array truncated at the maximum frequency const double delta = 1 / (2. * m_timeStep * (m_fourierAcc.size() - 1)); m_freq.resize(m_fourierAcc.size()); for (int i = 0; i < m_freq.size(); ++i) m_freq[i] = i * delta; // Compute PGA and PGV setPga(findMaxAbs(accel)); setPgv(findMaxAbs(integrate(accel)) * Units::instance()->tsConv()); // Compute the response spectrum m_respSpec->setSa(computeSa(m_respSpec->period(), m_respSpec->damping())); }
int main(int argc, char* argv[]){ SNDFILE *sf; SF_INFO info; FILE *fout,*res; short int *buffer, max=0; float *fbuffer,max2,med,min; int num, num_samples, frames, channels, i, j, c; char fname[20]; char fOutName[25]; res = fopen("res.csv","w"); DIR *d; struct dirent *dir; d = opendir(argv[1]); if (d) { while ((dir = readdir(d)) != NULL) { sf = sf_open(dir->d_name,SFM_READ,&info); if (sf == NULL){ continue; } fprintf(res,"%s,",dir->d_name); frames = info.frames; channels = info.channels; num_samples = frames*channels; buffer = (short int *)malloc(num_samples*sizeof(short int)); num = sf_read_short(sf,buffer,num_samples); sf_close(sf); //fout nome -> fopen nome + .csv //fout = fopen("amostraskalimu.csv","w"); buffer=filtro(buffer,num_samples);//filtro média flutuante num_samples-=VALORdeSALTO;//retirar as posições eliminadas buffer=realloc(buffer,sizeof(short)*(num_samples)); max=findMaxAbs(buffer,num_samples);//encontrar máximo fbuffer = (float *)malloc(num_samples*sizeof(float)); fbuffer=normal(buffer,num_samples,max);//normalização fbuffer=decima(fbuffer,num_samples);//decimação num_samples/=DECVALUE;//igualar num_samples a "j" da função decima() fbuffer=envelope(fbuffer,num_samples);//Envelope Shannon //max2=findMaxAbsfloat(fbuffer,num_samples); //fbuffer=normalfloat(fbuffer,num_samples,max2); //min=findMinAbsfloat(fbuffer,num_samples); //med=Media(fbuffer,num_samples); int * peaks = NULL; int ccc = 0; peaks = s1s2toVector(fbuffer,num_samples,peaks,&ccc); if(fbuffer[peaks[0]]<fbuffer[peaks[1]] && fbuffer[peaks[1]]>fbuffer[peaks[2]]) fprintf(res," ,"); for(i=0;i<ccc;i++) fprintf(res,"%d,",peaks[i]); /* //printf("::::%d\n",ccc); /// ccc ---> size do vetor //for(i=0;i<ccc;i++) // printf("%d: %d\n",i,peaks[i]); //int borders[ccc*2]; //areaofbeats(fbuffer,peaks,sizeof(peaks)/sizeof(int),10,borders); //float temp[sizeof(fbuffer)/sizeof(float)]; TEMPbordersToGraph(fbuffer,borders,temp); */ // s1s2(fbuffer,num_samples,res); /* for (i=0;i<num_samples;i+=channels){//escrita para o ficheiro for (j=0;j<channels;j++){ fprintf(fout,"%d %f",i+j+1,fbuffer[i+j]); } fprintf(fout,"\n"); } */ /* for (i=0;i<num_samples;i++){//escrita para o ficheiro fprintf(fout,"\n"); } */ fprintf(res,"\n"); //fclose(fout); } closedir(d); } fclose(res); return 0; }
double TimeSeriesMotion::calcMaxStrain(const QVector<std::complex<double> >& tf) const { return findMaxAbs(strainTimeSeries(tf)); }
double TimeSeriesMotion::maxDisp(const QVector<std::complex<double> > &tf) const { return findMaxAbs(timeSeries(Displacement, tf, false)); }
double TimeSeriesMotion::maxVel(const QVector<std::complex<double> > &tf) const { return findMaxAbs(timeSeries(Velocity, tf, false)); }
double TimeSeriesMotion::max(const QVector<std::complex<double> > & tf) const { // Return the maximum value in the time history return findMaxAbs(calcTimeSeries(m_fourierAcc, tf)); }