<li><ahref="#basestation_imts">Setup of an IMTS base station</a>
<li><ahref="#basestation_mts">Setup of an MTS base station</a>
</ul>
<pclass="toppic">
<aname="history"></a>
History
</p>
<p>
From Wikipedia, the free encyclopedia:
<br><br>
"The Improved Mobile Telephone Service (IMTS) was a pre-cellular VHF/UHF radio system which linked to the PSTN.
IMTS was the radiotelephone equivalent of land dial phone service.
Introduced in 1964, it replaced Mobile Telephone Service (MTS) and improved on most MTS systems by offering direct-dial rather than connections through a live operator."
</p>
<p>
MTS and IMTS phone were assembled in large cases located in the trunk of cars.
Early models used mechanical switches to encode and decode phone's identity.
Later models were solid state and had duplexers to talk and listen simultaneously.
Attaché case phones came available in the late 60's, so they could be used outside the car.
The modulation is FM. The frequency deviation of speech is 2500 Hz ??? at 1000 Hz.
Signaling tones have a frequency deviation of 5000 Hz.
Pre-Emphasis is used for speech only.
</p>
<p>
Tones used for signaling:
</p>
<p>
<tableclass="imts">
<tr><thcolspan="2"> Base -> Mobile </th></tr>
<tr><td>Idle</td><td>2000 Hz</td></tr>
<tr><td>Seize</td><td>1800 Hz</td></tr>
</table>
</p>
<p>
<tableclass="imts">
<tr><thcolspan="2"> Mobile -> Base </th></tr>
<tr><td>Guard</td><td>2150 Hz</td></tr>
<tr><td>Connect</td><td>1633 Hz</td></tr>
<tr><td>Disconnect</td><td>1336 Hz</td></tr>
</table>
</p>
<p>
Idle State:
</p>
<p>
All transceivers of a base station that are not in use, are turned off, except for one channel, the idle channel.
Only one channel being idle will transmit the 2000 Hz Idle tone and listens for the 2150 Hz Guard tone.
If the (only) channel with the Idle tone is seized by a mobile phone or the public telephone exchange, another channel, that is turned off, is activated and sends the Idle tone and becomes the new idle channel.
</p>
<p>
When a mobile phone is idle, it will search for a radio channel with Idle tone and suitable quality.
The transmitter will be off while the phone listens to the Idle tone or an incoming call from the base station.
When a number is dialed from a mobile phone, Guard tone is sent continuously as soon a the dial goes off normal (when the dial is moved from its resting position).
Ringing by the base station is composed of 1800 Hz Seize tone and 2000 Hz Idle tone, each alternating after 25 ms for 2 seconds, then 4 seconds of Seize tone.
</p>
<p>
The mobile phone rings the bell using the tones received from the base station.
If the 1800 Hz Seize tone disappears, the phone stops ringing and returns to idle channel.
</p>
<p>
If the user of the mobile phone answers, the mobile phone transmits 1633 Hz Connect tone for 400 ms and through-connects speech path.
</p>
<p>
If the base station receives the Connect tone, it will stop the ringing sequence, answers the call from the land user and through-connect the speech path.
</p>
<p>
Release by the mobile phone:
</p>
<p>
If the mobile user hangs up, the mobile phone starts the release sequence by sending alternating 1336 Hz Release tone and 2150 Hz Guard tone, 25 ms each.
After 750 ms sending that sequence, the mobile phone turns off transmitter and searches for idle channel.
When the mobile phone is ringing, it will stop if the base station removes the ringing sequence.
There is no release sequence to release an a active call towards mobile phone.
</p>
<pclass="toppic">
<aname="howitworks_mts"></a>
How MTS works
</p>
<p>
Base station in Idle state:
</p>
<p>
The base station uses a 600 Hz tone to indicate an idle channel.
Similarly to the IMTS, only one idle channel send the 600 Hz tone, the other channels are turned off.
</p>
<p>
Call from mobile phone
</p>
<p>
The mobile station does not send any signaling tone at all.
The radio signal is used to start a call.
Whenever the user picks up the phone and presses the push-to-talk button, a connection is made to an operator.
The operation is half duplex, so there is no release by stopping transmission of the mobile phone.
The operator has to terminate the call.
</p>
<p>
Call from base station
</p>
<p>
To page a mobile phone, the operator has to dial the 5 digits of the mobile phone.
The operator has to add the digit '1' in front of the 5 digit subscriber ID.
This digit is used to reset the paging detector inside mobile phone.
Note that the subscriber ID must not have a digit '1'.
Each pulse from the base station is a transition from 600 Hz to 1500 Hz or from 1500 Hz to 600 Hz.
Two or more pulses are separated 100 ms.
Each digit is separated 400 ms ???.
After the last pulse of the last digit, the tone sustains until the caller hangs up.
The mobile phone rings.
To answer the call, the user presses the push-to-talk button.
The ringing can be released by sending another transition pulse or by removing the tone for a short time. (This is for further study.)
</p>
<pclass="toppic">
<aname="basestation_imts"></a>
Setup of an IMTS base station
</p>
<p>
Find out what band and channels your phone supports. Then get a list of all available bands and channels:
</p>
<pre>
# src/imts/imts -k list
</pre>
<p>
Assume the phone supports VHF Low band, so we select channel 'YK' with the command line option '-k YK', or select any other channel your phone supports.
imts.c:381 info : Entering IDLE state on channel YK, sending 2000 Hz tone.
imts.c:336 notice : Created channel #YK
Base station on channel YK ready, please tune transmitter to 152.660 MHz and receiver to 157.920 MHz. (-5.260 MHz offset)
imts.c:886 notice : Received Guard tone, turning off IDLE tone
imts.c:544 info : Received seize (Guard + Connect tone) from mobile phone.
imts.c:545 info : -> Guard tone duration: 350 ms (level 69%)
imts.c:408 info : All channels are busy now, cannot activate any other channel.
imts.c:907 notice : Sending Seize to mobile phone.
imts.c:784 info : Received ANI digit '2' from mobile phone (level 71%).
imts.c:784 info : Received ANI digit '1' from mobile phone (level 77%).
imts.c:784 info : Received ANI digit '6' from mobile phone (level 77%).
imts.c:784 info : Received ANI digit '2' from mobile phone (level 77%).
imts.c:784 info : Received ANI digit '6' from mobile phone (level 77%).
imts.c:784 info : Received ANI digit '3' from mobile phone (level 71%).
imts.c:784 info : Received ANI digit '0' from mobile phone (level 71%).
imts.c:790 info : ANI '2162630' complete, sending dial tone.
</pre>
<p>
If the base station does not receive Guard tone or receives bad ANI digits, check the receiver and the receive level.
To test the receiver side, tune the receiver to the frequency of the transmitter and check the loopback signal. Adjust your receiver (sound card input) to match about 100% level:
</p>
<pre>
...
imts.c:876 notice : Received idle tone (level of 97%), loopback?
imts.c:876 notice : Received idle tone (level of 97%), loopback?
imts.c:876 notice : Received idle tone (level of 97%), loopback?
imts.c:876 notice : Received idle tone (level of 97%), loopback?
...
</pre>
<p>
Return your receiver to the uplink frequency and try to make a call again.
If it works, use you dial pad (or rotary dial) to dial the number.
</p>
<p>
To call towards mobile station, enter the 7 digit mobile station ID on your keyboard or add it to the command line.
Use the same phone number you received with the ANI above, this is your mobile station ID.
Then press 'd' to page and ring the phone:
</p>
<pre>
...
mncc_console.c:358 info : Outgoing call to '2162630'
call.c:699 info : Received MNCC call from fixed network '' to mobile '2162630'
call.c:706 info : Indicate MNCC call confirm towards fixed network
call.c:717 info : Outgoing call from '' to '2162630'
imts.c:1176 info : Call to mobile station, paging number: 2162630
imts.c:445 info : Entering paging state, sending phone's ID '2162630'.
imts.c:408 info : All channels are busy now, cannot activate any other channel.
imts.c:942 info : Sending paging digit '2' as pulses.
imts.c:942 info : Sending paging digit '1' as pulses.
imts.c:942 info : Sending paging digit '6' as pulses.
imts.c:942 info : Sending paging digit '2' as pulses.
imts.c:942 info : Sending paging digit '6' as pulses.
imts.c:942 info : Sending paging digit '3' as pulses.
imts.c:942 info : Sending paging digit '0' as pulses.
imts.c:755 info : Received acknowledge (Guard tone) from mobile phone (level 71%).
call.c:440 info : Call is alerting
call.c:428 info : Indicate MNCC alerting towards fixed network
mncc_console.c:202 info : Call alerting
imts.c:466 info : Received response from mobile phone, ringing.
imts.c:1013 info : Sending ringing signal as pulses.
imts.c:1022 info : Sending pause after ringing.
imts.c:1013 info : Sending ringing signal as pulses.
imts.c:1022 info : Sending pause after ringing.
imts.c:763 info : Received answer (Connect tone) from mobile phone (level 75%).
call.c:478 info : Call has been answered by '2162630'
call.c:466 info : Indicate MNCC answer towards fixed network
mncc_console.c:206 info : Call connected to '2162630'
imts.c:476 info : Received answer from mobile phone, conversation started.
</pre>
<p>
To disconnect a call, the phone must be hung up:
</p>
<pre>
...
imts.c:654 info : Received disconnect sequence from mobile phone (level 90%).
imts.c:418 info : Turing transmitter off.
imts.c:381 info : Entering IDLE state on channel YK, sending 2000 Hz tone.
</pre>
<p>
Level adjustment:
</p>
<p>
Don't care about it, if you use SDR, since levels are always correctly modulated.
Now it is time to actually care about the correct transmit and received level.
In the example above you see a level around 70..77%.
Now tune your receiver to your transmitter frequency again.
Adjust the level to something around 73% using a variable resistor on my soundcard's input. (+- 10% is good)
</p>
<pre>
...
imts.c:876 notice : Received idle tone (level of 88%), loopback?
imts.c:876 notice : Received idle tone (level of 76%), loopback?
imts.c:876 notice : Received idle tone (level of 73%), loopback?
imts.c:876 notice : Received idle tone (level of 73%), loopback?
imts.c:876 notice : Received idle tone (level of 73%), loopback?
imts.c:876 notice : Received idle tone (level of 73%), loopback?
...
</pre>
<p>
Now, whatever frequency deviation the phone transmits for signaling, so does your base station. (Around 73% in this case.)
Use the other variable resistor (connecting your receiver) to adjust the volume until the level matches about 100%. (+- 10% is good)
Switch back the receiver to up-link frequency and see the result from your phone. (You should now receive the phone at around 100%.)
</p>
<p>
Pre- and De-Emphasis:
</p>
<p>
In order to have correct level of signaling tones, your transmitter and your receiver should not use pre- and de-emphasis.
Let this software do that instead, then the signaling tones do not use pre-emphasis, just the voice.
If possible, add command line option '-p' for pre-emphasis of the transmit signal and '-d' for de-ephasis of the received signal.
Don't care about it, if you use SDR, since pre-emphasis and de-emphasis is automatically selected and used.
</p>
<p>
Fast seize detection:
</p>
<p>
Sometimes your sound device might not be fast enough to handle a small sound buffer.
The maximum buffer of 5 ms (command line option '-b 5') might cause repeating trouble:
</p>
<pre>
sound_alsa.c:458 error : Buffer underrun: Please use higher latency and enable real time scheduling
sound_alsa.c:127 error : cannot prepare audio interface for use (Device or resource busy)
sender.c:330 error : Failed to get number of samples in buffer (rc = -32)!
sender.c:338 error : Trying to recover!
</pre>
<p>
<fontcolor="red">
We must not increase buffer, because we would detect the Connect tone too late, so we would respond too late.
We must respond before we detect the Connect tone, so that our response matches the time the Connect tone is actually transmitted by the phone.
</font>
</p>
<p>
To do this we must measure the length of the Guard tone.
First pick up the phone and remember the Guard tone duration.
It should be close to 350 ms.
</p>
<pre>
imts.c:544 info : Received seize (Guard + Connect tone) from mobile phone.
imts.c:545 info : -> Guard tone duration: 349 ms (level 99%)
</pre>
<p>
Now put the base station into loopback mode and tune receiver to transmitter or loop soundcard's output to input.
</p>
<pre>
# src/imts/imts -k YK -l 2
...
imts.c:942 info : Sending paging digit '1' as pulses.
imts.c:861 info : Received paging test digit '1' (level 103% delay 68 ms).
imts.c:942 info : Sending paging digit '2' as pulses.
imts.c:861 info : Received paging test digit '2' (level 103% delay 67 ms).
imts.c:942 info : Sending paging digit '3' as pulses.
imts.c:861 info : Received paging test digit '3' (level 103% delay 67 ms).
</pre>
<p>
In this case the soundcard's round trip delay is 67 ms.
Add '-F 282' to command line option, instead of '-b 5'.
Now we react about 282 ms after we detected the start of the Guard tone.
The reaction now matches the time when the phone transmits the Connect tone.
(Tested with a Limermore LAP-2000 phone.)
</p>
<p>
Detecting loss of carrier signal:
</p>
<p>
This works with SDR only, because we do not have any RSSI (Received Signal Strength Indicator) signal from a radio connected to the sound card.
With SDR we know the RX level, so we can define a threshold value for a lost signal.
Use '-S <db>' or '--squelch <db>' to define the squelch threshold level.
To measure the noise floor, use the 'm' key to get a bar graph of the current RSSI. (RF level)
Add some dB to the noise floor for the squelch threshold value.
An easier way is to use '-S auto' or '--squelch auto' to automatically measure the noise floor level and then automatically use a threshold level that is some dB above this measured level.
This level is then used to detect loss of carrier.
Also this level is used to mute the audio path, whenever the signal gets lost for a short time.
After about 12 seconds of signal loss, a call is released.
</p>
<pre>
...
squelch.c:94 info : RF signal measurement: -69.2 dB noise floor, using threshold of -63.2 dB
...
</pre>
<p>
In the following example I cut off the power of the phone being in a call and waited 12 seconds for the base station to time out:
</p>
<pre>
...
squelch.c:114 info : RF signal weak: Muting audio (RF -77.6 dB < -70.7 db)
imts.c:491 notice : Detected loss of signal after 12 seconds, releasing.
...
</pre>
<pclass="toppic">
<aname="basestation_mts"></a>
Setup of an MTS base station
</p>
<p>
To detect an outgoing call or answer from a mobile phone, it is required to use squelch.
Squelch is only available with SDR support.
The command line option '-M' is used to switch to MTS mode.
Also we use loopback mode '-l 2' to test RF loopback.
Alternatively use '-l 1' to perform an internal loopback.
The following example shows setup with LimeSDR (not LimeSDR mini!):
</p>
<pre>
# src/imts/imts --limesdr -k JS -M -l 2
...
imts.c:443 info : Entering paging test state, sending digits 1234567890.
imts.c:408 info : All channels are busy now, cannot activate any other channel.
imts.c:336 notice : Created channel #JS
Base station on channel JS ready, please tune transmitter to 152.690 MHz and receiver to 157.950 MHz. (-5.260 MHz offset)
...
imts.c:861 info : Received paging test digit '1' (level 98% delay 9139 ms).
imts.c:992 info : Sending paging digit '1' as pulses.
imts.c:861 info : Received paging test digit '1' (level 100% delay 80 ms).
imts.c:992 info : Sending paging digit '2' as pulses.
imts.c:861 info : Received paging test digit '2' (level 100% delay 78 ms).
imts.c:992 info : Sending paging digit '3' as pulses.
imts.c:861 info : Received paging test digit '3' (level 100% delay 77 ms).
imts.c:992 info : Sending paging digit '4' as pulses.
imts.c:861 info : Received paging test digit '4' (level 100% delay 78 ms).
imts.c:992 info : Sending paging digit '5' as pulses.
imts.c:861 info : Received paging test digit '5' (level 100% delay 77 ms).
imts.c:992 info : Sending paging digit '6' as pulses.
...
</pre>
<p>
Now run the base station without loopback.
Add "-S auto" to use squelch level with automatic level calibration.
Be sure to have an attenuator, so you do not saturate your input of your SDR.
Refer to the SDR help page for more information and input level display.
The following example shows a call from mobile phone, just by transmitting toward base station:
</p>
<pre>
# src/imts/imts --limesdr -k JS -M -S auto
...
squelch.c:61 info : RF signal squelch: Use automatic threshold
imts.c:386 info : Entering IDLE state on channel JS, sending 600 Hz tone.
imts.c:336 notice : Created channel #JS
Base station on channel JS ready, please tune transmitter to 152.690 MHz and receiver to 157.950 MHz. (-5.260 MHz offset)
...
dsp.c:466 info : Low RF level, muting.
squelch.c:99 info : RF signal measurement: -69.9 dB noise floor, using squelch threshold of -59.9 dB
squelch.c:99 info : RF signal measurement: -70.2 dB noise floor, using squelch threshold of -60.2 dB
squelch.c:112 info : RF signal strong: Unmuting audio (RF -54.2 >= -60.2 dB)
dsp.c:476 info : High RF level, unmuting; turning transmitter on.