Work on documentation

pull/1/head
Andreas Eversberg 7 years ago
parent 1ce67c14e9
commit ba91ee82a7
  1. 7
      README
  2. BIN
      docs/a-netz-green.jpg
  3. BIN
      docs/a-netz-inside.jpg
  4. BIN
      docs/a-netz-yellow.jpg
  5. 249
      docs/a-netz.html
  6. BIN
      docs/b-netz-phone.jpg
  7. 709
      docs/b-netz.html
  8. BIN
      docs/b-netz.jpg
  9. BIN
      docs/b-netz_small.jpg
  10. BIN
      docs/c-netz-burst_full.png
  11. BIN
      docs/c-netz-burst_part.png
  12. 171
      docs/c-netz.html
  13. BIN
      docs/c-netz.jpg
  14. BIN
      docs/c-netz_small.jpg
  15. BIN
      docs/chaos.jpg
  16. BIN
      docs/coil.jpg
  17. BIN
      docs/discriminator.jpg
  18. BIN
      docs/dummyload.jpg
  19. BIN
      docs/emphasis.gif
  20. BIN
      docs/headphone.jpg
  21. 37
      docs/headset.html
  22. 25
      docs/index.html
  23. 41
      docs/install.html
  24. BIN
      docs/microphone.jpg
  25. 42
      docs/nmt.html
  26. BIN
      docs/nmt.jpg
  27. BIN
      docs/nmt_small.jpg
  28. BIN
      docs/poti.gif
  29. BIN
      docs/power.jpg
  30. BIN
      docs/receiver2.jpg
  31. 200
      docs/setup.html
  32. BIN
      docs/setup.jpg
  33. BIN
      docs/signal.png
  34. 285
      docs/software.html
  35. BIN
      docs/stellwerk.jpg
  36. 74
      docs/style.css
  37. BIN
      docs/transmitter2.jpg

@ -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!

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 593 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

@ -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:
</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>
<p align='justify'>
The first thing the phone does is to find the channel 1.
</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>
<pre>
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
<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
...
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>
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%
<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.
</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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 566 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

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

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

@ -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>