User Manual



To install the program extract the zip file jqamv?.zip to a directory of your choice. For the rest of this manual I’ll assume that you have extracted it to C:\QAM.


Running the program:

Use windows explorer to open C:\QAM and double click QAM.exe. Alternatively you could make a short cut to the desktop.


Configuring the program:

Upon running the program an icon will be added to the system tray.

Double click the icon in the system tray to bring up the program’s main window.

To minimize the window to the system tray again just click on the minimize button.

Select the settings tab, and you will see something similar to the following.


First, configure “sound card settings”. Choose the “sample rate” for your sound card, I recommend 96000 but if your computer does not work well with this setting try something lower like 48000. The “buffer size” controls the size of the audio buffer and the value of 4096 should be adequate. Both “input device” and “output device” must be set to valid entries when the program is used as a modulator, when in demodulation mode only the “input device” needs to be set.


Next, configure “QAM settings”. Decide which checkboxes you want to activate.

  • Modulator on
    Select this if you want the program to be used as a modulator (makes the sound)

  • Demodulation on
    Select this if you want the program to be used as a demodulator (decodes the sound)

  • Enable packet mode
    If this option is selected the program sends data as packets.  If this option is not selected the program sends raw data and only RS232 data (serial port connection) can be used. If in doubt, have this option selected.

  • Start when program is run
    This option will press the start button when the program is run.

  • UnReal streaming
    Check this option if you want to stream UnReal media (see later for details)

  • Enable RS232
    If this option is checked then the designated serial port can be used to send and receive data from the program.

  • Enabled WebServer
    This option needs to be selected if you want to have a station ID sent at regular intervals, or if you want to send or receive files via the program. It also runs a web server on the local computer, which is convenient, so if in doubt have this option selected as well. (see later for details)

Now you must decide what frequency to use for the transmitter. This will depend on what sample rate your sound card is set to, how much bandwidth you have on your transmission line, and alpha and gamma. Frequency is in Hertz.


Alpha is a setting that tells the program what sort of filters to use. Small values produce a signal output that uses less bandwidth, but the “FIR size” of the modulation and at the modulator must be bigger. You should choose a value between 0.1 and 1.


Gamma is a setting that controls the number of symbols sent for each oscillation of the frequency. A value of 0.75 means that one symbol is sent every 75% of an oscillation cycle. This means that smaller values allow you to get a higher throughput, but the program finds it harder to determine what symbol was sent when gamma is small, also the smaller gamma is the smaller alpha must be. For example, if you want gamma to be equal to 0.56, alpha must be no bigger than about 0.1. You should choose a value between 0.56 and 1. I suggest you use a program like “spectrum lab” to see what difference alpha and gamma have on the audio output spectrum.


Mod FIR size and DeMod FIR size. These settings control the number of calculations the filters must perform. Generally speaking bigger is better, although this has to be taken with a pinch of salt. Mod FIR size does not use a great deal of CPU and can be set to a value of 300 without any problem. The smaller alpha is the larger Mod and DeMod FIR sizes must be. DeMod FIR size uses most of the CPU time that the program receives. At lower frequencies, DeMod FIR size can be 300 without any problem but at higher frequencies, say 11000Hz one might only be able to push the computer up to 30. Mod FIR size will change the frequency output and can be sent using a program like a “spectrum lab”. DeMod FIR size will manifest itself when decoding a signal and can be chosen by looking at the “constellation” tab to see what looks acceptable.


Acqui timeout specifies the number of seconds before the program tries to reinitiate a lock. Its main use is to be sure that if the program does not acquire a lock it will reset itself. The value of 120 should be fine for most situations.


Tx char buf size specifies the size of the transmit buffer. When data is received by the program before modulation its stores it in this buffer. To prevent overflow this buffer has to be of adequate size. A value of 10000 or 20000 should be fine.


Constellation size chooses what constellation size you want. Either 16 or 64. 64 will allow 67% more throughput given the same bandwidth as 16. The catch is that 64 is more likely to not lock and will receive more errors than 16.


RS232 settings. If you want to send data to and from the program via serial port connector, you must specify these settings. As well as enable RS232 must be checked you must specify what port and what speed you want the serial port connected to operate at.


Next, if you have checked enable packet mode then configure TCP/IP settings.


