Work on documentation

This commit is contained in:
Andreas Eversberg 2016-05-05 18:31:34 +02:00
parent 1ce67c14e9
commit ba91ee82a7
37 changed files with 1661 additions and 205 deletions

7
README
View File

@ -3,9 +3,10 @@ radio transmitter and receiver connected to one sound card and a headset
connected to another sound card, it is possible to make and receive calls to
and from mobile phone. Currently supported networks:
* A-Netz base station
* B-Netz (ATF-1) base station
* NMT (Nordic Mobile Telephone)
* A-Netz
* B-Netz (ATF-1)
* C-Netz
* NMT 450 (Nordic Mobile Telephone)
USE AT YOUR OWN RISK!

BIN
docs/a-netz-green.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
docs/a-netz-inside.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 593 KiB

BIN
docs/a-netz-yellow.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

View File

@ -1,51 +1,247 @@
<html>
<head>
<link href="style.css" rel="stylesheet" type="text/css" />
<title>osmocom-analog</title>
</head>
<body>
<center><table border='0' cellspacing='0' cellpadding='0' width='816'><tr><td><font face="ARIAL" size='5'>
<center><table><tr><td>
<h2><center>A-Netz</center></h2>
<center><img src="a-netz.jpg"/></center>
<p align='justify'>
<ul>
<li><a href="#history">History</a>
<li><a href="#howitworks">How it works</a>
<li><a href="#basestation">Setup of a base station</a>
</ul>
<p class="toppic">
<a name="history"></a>
History
</p>
<p>
A-Netz was the first mobile telephone network in Germany.
It existed between 1985 and 1977.
The first mobile units were huge and heavy and consisted of radio tubes.
Only big cars could carry these units in their trunk.
It used full duplex radio link.
The call was placed by an operator.
After full deployment, there were 136 base stations with a sum of 317 radio transceivers.
A maximum of 10,784 subscribers were counted 1971. The basic charge was 65 German Marks (A1-Netz), 45 German Marks (A2-Netz / A3-netz).
The German Federal Post Office then raised the price to 270 German Marks in 1972. Also the second mobile network (B-Netz) was deployed.
The number of subscribers decreased to 787 on shutdown in 1977.
</p>
<center><img src="a-netz-inside.jpg"/></center>
<p>
<ul>
<li>Frequency range: between 156 MHz and 174 MHz
<li>17 operator switched channels (30..46) for A1-Netz
<li>19 operator switched channels (47..63, 86, 87) for A2-Netz
<li>5 semi-automatic switched channels (65, 66, 68, 72, 75) for A3-Netz
<li>Duplex distance: 4.5 MHz
<li>Channel spacing: 50 KHz (20 kHz for A3-Netz)
<li>Modulation: FM
<li>Frequency deviation: 11..15 KHz
<li>Mobile station transmit power: 8..12 Watts
<li>Base station transmit power: 5..30 Watts
</ul>
</p>
<p class="toppic">
<a name="howitworks"></a>
How it works
</p>
<p>
1. Idle state
<br><br>
A base station transmits a continuous 2280 Hz idle tone on downlink channel.
A mobile station detects this tone and indicates a green light.
If the channel is busy or unused in that area, the green light does not appear.
The user must switch channel using the dial.
</p>
<center><img src="a-netz-green.jpg"/></center>
<p>
2. Call from mobile station
<br><br>
The mobile station will only seize the channel, if the green light is on, otherwise it is blocked.
When the user picks up the handset, the phone switches on its transmitter on uplink channel and transmits a continous 1750 Hz calling tone.
The base station receives this tone and turns off its 2280 Hz idle tone.
The mobile station detects the tone is missing and turns off its 1750 calling tone.
The the speech path is connected through to an operator.
The operator asks for the mobile station number and the number to dial and places the call.
</p>
<p>
3. Call to mobile station
<br><br>
A caller calls the operator and tells the number and the location of the mobile station to reach.
The first 2 digits of the 7-digits mobile station number define on which channel the mobile station has to be paged.
(The user of the mobile station as well as the operator have a list of the calling channels for all base station.
This list shows which 2 digits refer to which channel in a particular area.
The user must select the right channel in order to get paged.)
<br><br>
The third digit of the mobile station number defines what groups of frequencies are used for paging the phone. For each of the last four digits there is a group. (Some digits use the same group.)
</p>
<p>
<ul>
<li>Number xx0xxxx: 2, 2, 3, 3
<li>Number xx1xxxx: 1, 1, 2, 2
<li>Number xx2xxxx: 1, 1, 3, 3
<li>Number xx3xxxx: 1, 1, 2, 3
<li>Number xx4xxxx: 1, 2, 2, 3
<li>Number xx5xxxx: 1, 2, 3, 3
<li>Number xx6xxxx: 1, 1, 1, 2
<li>Number xx7xxxx: 1, 1, 1, 3
<li>Number xx8xxxx: 2, 2, 2, 3
<li>Number xx9xxxx: 1, 2, 2, 2
</ul>
</p>
<p>
If a number is 2431790, the third digit ('3') tells us use group 1 for digits four and five, group 2 for digit six and group 3 for digit seven.
</p>
<p>
Group 1:
<ul>
<li>Digit 1: 352.5 Hz
<li>Digit 2: 367.5 Hz
<li>Digit 3: 382.5 Hz
<li>Digit 4: 397.5 Hz
<li>Digit 5: 412.5 Hz
<li>Digit 6: 427.5 Hz
<li>Digit 7: 442.5 Hz
<li>Digit 8: 457.5 Hz
<li>Digit 9: 472.5 Hz
<li>Digit 0: 487.5 Hz
</ul>
</p>
<p>
Group 2:
<ul>
<li>Digit 1: 502.5 Hz
<li>Digit 2: 517.5 Hz
<li>Digit 3: 532.5 Hz
<li>Digit 4: 547.5 Hz
<li>Digit 5: 562.5 Hz
<li>Digit 6: 577.5 Hz
<li>Digit 7: 592.5 Hz
<li>Digit 8: 607.5 Hz
<li>Digit 9: 622.5 Hz
<li>Digit 0: 637.5 Hz
</ul>
</p>
<p>
Group 3:
<ul>
<li>Digit 1: 652.5 Hz
<li>Digit 2: 667.5 Hz
<li>Digit 3: 682.5 Hz
<li>Digit 4: 697.5 Hz
<li>Digit 5: 712.5 Hz
<li>Digit 6: 727.5 Hz
<li>Digit 7: 742.5 Hz
<li>Digit 8: 757.5 Hz
<li>Digit 9: 772.5 Hz
<li>Digit 0: 787.5 Hz
</ul>
</p>
<p>
Because our 4th digit is 1, we find 352.5 Hz in group 1.
Because our 5th digit is 7, we find 442.5 Hz in group 1.
Because our 6th digit is 9, we find 622.5 Hz in group 2.
Because our 7th digit is 0, we find 787.5 Hz in group 3.
<br><br>
All these tones are sent simultaniously from the base station to the mobile startion.
The mobile stations has four detectors for the four frequencies.
If all four tones are detected by the mobile station, a yellow light and a buzzing sound is indicated.
There is no ringback indication from the mobile station to the base station.
When the user picks up the handset, the phone switches on its transmitter on uplink channel and transmits a continous 1750 Hz answer tone.
The base station receives this tone and turns off the four paging tones.
The mobile station detects the tone is missing and turns off its 1750 answer tone.
The the speech path is connected through to the caller (or operator).
</p>
<center><img src="a-netz-yellow.jpg"/></center>
<p>
4. Release by the mobile station
<br><br>
If the user hangs up, the mobile station transmits a continous 1750 Hz release tone.
The base station receives this tone and disconnects the call. It transmits the continous 2280 Hz idle tone.
The mobile station receives this tone and turns off the transmitter.
</p>
<p>
5. Release by the base station
<br><br>
If the caller or the operator hangs up, the base station returns to idle. It transmits the continous 2280 Hz idle tone.
The mobile station receives this tone and turns off the transmitter.
</p>
<p class="toppic">
<a name="basestation"></a>
Setup of a base station
</p>
<p>
Now run your base station on channel 30.
Tune the transmitter to 162.050 MHz and the receiver to 157.550.
You should tune the receiver to 164.050 first, to check if you hear the idle signal from the base station.
Then tune to actually uplink frequency 157.550 MHz.
The actual level is not yet relevant.
(You may check the quality using '-L 2' command line option and build a radio loop by tuning the receiver to the transmitter.)
</p>
<font size='4'><pre>
<pre>
# src/anetz/anetz -k 30
...
anetz.c:170 info : Entering IDLE state, sending 2280 Hz tone.
Base station ready, please tune transmitter to 162.050 MHz and receiver to 157.550 MHz.
on-hook: ..... (enter 0..9 or d=dial)
</pre></font>
</pre>
<center><img src="a-netz-display.jpg"/></center>
<p align='justify'>
<p>
Turn on you phone and wait for it to warm up (requires about half a minute).
Tune the phone to channel 30 and switch on your transmitter for the base station.
Tune the phone to channel 30 and switch on your transmitter of the base station.
The phone should indicate a (green) light, to show idle channel.
If there is no green light, increase the level of your FM signal on the transmitter.
If there is no green light, increase the level of your FM signal to the transmitter.
Or if you can't increase the audio level on the transmitter, do it with 'alsamixer'.
</p>
<font size='4'><pre>
<pre>
dsp.c:150 info : Detecting continous 1750 Hz tone. (level = 137%)
anetz.c:244 info : Received 1750 Hz calling signal from mobile station, removing idle signal.
dsp.c:133 info : Lost 1750 Hz tone after 0 ms.
anetz.c:256 info : 1750 Hz signal from mobile station is gone, setup call.
call.c:574 info : Incomming call from '' to 'operator'
... after hangup...
dsp.c:150 info : Detecting continous 1750 Hz tone. (level = 141%)
anetz.c:272 info : Received 1750 Hz release signal from mobile station, sending idle signal.
anetz.c:201 info : Entering IDLE state, sending 2280 Hz tone.
call.c:695 info : Call has been released with cause=16
dsp.c:133 info : Lost 1750 Hz tone after 0 ms.
call disconnected: hangup (enter h=hangup)
</pre></font>
<p align='justify'>
</pre>
<p>
When you pick up the phone, the phone transmits a 1750 Hz calling tone.
On reception at the base station, the base station removes the 2280 Hz idle tone.
After that the call is establised.
@ -55,17 +251,36 @@ Then the base station returns to idle again and sends the 2280 Hz idle tone.
Be sure that the phone turns off the transmitter and indicates the (green) light.
</p>
<p align='justify'>
To call to the phone, be sure that your transmitter transmits loud enough to send 4 sine waves at once.
<p>
Level adjustment:
We see a receive level of arround 140%.
Use the variable resistor (connecting your receiver) to reduce the volume until the level matches about 100% (+- 10%).
Then start the base station using '-L 2' option for loopback and tune receiver to the transmitter.
The base station generates a 1750 Hz test signal, just like the phone.
Use the other variable resistor (connecting your transmitter) to match the same level of your phone.
In this case it is the 100% you adjusted the receiver to.
Now, whatever frequency deviation the phone transmits at 1750 Hz, so does your base station.
</p>
<p>
To call to the phone, be sure that your transmitter transmits 'loud' enough to send the four paging sine waves.
The frequncy deviation should be between 11 and 15 KHz.
If transmitter limits the deviation, check if the limit can be adjusted up.
Alternatively a direct connection to the PLL is suggested.
</p>
<p>
Start the base station, if not running already.
Enter the last 5 digits of the phone's number and press 'd' to dial.
If you listen to the transmit signal, you should hear 4 low pitched tones at once.
They are quite loud, if you use the pre-empfasis inside your transmitter. (default)
The phone should now turn off the green light and indicate an incomming call with a yellow light and a buzzer sound.
There is no acknowledgement from the phone until you pick up the call.
If the phone does not indicate an incomming call, increase the volume of the transmit signal, but be sure not to overdrive it.
Also be sure that you are actually dialing the right number, so the base station generates the correct paging tones for your phone.
</p>
<p align='justify'>
<p>
Instead of transmitting all 4 tones at once, they can be transmitted after each other.
Each tone is playes for a short time.
After the last tone has been played, base station starts again with the first tone.
@ -76,7 +291,13 @@ Try something between 20-100 milliseconds, if the phone still doesn't ring.
Be sure to check: Does your transmitter has enough frequency deviation (15 KHz is suggested)? Do you really send the correct number of your phone, check the frequencies of your phone and use "-D 0" option to see what 4 frequencies the base station actually transmits.
</p>
<p>
Detecting loss of carrier signal:
To automatically release the call, when the carrier signal gets lost, look at the B-Netz page.
It is the same priciple.
</p>
[<a href="index.html">Back to main page</a>]
</font></td></tr></table></center>
</td></tr></table></center>
</body>
</html>

