Difference between revisions of "WSPR: RaspberryPi"

From OnnoWiki
Jump to navigation Jump to search
(New page: Raspberry Pi bareback LF/MF/HF/VHF WSPR transmitter Makes a very simple WSPR beacon from your RasberryPi by connecting GPIO port to Antenna (and LPF), operates on LF, MF, HF and VHF bands...)
 
Line 1: Line 1:
Raspberry Pi bareback LF/MF/HF/VHF WSPR transmitter
+
==Raspberry Pi bareback LF/MF/HF/VHF WSPR transmitter==
 +
 
 +
 
 +
[[Image:Raspi-wspr.jpg|center|300px|thumb]]
 +
 
  
 
Makes a very simple WSPR beacon from your RasberryPi by connecting GPIO
 
Makes a very simple WSPR beacon from your RasberryPi by connecting GPIO
Line 7: Line 11:
 
It is now compatible with both the original Raspberry Pi and the Raspberry Pi 2.
 
It is now compatible with both the original Raspberry Pi and the Raspberry Pi 2.
  
******
 
Installation / update:
 
******
 
  Make sure you are using the latest kernel by updating your system. The latest
 
  kernel includes fixes wich improve NTP ppm measurement accuracy:
 
    sudo apt-get update
 
    sudo apt-get dist-upgrade
 
  
  Download and compile code:
+
==Installation / update==
    sudo apt-get install git
+
 
    git clone https://github.com/JamesP6000/WsprryPi.git
+
Make sure you are using the latest kernel by updating your system. The latest
    cd WsprryPi
+
kernel includes fixes wich improve NTP ppm measurement accuracy:
    make
+
 
 +
sudo apt-get update
 +
sudo apt-get dist-upgrade
 +
 
 +
Download and compile code:
 +
 
 +
sudo apt-get install git
 +
git clone https://github.com/JamesP6000/WsprryPi.git
 +
cd WsprryPi
 +
make
 +
 
 +
See the accompanying BUILD file for more details.
 +
 
 +
==Usage: (WSPR --help output):==
  
  See the accompanying BUILD file for more details.
+
wspr [options] callsign locator tx_pwr_dBm f1 <f2> <f3> ...
  
******
 
Usage: (WSPR --help output):
 
******
 
  Usage:
 
    wspr [options] callsign locator tx_pwr_dBm f1 <f2> <f3> ...
 
 
       OR
 
       OR
    wspr [options] --test-tone f
 
  
  Options:
+
wspr [options] --test-tone f
    -h --help
+
 
 +
Options:
 +
 
 +
-h --help
 
       Print out this help screen.
 
       Print out this help screen.
    -p --ppm ppm
+
-p --ppm ppm
 
       Known PPM correction to 19.2MHz RPi nominal crystal frequency.
 
       Known PPM correction to 19.2MHz RPi nominal crystal frequency.
    -s --self-calibration
+
-s --self-calibration
 
       Call ntp_adjtime() before every transmission to obtain the PPM error of the xtal.
 
       Call ntp_adjtime() before every transmission to obtain the PPM error of the xtal.
    -r --repeat
+
-r --repeat
 
       Repeatedly, and in order, transmit on all the specified freqs.
 
       Repeatedly, and in order, transmit on all the specified freqs.
    -x --terminate <n>
+
-x --terminate <n>
 
       Terminate after n transmissions have been completed.
 
       Terminate after n transmissions have been completed.
    -o --offset
+
-o --offset
 
       Add a random frequency offset to each transmission:
 
       Add a random frequency offset to each transmission:
 
         +/- 80 Hz for WSPR
 
         +/- 80 Hz for WSPR
 
         +/- 8 Hz for WSPR-15
 
         +/- 8 Hz for WSPR-15
    -t --test-tone freq
+
-t --test-tone freq
 
       Simply output a test tone and the specified frequency. Only used
 
       Simply output a test tone and the specified frequency. Only used
 
       for debugging and to verify calibration.
 
       for debugging and to verify calibration.
    -n --no-delay
