                                - MOSAIC II - 

Frequency Domain Hellschreiber Transmit Program 
Release 1.02.

(c) 1998 Murray Greenman ZL1BPU.

Purpose:
=======

To demonstrate an experimental radio transmission mode suited to low HF bands
and QRP operation. The transmit equipment for this mode can be very simple.
This program generates MOSAIC II in the audio (base band) domain, which can be
used for demonstration purposes, or fed from the computer speaker into the
microphone of any voice transmitter. This program does not provide direct 
transmitter FSK, which is the best way to utilise this mode. (A version for
FSK of a transmitter via the PC LPT port is under development).

MOSAIC II is capable of operating in very poor signal to noise situations,
and is virtually unaffected by interfering signals, lightning noise and
varying propagation, as virtually all these affects remain in the amplitude
domain and have minimal effect on readability in the frequency domain. In
addition, HF fading, which occurs when multiple paths to the receiver interact
to cause signal cancellation, severe phase and timing distortion, has virtually
no effect other than momentary weak reception, since the mode is not affected
at all by quite gross time delay effects or signal by phase.

MOSAIC II will not work below the noise level, in the way that some of the newer
more sophisticated DSP systems will, but it will provide good noise rejection,
which improves as the sending and receiving speeds are reduced.

The ITU designation of MOSAIC II is typically 200F2C, and it is a type of
multi-tone FSK, or MFSK. It is very simple to generate and uses very little
bandwidth. Even the fastest speeds are only 200 Hz wide.

Frequency Domain:
================

MOSAIC II can be likened to the chirping of birds or the noises of whales - 
they make no sense to humans, but when displayed on a spectrograph, which 
displays frequency against time, recognisable patterns appear. This is the 
case with MOSAIC II.

The signals are generated as a series of chirps, all the same loudness, and
only one note at a time. This sequential tone generation is an important property
of MOSAIC II - because it never consists of more than a single tone, a simple CW
transmitter will suffice to transmit it, and a simple crystal oscillator with
a varactor for frequency shift is sufficient to generate it. In addition, all
transmitter power is concentrated in one tone at a time for maximum received
signal.

Because MOSAIC II operates in the frequency domain, there is no notion of
synchronism or any need to match transmit and receive frequencies, or pixel
rates, at each end of the communications path. Unlike Feld-Hell (amplitude
keyed Hellschreiber), there is no need to display each character twice to
overcome poor character synchronising - there is no synchronism! Tuning is
uncritical, and although the transmitted signal is generally less than 200 Hz
wide, there is no need for a narrow filter, as interfering signals generally have
spacial separation, and have minimal effect on copy, unless they are sufficiently
stronger than the wanted signal, that the receiver gain is affected by AGC action.

Character Generation:
====================

MOSAIC II is like Hellschreiber - it transmits dots of a dot-matrix character
sequentially - a bit like the dots of a dot matrix printer, but the dots are
sequential, sent one at a time up each column of the character and then along
each row of the character. The name is derived from a euphemistic name for
Hellschreiber used during the 1950s. Due to keying and receiving effects,
the display of MOSAIC II often gives the appearance of mosaic tiles. The
author's daughters prefer to call it "Tweedle", for reasons that are obvious
at the slower sending speeds!

The standard upper case MOSAIC II font is very like Hellschreiber, consisting
of only five pixels per column, and five (or seven, depends on the version)
columns per character. (Hellschreiber has five printable pixels out of seven,
and five printable rows out of seven).

This release has a special speed-up algorithm, which, to save time, alters the
way the pixels are scanned. Unprinted pixels have been substantially
eliminated, and other techniques such as proportional character spacing further 
reduce transmission time. Fat, thick characters have been found to be easier to
read than thin ones, and this release includes the ability to send extra fat,
large characters, at the expense, to some extent, of text throughput.

This version of the program will send lower case characters, which with a
proportional font are faster to send, but a little less readable. Under
difficult conditions use the CAPS LOCK key to force upper case. To generate
the lower case descenders (e.g. for p,q and y) an extra two tones are
introduced, and this has no effect on reception as the standards are very
relaxed by the very nature of the mode. The additional rows are only used for
descenders and do not appreciably slow transmission since no delay is involved
when they are not used.

