Project

General

Profile

RepeaterPage » History » Version 5

max, 04/22/2017 04:04 PM

1 1 max
2 4 max
 = SUMMARY =
3
 * Simultaneous multi-channel transmission/reception
4
 * Uses USRP and/or conventional receiver/transmitter hardware
5
 * Generic interface to Asterisk via app_rpt (full VOIP, radio control, and standard repeater functions)
6
 * Features: P25, analog NBFM with CTCSS
7
 * Expected to be fully "ROIP" [Radio Over IP] compatible
8
9 1 max
 = Multi-channel reception using the USRP =
10
11
Assume we want to simultaneously receive the four signals shown below;
12
one conventional (analog) FM voice channel plus three P25
13
signals.  The two P25 voice channels are to be IMBE-decoded whereas the
14 4 max
P25 data channel is to be sent to Wireshark after decoding.  For all three voice
15
channels, we want to forward the received PTT and audio info to Asterisk app_rpt.
16
The received PTT [Push To Talk, or "keyed"] signal is a bit that ideally tracks
17
the state of the PTT key at transmitter, indicating the presence or absence of the
18
received signal.
19 1 max
20 3 max
[[Image(sa.png)]]
21
22 1 max
Fig. 1 - Spectrum of repeater input band (sample; diagram not to scale)
23
24
For now, it's necessary to edit the source code file manually to specify
25
the list of channels/modes to be received (file usrp_rx.py):
26
27
{{{
28
channels = [
29
	{'freq':435.200e6, 'mode':'c4fm',  'port':32001},
30
	{'freq':435.350e6, 'mode':'fm',    'port':32002, 'ctcss':97.4},
31
	{'freq':435.600e6, 'mode':'cqpsk', 'port':23456, 'wireshark':1},
32
	{'freq':435.775e6, 'mode':'cqpsk', 'port':32003}
33
]
34
}}}
35
36
Individual channels are defined one per line; note that all definition lines
37
except the last must end with a comma.
38
39
We choose a frequency somewhere close to the center of this band.
40
which will set the USRP's nominal receive frequency; this must also
41
be manually set in the source file:
42
43
{{{
44
center_freq = 435.500e6
45
}}}
46
47
Before running the receiver app, we
48
 * measure the current calibration error value (I use kalibrate)
49
 * determine the optimum USRP receiver gain value
50
The values used in this example are +1234 and 35, respectively.
51
52
We're now ready to start the receiver:
53
54
{{{
55
usrp_rx.py -RA -c 1234 -H 127.0.0.1 -g 35 -d 25
56
}}}
57
58
The receiver continuously monitors all four channels.  For each of the three
59
voice channels, the audio and the PTT info ("key up" and "key down" events)
60
are forwarded to asterisk app_rpt over separate UDP channels.
61
62
 = P25 and/or analog NBFM Reception using a discriminator-tapped receiver =
63
64
One or more disc-tapped conventional receivers may be used at the same time, and can
65
coexist with one or more USRP's.
66
67 4 max
An audio cable is connected between the disc-tap point in the receiver and the PC soundcard.
68
69 1 max
Single-channel reception is possible using disctap_rx.py.
70 4 max
The app dynmically auto-detects the modulation type (P25 or analog NBFM).
71 1 max
72
Audio and PTT events are forwarded to asterisk app_rpt over two separate UDP
73 4 max
channels, depending on modulation type:
74
 * received P25 audio is sent to asterisk on UDP port 32004
75
 * when analog NBFM is received with the proper CTCSS tone (97.4 Hz), port 32005 is used
76 1 max
77
{{{
78
 disctap_rx.py -i -A 0.05 -c 97.4 -H 127.0.0.1 -p 32004 -g 35 -d 25
79
}}}
80
81
The -g (gain) parameter is used to set the proper audio gain level.  See
82
the hardware page for further guidance - this value is important for achieving
83
correct operation.
84 4 max
85
 = Asterisk and app_rpt =
86
87
For all voice modes (IMBE and analog FM) the audio is transmitted
88
as frames over the UDP channel to and from Asterisk in the standard native audio format:
89
 * 50 frames per second
90
 * 160 audio samples per frame
91
 * 8000 samples / second
92
 * signed
93
 * 16-bit
94
 * linear
95
96 5 max
 == Installation ==
97
98
First, obtain and unpack the app_rpt source tree.
99
100
Second, locate the subdirectory named {{{asterisk/channels}}} in the source tree you just unpacked,
101
and copy the files {{{chan_usrp.c}}} and {{{chan_usrp.h}}} (from {{{src/lib}}}) to this subdirectory.
102
103
Next, build and install asterisk and app_rpt, and verify that chan_usrp is included
104
105
 == Configuration ==