+
-n --no-delay
 
       Transmit immediately, do not wait for a WSPR TX window. Used
 
       Transmit immediately, do not wait for a WSPR TX window. Used
 
       for testing only.
 
       for testing only.
  
  Frequencies can be specified either as an absolute TX carrier frequency, or
+
Frequencies can be specified either as an absolute TX carrier frequency, or
  using one of the following strings. If a string is used, the transmission
+
using one of the following strings. If a string is used, the transmission
  will happen in the middle of the WSPR region of the selected band.
+
will happen in the middle of the WSPR region of the selected band.
    LF LF-15 MF MF-15 160m 160m-15 80m 60m 40m 30m 20m 17m 15m 12m 10m 6m 4m 2m
 
  <B>-15 indicates the WSPR-15 region of band <B>.
 
  
   Transmission gaps can be created by specifying a TX frequency of 0
+
   LF LF-15 MF MF-15 160m 160m-15 80m 60m 40m 30m 20m 17m 15m 12m 10m 6m 4m 2m
 +
 
 +
'''-15 indicates the WSPR-15 region of band'''
 +
 
 +
Transmission gaps can be created by specifying a TX frequency of 0
 
    
 
    
  Note that 'callsign', 'locator', and 'tx_power_dBm' are simply used to fill
+
Note that 'callsign', 'locator', and 'tx_power_dBm' are simply used to fill
  in the appropriate fields of the WSPR message. Normally, tx_power_dBm should
+
in the appropriate fields of the WSPR message. Normally, tx_power_dBm should
  be 10, representing the signal power coming out of the Pi. Set this value
+
be 10, representing the signal power coming out of the Pi. Set this value
  appropriately if you are using an external amplifier.
+
appropriately if you are using an external amplifier.
 +
 
 +
==Radio licensing / RF==
 +
 
 +
 
 +
In order to transmit legally, a HAM Radio License is REQUIRED for running
 +
this experiment. The output is a square wave so a low pass filter is REQUIRED.
 +
Connect a low-pass filter (via decoupling C) to GPIO4 (GPCLK0) and Ground pin
 +
of your Raspberry Pi, connect an antenna to the LPF. The GPIO4 and GND pins
 +
are found on header P1 pin 7 and 9 respectively, the pin closest to P1 label
 +
is pin 1 and its 3rd and 4th neighbour is pin 7 and 9 respectively. See this
 +
link for pin layout: http://elinux.org/RPi_Low-level_peripherals Examples of
 +
low-pass filters can be found here: http://www.gqrp.com/harmonic_filters.pdf
 +
 
 +
The expected power output is 10mW (+10dBm) in a 50 Ohm load. This looks
 +
neglible, but when connected to a simple dipole antenna this may result in
 +
reception reports ranging up to several thousands of kilometers.
 +
 
 +
As the Raspberry Pi does not attenuate ripple and noise components from the
 +
5V USB power supply, it is RECOMMENDED to use a regulated supply that has
 +
sufficient ripple supression. Supply ripple might be seen as mixing products
 +
products centered around the transmit carrier typically at 100/120Hz.
 +
 
 +
DO NOT expose GPIO4 to voltages or currents that are above the specified
 +
Absolute Maximum limits. GPIO4 outputs a digital clock in 3V3 logic, with a
 +
maximum current of 16mA. As there is no current protection available and a DC
 +
component of 1.6V, DO NOT short-circuit or place a resistive (dummy) load
 +
straight on the GPIO4 pin, as it may draw too much current. Instead, use a
 +
decoupling capacitor to remove DC component when connecting the output dummy
 +
loads, transformers, antennas, etc. DO NOT expose GPIO4 to electro- static
 +
voltages or voltages exceeding the 0 to 3.3V logic range; connecting an
 +
antenna directly to GPIO4 may damage your RPi due to transient voltages such
 +
as lightning or static buildup as well as RF from other transmitters
 +
operating into nearby antennas. Therefore it is RECOMMENDED to add some form
 +
of isolation, e.g. by using a RF transformer, a simple buffer/driver/PA
 +