Receiving in the Frequency Domain:
=================================

The secret to receiving any frequency domain signal is the use of a highly
sophisticated program called a WATERFALL display. The waterfall display
is a spectrograph, a graph of frequency versus time, and moves along from
right to left. Each line printed at the right side of the screen, and 
subsequently shifted across, represents all the "buckets" of a Fast Fourier
Transform of information from the frequency domain converted to the amplitude
domain for human viewing. The darkness of each pixel represents the score
in each bucket as a result of the transform. The transform  contains many results,
typically 1000 or more, which are added up into accumulators or "buckets", and each 
bucket displays on the screen as a brightness value, depending on how much
signal energy that frequency represents during the relevant conversion.

Each bucket represents a narrow band of frequencies, typically as narrow as
5 Hz. Waterfall software contains a vast amount of complex and repetitive
mathematics, but modern computers with maths processors and sound cards are 
able to perform dozens of conversions per second.

The limitation of the performance of MOSAIC II is currently the ability of the 
software to process the signal fast enough. The present limit is around 50 pixels
per second, (two or three characters per second), dependent on the computer.
A 233 MHz Pentium II will cope with 100 pixels/sec.
 
This program depends on the use of GRAM 4.2 to receive the signal. GRAM is 
a very clever program that requires Windows 95 and any 16 bit sound card. Some 
experimentation will be required for best reception, and a table will be given
showing suitable parameters for each mode, as a starting point. To some extent
the performance will depend on the speed of the computer. Reasonable performance
will be achieved on a 486 DX 100 computer or any Pentium or better.

Interestingly enough, fast computers are not necessarily better, since the results
receiving slower transmissions (say below 20 pixels/sec) can be better on slower
computers. Unfortunately GRAM has no control of the number of conversions/sec, it
simply runs as fast as possible on each computer.

Is has been found that MOSAIC II and Gram 4.2 will operate on the same
Windows 95 computer, but the waterfall scan may stop while characters are being 
transmitted, to resume when transmitting stops. MOSAIC II may be run in a Windows
95 "DOS box".

Requirements:
============

One or two PCs - for transmit a 10 MHz DOS XT or better will suffice. This PC
needs to have reasonable sound from its internal speaker, and can be modified to
connect the sound directly to a transmitter via a suitable isolating transformer
and low pass filter. For reception, you need a copy of Gram 4.2 or newer,
running on a fast Win95 based PC with a Sound Blaster compatable sound card. You
can download Gram from www.monumental.com/rshome/gram.html.

No other hardware is required. The sound from the PC speaker can be sent to the
transmitter microphone (but watch for PC hum and fan noise). An external speaker
or a small line transformer are the best approaches. On receive, connect
the Line Input of the sound card to the receiver speaker output, preferably via an
audio isolating transformer to reduce hum and reduce the risk of damage to the PC.

Setting Up MOSAIC II:
====================

Create a directory on your hard disc, and unzip 122.ZIP into it. You should now
have the files 122.EXE, 122.CFG and MOSAIC2.TXT (this file). You can repeat the
process with 123.ZIP in the same directory, if you wish. You can change the
configuration in a fairly flexible manner, but you cannot modify the program.
If you have suggestions for any useful improvements, please let the author and
inventor, Murray Greenman ZL1BPU know. He can be reached at as149@detroit.freenet.org.

Before you run the program, you will need to edit the first four lines in the file
MOSAIC.CFG to adapt them to your station. These lines contain your QBF (test)
message, your CQ message, a station ID message and a CW ID message, in that order. 
You will see that the CW message is simply recorded as a string of dots and dashes.
Use a conventional text editor to affect these changes. Do not change the order
or add or delete any of the lines as the program will be confused. Each of the four
lines must start and finish with double quotes ". 

