5 files changed, 79 insertions, 12 deletions
diff --git a/docs/a-netz.html b/docs/a-netz.html
index ef2a5a6..280cad1 100644
@@ -176,6 +176,12 @@ The base station detects the tone is missing and the speech path is connected th
+Theoretically all combinations of 30 tones could be assigned to 27405 different subscribers.
+Only 24375 combinations can be encoded with the last 5 digits, because some digit combinations do not define 4 different tones or would generate the same 4 tones as other digit combinations do.
+The actual limitation of subscribers were cause by the limited number of available channels.
4. Release by the mobile station
If the user hangs up, the mobile station transmits a continuous 1750 Hz release tone.
diff --git a/docs/amps.html b/docs/amps.html
index 453346e..6ec13fb 100644
@@ -32,6 +32,7 @@ Dr. Martin Cooper produced the first handheld phone "DynaTAC8000x", the famous B
+<center><a href="https://en.wikipedia.org/wiki/Motorola_DynaTAC">Image taken from Wikipedia</a></center>
@@ -57,11 +58,10 @@ Dr. Martin Cooper produced the first handheld phone "DynaTAC8000x", the famous B
-The detailed communication between base station and mobile station is described in <a href="TIA_EIA_553_A.compressed.pdf">TIA/EIA-553 standard</a>. Click for reading the PDF file. <i>Reproduced under written permission from Telecommunications Industry Association.</i>
+The detailed communication between base station and mobile station is described in <a href="TIA_EIA_553_A.compressed.pdf">TIA/EIA-553 standard</a>.
+Click for reading the PDF file.
+Thanx to TIA for allowing me to add the standard document to this project's documentation.
+<i>Reproduced under written permission from Telecommunications Industry Association.</i>
@@ -81,7 +81,43 @@ Setup of a base station
+<font color="red">Importaint: We need to connect to PLL and discriminator!</font>
+AMPS does not use a modulated tone to carry bits of information, instead it modulates the radio carrier directly.
+This image shows a signal generated by this software, which is similar to a received signal from the phone:
+Generally a receiver will do de-emphasis and filtering after demodulating the signal.
+We don't want that.
+It may work, but be sure to use a receiver with discriminator output.
+This output gives direct signal of the frequency deviation of the received signal.
+The signal on the sound card represents the frequency shift of the received signal.
+Many receivers can be modified, so search the Web for more info.
+On the transmitter we don't want to have filtering and pre-emphasis.
+It may work, but be sure to use a transmitter that allows to disable emphasis.
+I took the schematics of my transmitter and connected the sound card directly to the PLL.
+The transmitter will now shift frequency according the the level of the sound card.
+<font color="red">Importaint: We need to transmit correct polarity, use auto polarity detection always!</font>
+In my case, my sound card is connected to a transmitter, where a positive sample value causes a negative frequency deviation.
+This is why I need to flip the polarity of the signal, so I generate a negative sample value that causes a positive frequency deviation.
+I use the '-f yes' option or '--flip-polarity yes'.
+Also it is essential to use a transmitter with direct access to the modulator and and a receiver with direct access to the disciminator.
+I use '-p -d' or '--pre-emphasis --de-emphasis' to process emphasis for audio signal in software.
+I use the calling channel (control channel) 334, which could also be used as traffic channel (voice channel).
@@ -113,6 +149,13 @@ The actual level is not yet relevant.
(You may check the quality using '-l 2' or '--loopback 2' command line option and build a radio loop by tuning the receiver to the transmitter.)
+If the polarity is correct and the volume of the signal (frequency deviation) is about right, you will make the phone register.
+The phone will transmit on the uplink.
+If not, try other polarity.
+This is how my phone registers to my network:
frame.c:3630 info : RX RECC: DCC=0
diff --git a/docs/b-netz.html b/docs/b-netz.html
index a20d704..f7997e0 100644
@@ -26,7 +26,7 @@ History
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.
+Using digital technology and later microprocessors, the phones were still as big as a suitcase.
It used full duplex radio link.
The call was placed by automatic dialing in both direction, so no requirement for an operator.
After full deployment in 1986, there were 158 base stations.
@@ -293,9 +293,9 @@ If a pattern 1..9 is selected, the mobile station selects only the base stations
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.
+This was used in areas with many subscribers.
The idle signal 19 is used.
-The mobile station will reduce TX power when selecting this base station for outgoing call.
+The mobile station will reduce TX power when selecting a close base station for outgoing call.
@@ -330,7 +330,7 @@ If no dialing is received from mobile station within 3.8 seconds, the base stati
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"):
+The string consist of a start signal ("Funkwahl"), 5 digits of mobile identity ("Wahlziffern"), dialed digits (without 0 at the beginning) and the stop signal ("Funkwahlende"):
@@ -399,7 +399,7 @@ The calling party dials the prefix of the city where the base station is located
-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"):
+The transceiver of the base station switches to channel 19 and sends a paging sequence that consists of 5 digits of mobile identity ("Wahlziffern") and the channel assignment digit ("Kanalbefehl"):
diff --git a/docs/c-netz.html b/docs/c-netz.html
index 7722083..08d8344 100644
@@ -343,7 +343,7 @@ The transmitter will now shift frequency according the the level of the sound ca
-<font color="red">Importaint: We need to transmit correct polarity, use auto polarity detection always!</font>
+<font color="red">Importaint: We need to transmit correct polarity!</font>
diff --git a/src/amps/amps.c b/src/amps/amps.c
index d9f6287..f330f2f 100644
@@ -17,6 +17,24 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * Notes on frames and scheduling:
+ * If the amps->dsp_mode is set to transmit frames, fsk_frame() at dsp.c code
+ * requests frames, modulates them and forwards them to sound device. Whenever
+ * the dsp.c code requests frame (if no frame exists or frame had been sent),
+ * it calls amps_encode_frame_focc() or amps_encode_frame_fvc() of frame.c.
+ * There it generates a sequence of frames (message train). If no sequence is
+ * transmitted or a new sequence starts, amps_tx_frame_focc() or
+ * amps_tx_frame_fvc() of amps.c is called. There it sets message data and
+ * other states according to the current trans->state.
+ * If a frame is received by dsp.c code, amps_decode_frame() at frame.c is
+ * called. There the bits are decoded and messages are assembled from multiple
+ * frames. Then amps_rx_recc() at amps.c is called, so the received messages
+ * are processed.