Adding a pick bitrate calculation for new tx/rx modulators with arbitrary samples...
[debian/gnuradio] / gnuradio-examples / python / digital / pick_bitrate2.py
1 from gnuradio import eng_notation
2
3 def pick_rx_bitrate(bitrate, bits_per_symbol,
4                     converter_rate, possible_decims):
5     """
6     Given the 4 input parameters, return at configuration that matches
7
8     @param bitrate: desired bitrate or None
9     @type bitrate: number or None
10     @param bits_per_symbol: E.g., BPSK -> 1, QPSK -> 2, 8-PSK -> 3
11     @type bits_per_symbol: integer >= 1
12     @param converter_rate: converter sample rate in Hz
13     @type converter_rate: number
14     @param possible_decims: a list of possible rates
15     @type possible_decims: a list of integers
16
17     @returns tuple (bitrate, samples_per_symbol, decim_rate)
18     """
19
20     rates = list(possible_decims)
21     rates.sort()
22
23     for i in xrange(len(rates)):
24         if((converter_rate / float(bits_per_symbol) / rates[i]) >= 2*bitrate):
25             decim = rates[i]
26         else:
27             break
28
29     sps = converter_rate / float(bits_per_symbol) / decim / bitrate
30     br = converter_rate / float(bits_per_symbol) / decim / sps
31
32     return (br, sps, int(decim))
33
34
35 def pick_tx_bitrate(bitrate, bits_per_symbol,
36                     converter_rate, possible_interps):
37     """
38     Given the 4 input parameters, return at configuration that matches
39
40     @param bitrate: desired bitrate or None
41     @type bitrate: number or None
42     @param bits_per_symbol: E.g., BPSK -> 1, QPSK -> 2, 8-PSK -> 3
43     @type bits_per_symbol: integer >= 1
44     @param converter_rate: converter sample rate in Hz
45     @type converter_rate: number
46     @param possible_interps: a list of possible rates
47     @type possible_interps: a list of integers
48
49     @returns tuple (bitrate, samples_per_symbol, interp_rate)
50     """
51
52     rates = list(possible_interps)
53     rates.sort()
54
55     for i in xrange(len(rates)):
56         if((converter_rate / float(bits_per_symbol) / rates[i]) >= 2*bitrate):
57             interp = rates[i]
58         else:
59             break
60
61     sps = converter_rate / float(bits_per_symbol) / interp / bitrate
62     br = converter_rate / float(bits_per_symbol) / interp / sps
63
64     return (br, sps, int(interp))