stage, two schottky small signal diodes back to back.
 +
 
 +
==TX Timing==
 +
 
 +
This software is using system time to determine the start of WSPR
 +
transmissions, so keep the system time synchronised within 1sec precision,
 +
i.e. use NTP network time synchronisation or set time manually with date
 +
command. A WSPR broadcast starts on an even minute and takes 2 minutes for
 +
WSPR-2 or starts at :00,:15,:30,:45 and takes 15 minutes for WSPR-15. It
 +
contains a callsign, 4-digit Maidenhead square locator and transmission
 +
power.  Reception reports can be viewed on Weak Signal Propagation Reporter
 +
Network at: http://wsprnet.org/drupal/wsprnet/spots
 +
 
 +
 
 +
==Calibration==
 +
 
 +
Frequency calibration is REQUIRED to ensure that the WSPR-2 transmission
 +
occurs within the narrow 200 Hz band. The reference crystal on your RPi might
 +
have an frequency error (which in addition is temp. dependent -1.3Hz/degC
 +
@10MHz). To calibrate, the frequency might be manually corrected on the
 +
command line or a PPM correction could be specified on the command line.
  
******
+
===NTP calibration===
Radio licensing / RF:
 
******
 
  In order to transmit legally, a HAM Radio License is REQUIRED for running
 
  this experiment. The output is a square wave so a low pass filter is REQUIRED.
 
  Connect a low-pass filter (via decoupling C) to GPIO4 (GPCLK0) and Ground pin
 
  of your Raspberry Pi, connect an antenna to the LPF. The GPIO4 and GND pins
 
  are found on header P1 pin 7 and 9 respectively, the pin closest to P1 label
 
  is pin 1 and its 3rd and 4th neighbour is pin 7 and 9 respectively. See this
 
  link for pin layout: http://elinux.org/RPi_Low-level_peripherals Examples of
 
  low-pass filters can be found here: http://www.gqrp.com/harmonic_filters.pdf
 
  
  The expected power output is 10mW (+10dBm) in a 50 Ohm load. This looks
+
NTP automatically tracks and calculates a PPM frequency correction. If you
  neglible, but when connected to a simple dipole antenna this may result in
+
are running NTP on your Pi, you can use the --self-calibration option to
  reception reports ranging up to several thousands of kilometers.
+
have this program querry NTP for the latest frequency correction before
 +
each WSPR transmission. Some residual frequency error may still be present
 +
due to delays in the NTP measurement loop and this method works best if your
 +
Pi has been on for a long time, the crystal's temperature has stabilized,
 +
and the NTP control loop has converged.
  
  As the Raspberry Pi does not attenuate ripple and noise components from the
+
===AM calibration===
  5V USB power supply, it is RECOMMENDED to use a regulated supply that has
 
  sufficient ripple supression. Supply ripple might be seen as mixing products
 
  products centered around the transmit carrier typically at 100/120Hz.
 
  
  DO NOT expose GPIO4 to voltages or currents that are above the specified
+
A practical way to calibrate is to tune the transmitter on the same frequency
  Absolute Maximum limits. GPIO4 outputs a digital clock in 3V3 logic, with a
+
of a medium wave AM broadcast station; keep tuning until zero beat (the
  maximum current of 16mA. As there is no current protection available and a DC
+
constant audio tone disappears when the transmitter is exactly on the same
  component of 1.6V, DO NOT short-circuit or place a resistive (dummy) load
+
frequency as the broadcast station), and determine the frequency difference
  straight on the GPIO4 pin, as it may draw too much current. Instead, use a
+
with the broadcast station. This is the frequency error that can be applied
  decoupling capacitor to remove DC component when connecting the output dummy
+
for correction while tuning on a WSPR frequency.
  loads, transformers, antennas, etc. DO NOT expose GPIO4 to electro- static
 
  voltages or voltages exceeding the 0 to 3.3V logic range; connecting an
 
  antenna directly to GPIO4 may damage your RPi due to transient voltages such
 
  as lightning or static buildup as well as RF from other transmitters
 
  operating into nearby antennas. Therefore it is RECOMMENDED to add some form
 
  of isolation, e.g. by using a RF transformer, a simple buffer/driver/PA
 
  stage, two schottky small signal diodes back to back.
 
  
