Esempio n. 1
0
int partition(const vector<string>& args)
{
    if (args.size() != 2) throw runtime_error(usage_);
    const string& filename = args[0];
    int partitionCount = atoi(args[1].c_str());
    if (partitionCount < 2) 
        throw runtime_error("Nothing to do.");

    TransientData td(filename); 
    if (td.data().size() % partitionCount != 0) 
        throw runtime_error("Must choose an even partition.");

    int partitionSize = td.data().size()/partitionCount;
    double partitionDuration = td.observationDuration()/partitionCount;

    for (int i=0; i<partitionCount; i++)
    {
        TransientData partition;
        partition.startTime(td.startTime() + partitionDuration*i);
        partition.observationDuration(partitionDuration); 
        partition.A(td.A());
        partition.B(td.B());
        partition.data().resize(partitionSize);
        copy(td.data().begin()+(partitionSize*i), 
             td.data().begin()+(partitionSize*(i+1)), 
             partition.data().begin());
        partition.write(partitionFilename(filename, i, digitCount(partitionCount-1)));
    }

    return 0;
}
Esempio n. 2
0
int fft(const TransientData& td, FrequencyData& fd, const Configuration& config, const string& filenameOut)
{
    cerr << "Computing FFT..." << flush;
    td.computeFFT(config.fft_zero_padding, fd);
    //fd.write(filenameOut);
    cerr << "done.\n";
    return 0;
}
Esempio n. 3
0
void sinusoidTest()
{
    TransientData td;
    td.observationDuration(T_);
    td.A(A_);
    td.B(B_);
    td.data().resize(sampleCount_);
    SinusoidSignal signal;
    td.add(signal);
    td.write("sinusoid.dat");

    FrequencyData fd;
    td.computeFFT(1, fd);
    fd.write("sinusoid.cfd");
}
Esempio n. 4
0
void testInteraction(double separation)
{
    double f1 = 100000/.768;
    double f2 = f1 + separation;

    CombinedSignal signal;
    const double A = 1;
    const double tau = .768;
    signal.push_back(DecayingSinusoid(A, tau, f1, 0)); 
    signal.push_back(DecayingSinusoid(A, tau, f2, 0)); 

    TransientData td;
    td.observationDuration(T_);
    td.A(A_);
    td.B(B_);
    td.data().resize(sampleCount_);
    td.add(signal);

    FrequencyData fd;
    td.computeFFT(1, fd);

    vector<PeakInfo> peaks;
    peaks.push_back(PeakInfo(f1));
    peaks.push_back(PeakInfo(f2));

    int windowRadius = 10;
    int iterationCount = 20;
    auto_ptr<FrequencyEstimatorPhysicalModel> estimator = 
        FrequencyEstimatorPhysicalModel::create(windowRadius, iterationCount);
                                                       
    vector<PeakInfo> estimatedPeaks;
    estimator->estimateFrequencies(fd, peaks, estimatedPeaks, ""); 
    if (estimatedPeaks.size() != 2) throw runtime_error("not happening");

    cout << setprecision(2) << fixed 
         << setw(10) << separation
         << setw(15) << setprecision(8) << estimatedPeaks[0].frequency - f1 << " " 
         << setw(15) << setprecision(8) << estimatedPeaks[1].frequency - f2 << " " 
         << endl;
}