root/vtcross/trunk/src/main_test.c @ 28

Revision 28, 2.5 KB (checked in by ahe, 16 years ago)

incorporate ezxml with cbr

Line 
1//
2// Cognitive radio simulator
3//
4
5#include <stdio.h>
6#include <stdlib.h>
7#include <math.h>
8#include <sigprocc/sigprocc.h>
9#include "cognitive_radio_test.h"
10
11// options
12#define PACKET_SIZE 1024    // packet size (number of bits)
13#define NUM_TRIALS 250      // number of epochs
14#define REPORT_TRIALS 10    // print report every so often
15
16int main() {
17    // bookkeeping variables and buffers
18    unsigned int num_bits=PACKET_SIZE;
19    char msg_in[num_bits], msg_out[num_bits];
20    float I[num_bits], Q[num_bits];
21    unsigned int num_symbols, num_bits_out;
22
23    float noise_psd = -100.0f; // noise power spectral density
24    float noise_power, noise_std;
25   
26    // quality of service metrics
27    unsigned int num_bit_errors;
28    float throughput_bps;
29
30    // metadata defaults
31    struct metadata_t mdt;
32    metadata md = &mdt;
33
34    md->mod_scheme = MOD_QAM;   // MOD_PSK, MOD_QAM, MOD_PAM, MOD_DPSK
35    md->mod_bps = 4;            // modulation scheme [bits/s]
36    md->tx_power_dBW = -3.0f;   // transmit power [dBW]
37    md->symbol_rate = 250e3f;   // symbol rate [symbols/s]
38
39    unsigned int i;
40    // generate random message
41    for (i=0; i<num_bits; i++)
42        msg_in[i] = (char) (rand() % 2);
43
44    printf("epoch\tutility\n");
45    printf("-----\t-------\n");
46    for (i=0; i<NUM_TRIALS; i++) {
47        // compute internals
48        noise_power = noise_psd + 20*log10f(md->symbol_rate);
49        noise_std = powf(10.0f, (noise_power - md->tx_power_dBW) / 10.0f) / 2.0f;
50
51        // execute transmitter
52        execute_tx(md, msg_in, num_bits, I, Q, &num_symbols);
53
54        // execute channel
55        execute_channel(md, noise_std, I, Q, num_symbols);
56
57        // execute receiver
58        execute_rx(md, I, Q, num_symbols, msg_out, &num_bits_out);
59
60        //
61        // *** compute quality of service metrics ***
62        //
63
64        // count errors, etc.
65        num_bit_errors = count_errors(msg_in, msg_out, num_bits);
66        throughput_bps = ((float)(md->mod_bps)) * md->symbol_rate;
67
68        if ( ((i+1)%REPORT_TRIALS)==0 || (i+1)==NUM_TRIALS) {
69            // print results
70            printf("%u\t%.2f\terrors:\t%u\t/ %u, power: %.1f dBW, Fs: %.3f kHz\n",
71                    i+1, 0.0f, num_bit_errors, num_bits, md->tx_power_dBW, md->symbol_rate/1e3 );
72        }
73
74        //
75        // *** execute cognition here ***
76        //
77
78        // simple power adaptation
79        if (num_bit_errors > 30) {
80            md->tx_power_dBW += 0.1f;
81        } else {
82            md->tx_power_dBW -= 0.1f;
83        }
84
85    }
86
87    printf("done.\n");
88    return 0;
89}
Note: See TracBrowser for help on using the browser.