******
+
Suppose your local AM radio station is at 780kHz. Use the --test-tone option
TX Timing:
+
to produce different tones around 780kHz (eg 780100 Hz) until you can
******
+
successfully zero beat the AM station. If the zero beat tone specified on the
  This software is using system time to determine the start of WSPR
+
command line is F, calculate the PPM correction required as:
  transmissions, so keep the system time synchronised within 1sec precision,
+
ppm=(F/780000-1)*1e6 In the future, specify this value as the argument to the
  i.e. use NTP network time synchronisation or set time manually with date
+
--ppm option on the comman line. You can verify that the ppm value has been
  command. A WSPR broadcast starts on an even minute and takes 2 minutes for
+
set correction by specifying --test-tone 780000 --ppm <ppm> on the command
  WSPR-2 or starts at :00,:15,:30,:45 and takes 15 minutes for WSPR-15. It
+
line and confirming that the Pi is still zero beating the AM station.
  contains a callsign, 4-digit Maidenhead square locator and transmission
 
  power.  Reception reports can be viewed on Weak Signal Propagation Reporter
 
  Network at: http://wsprnet.org/drupal/wsprnet/spots
 
  
******
 
Calibration:
 
******
 
  Frequency calibration is REQUIRED to ensure that the WSPR-2 transmission
 
  occurs within the narrow 200 Hz band. The reference crystal on your RPi might
 
  have an frequency error (which in addition is temp. dependent -1.3Hz/degC
 
  @10MHz). To calibrate, the frequency might be manually corrected on the
 
  command line or a PPM correction could be specified on the command line.
 
  
  NTP calibration:
+
==PWM Peripheral==
  NTP automatically tracks and calculates a PPM frequency correction. If you
 
  are running NTP on your Pi, you can use the --self-calibration option to
 
  have this program querry NTP for the latest frequency correction before
 
  each WSPR transmission. Some residual frequency error may still be present
 
  due to delays in the NTP measurement loop and this method works best if your
 
  Pi has been on for a long time, the crystal's temperature has stabilized,
 
  and the NTP control loop has converged.
 
  
  AM calibration:
+
The code uses the RPi PWM peripheral to time the frequency transitions
  A practical way to calibrate is to tune the transmitter on the same frequency
+
of the output clock. This peripheral is also used by the RPi sound system
  of a medium wave AM broadcast station; keep tuning until zero beat (the
+
and hence any sound events that occur during a WSPR transmission will
  constant audio tone disappears when the transmitter is exactly on the same
+
interfere with WSPR transmissions. Sound can be permanently disabled
  frequency as the broadcast station), and determine the frequency difference
+
by editing /etc/modules and commenting out the snd-bcm2835 device.
  with the broadcast station. This is the frequency error that can be applied
 
  for correction while tuning on a WSPR frequency.
 
  
  Suppose your local AM radio station is at 780kHz. Use the --test-tone option
 
  to produce different tones around 780kHz (eg 780100 Hz) until you can
 
  successfully zero beat the AM station. If the zero beat tone specified on the
 
  command line is F, calculate the PPM correction required as:
 
  ppm=(F/780000-1)*1e6 In the future, specify this value as the argument to the
 
  --ppm option on the comman line. You can verify that the ppm value has been
 
  set correction by specifying --test-tone 780000 --ppm <ppm> on the command
 
  line and confirming that the Pi is still zero beating the AM station.
 
  
******
+
==Example usage==
PWM Peripheral:
 
******
 
  The code uses the RPi PWM peripheral to time the frequency transitions
 
  of the output clock. This peripheral is also used by the RPi sound system
 
  and hence any sound events that occur during a WSPR transmission will
 
  interfere with WSPR transmissions. Sound can be permanently disabled
 
  by editing /etc/modules and commenting out the snd-bcm2835 device.
 
  