The following lines contain the three parameters for each of the six "soft" menu
options - SP (speed), SH (shift) and AR (array factor). The final two lines contain
the centre frequency of transmission CF and the FSK OFFSET, which is set to be
supersonic by default. You may be interested to play with FSK transmissions by
reducing this value so that white pixels are transmitted. See the notes in the file.

The signal can be transmitted inverted (lower tones for the top of the characters)
by setting a negative value for SH. The best results will be achieved when SP and
SH are numerically identical, as this reduces the effect of keying sidebands.

Provided the 122.CFG (or 123.CFG) file is in the same directory as the matching
executable, all you need to do to run the program is change to the directory
containing both files and type "122"  or "123" at the DOS prompt. You may prefer to
create a batch file that you can call from your operating system. For example:

C:
CD \RADIO\HELL
122
MENU

will work if you use a DOS batch file menu system.

Functions of MOSAIC II:
======================

The main menu appears when you start the program. This offers a series of transmit
speeds, quoted in pixels per second. The values do not translate directly to
characters per second, as it will depend on the non-print pixel percentage you use,
and also depends on the characters you send. There are around 11 - 15 pixel times
per character, depending on the speed-up setting.

With the default speed-up of 30%, 20 pixels/sec represents about 1.5 characters
per second. The actual speed does not really matter much. The standard speed is
20 - 30 pixels/sec, and should be used for initial calls. It may be difficult to
copy the faster speeds on all but the very fastest computers. The slowest speed
is best for very difficult conditions, but sending is consequently slow. Leave it
up to the station at the other end to tell you what the best speed is (like CW!)

Once you choose a speed option, the tone frequencies and other parameters are
automatically calculated for the chosen setting. Press a key 1 - 6 to choose the
option you want. The program will then read the character font array, calculate
the tones and advance to the transmit screen.

The Q (Quit) option exits the program and returns to DOS, or possibly your menu, if
called from a suitable batch file.

The next screen is the transmit screen. It shows the current settings, and at the
bottom of the screen a box which contains the type-ahead buffer. As soon as you
type a key, the character is entered into the buffer. Transmission starts auto-
matically, and the characters may disappear as fast as you type them, unless you
type quickly. There is no way to pause transmission, although if you press ESC,
the main menu will return and transmission will soon pause. The contents of the
buffer is retained, so transmission will continue without character loss when a
new speed is chosen.

To the right centre of the screen is a graphics window, which shows a representation
of the last few graphical characters sent. Alongside these is a list of the frequencies
in use for the tones at the current setting, so it is easy to see what frequency each
pixel represents.

There are a number of commands that can be used while transmitting. These are shown
on the screen, above and below the type-ahead buffer box. Backspace will erase
the last character entered in the buffer (unless transmission of the character
has started). ESC returns to the Main Menu, even while transmitting, F2 causes
the "Quick Brown Fox" message to be added to the buffer, F3 causes the CQ message
to be added to the buffer, F4 does the same with the station identification
message, and F5 starts the morse code ID.

F6 sends a special "DE ZL1XYZ  K" message, which includes an unprintable character.
This character (ASCII 127) sends a smiley face. F6 is typically used at the end
of each over after you have typed the callsign of the other station.

F10 can be used to transmit a test tone for tuneup purposes. It slowly sends each
of the tones in current use, in ascending order.

There is no notion of transmit and receive in this program - it is always in
transmit mode. Simply stop typing! You can very simply control the transmitter
by using VOX. When the buffer empties, the program falls silent. If you use FSK
(transmit white pixels), all tones cease during letter and word spaces.

The standard delay time for non-print pixels is 30% of a black (sent) pixel.
This considerably speeds up transmission, although it has some effect on
character shape. Using ^S (CTRL and S pressed simultaneously) will increase
the untransmitted pixel time in 10% steps to 100% pixels, which means that 
characters appear rather longer, and take longer to transmit (about 60% more). 

Pressing ^F will reduce the untransmitted pixel time to 10% pixels in 10% steps,
and may cause characters to look quite distorted on some receiving equipment, 
especially in lower case. To some extent this will depend on the speed of the 
sending computer. ^N restores the normal pixel timing.

