Пример #1
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");
}
Пример #2
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;
}