******
+
Brief help screen
Example usage:
 
******
 
  Brief help screen
 
    ./wspr --help
 
  
  Transmit a constant test tone at 780 kHz.
+
./wspr --help
    sudo ./wspr --test-tone 780e3
 
  
  Using callsign N9NNN, locator EM10, and TX power 33 dBm, transmit a single
+
Transmit a constant test tone at 780 kHz.
  WSPR transmission on the 20m band using NTP based frequency offset
 
  calibration.
 
    sudo ./wspr --self-calibration N9NNN EM10 33 20m
 
  
  Transmit a WSPR transmission slightly off-center on 30m every 10 minutes for
+
  sudo ./wspr --test-tone 780e3
  a total of 7 transmissions, and using a fixed PPM correction value. sudo
 
    sudo ./wspr --repeat --terminate 7 --ppm 43.17 N9NNN EM10 33 10140210 0 0 0 0
 
  
  Transmit repeatedly on 40m, use NTP based frequency offset calibration,
+
Using callsign N9NNN, locator EM10, and TX power 33 dBm, transmit a single
  and add a random frequency offset to each transmission to minimize collisions
+
WSPR transmission on the 20m band using NTP based frequency offset
  with other transmissions.
+
calibration.
    sudo ./wspr --repeat --offset --self-calibration N9NNN EM10 33 40m
 
  
 +
sudo ./wspr --self-calibration N9NNN EM10 33 20m
  
 +
Transmit a WSPR transmission slightly off-center on 30m every 10 minutes for
 +
a total of 7 transmissions, and using a fixed PPM correction value.  sudo
  
 +
sudo ./wspr --repeat --terminate 7 --ppm 43.17 N9NNN EM10 33 10140210 0 0 0 0
  
Usage:
+
Transmit repeatedly on 40m, use NTP based frequency offset calibration,
  sudo ./wspr <[prefix]/callsign[/suffix]> <locator> <power in dBm> [<frequency in Hz> ...]
+
and add a random frequency offset to each transmission to minimize collisions
 +
with other transmissions.
 +
 
 +
sudo ./wspr --repeat --offset --self-calibration N9NNN EM10 33 40m
 +
 
 +
 
 +
sudo ./wspr <[prefix]/callsign[/suffix]> <locator> <power in dBm> [<frequency in Hz> ...]
 
         e.g.: sudo ./wspr PA/K1JT JO21 10 7040074 0 0 10140174 0 0
 
         e.g.: sudo ./wspr PA/K1JT JO21 10 7040074 0 0 10140174 0 0
 
         where 0 frequency represents a interval for which TX is disabled,
 
         where 0 frequency represents a interval for which TX is disabled,
 
         wspr-2 or wspr-15 mode selection based on specified frequency.
 
         wspr-2 or wspr-15 mode selection based on specified frequency.
  
  WSPR is used on the following frequencies (local restriction may apply):
+
WSPR is used on the following frequencies (local restriction may apply):
 +
 
 
     LF  137400 - 137600
 
     LF  137400 - 137600
 
           137600 - 137625 (WSPR-15)
 
           137600 - 137625 (WSPR-15)
Line 210: Line 223:
  
  
******
+
==Credits==
Reference documentation:
 
******
 
  http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf
 
  http://www.scribd.com/doc/127599939/BCM2835-Audio-clocks
 
  http://www.scribd.com/doc/101830961/GPIO-Pads-Control2
 
  https://github.com/mgottschlag/vctools/blob/master/vcdb/cm.yaml
 
  https://www.kernel.org/doc/Documentation/vm/pagemap.txt
 
  
******
+
Credits goes to Oliver Mattos and Oskar Weigl who implemented PiFM [1]
Credits:
+
based on the idea of exploiting RPi DPLL as FM transmitter.
******
 
  Credits goes to Oliver Mattos and Oskar Weigl who implemented PiFM [1]
 
  based on the idea of exploiting RPi DPLL as FM transmitter.
 
  
  Dan MD1CLV combined this effort with WSPR encoding algorithm from F8CHK,
