Listing 4: Instantiating a Signal<> object.

int _tmain(int argc, _TCHAR* argv[])
{
    typedef double DataType; // this can be float or double
    typedef Signal<DataType> SigType;
    // instantiate signal object and read in the data from the CSV file ...
    SigType signal(NUM_SAMPLES);
    ifstream ifstr(DATA_FILE);
    if (!ifstr)
    {
        cerr << "Failed to open " << DATA_FILE << "\n";
        return -1;
    }
    DataType *pData = signal;
    for (int ii=0; ii<NUM_SAMPLES; ++ii)
    {
        if (!(ifstr >> pData[ii]))
        {
     cerr << "Expected " << NUM_SAMPLES << " data points in the file " << DATA_FILE << "\n";
            return -1;
        }
    }
    // get min and max values in this signal ...
    int iiMin, iiMax;
    DataType minVal = signal.min(&iiMin),
             maxVal = signal.max(&iiMax);
    cout << "Min value is " << minVal << "\nMax val is " << maxVal << "\n";
    // compute magnitude of the FFT ...
    SigType magFFT;
    signal.fftMagnitude(&magFFT);
    // save it to a file ...
    pData = magFFT;
    ofstream ofstr(FFT_FILE);
    for (int ii=0; ii<magFFT.getNumSamples(); ++ii)
        ofstr << pData[ii] << "\n";
    ofstr.close();
    return 0;
}