RepeaterPage » History » Version 3
max, 04/22/2017 04:04 PM
1 | 1 | max | |
---|---|---|---|
2 | = Multi-channel reception using the USRP = |
||
3 | |||
4 | Assume we want to simultaneously receive the four signals shown below; |
||
5 | one conventional (analog) FM voice channel plus three P25 |
||
6 | signals. The two P25 voice channels are to be IMBE-decoded whereas the |
||
7 | P25 data channel is to be sent to Wireshark after decoding. |
||
8 | |||
9 | 3 | max | [[Image(sa.png)]] |
10 | |||
11 | 1 | max | Fig. 1 - Spectrum of repeater input band (sample; diagram not to scale) |
12 | |||
13 | For now, it's necessary to edit the source code file manually to specify |
||
14 | the list of channels/modes to be received (file usrp_rx.py): |
||
15 | |||
16 | {{{ |
||
17 | channels = [ |
||
18 | {'freq':435.200e6, 'mode':'c4fm', 'port':32001}, |
||
19 | {'freq':435.350e6, 'mode':'fm', 'port':32002, 'ctcss':97.4}, |
||
20 | {'freq':435.600e6, 'mode':'cqpsk', 'port':23456, 'wireshark':1}, |
||
21 | {'freq':435.775e6, 'mode':'cqpsk', 'port':32003} |
||
22 | ] |
||
23 | }}} |
||
24 | |||
25 | Individual channels are defined one per line; note that all definition lines |
||
26 | except the last must end with a comma. |
||
27 | |||
28 | We choose a frequency somewhere close to the center of this band. |
||
29 | which will set the USRP's nominal receive frequency; this must also |
||
30 | be manually set in the source file: |
||
31 | |||
32 | {{{ |
||
33 | center_freq = 435.500e6 |
||
34 | }}} |
||
35 | |||
36 | Before running the receiver app, we |
||
37 | * measure the current calibration error value (I use kalibrate) |
||
38 | * determine the optimum USRP receiver gain value |
||
39 | The values used in this example are +1234 and 35, respectively. |
||
40 | |||
41 | We're now ready to start the receiver: |
||
42 | |||
43 | {{{ |
||
44 | usrp_rx.py -RA -c 1234 -H 127.0.0.1 -g 35 -d 25 |
||
45 | }}} |
||
46 | |||
47 | The receiver continuously monitors all four channels. For each of the three |
||
48 | voice channels, the audio and the PTT info ("key up" and "key down" events) |
||
49 | are forwarded to asterisk app_rpt over separate UDP channels. |
||
50 | For both voice modes (IMBE and analog FM) the audio is transmitted |
||
51 | as frames over the UDP channel in Asterisk's native audio format: |
||
52 | * 50 frames per second |
||
53 | * 160 audio samples per frame |
||
54 | * 8000 samples / second |
||
55 | * signed |
||
56 | * 16-bit |
||
57 | * linear |
||
58 | |||
59 | = P25 and/or analog NBFM Reception using a discriminator-tapped receiver = |
||
60 | |||
61 | One or more disc-tapped conventional receivers may be used at the same time, and can |
||
62 | coexist with one or more USRP's. |
||
63 | |||
64 | Single-channel reception is possible using disctap_rx.py. |
||
65 | This app dynmically auto-detects the modulation type (P25 or analog NBFM). |
||
66 | |||
67 | Audio and PTT events are forwarded to asterisk app_rpt over two separate UDP |
||
68 | channels, depending on modulation type (in the example below, received P25 |
||
69 | audio is sent to asterisk on UDP port 32004; for NBFM, port 32005 is used). |
||
70 | |||
71 | {{{ |
||
72 | disctap_rx.py -i -A 0.05 -c 97.4 -H 127.0.0.1 -p 32004 -g 35 -d 25 |
||
73 | }}} |
||
74 | |||
75 | The -g (gain) parameter is used to set the proper audio gain level. See |
||
76 | the hardware page for further guidance - this value is important for achieving |
||
77 | correct operation. |