+
Dan MD1CLV combined this effort with WSPR encoding algorithm from F8CHK,
  resulting in WsprryPi a WSPR beacon for LF and MF bands.
+
resulting in WsprryPi a WSPR beacon for LF and MF bands.
  
  Guido PE1NNZ <pe1nnz@amsat.org> extended this effort with DMA based PWM
+
Guido PE1NNZ <pe1nnz@amsat.org> extended this effort with DMA based PWM
  modulation of fractional divider that was part of PiFM, allowing to operate
+
modulation of fractional divider that was part of PiFM, allowing to operate
  the WSPR beacon also on HF and VHF bands.  In addition time-synchronisation
+
the WSPR beacon also on HF and VHF bands.  In addition time-synchronisation
  and double amount of power output was implemented.
+
and double amount of power output was implemented.
  
  James Peroulas <james@peroulas.com> added several command line options, a
+
Peroulas <james@peroulas.com> added several command line options, a
  makefile, improved frequency generation precision so as to be able to
+
makefile, improved frequency generation precision so as to be able to
  precisely generate a tone at a fraction of a Hz, and added a self calibration
+
precisely generate a tone at a fraction of a Hz, and added a self calibration
  feature where the code attempts to derrive frequency calibration information
+
feature where the code attempts to derrive frequency calibration information
  from an installed NTP deamon.  Furthermore, the TX length of the WSPR symbols
+
from an installed NTP deamon.  Furthermore, the TX length of the WSPR symbols
  is more precise and does not vary based on system load or PWM clock
+
is more precise and does not vary based on system load or PWM clock
  frequency.
+
frequency.
  
  
Line 250: Line 253:
 
* https://github.com/threeme3/WsprryPi
 
* https://github.com/threeme3/WsprryPi
 
* https://github.com/DanAnkers/WsprryPi
 
* https://github.com/DanAnkers/WsprryPi
 +
* http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf
 +
* http://www.scribd.com/doc/127599939/BCM2835-Audio-clocks
 +
* http://www.scribd.com/doc/101830961/GPIO-Pads-Control2
 +
* https://github.com/mgottschlag/vctools/blob/master/vcdb/cm.yaml
 +
* https://www.kernel.org/doc/Documentation/vm/pagemap.txt

Revision as of 07:28, 19 April 2016

Raspberry Pi bareback LF/MF/HF/VHF WSPR transmitter

Raspi-wspr.jpg


Makes a very simple WSPR beacon from your RasberryPi by connecting GPIO port to Antenna (and LPF), operates on LF, MF, HF and VHF bands from 0 to 250 MHz.

It is now compatible with both the original Raspberry Pi and the Raspberry Pi 2.


Installation / update

Make sure you are using the latest kernel by updating your system. The latest kernel includes fixes wich improve NTP ppm measurement accuracy:

sudo apt-get update
sudo apt-get dist-upgrade

Download and compile code:

sudo apt-get install git
git clone https://github.com/JamesP6000/WsprryPi.git
cd WsprryPi
make

See the accompanying BUILD file for more details.

Usage: (WSPR --help output):

wspr [options] callsign locator tx_pwr_dBm f1 <f2> <f3> ...
     OR
wspr [options] --test-tone f

Options:

-h --help
     Print out this help screen.
-p --ppm ppm
     Known PPM correction to 19.2MHz RPi nominal crystal frequency.
-s --self-calibration
     Call ntp_adjtime() before every transmission to obtain the PPM error of the xtal.
-r --repeat
     Repeatedly, and in order, transmit on all the specified freqs.
-x --terminate <n>
     Terminate after n transmissions have been completed.
-o --offset
     Add a random frequency offset to each transmission:
       +/- 80 Hz for WSPR
       +/- 8 Hz for WSPR-15
-t --test-tone freq
     Simply output a test tone and the specified frequency. Only used
     for debugging and to verify calibration.
