示例#1
0
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;
     
        }
示例#3
0
double TimeSeriesMotion::calcMaxStrain(const QVector<std::complex<double> >& tf) const
{
    return findMaxAbs(strainTimeSeries(tf));
}
示例#4
0
double TimeSeriesMotion::maxDisp(const QVector<std::complex<double> > &tf) const
{
    return findMaxAbs(timeSeries(Displacement, tf, false));
}
示例#5
0
double TimeSeriesMotion::maxVel(const QVector<std::complex<double> > &tf) const
{
    return findMaxAbs(timeSeries(Velocity, tf, false));
}
示例#6
0
double TimeSeriesMotion::max(const QVector<std::complex<double> > & tf) const
{
    // Return the maximum value in the time history
    return findMaxAbs(calcTimeSeries(m_fourierAcc, tf));
}