106
107
We define five repeater nodes in {{{/etc/asterisk/rpt.conf}}}
108
109
{{{
110
[000]
111
rxchannel = usrp/127.0.0.1:34001:32001
112
duplex = 2
113
scheduler=scheduler
114
functions = functions-repeater
115
hangtime=0
116
authlevel = 0
117
118
[001]
119
rxchannel = usrp/127.0.0.1:34002:32002
120
duplex = 2
121
scheduler=scheduler
122
functions = functions-repeater
123
hangtime=0
124
authlevel = 0
125
126
[002]
127
rxchannel = usrp/127.0.0.1:34003:32003
128
duplex = 2
129
scheduler=scheduler
130
functions = functions-repeater
131
hangtime=0
132
authlevel = 0
133
134
[003]
135
rxchannel = usrp/127.0.0.1:34004:32004
136
duplex = 2
137
scheduler=scheduler
138
functions = functions-repeater
139
hangtime=0
140
authlevel = 0
141
142
[004]
143
rxchannel = usrp/127.0.0.1:34005:32005
144
duplex = 2
145
scheduler=scheduler
146
functions = functions-repeater
147
hangtime=0
148
authlevel = 0
149
}}}
150
151
Continuing the example of five voice channels from above, we define five repeater nodes (channels).  Voice and PTT traffic that 
152
is output by asterisk/app_rpt for RF transmission is forwarded to usrp_tx.py (see below) using UDP ports in the 3400x range.
153
Voice data received in usrp_rx.py and/or disctap_rx.py is forwarded to asterisk/app_rpt (chan_usrp.c) via ports in the 3200x range.
154
155
The driver invocation in {{{rpt.conf}}} is
156
{{{
157
    usrp/HISIP:HISPORT[:MYPORT]       
158
    HISIP is the IP address (or FQDN) of the GR app
159
    HISPORT is the UDP socket of the GR app
160
    MYPORT (optional) is the UDP socket that Asterisk listens on
161
             for this channel   
162
}}}
163
164
TIP: You can use the {{{usrp show}}} command to display status information from within the Asterisk CLI.
165
166
TIP: Another handy command is {{{rpt playback}}} to start transmission on a channel.
167
168
 == Channel Bank Configuration ==
169
170
Typically the audio links are terminated on channel banks which provide a standard interface to user
171
equipment.  Commonly, this equipment places an "offhook" indication on the signalling circuit when it
172
wishes to initiate a radio transmission, and signals the end of the transmission by placing the circuit
173
in the "onhook" state.  Standard audio transmission levels are defined at the channel bank interface.
174
175
A standard FXS port on the channel bank is defined in {{{/etc/asterisk/zapata.conf}}} with
176
{{{
177
signalling=fxo_ls
178
immediate=yes
179
context = chan1
180
channel => 1
181
}}}
182
183
An offhook (PTT) signal from user equipment on the FXS channel bank port 
184
(due to the {{{immmediate=yes}}}) starts processing in {{{/etc/asterisk/extensions.conf}}}:
185
186
{{{
187
[chan1]
188
exten => s,1,Dial(local/1@radio/n)
189
   This jumps to exten "1" in
190
[radio]
191
exten => 1,1,rpt(000|D)
192
exten => 2,1,rpt(001|D)
193
exten => 3,1,rpt(002|D)
194
exten => 4,1,rpt(003|D)
195
exten => 5,1,rpt(004|D)
196
}}}
197
198
So the call resulting from the offhook (PTT) signal is routed to 
199
extension "1" in context {{{[radio]}}} where it's connected to the desired
200
repeater node (channel).  If the GR app is running it will initiate
201
radio transmission.  An onhook signal on the FXS channel bank port
202
causes the end of the transmission by ending the asterisk call in
203
progress*. The {{{hangtime=0}}} setting in {{{rpt.conf}}} was used to reduce the
204
tail delay in this setup.
205
206
*The end of the transmission may be modified however, for example when
207
app_rpt appends an "ID" or if a "timeout" occurs.
208
209
Note: "Dumb" mode is used in these examples (theory: if it can't be made to work in its dumb mode, there's no prayer of getting smart mode to work)
210 4 max
211
 = Transmission (USRP and conventional) =
212
213
TBC
Add picture from clipboard (Maximum size: 48.8 MB)