-n --no-delay
     Transmit immediately, do not wait for a WSPR TX window. Used
     for testing only.

Frequencies can be specified either as an absolute TX carrier frequency, or using one of the following strings. If a string is used, the transmission will happen in the middle of the WSPR region of the selected band.

 LF LF-15 MF MF-15 160m 160m-15 80m 60m 40m 30m 20m 17m 15m 12m 10m 6m 4m 2m

-15 indicates the WSPR-15 region of band

Transmission gaps can be created by specifying a TX frequency of 0

Note that 'callsign', 'locator', and 'tx_power_dBm' are simply used to fill in the appropriate fields of the WSPR message. Normally, tx_power_dBm should be 10, representing the signal power coming out of the Pi. Set this value appropriately if you are using an external amplifier.

Radio licensing / RF

In order to transmit legally, a HAM Radio License is REQUIRED for running this experiment. The output is a square wave so a low pass filter is REQUIRED. Connect a low-pass filter (via decoupling C) to GPIO4 (GPCLK0) and Ground pin of your Raspberry Pi, connect an antenna to the LPF. The GPIO4 and GND pins are found on header P1 pin 7 and 9 respectively, the pin closest to P1 label is pin 1 and its 3rd and 4th neighbour is pin 7 and 9 respectively. See this link for pin layout: http://elinux.org/RPi_Low-level_peripherals Examples of low-pass filters can be found here: http://www.gqrp.com/harmonic_filters.pdf

The expected power output is 10mW (+10dBm) in a 50 Ohm load. This looks neglible, but when connected to a simple dipole antenna this may result in reception reports ranging up to several thousands of kilometers.

As the Raspberry Pi does not attenuate ripple and noise components from the 5V USB power supply, it is RECOMMENDED to use a regulated supply that has sufficient ripple supression. Supply ripple might be seen as mixing products products centered around the transmit carrier typically at 100/120Hz.

DO NOT expose GPIO4 to voltages or currents that are above the specified Absolute Maximum limits. GPIO4 outputs a digital clock in 3V3 logic, with a maximum current of 16mA. As there is no current protection available and a DC component of 1.6V, DO NOT short-circuit or place a resistive (dummy) load straight on the GPIO4 pin, as it may draw too much current. Instead, use a decoupling capacitor to remove DC component when connecting the output dummy loads, transformers, antennas, etc. DO NOT expose GPIO4 to electro- static voltages or voltages exceeding the 0 to 3.3V logic range; connecting an antenna directly to GPIO4 may damage your RPi due to transient voltages such as lightning or static buildup as well as RF from other transmitters operating into nearby antennas. Therefore it is RECOMMENDED to add some form of isolation, e.g. by using a RF transformer, a simple buffer/driver/PA stage, two schottky small signal diodes back to back.

TX Timing

This software is using system time to determine the start of WSPR transmissions, so keep the system time synchronised within 1sec precision, i.e. use NTP network time synchronisation or set time manually with date command. A WSPR broadcast starts on an even minute and takes 2 minutes for WSPR-2 or starts at :00,:15,:30,:45 and takes 15 minutes for WSPR-15. It contains a callsign, 4-digit Maidenhead square locator and transmission power. Reception reports can be viewed on Weak Signal Propagation Reporter Network at: http://wsprnet.org/drupal/wsprnet/spots


Calibration

Frequency calibration is REQUIRED to ensure that the WSPR-2 transmission occurs within the narrow 200 Hz band. The reference crystal on your RPi might have an frequency error (which in addition is temp. dependent -1.3Hz/degC @10MHz). To calibrate, the frequency might be manually corrected on the command line or a PPM correction could be specified on the command line.

NTP calibration

NTP automatically tracks and calculates a PPM frequency correction. If you are running NTP on your Pi, you can use the --self-calibration option to have this program querry NTP for the latest frequency correction before each WSPR transmission. Some residual frequency error may still be present due to delays in the NTP measurement loop and this method works best if your Pi has been on for a long time, the crystal's temperature has stabilized, and the NTP control loop has converged.

AM calibration