Using an array factor greater than 1 significantly improves the tolerance of the
characters to reduced non-print pixel time. You should find that with an array
factor of 2, a non-print value of 10% should be acceptable. The non-print
pixel % controls can be used to give a simple smooth speed control between
the menu settings.

Reducing the non-print pixel % also of course increases the transmitter duty
cycle. At 100% non-pixel, the duty cycle is about 30%, and increases to 60% at
30% non-pixel, so watch for transmitter heating. With FSK, white pixels are
transmitted and the duty cycle goes up to 80-90%, and is essentially independent
of the non-print pixel %.

When transmitting, watch that you do not overfill the transmitter buffer. The
program is not very clever, and will refuse to accept characters once the buffer
is full. This occurs at about 150 characters, or twice the visible size of the
buffer. If you make a typing error, it will be best to wait until the typo is
visible before attempting to correct it. Use backspace with care as it is
possible to crash the program by attempting to delete the character currently
being transmitted. 

Operational Parameters:
======================

The table below shows the actual black pixel rates and tone shifts for the
various suggested options. The table also includes suggested parameters for
Gram 4.2.2a, but these will need experimentation, as PC performance varies.
Use 16 bit MONO mode and select the SCROLL and BW options. Set latency and 
attenuation to minimum.

======MOSAIC II===========        =======GRAM 4.2.2a=============================
Option  Pixels	Tone Shift Array  Sample     Resolution  Band      Spectrum
Number  per sec    (Hz)    Factor Rate (kHz)    (Hz)     (Hz)      Average
  1       80      80        1       11         10.8     0 - 2756    1
  2*      30      30        1       11          5.4     0 - 1378    1
  3       20      20        1       11          5.4     0 - 1378    1 or 2
  4       80      80        2       11          5.4     0 - 1378    1 or 2
  5       30      30        2       11          5.4     0 - 1378    1 or 2
  6       10      10        2       11          2.7     500 - 1189  3 or 4

* Standard speed. This is equivalent to over two characters per second,
providing similar performance to standard Feld-Hell. The higher pixel
rates are intended only for sending to stations with very fast PCs.

Specifications:
==============

MOSAIC II is unusual for its uniquely loose specification - nothing really
matters beyond sending the pixels in the correct order!

Dot matrix:              5 or more dots per character column
                         Two additional lower frequency dots used for descenders
Number of columns:       up to 7 per character maximum, 3 minimum
Intercharacter space:    2 columns, word space 4 columns
Dot (row) spacing):      10 Hz - 50 Hz, typically spacing (Hz) = pixel rate
                         Pixels in each row are sent with the same tone -
                         By convention, the bottom of the character is lower
                         in frequency than the top of the character. This is
                         the OFFSET parameter.
Pixel frequency:         The default centre frequency used by this program is adjustable.
                         It is conventional to centre transmissions around 900 Hz.
			 CW dashes are sent at the centre freqwuency, and CW dots are sent
                         at the frequency of the next row up.
Character set:           ASCII 32 to 95 (decimal), preferably 32 to 127,
                         including all punctuation. ASCII 127 used as smiley face
Font:                    ZL1BPU extended 5 row or 7 row proportional Hell font
Array factor:            Each column can be transmitted one or more times to
                         provide a suitable character aspect ratio and "fatten"
                         the characters.
Transmission speed:      Normally 20 - 30 pixels / second, but any readable speed
                         permitted - typically 1 to 80 px/sec
Transmission order:      Bottom left to top left of character, then bottom
                         to top of each remaining column, characters in order read.
Transmitted pixels:      Black pixel sent as full duration pixel at the frequency
                         corresponding to the pixel row position
Non-transmitted pixels:  White pixel sent as silence (key up) with time delay
                         typically 30% pixel time, 10% to 100% permitted
FSK option:              White pixels can be transmitted at higher frequencies,
                         set by the SHIFT setup option. The actual pixel frequency is 
                         SHIFT + OFFSET. The default is 2500 Hz (supersonic), so only
                         black pixels are transmitted. SHIFT and OFFSET can be negative.