J-QAM allows you to send and receive UDP packets. If you know what you are doing, this could be useful. For using the program as a demodulator, set the port you want sends data to (UDP send port) and the address you want to send data to (UDP send addr). For using the program as a modulator, set the port you want to listen to (UDP listen port).


If you have checked enable UnReal streaming then you need to configure it. If you are using the program to modulate UnReal media, then set the address the UnReal media server is running on (UnReal Server Addr), the port it is running on (UnReal Server Port), and the live alias of the content you wish to send on the server (UnReal alias). Also you need to set how often my program will send a header (URH Send Period), 20 seconds should suffice. If you are using the program to demodulate UnReal media, than just put some free port in “UnReal QAM Port” to allow the UnReal media player to connect to my program.



Next, if you have checked enable WebServer then click on the WebServer tab.

First enter the station ID you want to call your station. This will be sent every “ID send period”. Enter the size of the packet’s you wish to send, 512 should be adequate. The program only sends files when the program is not sending anything else, to do this you must specify the idle threshold. A small idle threshold means the program waits for very little activity before sending a packet of a file.  Setting this value to 5% or 10% should be fine. To allow you to change files while the program is still sending files I have added an FTP server to my program.  To have access to this FTP server you have to enter a port you want (normally “ftp” is used), what username, and what password you want. Click on the little yellow folder and browse for the file directory that you wish to be sent, all files in this directory can be sent but no directories of this directory. Because files are sent continuously in rotation, “Resends” allow you to specify on average how many times you send a particular file for each rotation. Zero means the file will never be sent and larger values will be sent more regularly.


Received files are stored in a folder named after the station ID where QAM.exe resides. In our example there would be a folder created called “C:\QAM\My Station\” and all receive files are stored there. The program allows easy access to these stored files by running a Web server which runs on the port “web server port”. To access it open Internet explorer or Firefox or what ever else and go to the address . if you have changed the “web server port” setting then you will have to type in something like where ?? is the value you have chosen for “web server port”. The web server interface looks like the picture below.



Sending and receiving unreal media: (requires “unreal streaming” to be checked in the settings tab)

If you want to send unreal media you must first install UnReal media server, and UnReal live server. My program will only allow you to send live content. You must create a live content with a certain live alias. (The UnReal media manual should tell you how to do this). To receive UnReal media you only need UnReal streaming media player. Setting up my program for sending unreal media content has already been described above, and consists of changing the TCP/IP settings in the settings tab. To receive unreal media go to the web server or whatever port you have chosen, when the media is ready to be received, a note icon will appear that can be clicked on and will play the media.



What all the things mean.

  • Level
    shows the amplitude of the received signal

  • URH
    lights up when the program receives and unreal header packet.

  • DD
    lights up when the program is in fine tuning mode for equalization, and uses a direct decision algorithm.

  • AMA
    lights up when the program uses many moduli for equalization.

  • OverF
    lights up when data is wishing to be sent faster than the program can actually send it. If you get this lighting up you have to do something about it.

  • URS
    lights up when an UnReal media player connects to my program.

  • URC
    lights up when my program connects to an unreal media server.

  • Mod
    lights up when the program is modulating (making sound)

  • DeMod
    lights up when the program is demodulating (decoding sound)

  • MSE
    mean square error. Gives a value for the quality of the received signal. The smaller the value the better.

  • Rx frequency
    the frequency of the received signal.

The numbers that appear at the bottom left when transmitting is the number of characters waiting to be sent at any one time.



The constellation tab gives a visual output of the received symbols.



The console tab gives a display of any RS232 data or text packets. It also allows you to send text packets. Its main use is for testing purposes.


Calculating throughput:

To calculate throughput the following formula is what you use. for QAM16  3*frequency/gamma=speed(bits/sec) and for QAM64 5*frequency/gamma=speed(bits/sec).


Starting the modulator/demodulator:

To start the modulator/demodulator simply click the start button in the settings tab. To stop the modulator/demodulator simply click the stop button in the settings tab.


Jonti Olds

Email jontio@i4free.co.nz

Home Page https://jontio.zapto.org

Product Page https://jontio.zapto.org/hda1/paradise/QAM.htm



Jonti. Last modified Fri, 3 Jul 2020 03:13:40 GMT.