A practical way to calibrate is to tune the transmitter on the same frequency of a medium wave AM broadcast station; keep tuning until zero beat (the constant audio tone disappears when the transmitter is exactly on the same frequency as the broadcast station), and determine the frequency difference with the broadcast station. This is the frequency error that can be applied for correction while tuning on a WSPR frequency.

Suppose your local AM radio station is at 780kHz. Use the --test-tone option to produce different tones around 780kHz (eg 780100 Hz) until you can successfully zero beat the AM station. If the zero beat tone specified on the command line is F, calculate the PPM correction required as: ppm=(F/780000-1)*1e6 In the future, specify this value as the argument to the --ppm option on the comman line. You can verify that the ppm value has been set correction by specifying --test-tone 780000 --ppm <ppm> on the command line and confirming that the Pi is still zero beating the AM station.


PWM Peripheral

The code uses the RPi PWM peripheral to time the frequency transitions of the output clock. This peripheral is also used by the RPi sound system and hence any sound events that occur during a WSPR transmission will interfere with WSPR transmissions. Sound can be permanently disabled by editing /etc/modules and commenting out the snd-bcm2835 device.


Example usage

Brief help screen

./wspr --help

Transmit a constant test tone at 780 kHz.

sudo ./wspr --test-tone 780e3

Using callsign N9NNN, locator EM10, and TX power 33 dBm, transmit a single WSPR transmission on the 20m band using NTP based frequency offset calibration.

sudo ./wspr --self-calibration N9NNN EM10 33 20m

Transmit a WSPR transmission slightly off-center on 30m every 10 minutes for a total of 7 transmissions, and using a fixed PPM correction value. sudo

sudo ./wspr --repeat --terminate 7 --ppm 43.17 N9NNN EM10 33 10140210 0 0 0 0

Transmit repeatedly on 40m, use NTP based frequency offset calibration, and add a random frequency offset to each transmission to minimize collisions with other transmissions.

sudo ./wspr --repeat --offset --self-calibration N9NNN EM10 33 40m


sudo ./wspr <[prefix]/callsign[/suffix]> <locator> <power in dBm> [<frequency in Hz> ...]
       e.g.: sudo ./wspr PA/K1JT JO21 10 7040074 0 0 10140174 0 0
       where 0 frequency represents a interval for which TX is disabled,
       wspr-2 or wspr-15 mode selection based on specified frequency.

WSPR is used on the following frequencies (local restriction may apply):

    LF   137400 - 137600
         137600 - 137625 (WSPR-15)
    MF   475600 - 475800
         475800 - 475825 (WSPR-15)
   160m  1838000 - 1838200
         1838200 - 1838225 (WSPR-15)
    80m  3594000 - 3594200
    60m  5288600 - 5288800
    40m  7040000 - 7040200
    30m  10140100 - 10140300
    20m  14097000 - 14097200
    17m  18106000 - 18106200
    15m  21096000 - 21096200
    12m  24926000 - 24926200
    10m  28126000 - 28126200
     6m  50294400 - 50294600
     4m  70092400 - 70092600
     2m  144490400 -144490600


Credits

Credits goes to Oliver Mattos and Oskar Weigl who implemented PiFM [1] based on the idea of exploiting RPi DPLL as FM transmitter.

Dan MD1CLV combined this effort with WSPR encoding algorithm from F8CHK, resulting in WsprryPi a WSPR beacon for LF and MF bands.

Guido PE1NNZ <pe1nnz@amsat.org> extended this effort with DMA based PWM modulation of fractional divider that was part of PiFM, allowing to operate the WSPR beacon also on HF and VHF bands. In addition time-synchronisation and double amount of power output was implemented.

Peroulas <james@peroulas.com> added several command line options, a makefile, improved frequency generation precision so as to be able to precisely generate a tone at a fraction of a Hz, and added a self calibration feature where the code attempts to derrive frequency calibration information from an installed NTP deamon. Furthermore, the TX length of the WSPR symbols is more precise and does not vary based on system load or PWM clock frequency.



Referensi