Ejemplo n.º 1
0
void benchmark_quantize_adc(struct rusage *     _start,
                            struct rusage *     _finish,
                            unsigned long int * _num_iterations)
{
    unsigned long int i;

    unsigned int q = 0;
    unsigned int num_bits=8;
    float x=-0.1f;

    // start trials
    getrusage(RUSAGE_SELF, _start);
    for (i=0; i<(*_num_iterations); i++) {
        q ^= quantize_adc(x,num_bits);
        q ^= quantize_adc(x,num_bits);
        q ^= quantize_adc(x,num_bits);
        q ^= quantize_adc(x,num_bits);
    }
    getrusage(RUSAGE_SELF, _finish);
    *_num_iterations *= 4;
}
Ejemplo n.º 2
0
int main(int argc, char*argv[]) {
    // options
    unsigned int num_bits=4;
    char filename[256] = "";

    int dopt;
    while ((dopt = getopt(argc,argv,"uhb:o:")) != EOF) {
        switch (dopt) {
        case 'u':
        case 'h': usage();                      return 0;
        case 'b': num_bits = atoi(optarg);      break;
        case 'o': strncpy(filename,optarg,255); break;
        default:
            exit(1);
        }
    }

    // append null character to end of filename
    filename[255] = '\0';

    // derived values
    unsigned int n = 1<<(num_bits+4);

    // allocate memory for arrays
    float x[n];
    float y[n];
    
    unsigned int i;
    for (i=0; i<n; i++) {
        // generate input signal
        x[i] = (2.0f * (float)(i) / (float)(n)) - 1.0f;

        // quantize: analog to digital converter
        unsigned int q = quantize_adc(x[i],num_bits);

        // quantize: digital to analog converter
        y[i] = quantize_dac(q,num_bits);
    }

    // 
    // export output file
    //
    FILE * fid = fopen(filename,"w");
    if (!fid) {
        fprintf(stderr,"error: %s, could not open '%s' for writing\n", argv[0], filename);
        exit(1);
    }
    fprintf(fid,"# %s: auto-generated file\n\n", filename);
    fprintf(fid,"reset\n");
    fprintf(fid,"set terminal postscript eps enhanced color solid rounded\n");
    fprintf(fid,"set xrange [-1:1];\n");
    fprintf(fid,"set yrange [-1:1];\n");
    fprintf(fid,"set size ratio 1.0\n");
    fprintf(fid,"set xlabel 'DAC input'\n");
    fprintf(fid,"set ylabel 'DAC output'\n");
    fprintf(fid,"set key top right nobox\n");
    fprintf(fid,"set grid xtics ytics\n");
    fprintf(fid,"set grid linetype 1 linecolor rgb '%s' lw 1\n", LIQUID_DOC_COLOR_GRID);

    fprintf(fid,"plot '-' using 1:2 with lines linetype 1 linewidth 1 linecolor rgb '%s' notitle,\\\n", LIQUID_DOC_COLOR_GRAY);
    fprintf(fid,"     '-' using 1:2 with steps linetype 1 linewidth 3 linecolor rgb '%s' notitle\n", LIQUID_DOC_COLOR_RED);
    
    // 
    fprintf(fid,"   -1.0    -1.0\n");
    fprintf(fid,"    1.0     1.0\n");
    fprintf(fid,"e\n");

    for (i=0; i<n; i++)
        fprintf(fid,"   %16.8e  %16.8e;\n", x[i], y[i]);
    fprintf(fid,"e\n");

    // close output file
    fclose(fid);

    return 0;
}