BIN
docs/b-netz-phone.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

View File

@ -1,71 +1,624 @@
<html>
<head>
<link href="style.css" rel="stylesheet" type="text/css" />
<title>osmocom-analog</title>
</head>
<body>
<center><table border='0' cellspacing='0' cellpadding='0' width='816'><tr><td><font face="ARIAL" size='5'>
<center><table><tr><td>
<h2><center>B-Netz</center></h2>
<center><img src="b-netz.jpg"/></center>
<p align='justify'>
<ul>
<li><a href="#history">History</a>
<li><a href="#howitworks">How it works</a>
<li><a href="#basestation">Setup of a base station</a>
</ul>
<p class="toppic">
<a name="history"></a>
History
</p>
<p>
B-Netz was the second mobile telephone network in Germany.
It was the successor of the A-Netz.
It existed between 1972 and 1994.
Using digital technology and later microprocessors, the phone were still as big as a suitcase.
It used full duplex radio link.
The call was placed by atomatic dialing in both direction, so no requirement for an operator.
After full deployment in 1986, there were 158 base stations.
Early devices used up to 38 voice channels. Later units used up to 75 voice channels.
A maximum of about 27,000 subscribers were counted 1986.
The basic charge in the beginning was 270 German Marks.
Calls were charged like regular calls.
The network was congested in 1979, so there was a stop for new subscribers.
Due to congestion, in 1980, the German Federal Post Office lowered the basic charge down to 180 German Marks, but added an extra charge of about 1 German Marks per minute, no matter what direction the call was made.
This helped to lower the channel allocation time.
</p>
<center><img src="b-netz-phone.jpg"/></center>
<p>
<ul>
<li>Frequency range: 153.01 - 153.73 MHz (downlink); 148.41 - 149.13 MHz (uplink)
<li>38 voice channels for B1-Netz
<li>75 voice channels for B2-Netz
<li>1 paging channel
<li>Duplex distance: 4.6 MHz
<li>Channel spacing: 20 KHz
<li>Modulation: FM
<li>Frequency deviation: 4 KHz
<li>Mobile station transmit power: 15 Watts (100 mW for special channels)
<li>Base station transmit power: 10..30 Watts (100 mW for special channels)
</ul>
</p>
<p class="toppic">
<a name="howitworks"></a>
How it works
</p>
<p>
Two tones are used for signalling:
</p>
<p>
<ul>
<li>F0 = 2070 Hz
<li>F1 = 1950 Hz
</ul>
</p>
<p>
For continuous signals, the tones must be detected at least 70ms.
</p>
<br>
<p>
Continuous tones used by mobile station:
<p>
<ul>
<li>Kanalbelegung: F0 is sent by the mobile to allocate a channel for outgoing call.
<li>Rufbest&auml;tigung: F1 is sent by the mobile to acknowledge incomming call.
<li>Beginnsignal: F0 is sent by mobile to indicate answer of the mobile subscriber.
</ul>
</p>
<p>
Continuous tones used by base station:
</p>
<p>
<ul>
<li>Wahlabruf: F1 is sent by the base station to acknowledge outging call.
<li>Rufhaltung: F1 is sent by the base station while the mobile station is ringing.
</ul>
</p>
<br>
<p>
Digits are coded as 16 bits and transferred at a rate of 100 bits per second.
Each bit consists of the signalling tones F0 and F1 and has a duration of 10 ms.
All digit starts with sync pattern ("0 1 1 1 0").
</p>
<pre class="list">
Sync
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 1 1 1 0|0 1 0 0 0|1|0 0 0 1 0| Funkwahl ohne Geb&uuml;hren&uuml;bermittlung
|0 1 1 1 0|0 0 1 0 0|1|0 0 1 0 0| Funkwahl mit Geb&uuml;hren&uuml;bermittlung
|0 1 1 1 0|1 0 0 0 0|1|0 0 0 0 1| Funkwahlende
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Sync
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 1 1 1 0|1 1 0 0 0|0|0 0 0 1 1| Wahlziffer 0
|0 1 1 1 0|1 0 1 0 0|0|0 0 1 0 1| Wahlziffer 1
|0 1 1 1 0|1 0 0 1 0|0|0 1 0 0 1| Wahlziffer 2
|0 1 1 1 0|1 0 0 0 1|0|1 0 0 0 1| Wahlziffer 3
|0 1 1 1 0|0 1 1 0 0|0|0 0 1 1 0| Wahlziffer 4
|0 1 1 1 0|0 1 0 1 0|0|0 1 0 1 0| Wahlziffer 5
|0 1 1 1 0|0 1 0 0 1|0|1 0 0 1 0| Wahlziffer 6
|0 1 1 1 0|0 0 1 1 0|0|0 1 1 0 0| Wahlziffer 7
|0 1 1 1 0|0 0 1 0 1|0|1 0 1 0 0| Wahlziffer 8
|0 1 1 1 0|0 0 0 1 1|0|1 1 0 0 0| Wahlziffer 9
|0 1 1 1 0|0 0 0 1 1|0|0 1 0 0 1| Wahlziffer 2
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Sync
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 1 1 1 0|1 0 1 0 1|0|1 0 1 0 1| Trennsignal
|0 1 1 1 0|1 0 1 0 1|0|1 0 1 0 1| Schlu&szlig;signal
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Sync
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 1 1 1 0|0 0 0 1 1|0|0 0 1 0 1| Gruppenfreisignal 1
|0 1 1 1 0|0 0 0 1 1|0|0 1 0 0 1| Gruppenfreisignal 2
|0 1 1 1 0|0 0 0 1 1|0|1 0 0 0 1| Gruppenfreisignal 3
|0 1 1 1 0|0 0 0 1 1|0|0 0 1 1 0| Gruppenfreisignal 4
|0 1 1 1 0|0 0 0 1 1|0|0 1 0 1 0| Gruppenfreisignal 5
|0 1 1 1 0|0 0 0 1 1|0|1 0 0 1 0| Gruppenfreisignal 6
|0 1 1 1 0|0 0 0 1 1|0|0 1 1 0 0| Gruppenfreisignal 7
|0 1 1 1 0|0 0 0 1 1|0|1 0 1 0 0| Gruppenfreisignal 8
|0 1 1 1 0|0 0 0 1 1|0|0 0 0 1 1| Gruppenfreisignal 9
|0 1 1 1 0|0 0 1 0 1|0|0 0 0 1 1| Gruppenfreisignal 10
|0 1 1 1 0|0 0 1 0 1|0|0 0 1 0 1| Gruppenfreisignal 11
|0 1 1 1 0|0 0 1 0 1|0|0 1 0 0 1| Gruppenfreisignal 12
|0 1 1 1 0|0 0 1 0 1|0|1 0 0 0 1| Gruppenfreisignal 13
|0 1 1 1 0|0 0 1 0 1|0|0 0 1 1 0| Gruppenfreisignal 14
|0 1 1 1 0|0 0 1 0 1|0|0 1 0 1 0| Gruppenfreisignal 15
|0 1 1 1 0|0 0 1 0 1|0|1 0 0 1 0| Gruppenfreisignal 16
|0 1 1 1 0|0 0 1 0 1|0|0 1 1 0 0| Gruppenfreisignal 17
|0 1 1 1 0|0 0 1 0 1|0|1 0 1 0 0| Gruppenfreisignal 18
|0 1 1 1 0|0 0 1 0 1|0|1 1 0 0 0| Gruppenfreisignal 19
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Sync
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 1 1 1 0|1 1 0 0 0|0|0 0 1 0 1| Kanalbefehl 1
|0 1 1 1 0|1 1 0 0 0|0|0 1 0 0 1| Kanalbefehl 2
|0 1 1 1 0|1 1 0 0 0|0|1 0 0 0 1| Kanalbefehl 3
|0 1 1 1 0|1 1 0 0 0|0|0 0 1 1 0| Kanalbefehl 4
|0 1 1 1 0|1 1 0 0 0|0|0 1 0 1 0| Kanalbefehl 5
|0 1 1 1 0|1 1 0 0 0|0|1 0 0 1 0| Kanalbefehl 6
|0 1 1 1 0|1 1 0 0 0|0|0 1 1 0 0| Kanalbefehl 7
|0 1 1 1 0|1 1 0 0 0|0|1 0 1 0 0| Kanalbefehl 8
|0 1 1 1 0|1 1 0 0 0|0|1 1 0 0 0| Kanalbefehl 9
|0 1 1 1 0|1 0 1 0 0|0|0 0 0 1 1| Kanalbefehl 10
|0 1 1 1 0|0 1 1 0 0|0|0 0 1 0 1| Kanalbefehl 11
|0 1 1 1 0|1 0 1 0 0|0|0 1 0 0 1| Kanalbefehl 12
|0 1 1 1 0|1 0 1 0 0|0|1 0 0 0 1| Kanalbefehl 13
|0 1 1 1 0|1 0 1 0 0|0|0 0 1 1 0| Kanalbefehl 14
|0 1 1 1 0|1 0 1 0 0|0|0 1 0 1 0| Kanalbefehl 15
|0 1 1 1 0|1 0 1 0 0|0|1 0 0 1 0| Kanalbefehl 16
|0 1 1 1 0|1 0 1 0 0|0|0 1 1 0 0| Kanalbefehl 17
|0 1 1 1 0|1 0 1 0 0|0|1 0 1 0 0| Kanalbefehl 18
|0 1 1 1 0|1 0 0 1 0|0|0 0 0 1 1| Kanalbefehl 20
|0 1 1 1 0|1 0 0 1 0|0|0 0 1 0 1| Kanalbefehl 21
|0 1 1 1 0|0 1 1 0 0|0|0 1 0 0 1| Kanalbefehl 22
|0 1 1 1 0|1 0 0 1 0|0|1 0 0 0 1| Kanalbefehl 23
|0 1 1 1 0|1 0 0 1 0|0|0 0 1 1 0| Kanalbefehl 24
|0 1 1 1 0|1 0 0 1 0|0|0 1 0 1 0| Kanalbefehl 25
|0 1 1 1 0|1 0 0 1 0|0|1 0 0 1 0| Kanalbefehl 26
|0 1 1 1 0|1 0 0 1 0|0|0 1 1 0 0| Kanalbefehl 27
|0 1 1 1 0|1 0 0 1 0|0|1 0 1 0 0| Kanalbefehl 28
|0 1 1 1 0|1 0 0 1 0|0|1 1 0 0 0| Kanalbefehl 29
|0 1 1 1 0|1 0 0 0 1|0|0 0 0 1 1| Kanalbefehl 30
|0 1 1 1 0|1 0 0 0 1|0|0 0 1 0 1| Kanalbefehl 31
|0 1 1 1 0|1 0 0 0 1|0|0 1 0 0 1| Kanalbefehl 32
|0 1 1 1 0|0 1 1 0 0|0|1 0 0 0 1| Kanalbefehl 33
|0 1 1 1 0|1 0 0 0 1|0|0 0 1 1 0| Kanalbefehl 34
|0 1 1 1 0|1 0 0 0 1|0|0 1 0 1 0| Kanalbefehl 35
|0 1 1 1 0|1 0 0 0 1|0|1 0 0 1 0| Kanalbefehl 36
|0 1 1 1 0|1 0 0 0 1|0|0 1 1 0 0| Kanalbefehl 37
|0 1 1 1 0|1 0 0 0 1|0|1 0 1 0 0| Kanalbefehl 38
|0 1 1 1 0|1 0 0 0 1|0|1 1 0 0 0| Kanalbefehl 39
|0 1 1 1 0|0 1 0 1 0|0|0 0 0 1 1| Kanalbefehl 50
|0 1 1 1 0|0 1 0 1 0|0|0 0 1 0 1| Kanalbefehl 51
|0 1 1 1 0|0 1 0 1 0|0|0 1 0 0 1| Kanalbefehl 52
|0 1 1 1 0|0 1 0 1 0|0|1 0 0 0 1| Kanalbefehl 53
|0 1 1 1 0|0 1 0 1 0|0|0 0 1 1 0| Kanalbefehl 54
|0 1 1 1 0|0 1 1 0 0|0|0 1 0 1 0| Kanalbefehl 55
|0 1 1 1 0|0 1 0 1 0|0|1 0 0 1 0| Kanalbefehl 56
|0 1 1 1 0|0 1 0 1 0|0|0 1 1 0 0| Kanalbefehl 57
|0 1 1 1 0|0 1 0 1 0|0|1 0 1 0 0| Kanalbefehl 58
|0 1 1 1 0|0 1 0 1 0|0|1 1 0 0 0| Kanalbefehl 59
|0 1 1 1 0|0 1 0 0 1|0|0 0 0 1 1| Kanalbefehl 60
|0 1 1 1 0|0 1 0 0 1|0|0 0 1 0 1| Kanalbefehl 61
|0 1 1 1 0|0 1 0 0 1|0|0 1 0 0 1| Kanalbefehl 62
|0 1 1 1 0|0 1 0 0 1|0|1 0 0 0 1| Kanalbefehl 63
|0 1 1 1 0|0 1 0 0 1|0|0 0 1 1 0| Kanalbefehl 64
|0 1 1 1 0|0 1 0 0 1|0|0 1 0 1 0| Kanalbefehl 65
|0 1 1 1 0|0 1 1 0 0|0|1 0 0 1 0| Kanalbefehl 66
|0 1 1 1 0|0 1 0 0 1|0|0 1 1 0 0| Kanalbefehl 67
|0 1 1 1 0|0 1 0 0 1|0|1 0 1 0 0| Kanalbefehl 68
|0 1 1 1 0|0 1 0 0 1|0|1 1 0 0 0| Kanalbefehl 69
|0 1 1 1 0|0 0 1 1 0|0|0 0 0 1 1| Kanalbefehl 70
|0 1 1 1 0|0 0 1 1 0|0|0 0 1 0 1| Kanalbefehl 71
|0 1 1 1 0|0 0 1 1 0|0|0 1 0 0 1| Kanalbefehl 72
|0 1 1 1 0|0 0 1 1 0|0|1 0 0 0 1| Kanalbefehl 73
|0 1 1 1 0|0 0 1 1 0|0|0 0 1 1 0| Kanalbefehl 74
|0 1 1 1 0|0 0 1 1 0|0|0 1 0 1 0| Kanalbefehl 75
|0 1 1 1 0|0 0 1 1 0|0|1 0 0 1 0| Kanalbefehl 76
|0 1 1 1 0|0 1 1 0 0|0|0 1 1 0 0| Kanalbefehl 77
|0 1 1 1 0|0 0 1 1 0|0|1 0 1 0 0| Kanalbefehl 78
|0 1 1 1 0|0 0 1 1 0|0|1 1 0 0 0| Kanalbefehl 79
|0 1 1 1 0|0 0 1 0 1|0|0 0 0 1 1| Kanalbefehl 80
|0 1 1 1 0|0 0 1 0 1|0|0 0 1 0 1| Kanalbefehl 81
|0 1 1 1 0|0 0 1 0 1|0|0 1 0 0 1| Kanalbefehl 82
|0 1 1 1 0|0 0 1 0 1|0|1 0 0 0 1| Kanalbefehl 83
|0 1 1 1 0|0 0 1 0 1|0|0 0 1 1 0| Kanalbefehl 84
|0 1 1 1 0|0 0 1 0 1|0|0 1 0 1 0| Kanalbefehl 85
|0 1 1 1 0|0 0 1 0 1|0|1 0 0 1 0| Kanalbefehl 86
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</pre>
<br>
<p>
Digits used by mobile station:
</p>
<p>
<ul>
<li>Funkwahl ohne Geb&uuml;hren&uuml;bermittlung: dialing without metering support
<li>Funkwahl mit Geb&uuml;hren&uuml;bermittlung: dialing with metering support
<li>Wahlziffer: dialing digits
<li>Funkwahlende: end of dialing
<li>Schlu&szlig;signal: hangup signal
</ul>
</p>
<p>
Digits used by base station:
</p>
<p>
<ul>
<li>Gruppenfreisignal: idle pattern
<li>Wahlziffer: dialing digits
<li>Kanalbefehl: channel assignment
<li>Trennsignal: clear signal
</ul>
</p>
<br>
<p>
Idle base station:
</p>
<p>
When a base station transceiver is idle, it repeatingly sends one idle pattern ("Gruppenfreisignal") on downlink.
This signal can be used by the mobile subscriber to select a particular base stations to lower call fees or to select the base station that a car is driving close to.
If no pattern is selected, the mobile station selects any base station on mobile originated call.
If a pattern 1..9 is selected, the mobile station selects only the base stations which sends that idle pattern.
</p>
<p>
There is a special idle pattern that is used for reduced TX power.
This is used in areas with many base station that are close together.
The idle signal 19 is used.
The mobile station will reduce TX power when selecting this base station for outgoing call.
</p>
<br>
<p>
Call from mobile station:
</p>
<p>
The mobile station starts scanning all traffic channels one time.
If there is a signal on the channel, the mobile station tries to decode it for 400 ms max.
If there is no signal or if there is no idle pattern or if the idle pattern does not match the selected one, the mobile station continues with the next channel.
If no channel is found, a busy signal is indicated to the mobile subscriber.
</p>
<p>
If a free and suitable channel was found, the mobile station sends channel allocation signal ("Kanalbelegung") on uplink channel and waits for dial request signal ("Wahlabruf") from the base station.
</p>
<p>
When the base station receives the channel allocation signal, it stops idle pattern and transmits dial request signal.
</p>
<p>
If no dial request signal is received within *TBD* seconds, the mobile station will *TBD*.
</p>
<p>
When the mobile station receives the dial request signal, it seamlessly transmits a dial string.
The string consist of a start signal ("Funkwahl"), 5 digits ("Wahlziffern") of mobile identity, dialed digits (without 0 at the beginning) and the stop signal ("Funkwahlende"):
</p>
<p>
<ul>
<li>Funkwahl
<li>Wahlziffer 5 (Example of mobile identity: 50993)
<li>Wahlziffer 0
<li>Wahlziffer 9
<li>Wahlziffer 9
<li>Wahlziffer 3
<li>Wahlziffer 3 (Example of dialing: 0310, no first digit)
<li>Wahlziffer 1
<li>Wahlziffer 0
<li>Funkwahlende
</ul>
</p>
<p>
The mobile station can send two different start signals.
One indicates to the base station to send metering pulses.
If metering is selected, the bandwidth is reduced from 3000 Hz down to 2700 Hz.
The metering pulse is then sent as a 2900 Hz tone.
The duration is *TBD* ms and the frequency deviation *TBD* KHz.
</p>
<p>
While dialing is received by the base station, it repeats the 5 digits of mobile identy.
This takes place after *TBD*.
</p>
<p>
The mobile station compares the repeated identiy and *TBD* if it mismatches.
</p>
<p>
The dial string is repeated once again by the mobile station.
Afterwards the mobile station connects the speech path and conversation takes place.
</p>
<p>
If the dial string is received correctly once again by the base station, it connectes the speech path and conversation takes place.
</p>
<p>
If the base station receives different repeated dialing or different mobile identity, it sends clear signal ("Trennsignal") for 12 seconds and returns to idle state.
</p>
<p>
If the mobile stations receives clear signal during dialing, it indicates busy signal to the subscriber and returns to idle state.
</p>
<br>
<p>
Call to mobile station:
</p>
<p>
The calling party dials the prefix of the city where the base station is located, followed by "05", followed by the 5 digits mobile station id.
(E.g. base station on Stollberg Hill: +49-4671-05-50993)
</p>
<p>
The transceiver of the base station switches to channel 19 and sends a paging sequence that consists of 5 digits ("Wahlziffern") mobile identity and the channel assignment digit ("Kanalbefehl"):
</p>
<p>
<ul>
<li>Wahlziffer 5 (Example of mobile identity: 50993)
<li>Wahlziffer 0
<li>Wahlziffer 9
<li>Wahlziffer 9
<li>Wahlziffer 3
<li>Kanalbefehl 1 (Example of channel: 1)
</ul>
</p>
<p>
Then the base station returns to the ordered channel and waits 2 seconds for the mobile station to send the call acknowledge signal ("Rufbest&auml;tigung").
If it is not received, the base station repeats the paging sequence again.
If there is still no call acknowledge signal, it returns to idle state and indicates announcenemnt to the calling party that the mobile station is (currently) not available.
</p>
<p>
When the mobile station receives the 5 digits of mobile identity, it check if it matches with its own identity.
If so, it switches to the indicated channel and sends call acknowledge signal.
</p>
<p>
The base station receives the call acknowledge signal and sends the call hold signal ("Rufhaltung") and indicates ringback tone to the calling party.
</p>
<p>
When the mobile station receives the call hold signal, it indicates ringing tone to the mobile subscriber.
Additionally the car's siren is turned on, if the mobile subscriber is outside the car.
</p>
<p>
If the mobile station does not receive the call hold signal within 640 ms, it returns to idle state.
</p>
<p>
When the called mobile subscriber answers, the mobile station sends the answer signal ("Beginnsignal").
</p>
<p>
When the base station receives the answer signal, it stops sending call hold signal and connects the speech path and conversation takes place.
</p>
<p>
When the mobile station detects that the call hold signal is gone, it connects the speech path and conversation takes place.
</p>
<p>
If the mobile subscriber does not answer within 60 seconds, the base station sends clear signal ("Trennsignal") for 12 seconds and returns to idle state.
</p>
<p>
When the mobile station receives clear signal, it stops ringing tone and returns to idle state.
</p>
<br>
<p>
Release by the mobile station:
</p>
<p>
When the mobile subscriber hangs up, the mobile station sends 4 times the hangup signal ("Schlu&szlig;signal") and returns to idle state.
</p>
<p>
When the base station receives the hangup signal, it releases the call and returns to idle state.
</p>
<br>
<p>
Release by the base station:
</p>
<p>
When the party on the fixed network hangs up, base station sends the clear signal ("Trennsignal") for 12 seconds and returns to idle state.
</p>
<p>
When the mobile station receives the clear signal, it returns to idle
state.
</p>
<br>
<p>
Signal loss:
</p>
<p>
When the signal gets lost for more than 9,6 seconds, the mobile station will return to idle and indicates busy signal to the mobile subscriber.
The base station will *TBD*, clears the call and returns to idle state.
</p>
<p class="toppic">
<a name="basestation"></a>
Setup of a base station
</p>
<p>
Before testing this software, power on your B-Netz.
Refer to the manual how to dial a number.
Start dialing and after some seconds you should hear a busy signal.
This means that the phone sweeps over all channels to find a base startion.
If no free base station is found, you will get a busy signal.
But you get a busy signal, that means there is no channel.
</p>
<center><img src="b-netz-display.jpg"/></center>
<p align='justify'>
<p>
Now run your base station on channel 1.
Tune the transmitter to 153.010 MHz and the receiver to 148.410.
You may add '-g x' or '--gfs x' command line option to change the station ID from default to any value you like. (see help)
Tune the transmitter to 153.010 and the receiver to 148.410.
You should tune the receiver to 153.010 first, to check if you hear the idle signal from the base station.
Then tune to actually uplink frequency 148.410 MHz.
The actual level is not yet relevant.
(You may check the quality using '-L 2' command line option and build a radio loop by tuning the receiver to the transmitter.)
</p>
<font size='4'><pre>
<pre>
# src/bnetz/bnetz -k 1
...
bnetz.c:316 info : Entering IDLE state, sending 'Gruppenfreisignal' 2 on channel 1.
Base station ready, please tune transmitter to 153.010 MHz and receiver to 148.410 MHz.
To call phone, switch transmitter (using pilot signal) to 153.370 MHz.
on-hook: ..... (enter 0..9 or d=dial)
</pre></font>
<p align='justify'>
Now dial again on the phone and watch the base station receiving the call:
</pre>
<center><img src="b-netz-display.jpg"/></center>
<p>
Enter a phone number (just a few digits, like "0310") on your phone.
Start dialing and watch the base station receiving the call.
If there is no reaction from the base station, check the volume again.
Also check if you can receive yourself, if you tune the receiver to the downlink channel.
Set the selector for the base station ID ("Gruppenfreisignal") to 0.
</p>
<font size='4'><pre>
bnetz.c:471 info : Received signal 'Kanalbelegung' from mobile station, sending signal 'Wahlabruf'.
bnetz.c:561 info : Received station id from mobile phone: 50993
bnetz.c:569 info : Received number from mobile phone: 800330100
bnetz.c:571 info : Sending station id back to phone: 50993.
bnetz.c:631 info : Dialing complete 50993-&gt;0800330100, call established.
bnetz.c:637 info : Setup call to network.
call.c:574 info : Incomming call from '50993' to '0800330100'
bnetz.c:669 notice : Received 'Schlusssignal' from mobile station
bnetz.c:352 info : Entering IDLE state, sending 'Gruppenfreisignal' 2.
call.c:695 info : Call has been released with cause=16
</pre></font>
<pre>
<p align='justify'>
The first thing the phone does is to find the channel 1.
bnetz.c:351 info : Entering IDLE state, sending 'Gruppenfreisignal' 2.
Base station for channel 1 ready, please tune transmitter to 153.010 MHz and receiver to 148.410 MHz.
To call phone, switch transmitter (using pilot signal) to 153.370 MHz.
mncc_sock.c:137 notice : MNCC socket connected.
dsp.c:159 info : Detecting continous tone: 2070:Level= 80% Quality=100%
bnetz.c:470 info : Received signal 'Kanalbelegung' from mobile station, sending signal 'Wahlabruf'.
bnetz.c:509 info : Digit RX Level: 80% Quality=85
bnetz.c:524 info : Received telegramm digit 'Funkwahl ohne Gebuehrenuebermittlung'.
bnetz.c:509 info : Digit RX Level: 81% Quality=94
bnetz.c:524 info : Received telegramm digit 'Ziffer 5'.
bnetz.c:509 info : Digit RX Level: 81% Quality=95
bnetz.c:524 info : Received telegramm digit 'Ziffer 0'.
bnetz.c:509 info : Digit RX Level: 86% Quality=95
bnetz.c:524 info : Received telegramm digit 'Ziffer 9'.
bnetz.c:509 info : Digit RX Level: 86% Quality=95
bnetz.c:524 info : Received telegramm digit 'Ziffer 9'.
bnetz.c:509 info : Digit RX Level: 86% Quality=95
bnetz.c:524 info : Received telegramm digit 'Ziffer 3'.
bnetz.c:559 info : Received station id from mobile phone: 50993
bnetz.c:509 info : Digit RX Level: 86% Quality=90
bnetz.c:524 info : Received telegramm digit 'Ziffer 3'.
bnetz.c:509 info : Digit RX Level: 81% Quality=94
bnetz.c:524 info : Received telegramm digit 'Ziffer 1'.
bnetz.c:509 info : Digit RX Level: 81% Quality=94
bnetz.c:524 info : Received telegramm digit 'Ziffer 0'.
bnetz.c:509 info : Digit RX Level: 80% Quality=94
bnetz.c:524 info : Received telegramm digit 'Funkwahlende'.
bnetz.c:567 info : Received number from mobile phone: 310
bnetz.c:569 info : Sending station id back to phone: 50993.
bnetz.c:509 info : Digit RX Level: 81% Quality=94
bnetz.c:524 info : Received telegramm digit 'Funkwahl ohne Gebuehrenuebermittlung'.
bnetz.c:509 info : Digit RX Level: 81% Quality=94
bnetz.c:524 info : Received telegramm digit 'Ziffer 5'.
bnetz.c:509 info : Digit RX Level: 80% Quality=95
bnetz.c:524 info : Received telegramm digit 'Ziffer 0'.
bnetz.c:509 info : Digit RX Level: 86% Quality=94
bnetz.c:524 info : Received telegramm digit 'Ziffer 9'.
bnetz.c:509 info : Digit RX Level: 86% Quality=94
bnetz.c:524 info : Received telegramm digit 'Ziffer 9'.
bnetz.c:509 info : Digit RX Level: 86% Quality=94
bnetz.c:524 info : Received telegramm digit 'Ziffer 3'.
bnetz.c:509 info : Digit RX Level: 86% Quality=94
bnetz.c:524 info : Received telegramm digit 'Ziffer 3'.
bnetz.c:509 info : Digit RX Level: 81% Quality=99
bnetz.c:524 info : Received telegramm digit 'Ziffer 1'.
bnetz.c:509 info : Digit RX Level: 81% Quality=100
bnetz.c:524 info : Received telegramm digit 'Ziffer 0'.
bnetz.c:509 info : Digit RX Level: 81% Quality=100
bnetz.c:524 info : Received telegramm digit 'Funkwahlende'.
bnetz.c:629 info : Dialing complete 50993-&gt;0310, call established.
bnetz.c:635 info : Setup call to network.
call.c:585 info : Incomming call from '50993' to '0310'
call.c:606 info : Sending MNCC call towards Network
...
bnetz.c:509 info : Digit RX Level: 86% Quality=98
bnetz.c:524 info : Received telegramm digit 'Trennsignal/Schlusssignal'.
bnetz.c:667 notice : Received 'Schlusssignal' from mobile station
bnetz.c:351 info : Entering IDLE state, sending 'Gruppenfreisignal' 2.
call.c:706 info : Call has been released with cause=16
call.c:723 info : Releasing MNCC call towards Network
bnetz.c:509 info : Digit RX Level: 86% Quality=98
bnetz.c:524 info : Received telegramm digit 'Trennsignal/Schlusssignal'.
bnetz.c:509 info : Digit RX Level: 86% Quality=98
bnetz.c:524 info : Received telegramm digit 'Trennsignal/Schlusssignal'.
bnetz.c:509 info : Digit RX Level: 86% Quality=98
bnetz.c:524 info : Received telegramm digit 'Trennsignal/Schlusssignal'.
</pre>
<p>
The first thing the phone does is to tune to the channel.
It sweeps through all the supported channels.
It stops if it finds an idle base station transmitting it's 'Gruppenfreisignal'.
Then it transmits a signal tone, called 'Kanalbelegung'.
The base station responds and sends a signal tone, called 'Wahlabruf'.
Then the phone sends caller ID + number.
The base station replies the caller ID to prevent false transmissions.
After establishment, you can use the headset, if present, for speech communication with the phone.
If you hangup the phone, the call gets released by a message, called 'Schlusssignal'.
If you hangup the phone, the call gets released by a message, called 'Schlu&szlig;signal'.
The base station returns to idle.
</p>
<p align='justify'>
<p>
Level adjustment:
We see a receive level of arround 85%.
Use the variable resistor (connecting your receiver) to reduce the volume until the level matches about 100% (+- 10%).
Then start the base station using '-L 2' option for loopback and tune receiver to the transmitter.
The base station generates test digits and displays them after decodeing.
Use the other variable resistor (connecting your transmitter) to match the same level of your phone.
In this case it is the 100% you adjusted the receiver to.
Now, whatever frequency deviation the phone transmits for signalling, so does your base station.
</p>
<p>
In order to call the phone from the base station, you need to transmit channel 19.
Your transmitter must tune to 153.370 MHz in order to page the phone.
Your transmitter must temporarily tune to 153.370 MHz in order to page the phone.
The phones listens to incomming signals from the base station.
In order to transmit on channel 19, you may use a second transmitter or re-tune your single transmitter.
There are many ways todo that, but it is actually up to your own how to couple it and how to control your transmitter.
@ -76,7 +629,7 @@ I use an optocoupler to tell my transmitter to switch to channel 19.
<br>
<center><img src="trigger-2.jpg"/><img src="trigger-3.jpg"/></center>
<p align='justify'>
<p>
I measure about 3 Volts peak on the ouput of the USB chip I use.
Since my optocoupler triggers at arround 1 Volts, I have two Volts on the Resistor, which results in 10 mA current.
In order to check and change the voltage, use '-P positive' or '-P negative' option to select trigger level on one audio channel.
@ -88,22 +641,88 @@ The trigger is just about two seconds long, so check your meter quickly after pr
Once the base station timed out, press 'h' for hangup and try again.
</p>
<font size='4'><pre>
./bnetz/bnetz -k 1 -P positive
...
on-hook: 55555 (enter 0..9 or d=dial)
call.c:437 info : Outgoing call to 55555
bnetz.c:757 info : Call to mobile station, paging station id '55555'
bnetz.c:375 info : Entering paging state (try 1), sending 'Selektivruf' to '55555'.
bnetz.c:411 info : Paging mobile station 55555 complete, waiting for answer.
</pre></font>
<p align='justify'>
Now again it is up to your own to make the transmitter switch to channel 19 on trigger level.
If you use a second transmitter, use the tigger to press the PTT button.
<p>
Instead of using a tone or a level, the base station can write to a file. Use '-P &lt;file&gt;=&lt;on&gt;:&lt;off&gt;'.
When switching to channel 19, the base station writes the string &lt;on&gt; to &lt;file&gt;, afterwards it writes &lt;off&gt; to &lt;file&gt;.
You may write your own tool that uses a pipe to receive the switching information. Then set &lt;file&gt; to your pipe.
I tried it with a Raspberry PI and used GPIO to switch: '-P /sys/class/gpio/gpio17/value=1:0'
This writes a 1 to GPIO 17 when switchting to channel 19 and a 0 when switching back.
</p>
<pre>
# ./bnetz/bnetz -k 1 -P positive
...
on-hook: 50993 (enter 0..9 or d=dial)
call.c:859 info : Outgoing call from to '50993'
bnetz.c:757 info : Call to mobile station, paging station id '50993'
bnetz.c:374 info : Entering paging state (try 1), sending 'Selektivruf' to '50993'.
bnetz.c:410 info : Paging mobile station 50993 complete, waiting for answer.
dsp.c:159 info : Detecting continous tone: 1950:Level= 105% Quality=100%
bnetz.c:480 info : Received signal 'Rufbestaetigung' from mobile station, sending signal 'Rufhaltung'.
(call is ringing)
call.c:641 info : Call is alerting
...
dsp.c:159 info : Detecting continous tone: 2070:Level= 102% Quality=99%
bnetz.c:491 info : Received signal 'Beginnsignal' from mobile station, call establised.
call.c:684 info : Call has been answered by '50993'
dsp.c:159 info : Detecting continous tone: 2070:Level= 104% Quality=100%
</pre>
<p>
Detecting loss of carrier signal:
We do not have any RSSI (Received Signal Strength Indicator) signal from our radio, so we cannot directly find out if the signal is lost.
But we have a constant noise level when the signal is lost.
Be sure to have squelch on your receiver all the way open, so that noise reaches the base station.
In order to see this level, use command line option '-0 100 -D 0' or '--loss 100 --debug 0'.
The noise level (relative to the sound card's input level) is shown:
</p>
<pre>
...
loss.c:74 debug : Noise level = 22%
...
</pre>
<p>
Since we have a noise level of about 20%, we can use a threshold of 10%.
Use command line option '-0 10' in this case.
To see the process, keep debugging on by using command line option '-D 0'.
Whenever the noise level is above the given percentage, loss of carrier is assumed, if the noise level is constant.
If the noise level changes (due to speech), the noise is ignored and the loss counter is reset.
After a system specific duration of signal loss, the call is released.
</p>
<p>
In this example I cut the power off the phone and waited for the base station to time out.
</p>
<pre>
...
loss.c:74 debug : Noise level = 1%
loss.c:74 debug : Noise level = 2%
loss.c:74 debug : Noise level = 1%
loss.c:74 debug : Noise level = 22%
loss.c:74 debug : Noise level = 21%
loss.c:84 debug : Detected signal loss 1 for intervals level change 6% (below 10%).
loss.c:74 debug : Noise level = 21%
loss.c:84 debug : Detected signal loss 2 for intervals level change 2% (below 10%).
...
loss.c:74 debug : Noise level = 22%
loss.c:84 debug : Detected signal loss 11 for intervals level change 7% (below 10%).
loss.c:74 debug : Noise level = 21%
loss.c:84 debug : Detected signal loss 12 for intervals level change 3% (below 10%).
bnetz.c:448 notice : Detected loss of signal, releasing.
bnetz.c:363 info : Entering release state, sending 'Trennsignal'.
call.c:706 info : Call has been released with cause=41
bnetz.c:439 debug : Sending telegramm 'Trennsignal/Schlusssignal'.
bnetz.c:439 debug : Sending telegramm 'Trennsignal/Schlusssignal'.
bnetz.c:439 debug : Sending telegramm 'Trennsignal/Schlusssignal'.
...
</pre>
[<a href="index.html">Back to main page</a>]
</font></td></tr></table></center>
</td></tr></table></center>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 KiB

After

Width:  |  Height:  |  Size: 575 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 163 KiB

BIN
docs/c-netz-burst_full.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
docs/c-netz-burst_part.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

171
docs/c-netz.html Normal file
View File

@ -0,0 +1,171 @@
<html>
<head>
<link href="style.css" rel="stylesheet" type="text/css" />
<title>osmocom-analog</title>
</head>
<body>
<center><table><tr><td>
<h2><center>C-Netz</center></h2>
<center><img src="c-netz.jpg"/></center>
<ul>
<li><a href="#history">History</a>
<li><a href="#howitworks">How it works</a>
<li><a href="#basestation">Setup of a base station</a>
</ul>
<p class="toppic">
<a name="history"></a>
History
</p>
<p>
*TBD*
</p>
<p class="toppic">
<a name="howitworks"></a>
How it works
</p>
<p>
*TBD*
</p>
<p class="toppic">
<a name="basestation"></a>
Setup of a base station
</p>
<p>
When I first started with testing early C-Netz implementation, I had great trouble getting a response from a mobile phone.
The main problem was clock speed of the transmitted signal.
The base stations were all synchronized with a high precision clock.
All base stations transmit on the same control channel 131 ('Orgakanal'), but at different time slots.
The phone expects that the time slots repeat precisely every 2.4 seconds.
The specs say that the phone requires clock speed deviation of +- 1 PPM (Parts Per Million) or less.
To comply with the specs, the base stations needs to have a clock deviation far below 1 PPM.
(I guess that there is a tollerance, so maybe a few PPM deviation would make no big problem.)
We need to calibrate the speed of our transmit signal (and receive signal as well).
</p>
<p>
<font color="red">Importaint: We need calibrate the signal processing clock!</font>
</p>
<p>
First of all, we need a reference clock.
Since most systems have standard crystals, we cannot use our system clock as reference without any help.
I decided to use the NTP daemon.
After running the system for one day, the clock speed should be accurate enough for our needs.
Be sure to choose a place with constant temperature.
</p>
<pre>
netbook ~ # ntptime
ntp_gettime() returns code 0 (OK)
time dad971f1.9e1b5c44 Sun, May 8 2016 10:06:09.617, (.617605507),
maximum error 238951 us, estimated error 199 us, TAI offset 0
ntp_adjtime() returns code 0 (<font color="red">OK</font>)
modes 0x0 (),
offset 425.797 us, frequency <font color="red">15.796 ppm</font>, interval 1 s,
maximum error 238951 us, estimated error 199 us,
status 0x2001 (PLL,NANO),
time constant 10, precision 0.001 us, tolerance 500 ppm,
</pre>
<p>
One notices that I have quite an unprecise crystal in my test machine.
Since I have NTP running, the system clock is now far below 1 PPM.
</p>
<p>
The second problem is the clock of our sound adapter.
They use own crystals.
Because they are made for audio signals (and not for high precise base stations), they can't be used without calibration.
Cheap USB adapters may even have different clocks on TX and RX.
I found out that the clock speed changes when the USB voltage changes.
The USB voltage changes, when the current changes, due to different volumes on the output.
To minimize this effect, don't use extension cables.
</p>
<p>
Since we have precise system clock now, we can measure the speed of our sound adapter.
Later we will use the measurement result to adjust our signal processor.
Be sure to have your machine running for at least 24 hours (with your sound adapter attached).
The machine must have network connection to the NTP server.
I suggest to use 'ntp1.ptb.de' and 'ntp2.ptb.de' as reference.
Use command line option '-M' or '--measure' to measure my sound adapter.
Let it run for one hour.
</p>
<pre>
# src/cnetz/cnetz -k 131 -M
...
dsp.c:218 notice : Clock: RX=4.75 TX=36.84; Signal: RX=135.38 TX=-378.58 ppm
dsp.c:218 notice : Clock: RX=10.61 TX=31.09; Signal: RX=135.38 TX=-378.58 ppm
dsp.c:218 notice : Clock: RX=3.01 TX=26.55; Signal: RX=135.38 TX=-378.58 ppm
...
dsp.c:218 notice : Clock: RX=19.46 TX=19.45; Signal: RX=19.39 TX=19.42 ppm
dsp.c:218 notice : Clock: RX=19.45 TX=19.50; Signal: RX=19.39 TX=19.42 ppm
dsp.c:218 notice : Clock: RX=19.48 TX=19.47; Signal: RX=19.39 TX=19.42 ppm
dsp.c:218 notice : Clock: RX=19.44 TX=19.44; Signal: RX=19.35 TX=19.43 ppm
dsp.c:218 notice : Clock: RX=19.44 TX=19.49; Signal: RX=19.35 TX=19.43 ppm
</pre>
<p>
One can see that the measured clock from the sound card (sample rate) differs about +19.45 PPM.
Because I did not do any correction to the signal processing, the same error applies to the signal.
Use command line option '-S 19.45,19.45' or '--clock-speed 19.45,19.45' to compensate the clock error by adjusting the signal processor.
Let it run again for one hour and you will see that signal is now below 1 PPM.
(Or close to it.)
</p>
<p>
<font color="red">Importaint: We need to connect to PLL and discriminator!</font>
</p>
<center><img src="c-netz-burst_full.png"/></center>
<p>
*TBD*
</p>
<p>
*TBD*
</p>
<p>
<font color="red">Importaint: We need to transmit correct polarity!</font>
</p>
<center><img src="c-netz-burst_part.png"/></center>
<p>
C-Netz uses FSK by directly modulating the carrier, rather than modulating an FM tone.
The advantage is much higher data rate.
A phone will only detect the correct polarity.
The three sync words of "11100010010", is shown in the picture above.
In the picture above, the polarity is wrong.
The "1" points down and the "0" up.
You must check, with what polarity your transmitter is doing a positive frequency deviation.
Also you must check your sound card's polarity on positive value beeing sent.
To change polarty, use command line option '-F' or '--flip-polarity'.
(Note: don't confuse with '-P'!)
</p>
<p>
This software does not care about what polarity it receives.
It just checks for sync words at both polarities and chooses right polarity automatically.
</p>
[<a href="index.html">Back to main page</a>]
</td></tr></table></center>
</body>
</html>

BIN
docs/c-netz.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
docs/c-netz_small.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

BIN
docs/chaos.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 566 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

BIN
docs/discriminator.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 KiB

After

Width:  |  Height:  |  Size: 580 KiB

BIN
docs/emphasis.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 KiB

After

Width:  |  Height:  |  Size: 150 KiB

View File

@ -1,20 +1,21 @@
<html>
<head>
<link href="style.css" rel="stylesheet" type="text/css" />
<title>osmocom-analog</title>
</head>
<body>
<center><table border='0' cellspacing='0' cellpadding='0' width='816'><tr><td><font face="ARIAL" size='5'>
<center><table><tr><td>
<h2><center>Connecting headset</center></h2>
<p align='justify'>
<p>
You need a headset and a second audio device.
I use a cheap 'LogiLink' USB sound adapter and a Headset with microphone.
</p>
<center><img src="headset.jpg"/></center>
<p align='justify'>
<p>
You may use an USB sound adapter and a headset or a USB headset with built-in sound card.
Check 'alsamixer' if the sound adapter has been detected.
Press 'F6' to select the headset or the sound adapter connected to the headset.
@ -22,7 +23,7 @@ Press 'F6' to select the headset or the sound adapter connected to the headset.
<center><img src="alsa-select.png"/></center>
<p align='justify'>
<p>
Mute the microphone, so you wount hear yourself if you speak into the microphone.
Be sure to press 'F3' to change into Playback view.
Mute playback and not recording from microphone.
@ -31,11 +32,12 @@ To mute, select he microphone with the cursor keys and press 'm'.
<center><img src="alsa-mute.png"/></center>
<p align='justify'>
<p>
To get the device, run 'arecord -l' and you get the following list, if you have two sound cards:
</p>
<font size='4'><pre>
<pre>
# arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: Intel [HDA Intel], device 0: ALC269VB Analog [ALC269VB Analog]
@ -44,29 +46,32 @@ card 0: Intel [HDA Intel], device 0: ALC269VB Analog [ALC269VB Analog]
card 2: Set [C-Media USB Headphone Set], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
</pre></font>
<p align='justify'>
</pre>
<p>
You see your card 0 and device 0: This should be the sound card you connect to your radio equipment.
There is also the second sound device: In my case it is card 2 and device 0.
Connect the second sound device to your headset and use '-c hw:2,0" (card 2, device 0) to tell the base station to select this sound device for your headset.
</p>
<p align='justify'>
<p>
To calibrate audio level, run some music player and adjust output volume, so you hear the music at regular speech volume.
Use 'alsamixer' to change the output volume of your second sound card.
This calibartion must be done before calibrating the microphone.
To calibarte input level (mircrophone), run the B-Netz base station with loopback test 3.
</p>
<font size='4'><pre>
# src/bnetz/bnetz -L 3 -c hw:2,0
<pre>
# src/bnetz/bnetz -k 1 -L 3 -c hw:2,0
bnetz.c:268 info : Entering IDLE state, sending 'Gruppenfreisignal' 2 on channel 1.
Base station ready, please tune transmitter to 153.010 MHz and receiver to 148.410 MHz.
To call phone, switch transmitter using pilot tone to 153.370 MHz
</pre></font>
<p align='justify'>
</pre>
<p>
Now you should hear yourself when you speak into the microphone.
You should also notice a short delay, but this is normal.
Now it is time to calibrate the microphone:
@ -76,17 +81,17 @@ Be sure to select Capture view by pressing 'F4'.
<center><img src="alsa-mic.png"/></center>
<p align='justify'>
<p>
I also had to mute the "Auto Gain Control", as found in the Playback View by pressing 'F4'.
I muted it using 'm' key.
</p>
<p align='justify'>
<p>
Finally store the settings using "alsactl store" command.
Do this whenever you want to keep your adjustments.
</p>
[<a href="index.html">Back to main page</a>]
</font></td></tr></table></center>
</td></tr></table></center>
</body>
</html>

View File

@ -4,29 +4,34 @@
<title>osmocom-analog</title>
</head>
<body>
<center><table border='0' cellspacing='0' cellpadding='0' width='816'><tr><td><font face="ARIAL" size='5'>
<center><table><tr><td>
<h2><center>osmocom-analog</center></h2>
<center><img src="a-netz_small.jpg"/><img src="b-netz_small.jpg"/></center>
<center>
<img src="a-netz_small.jpg"/><img src="b-netz_small.jpg"/><br>
<img src="c-netz_small.jpg"/><img src="nmt_small.jpg"/><br>
</center>
<br><br>
<center>
A base station emulator for classic mobile networks. All these networks use analog voice transmission. The signalling is done by tones (A-Netz) or FSK modulated digital messages.
</center>
<p>
A base station implementation for classic mobile networks. All these networks use analog voice transmission. The signalling is done by tones and/or FSK modulated digital messages. It started with the idea to make a base station for the German B-Netz, but more networks followed.
</p>
<center>
<ul>
<li><a href="install.html">Software installation</a></li>
<li><a href="setup.html">Radio setup</a></li>
<li><a href="install.html">Software installation</a></li>
<li><a href="headset.html">Connecting headset</a></li>
<li><a href="a-netz.html">Using A-Netz phone</a></li>
<li><a href="b-netz.html">Using B-Netz phone</a></li>
<li><a href="nmt.html">Using NMT phone</a></li>
<li><a href="software.html">Software usage</a></li>
<li><a href="a-netz.html">A-Netz</a></li>
<li><a href="b-netz.html">B-Netz</a></li>
<li><a href="c-netz.html">C-Netz</a></li>
<li><a href="nmt.html">NMT</a></li>
</ul>
</center>
</font></td></tr></table></center>
</td></tr></table></center>
</body>
</html>

View File

@ -1,59 +1,68 @@
<html>
<head>
<link href="style.css" rel="stylesheet" type="text/css" />
<title>osmocom-analog</title>
</head>
<body>
<center><table border='0' cellspacing='0' cellpadding='0' width='816'><tr><td><font face="ARIAL" size='5'>
<center><table><tr><td>
<h2><center>Software installation</center></h2>
<p align='justify'>
<p>
To run this software, you need a linux PC with development environment (gcc compiler).
At least one Alsa sound interfaces is required.
Two sound interfaces are required to talk and listen trough the base station using a headset with microphone.
</p>
<p align='justify'>
<p>
If you want to install from GIT repository, run 'autoreconf -if' inside GIT repository first:
</p>
<font size='4'><pre>
# autoreconf -if
</pre></font>
<pre>
<p align='justify'>
# autoreconf -if
</pre>
<p>
Unpack the archive and change to its directory. Then compile:
</p>
<font size='4'><pre>
<pre>
# ./configure
# make
</pre></font>
<p align='justify'>
</pre>
<p>
At your option:
</p>
<font size='4'><pre>
# make install
</pre></font>
<pre>
<p align='justify'>
# make install
</pre>
<p>
Now you are ready for a quick test:
</p>
<font size='4'><pre>
<pre>
# src/bnetz/bnetz -k 1 -L 2
bnetz.c:268 info : Entering IDLE state, sending 'Gruppenfreisignal' 2 on channel 1.
Base station ready, please tune transmitter to 153.010 MHz and receiver to 148.410 MHz.
To call phone, switch transmitter using pilot tone to 153.370 MHz
</pre></font>
<p align='justify'>
</pre>
<p>
Do you hear the whisteling sound on your speaker/headset? Now you can continue with the radio setup.
</p>
[<a href="index.html">Back to main page</a>]
</font></td></tr></table></center>
</td></tr></table></center>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 244 KiB

After

Width:  |  Height:  |  Size: 148 KiB

42
docs/nmt.html Normal file
View File

@ -0,0 +1,42 @@
<html>
<head>
<link href="style.css" rel="stylesheet" type="text/css" />
<title>osmocom-analog</title>
</head>
<body>
<center><table><tr><td>
<h2><center>NMT</center></h2>
<center><img src="nmt.jpg"/></center>
<p>
</p>
*TBD*
<p>
Now run your base station on channel 1.
Tune the transmitter to 463.000 MHz and the receiver to 453.000.
You should tune the receiver to 463.000 first, to check if you hear the idle signal from the base station.
Then tune to actually uplink frequency 453.000 MHz.
</p>
<pre>
# src/nmt/nmt -k 1 -y SE,1
...
nmt.c:376 info : Entering IDLE state, sending idle frames on combined calling &amp; traffic channel.
Base station ready, please tune transmitter to 463.000 MHz and receiver to 453.000 MHz.
on-hook: ....... (enter 0..9 or d=dial)
</pre>
<p>
</p>
[<a href="index.html">Back to main page</a>]
</td></tr></table></center>
</body>
</html>

BIN
docs/nmt.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 KiB

BIN
docs/nmt_small.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
docs/poti.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 KiB

After

Width:  |  Height:  |  Size: 549 KiB

BIN
docs/receiver2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 540 KiB

View File

@ -1,39 +1,90 @@
<html>
<head>
<link href="style.css" rel="stylesheet" type="text/css" />
<title>osmocom-analog</title>
</head>
<body>
<center><table border='0' cellspacing='0' cellpadding='0' width='816'><tr><td><font face="ARIAL" size='5'>
<center><table><tr><td>
<h2><center>Radio setup</center></h2>
<p align='justify'>
To emulate a base station, you need a linux machine with sound interface. The interface must be supported by <a href="http://www.alsa-project.org">Alsa</a> kernel driver.
<center><img src="setup.jpg"/></center>
<p>
The main idea of this project is to use a sound adapter to generate and analyze FM modulated signals.
Only a transmitter and a receiver is required.
All signal processing is done in software.
The software is written for Linux.
So the first thing you need is PC with a sound adapter.
This software uses <a href="http://www.alsa-project.org">Alsa</a> kernel driver to access audio input and output.
</p>
<center><img src="pc+sound.jpg"/></center>
<p align='justify'>
Use a radio transmitter for 2-meter band to transmit to the phone (downlink).
An amateur radio can be used, but be sure it is not limited to amateur radio frequencies.
<p>
Use a radio transmitter for 2-meter band to transmit to A-Netz or B-Netz phones.
Use a radio transmitter for 70-cm band to transmit to C-Netz or NMT phones.
An amateur radio can be used, but be sure it is not limited to amateur radio frequencies and channel rasters.
For A-Netz the transmitter must be able to transmit arround 162 MHz.
For B-Netz the transmitter must be able to transmit arround 153 MHz.
For C-Netz the transmitter must be able to transmit arround 465 MHz.
For NMT the transmitter must be able to transmit arround 463 MHz.
</p>
<p>
This image shows a two-band amateur radio receiver without limitations for the frequencies above:
</p>
<center><img src="transmitter.jpg"/></center>
<p align='justify'>
Use radio receiver for 2-methers band to receive from the phone. (uplink)
You cannot use the transmitter as well, since you need to transmit and receive simultaniously.
<p>
I built several transmitters out of modified taxi radios.
It features a simple digital PLL (configurable by junpers) and allows to directly connect the audio signal to the oscillator.
This is highly recommended for the C-Netz, because signalling is done by sifting the carrier directly.
One unit has a switch to change between A-Netz and B-Netz (2-meter version) and the other units to change between C-Netz and NMT (70-cm version).
I added an input to switch between two channels for the B-Netz.
(Whenever a B-Netz phone is paged, the channel must be temporarily switched to the paging channel.)
</p>
<center><img src="transmitter2.jpg"/></center>
<p>
Use radio receiver for 2-meter band to receive from A-Netz or B-Netz phones.
Use radio receiver for 70-cm band to receive from C-Netz or NMT phones.
The transmitter cannot be re-usedr, because all networks are full duplex.
A seperate radio is required to simultaniously transmit and receive.
For A-Netz the receiver must be able to receive arround 162 MHz and 157 MHz.
For B-Netz the receiver must be able to receive arround 153 MHz and 148 MHz.
The reason why the receiver must also receive on the transmitter frequency (downlink) is because you need to make a test loop for calibration process.
This is explained below.
For C-Netz the receiver must be able to receive arround 465 MHz and 455 MHz.
For NMT the receiver must be able to receive arround 463 MHz and 453 MHz.
The receiver must support both uplink and downlink frequencies, to make a test loop for the calibration process.
</p>
<p>
This image shows a two-band amateur radio receiver that supports all the frequencies:
(It is not sufficient for C-Netz, because it distorts the signal too much.)
</p>
<center><img src="receiver.jpg"/></center>
<p align='justify'>
<p>
The best solution I could find for low price is the Uniden UBC360CLT.
It is actually some kind of clock radio with scanner.
It supports all relevant bands up to about 950 MHz.
In all bands the channel raster is freely selectable.
Up to 300 channels can be stored and simply selected by using up/down keys.
</p>
<center><img src="receiver2.jpg"/></center>
<p>
I added a discriminator output to the radio, to get undistorted receive signal.
This is highly recommended for the C-Netz, because signalling is done by sifting the carrier directly.
</p>
<center><img src="discriminator.jpg"/></center>
<p>
In order to keep RF emission low, use a dummy load for lab test.
Use two seperated antennas for outside use of the mobile phone.
Connect one dummy load to the transmitter and another one to the mobile phone's antenna connector.
@ -41,104 +92,77 @@ Connect one dummy load to the transmitter and another one to the mobile phone's
<center><img src="dummyload.jpg"/></center>
<p align='justify'>
For the radios and the phone, I use a sufficient power supply.
Especially for old A-Netz phones, be sure to have something close to 13.8 Volts and 5 Ampere or even more, depending on your phone.
My phone did not work correctly with a standard 12 Volts regulated power supply.
Amateur radio power supplies are made for 13.8 Volts.
Also you can use a fully charged car battery with a sufficient fuse.
In my case I use a modified ATX-2 power supply with 13.8 Volts and a built-in overcurrent protection.
<p>
For the radios and the phone, you nee a sufficient power supply.
Especially for old A-Netz phones, be sure to have something strong with 10 Ampere or even more, depending on your phone.
My phone did not work correctly with a 5 Ampere 12 Volts regulated power supply.
I suggest to use an amateur radio power supply with low ripple.
In my case I use modified ATX-2 power supply for 12 or 13.8 Volts.
The voltage can be adjusted in most power supplies, but 12 Volts is good enough.
These power supplies have built-in overcurrent/overvoltage protection.
The ATX-2 power supplies are regulated on the 12 Volts rail.
I added two plugs and a switch.
The switch connects to the PS-On line.
In case of an overcurrent, the switch can be used to reset the protection circuit.
Note that opening a switching power supply can be dangerous and may cause death.
If you don't have the knowledge about power supplies, ask an expert to help you.
</p>
<center><img src="power.jpg"/></center>
<p align='justify'>
<p>
Early tests were done without any wireing between radios and sound adapter.
This may worked for early tests with the B-Netz, but turned out to be a pain in the as.
It is not possible to keep the levels and avoid feedbacks.
</p>
<center><img src="headphone.jpg"/><img src="microphone.jpg"/></center>
<p>
The sound adapter must be connected to a transmitter and a receiver.
Coils are suggested for galvanic seperation.
I don't use coils, instead I add extra grounding wire between earth (power supply) and sound interface.
For adjustemnt I highly recommend to use variable resistors.
This makes the adjustment process faster.
I use 4.7 K resistor for connecting headphone output to radio input.
I use 10 K resistor for connecting radio output (discriminator) to microphone input.
</p>
<center><img src="poti.gif"/></center>
<p>
Connect the ground of input and output to one end of the resistor. (shown in the picture as 'Masse')
Select this side to which the slider moves, if the knob turned all the way left (or moved all the way down).
Connect the input signal ('Signaleingang') to the other end of the resistor.
At least connect the output signal ('Signalausgang') to the slider of the resistor.
</p>
<p>
During development process, I ended up like this:
</p>
<center><img src="chaos.jpg"/></center>
<p>
After figuring out how everything works, I decided to build a small box with knobs on the front and 3.5mm audio jacks in the back.
It allows to connect two radio transmitters and two radio receives to one stereo sound card.
Also it has a banana plug to ground the box.
</p>
<center><img src="stellwerk.jpg"/></center>
<p>
And finally you need a classic working phone.
Be sure to connect the phone to a dummy load and the transmitter to another one.
Be sure to connect the phone to a dummy load too.
Place both dummy loads (transmitter and phone) close together (several centimeters).
Put an antenna on the receiver.
If your phone has built in antenna and cannot be connected to a dummy load (C-Netz / NMT), stay a few meters away from transmitter (dummy load) and receiver.
</p>
<center><img src="b-netz-display.jpg"/></center>
<p align='justify'>
There are two ways to couple the receiver and transmitter with your sound card. You can use a headset and a microphone. The pro is that you can monitor what you actually transmitting and receiving. The problem is that you might get audio from RX side mixed with TX side. You get echo and the base station may detect self-generated tones. This might cause malfuntion to the base station software. Better you put the microphone inside a headset and keep TX and RX side away from each other.
</p>
<center><img src="microphone.jpg"/></center>
<p align='justify'>
The better way is to use inductive coil and resistors.
How to couple your sound card with radios is beyond the scope of this document.
Because you have radios and all the electronics that is required, I assume you have the knowledge to do it right.
</p>
<center><img src="coil.jpg"/></center>
<p align='justify'>
To adjust input and output levels of your sound card, run 'alsamixer'.
</p>
<center><img src="alsa.png"/></center>
<p align='justify'>
To avoid echo of audio input (mic), mute the input (select item and press 'm').
We want to capture microphone, but not echo it back to the audio output.
Also we want audio on line/headset output and capture from microphone imput.
</p>
<p align='justify'>
Now we want to calibrate transmitter and receiver audio level.
Run the B-Netz base station in loopback test mode (-L 2).
Even if you plan to setup A-Netz base station, use B-Netz base station for calibration.
</p>
<font size='4'><pre>
# src/bnetz/bnetz -k 1 -L 2
bnetz.c:268 info : Entering IDLE state, sending 'Gruppenfreisignal' 2 on channel 1.
Base station ready, please tune transmitter to 153.010 MHz and receiver to 148.410 MHz.
To call phone, switch transmitter using pilot tone to 153.370 MHz
</pre></font>
<p align='justify'>
Tune your transmitter AND reciever to 153.010 MHz.
Press the PTT button on you transmitter and check if you hear your voice at a normal level from the receiver.
Then connect the audio output (line out) to your transmitter or couple it with a headphone.
You should hear now the whistle sound clearly on the receiver.
Adjust the audio output, so that the tone is not overdriven but loud enough to match any regular received voice.
</p>
<p align='justify'>
Now connect the audio input (microphone) to your receiver or couple it with a microphone to the speaker of your receiver.
Enable the transmitter. (PTT button)
You should now see the signal beeing decoded by the base station:
</p>
<font size='4'><pre>
bnetz.c:474 notice : Received telegramm 'Ziffer 2'. (quality=99% level=33%)
bnetz.c:478 notice : Round trip delay is 0.053 seconds
bnetz.c:474 notice : Received telegramm 'Ziffer 3'. (quality=98% level=33%)
bnetz.c:478 notice : Round trip delay is 0.054 seconds
bnetz.c:474 notice : Received telegramm 'Ziffer 4'. (quality=99% level=31%)
bnetz.c:478 notice : Round trip delay is 0.053 seconds
bnetz.c:474 notice : Received telegramm 'Ziffer 5'. (quality=97% level=30%)
bnetz.c:478 notice : Round trip delay is 0.054 seconds
</pre></font>
<p align='justify'>
Adjust the input level. (using 'alsamixer')
Try to maintain an input level arround 30%.
The quality should be 90% or better.
</p>
<p align='justify'>
Now you have connected the base station to your radio eqipment and roughly adjusted the levels.
</p>
<p align='justify'>
Finally store the settings using "alsactl store" command.
Do this whenever you want to keep your adjustments.
</p>
[<a href="index.html">Back to main page</a>]
</font></td></tr></table></center>
</td></tr></table></center>
</body>
</html>

BIN
docs/setup.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 KiB

BIN
docs/signal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

285
docs/software.html Normal file
View File

@ -0,0 +1,285 @@
<html>
<head>
<link href="style.css" rel="stylesheet" type="text/css" />
<title>osmocom-analog</title>
</head>
<body>
<center><table><tr><td>
<h2><center>Software usage</center></h2>
<center><img src="signal.png"/></center>
<p>
To get a list of all options, run the base station software (E.g bnetz) with no parameter or '-h' or '--help'.
</p>
<p class="toppic">
Sound interface
</p>
<p>
Most machines have only one sound adapter installed.
A second sound adapter is required to talk through the base station to have a conversation.
To get a list of devices, run 'arecord -l'.
This is how it looks, if there are two sound adapters installed:
</p>
<pre>
# arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: Intel [HDA Intel], device 0: ALC269VB Analog [ALC269VB Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: Set [C-Media USB Headphone Set], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
</pre>
<p>
Sound card 0, device 0 is used by default.
Run B-Netz base station on channel 1 to test if your default sound adapter works:
</p>
<pre>
# src/bnetz/bnetz -k 1
...
bnetz.c:268 info : Entering IDLE state, sending 'Gruppenfreisignal' 2 on channel 1.
Base station ready, please tune transmitter to 153.010 MHz and receiver to 148.410 MHz.
To call phone, switch transmitter (using pilot signal) to 153.370 MHz.
</pre>
<p>
Alternatively select a different sound adapter.
If you prefer card 2, device 0, add '-d hw:2,0' or '--device hw:2,0' to the command line:
</p>
<pre>
# src/bnetz/bnetz -k 1 -d hw:2,0
</pre>
<p class="toppic">
Basic level adjustment
</p>
<p>
To adjust input and output levels of your sound card, run 'alsamixer'.
</p>
<center><img src="alsa.png"/></center>
<p>
To avoid echo of audio input (mic), mute the input (select item and press 'm').
We want to capture microphone, but not echo it back to the audio output.
Also we want audio on line/headset output and capture from microphone imput.
Do not use input gain on the microphone.
</p>
<p>
Now we want to calibrate transmitter and receiver audio level.
Run the B-Netz base station in loopback test mode (-L 2).
Even if you plan to setup A-Netz base station, use B-Netz base station for calibration.
</p>
<pre>
# src/bnetz/bnetz -k 1 -L 2
bnetz.c:268 info : Entering IDLE state, sending 'Gruppenfreisignal' 2 on channel 1.
Base station ready, please tune transmitter to 153.010 MHz and receiver to 148.410 MHz.
To call phone, switch transmitter (using pilot signal) to 153.370 MHz.
</pre>
<p>
Tune your transmitter AND reciever to 153.010 MHz.
Press the PTT button on you transmitter and talk into it.
Check if you hear your voice at a normal level from the receiver.
Then connect the audio output (headphone) of your sound adapter to your transmitter, by using a variable resistor.
You should hear now the whistle sound clearly on the receiver, once you turn up the variable resistor.
Adjust the audio output so that the tone is not overdriven, but the volume similar to your voice when you talked into the transmitter.
The sound must be clear without any background noise or distortion.
</p>
<p>
Now connect the audio input (microphone) to your receiver, by using a variable resistor.
Enable the transmitter. (PTT button)
You should now see the signal beeing decoded by the base station:
</p>
<pre>
bnetz.c:474 notice : Received telegramm 'Ziffer 2'. (quality=99% level=133%)
bnetz.c:478 notice : Round trip delay is 0.053 seconds
bnetz.c:474 notice : Received telegramm 'Ziffer 3'. (quality=98% level=133%)
bnetz.c:478 notice : Round trip delay is 0.054 seconds
bnetz.c:474 notice : Received telegramm 'Ziffer 4'. (quality=99% level=131%)
bnetz.c:478 notice : Round trip delay is 0.053 seconds
bnetz.c:474 notice : Received telegramm 'Ziffer 5'. (quality=97% level=130%)
bnetz.c:478 notice : Round trip delay is 0.054 seconds
</pre>
<p>
Adjust the input level so that the received signal level is arround 100%.
If the input level cannot be ajusted up to 100%, leave it as it is.
There is an option later in this manual to add RX gain.
The quality should be 90% or better.
Now you have connected the base station to your radio eqipment and roughly adjusted the levels.
For finetuning, refer to each network description.
</p>
<p>
Finally store the settings using "alsactl store" command.
Do this whenever you want to keep your adjustments.
</p>
<p class="toppic">
Channel crossing
</p>
<p>
By default, the right channel of your sound adapter is used to connect to the radio.
Some adapters have mono input, especially on microphone jack.
In this case you will always receive audio, no matter if you cross the channels or not.
If you cross the channels, the left channel of your sound adapter is used.
I use mono cables with only one channel on the tip of the plug.
My sound adapter uses left channel on the tip, so i need to swap channels.
Use the command line option '-x' or '--cross':
</p>
<pre>
# src/bnetz/bnetz -k 1 -x -L 2
bnetz.c:268 info : Entering IDLE state, sending 'Gruppenfreisignal' 2 on channel 1.
Base station ready, please tune transmitter to 153.010 MHz and receiver to 148.410 MHz.
To call phone, switch transmitter (using pilot signal) to 153.370 MHz.
</pre>
<p class="toppic">
Emphasis
</p>
<p>
Pre-emphasis is used on the transmitter and de-emphasis is used on the receiver side.
The nature of FM causes noise amplitude to be proportional to the transmitted frequency.
(double frequency = double noise volume)
To compensate this, most FM radios, as well as all analog mobile networks emphasis.
</p>
<center><img src="emphasis.gif"/></center>
<p>
As depicted, a frequency of 1000 Hz passes the pre-emphasis without any change.
The double frequency (2000 Hz) is amplified to double amplitude (+6 dB).
The result is that higher frequencies are transmitted with more deviation (louder) than lower frequencies.
On the receiver, the process is reversed.
A frequency of 2000 Hz is lowered down to half of it's amplitude (-6 db), so it becomes the original amplitude again.
</p>
<p>
Generally a transmitter is doing pre-emphasis for you.
If you are connected directly to the PLL of your transmitter, you will also not have pre-emphasis.
In this case you need to do it inside the base station software. Use the command line option '-E' or '--pre-emphasis':
</p>
<pre>
# src/bnetz/bnetz -k 1 --pre-emphasis
</pre>
<p>
The receiver is doing the de-emphasis for you.
If you are connected directly to the discriminator of your receiver, you will also not have de-emphasis.
In this case you need to do it inside the base station software. Use the command line option '-e' or '--de-emphasis':
</p>
<pre>
# src/bnetz/bnetz -k 1 --de-emphasis
</pre>
<p class="toppic">
RX-Gain
</p>
<p>
Especially if you use discriminator output, you might have low output voltage.
In my experiments it helps to amplify the amplitude by factor two in order adjust a received signal to 100%.
A gain of 6 dB will amplify the amplitude by factor two.
Also the noise of the sound adapter will be amplified by factor two, but this is not relevant at 16 bit resolution.
Use the command line option '-G 6' or '--rx-gain 6'.
In this example I use both, transmitter and receiver without emphasis and add extra 6 dB gain to the input from the receiver:
</p>
<pre>
# src/bnetz/bnetz -k 1 -E -e -G 6
</pre>
<p class="toppic">
Loopback Test
</p>
<p>
As used before, the loopback test can be used to verify the signal process, such as level, delay and quality.
</p>
<p>
If command line option '-L 1' or '--loopback 1' is given, a loopback inside the software is performed.
Also the audio signal is sent to the audio adapter, but not received from it.
This test is used to debug the software.
It can be used to see what the output of an external loop would look like.
</p>
<pre>
./bnetz/bnetz -k 1 -L 1
bnetz.c:351 info : Entering IDLE state, sending 'Gruppenfreisignal' 2.
Base station for channel 1 ready, please tune transmitter to 153.010 MHz and receiver to 148.410 MHz.
To call phone, switch transmitter (using pilot signal) to 153.370 MHz.
bnetz.c:509 info : RX Level: 100% Quality=99
bnetz.c:524 notice : Received telegramm 'Ziffer 0'.
bnetz.c:528 notice : Round trip delay is -0.048 seconds
bnetz.c:509 info : RX Level: 100% Quality=98
bnetz.c:524 notice : Received telegramm 'Ziffer 1'.
bnetz.c:528 notice : Round trip delay is 0.000 seconds
bnetz.c:509 info : RX Level: 100% Quality=98
bnetz.c:524 notice : Received telegramm 'Ziffer 2'.
bnetz.c:528 notice : Round trip delay is 0.000 seconds
bnetz.c:509 info : RX Level: 100% Quality=99
bnetz.c:524 notice : Received telegramm 'Ziffer 3'.
bnetz.c:528 notice : Round trip delay is 0.000 seconds
bnetz.c:509 info : RX Level: 100% Quality=99
bnetz.c:524 notice : Received telegramm 'Ziffer 4'.
bnetz.c:528 notice : Round trip delay is 0.001 seconds
</pre>
<p>
If command line option '-L 1' or '--loopback 2' is given, an external loopback is performed.
The receiver needs to be tuned to transmitter, so the software receives its own signal.
The received quality level is relevant. It should be not less than 90 for B-Netz.
</p>
<p>
If command line option '-L 3' or '--loopback 3' is given, the audio from the input is sent back to the output.
It can be used to check a headset.
Everything that is spoken into the microphone should be appear in the headphone.
</p>
[<a href="index.html">Back to main page</a>]
</td></tr></table></center>
</body>
</html>

BIN
docs/stellwerk.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 KiB

74
docs/style.css Normal file
View File

@ -0,0 +1,74 @@
body {
background-color: #ffffff;
/*
background-image: url('background.jpg');
background-repeat: no-repeat;
*/
margin: 0;
}
img {
border: none;
}
a:link {
color: #0000ff;
}
a:visited {
color: #ff0000;
}
a:active {
color: #000000;
}
h2 {
font-size: 40px;
color: #000000;
font-family: Arial;
text-align: center;
}
p {
font-size: 20px;
color: #000000;
font-family: Arial;
text-align: justify;
}
p.toppic {
font-size: 30px;
color: #008040;
font-family: Arial;
text-align: center;
}
pre {
font-size: 12px;
color: #60ff60;
background-color: #000000;
}
pre.list {
font-size: 16px;
color: #000000;
background-color: #ffffff;
}
table {
width: 816px;
border-spacing: 0px;
}
td {
padding: 0px;
}
li {
font-size: 20;
color: #000000;
font-family: Arial;
/* text-align: left;*/
}

BIN
docs/transmitter2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 KiB