|
Northern
Utah WebSDR
High radio audio sources for the PA3FWM WebSDR using FIFO sources from the RX-888. |
Overview
Traditionally, ALSA or some other sound system has been used for the 16
bit signal path into the PA3FWM WebSDR. At the Northern Utah
WebSDR, we have developed a number of tools - including "sdrplayalsa" and "fastloop" -
that provide a path into the ALSA sound system from this hardware from
SDRPlay hardware such as the RSP1a/b. As the Linux sound systems
are typically limited to 768 kHz, this has been the bandwidth limit for
the PA3FWM WebSDR. This information does not apply to the 8 bit "RTL-SDR" signal path.
While a bit klunky and hair-pulling, the ALSA sound system is very
flexible, allowing you to duplicate an I/Q stream from receivers to be
sent to multiple places if desired (e.g. CW skimmer in addition to the WebSDR)
if you wish - but this isn't always necessary. Additionally, if
using "fastloop", a kernel update will typically "break" it, requiring
it to be recompiled/reinstalled - but if one turns runs a CLI (console-only, no GUI) version of Ubuntu, removes SNAP and turns off automatic updates, this isn't so much of a problem.
More recently, other receive hardware has become available - namely the
RX-888. The "ka9q-radio" software has been optimized for use with
devices like the RX-888 and is capable of ingesting the entire HF
spectrum and outputting I/Q streams of arbitrary bandwidths on
arbitrary frequencies. The RX-888 - unlike similar devices like
the Red Pitaya - interface via USB3 which means that it can sustain a
high enough data rate to represent this spectrum in its entirety,
without compression.
As it turns out, the PA3FWM WebSDR software does not
require the source of 16 bit I/Q data to be an audio device - a "file"
will do, specifically a FIFO device, completely circumventing the need
for ALSA or any other Linux-based sound interface. What's more,
since the use of a FIFO is not subject to the 768 kHz "speed limit" of
the audio system, higher rates are possible - including 1536 kHz.
Note: This page won't
describe the installation or configuration of ka9q-radio in detail but
rather the details needed to interface with ka9q-radio after multicast
streams have been defined.
For more information see:
- Using ka9q-radio - link.
- The ka9q-radio git - link.
Getting the multicast data
Presuming that you have already set up ka9a-radio, it's
possible to pipe the I/Q data from the multicast stream to a FIFO
device - and then into the PA3FWM WebSDR.
For example, consider the following line:
mkfifo ~/websdr/fifo/fifo-80m
This will create a "file" called "fifo-80m" (e.g. "80 meters") in a sub-folder called "~/websdr/fifo".
We can then dump data from our multicast source into this "file" as follows:
pcmcat websdr_768pcm.local -s 3700 > ~/websdr/fifo/fifo-80m
The above line does the following:
- The "pcmcat" utility in ka9q-radio is invoked. This
puts the multicast stream's I/Q data from the receiver instance into an
output pipe.
- The multicast stream called "websdr_768pcm.local" is the source as defined in the "radio@xxxx.conf" file (located in /etc/radio).
- The <ssrc> value of "3700" is used: Our
hypothetical stream has a defined center frequency of 3700 kHz:
Having the frequency defined as "3700k" in the radio.conf file
would result in this SSRC.
- The I/Q data is then piped to the fifo that we created called "fifo-80m".
Comments:
- Since the source of our raw I/Q data is via a "pipe", it could be from anything
that is capable of producing such data. This page shows the use
of "ka9q-radio" along with "pcmcat" as the source of this data, but
other receiver hardware could be used with ka9q-radio (SDRPlay, Airspy, Funcube - even RTL-SDR).
- One could get an I/Q stream straight from the other device (e.g. use "sdrplayalsa" and dump its raw I/Q data into the fifo) and not need ka9q-radio. This may be useful if you choose not to use ka9q-radio, or if you are running ka9q-radio but need "other" receive hardware to cover additional bands (e.g. 6, 4, 2 meters) that may not be within the coverage range of, say, an RX-888.
The definition of multiple channels being defined in the "radiod@xxxx.conf" file (where "xxxx" is your custom name of your .conf file) as follows:
- [WEBSDR_768] - This is the name of the definition block - it must be unique.
- disable = no - This makes sure that the receiver definitions are enabled.
- data = websdr768-pcm.local - This is the name of the multicast stream
- mode = iq - Defines the use of "I/Q" data
- freq = "3700k 5300k 7125k 14150k 21200k 28350k 28850k 29350k" -
This is the list of frequencies for which multicast streams will be
produced. The use of "k" to define the frequency results in
<ssrc> values of the numerical portions (e.g. removing the "k").
- samprate = 768k - This sets the sample rate of the instances in this block to 768 kHz.
- low = -383k - This
sets the low edge of the band-pass filtering and is a NEGATIVE number.
Set this a kHz or two smaller than HALF the sample rate to avoid
artifacts.
- high = 383k - This sets the high edge of the band-pass filtering and is the same as the "low" parameter except that it is POSITIVE.
- channels=2 - We are running I/Q so we have TWO channels.
- agc = 0 - We do now want to enable AGC if we wish to have a calibrated S-meter.
- gain = 20 - The gain
here should be set just high enough to prevent overloads on the 16 bit
signal path as seen using the WebSDR's "~~status" page. More information on this in the "comments" section.
Configuring the PA3FWM WebSDR
In the "websdr.cfg" file we would refer to our FIFO device
on the "device" line where we would have formerly referenced the audio
device, as in:
band 80m
centerfreq 3700
device /home/websdr/fifo/fifo-80m
samplerate 768000
gain -25
swapiq
hpf 0
noiseblanker 30
antenna dipole
extrazoom 1
An explanation of the parameters:
- band 80m - This begins the definition block of our 80 meter receiver and also names it "80m".
- centerfreq 3700 - This specifies 3700 kHz which is the same as the center frequency configured for that receiver instance in ka9q-radio.
- device /home/websdr/fifo/fifo-80m-
Normally specifying the audio device, we are explicitly using the FIFO
that we created above. The entire path is required.
- samplerate 768000 - This is the sample rate, in samples-per-second, of the audio source. The PA3FWM WebSDR software seems to allow ONLY the rates 48, 96, 192, 384, 768 and 1536 kHz for the 16 bit signal path. (A few other rates may work - sort of...)
- gain -25 - This
effectively sets the waterfall brightness and provides S-meter
calibration in the original PA3FWM WebSDR code - a value of -25 being a
good starting point.
- swapiq - The I/Q data from ka9q-radio will be "backwards" with respect what the PA3FWM software wants, so this swaps them.
- hpf 0 - This disables the high-pass filtering, eliminating the "hole" that would appear that the center frequency.
- noiseblanker 30 - This enables the impulse filter in the PA3FWM software: A value of 30 seems to be reasonable for typical operation.
- antenna dipole - This describes the antenna being used as the dipole.
- extrazoom 1 - This allows an extra level of "zooming in" - useful for a high bandwidth like 768 kHz.
Additional information:
To prevent drop-outs, it may be necessary to add some buffering to
the FIFO. A useful too for this can be "mkbigfifo" found at this
GIT: https://github.com/biowdl/mkbigfifo. Of course you will need to have the appropriate version of Python on the computer.
The "mkbigfifo" utility would be used to create the FIFO as follows:
./mkbigfifo.py -s 65536 ~/websdr/fifo/fifo-80m &
This would define a FIFO with a 64k buffer as defined in the "mkbigfifo" documentation.
It's also possible to use "stdbuf" to invoke a buffer in the pipe as in:
pcmcat websdr_768_80-pcm.local -s 3750 | stdbuf --output=64k dd bs=64k > ~/websdr/fifo/fifo-80m
Whether or not one would need either of the above buffering methods
depends on how "busy" your machine will be - and the amount of
buffering.
Putting it into a script:
The above does not include a sample script to start the FIFOs and the
"pcmcat" instances. When you do this, be sure to include at least
the following:
pkill -f "mkbigfifo.py"
This should kill all running "mkbigfifo" instances.
rm -f ~/websdr/fifo/fifo-*
This will remove the existing FIFOs.
killall -q pcmcat
This will kill all instances of "pcmcat".
The above assume that you wish to kill ALL instances of "mkbigfifo" and "pcmcat" on your computer: If you want to selectively stop specific processes (e.g. the need to start/stop a specific band, if you have them running elsewhere) you'll have to define them explicitly.
Finally, I would recommend a "sleep 1" (to pause a second) between each invocation to allow processes to start.
Concerns when using receive hardware that "inhales" the entire HF spectrum
On this page we have discussed using the RX-888, which can operate at
up to 130 megasamples/second and cover from LF through 6 meters.
While this is technically possible, there are a few practical concerns that also apply to ANY receive hardware that does full-spectrum direct sampling across the HF spectrum including the KiwiSDR, Red Pitaya and anything else.
Practically speaking, most users run the RX-888 at about half the maximum sample rate (typically 64.8 MHz) but this means that the built-in Nyqyuist filter (set for 60 MHz) is not properly effective: The addition of a 30 MHz low-pass filter is strongly recommended
in this case. In any case, it is also recommended that there be
effective filtering to prevent ingress of FM broadcast band signals no
matter what sample rate you choose for your RX-888.
- The receiver may be somewhat "deaf".
The RX-888, the KiwiSDR, many versions of the Red Pitaya lack the
necessary sensitivity which means that you may need to add gain.
If you have a quiet location, the gain of the receiver may be
insufficient to "hear" the noise floor under "quiet band" conditions:
In the case of the RX-888, an additional 15dB of gain or so is
required to hear the noise floor at a "very quiet" location - but if
you are in a noisier, urban area this may not be a problem. This
is particularly a problem for the upper HF bands (10 meters) where the signals and noise level can be 15-20 dB lower than on the bottom end of the HF spectrum.
- The signal power distribution across HF is NOT flat. When
connected to an antenna with a reasonably flat amplitude response
across the HF spectrum you'll note that the lower frequencies (<8 MHz) typically have far greater overall signal power than the higher frequencies (>15 MHz). What this means is that when you consider that the direct-sampling receiver has an absolute limit as to the total amount of RF power that it can tolerate before it overloads (e.g. A/D converter goes into clipping) if most of the total
RF energy occurs below 10 MHz, most of the ability of that same A/D
converter is occupied dealing with signals over only a fraction of the
HF spectrum. What is required in many cases is to selectively
attenuate the lower HF band frequencies (<8 MHz) while offering little attenuation at the high end (>20 MHz):
Typical values are about 20dB at 1.5 MHz - offering significant
attenuation of signals on the mediumwave band and below - and about
1.5dB at 30 MHz.
Inspection of noise and signal levels - even in a quiet location
- will reveal that the attenuation provided by such a device will NOT
be enough to put even the RF noise floor from the antenna feed below
that of a modestly sensitive receiver, so no signals are actually lost
with this attenuation - only excess energy. If a very RF-quiet site is used, both this selective attenuation and amplification will likely be required. Some information on how to do this may be found here:
- "Revisiting the 'Limited Attenuation High Pass' filter - again" - link.
This article discusses this issue in detail and describes a simple
circuit to provide the "selective attenuation". This device is
also referred to as a "shelving filter" owing to the nature of its
response curve.
- Turn Island Systems "Filter Preamp" - link. This device offers the selective attenuation, the function of a 30 MHz low-pass filter and it includes an RF preamplifier of modest gain.
As noted above, operating the RX-888 at 130 MHz will allow it to
cover 6 meters, but it will be extremely deaf. If you wish to use
the RX-888 for only
6 meters then a simple RF preamplifier will be adequate, but if you
wish to receive HF and 6 meters simultaneously you'll likely need to
construct custom hardware to handle the 6 meter signal path separately from the HF signals and combine the two at the input of the RX-888.
Signal dynamics and gain
It may be argued that 16 bits is simply insufficient to handle the dynamics of all
signals from across the HF spectrum over a wide range of propagation
and environmental conditions. The use of the "shelving filter" to
selectively attenuate low HF frequencies more than high HF frequencies
is one technique to maximize utility, but here are a few other things
to consider - whether you are using an RX-888 or not:
- Strong AM broadcast band (mediumwave) signals. In
many parts of the world - especially the Americas - there can be very
strong, local signals in the 530-1700 kHz range that, unless
appropriately attenuated, can consume inordinate proportions of the A/D
converter's signal handling capability. The "shelving" filters
referenced above can knock these down by a significant amount (>=20dB)
but it may also be necessary to add a filter specific to broadcast band
filtering - or even include notch filters tuned to specific, very
strong carriers.
- Correctly choose gain and attenuation values. Taking the RX-888 as an example - which may also apply to similar hardware - there are a few things to consider:
- The input attenuator is not useful. The RX-888 has an input attenuator, but a quick analysis of the signal path reveals that it is unlikely to be useful in any
off-air situation: As the RX-888 likely needs outboard
amplification to "hear" the noise floor at high HF frequencies, anyway,
it's very unlikely that one would ever actually need more attenuation - especially that which precedes the gain stage!
- Choosing appropriate VGA (Variable Gain Amplifier) settings.
The RX-888 includes a VGA - but only a portion of its adjustment
range is useful. For example, both empirical and data sheet
analysis will indicate that a gain setting exceeding 20 dB - while
yielding more gain overall - does little to improve actual sensitivity.
The reason for this is that above approximately 20 dB, the noise
floor contribution of the VGA itself increases at nearly the same rate
as the gain increase itself does while, at the same time, the overload
signal level (e.g. clipping)
of the A/D converter decreases in proportion to the gain increase.
In other words, compared to a gain setting of 20 dB, setting the
gain to the maximum of 37 dB increases the actual sensitivity of the
RX-888 by only a few dB while the high signal level clipping decreases
by 17 dB - and that is NOT a good trade-off!
- For the RX-888, a gain setting of 20dB is a good compromise in most situations. If you have low noise
amplification preceding the the RX-888 you may be able to decrease the
VGA gain even more and have both a satisfactorily high clipping level
and low noise floor.
- For more information on this topic, see the article: Measuring signal dynamics of the RX-888 (Mk2) - link.
Whatever your receive hardware may be, you should do the following tests:
- At various HF frequencies, note the signal level with the antenna disconnected. If you have equipment preceding the receiver (splitters, filters, amplifiers) be sure to disconnect the signal path preceding everything (e.g. at the antenna input terminals.)
- At various HF frequencies, not the signal level with the antenna connected, but on a quiet frequency with no signals (e.g. "band noise"). This test should be done when the respective band is "dead" (no propagation) where the signal levels are as low as possible.
- If, at some frequencies, you do NOT see a difference between the two readings your system is "gain starved" at that frequency, under those conditions. This means that you are likely unable to hear weak signals (when the band is "closed" or in poor condition) that are actually there.
- If, at some frequencies, you see well over 10dB of difference between the two readings you likely have excess gain
and may be compromising performance when there are many, many signals
across the frequency spectrum impinging on the input of your receiver.
- Having "excess" signal may well be the normal situation on
the lower bands - and careful sculpting of the frequency response of
your signal path (with the use of "shelving filters" as described above) may improve overall performance, but if you have excess signals even on the quietest of the bands (e.g. 10 meters when it is "dead") then you probably have too much gain in the signal path.
- If you have excess gain - and you are CERTAIN that a preceding amplifier is not prone to overload and cause distortion under high-signal conditions - reducing the gain of the receiver (and NOT adding attenuation!) may be the best course of action. Having between 6 and 10dB of excess noise is a reasonable target.
Remember: With any receive system, having just enough gain is as much as you need - having excess
gain will serve only to reduce the capability of the receiver's
handling of many strong signals simultaneously and degrade performance.
Comments:
- Certain errors are normal. Upon startup, the WebSDR will throw a few errors when using the FIFO as there's no actual sound device present. For example, you might see:
Planning FFTs for band 3... done.
, Can't set audio data format to 16 bit little-endian.
, Can't select 2 input channels.
, Can't set fragmentsize.
, Can't set input sample rate to 768000.
Despite this, the WebSDR will start and produce the expected results - if everything else is configured appropriately!
- Using the "~~status" page. On the WebSDR's "~~status" page (used to show A/D values) the full path to the FIFO
will be shown as the "device". If you don't wish to have this
full path information - which can include the username for the user
"websdr" - you may wish to take this into account.
- The "~~status" page should be checked - under wildly
varying conditions - to assure that there is an appropriate amount of
signal on the 16 bit signal path from ka9q-radio: A value of
500-1000 for a "dead" band with no signals and not exceeding 12000 or
so on a "busy" band (clipping occurs at about +/- 32767) - but with wildly varying conditions on the higher HF bands this can be a challenge to maintain. It is
possible to change the gain of the receiver instance via the command
line of ka9q-radio to effect a form of AGC in this portion of the
signal path which would permit consistent and accurate "S-meter"
readings - contact the author of this document for more information.
- The "~~status" page will NOT usefully indicate clipping of the acquisition devices (e.g. the RX-888).
- The reason for this is that the "~~status" page only shows statistics of the portion of the spectrum defined by that receiver instance after it has been processed (band-pass filtered, amplified/attenuated)
by ka9q-radio. For example, an extremely strong signal near 80 or
40 meters could be overloading the A/D converter, but the values shown
for the 20 meter receiver would never show this - and neither would the
40/80 meter receivers if this signal were even slightly outside their
respective passbands.
- The ka9q-radio "control" utility should be used to keep track of the signal appearing on the input of the RX-888 (for example): A maximum level of about -15dBFS on the antenna input under worst-case conditions (e.g. maximum total signal power at the antenna when many strong signals are present)
is a suggested setting. Conversely, having too little system gain
such that the worst-case maximum level is always below about -30dBFS
will likely short-change the performance of the receive system overall.
- Make sure the WebSDR recovers from a signal interruption. There may be some instances where the loss of I/Q data may "hang" the WebSDR. YOU
should do your own testing to verify what - if anything - might need to
be done to assure that the WebSDR will either resume or need to be
restarted upon such an interruption (e.g. ka9q-radio is restarted while the WebSDR is running). I've had generally good luck with graceful resumption of operation even when ka9q-radio is stopped for extended periods.
- Up to 1536 kHz bandwidth may be used. The PA3FWM
WebSDR doesn't seem to work at a higher rate than 1536 kHz. Unless you
really wish to have coverage of adjacent-band frequencies, the only
band for which 1536 kHz makes sense is 10 meters.
- The use of the "extrazoom" parameter in "websdr.cfg" can
help with the fact that at higher rates the waterfall resolution will
decrease as well, although there are limits to how much "extrazoom" may
be applied.
- Create better "wisdom" data for both ka9q-radio ant the PA3FWM WebSDR.
Both ka9q-radio and the PA3FWM use FFTW internally and one means
by which they can operate efficiently is to "pre-calculate" aspects of
the transformation - and this pre-calculation is stored in a "wisdom"
file. Taking the time upon first start-up to generate a "deeper"
wisdom file can significantly reduce processor load - particularly with
ka9q-radio. For ka9q-radio, this initial calculation may take hours to complete - but it need be done only once for a given sample rate on a specific piece of hardware. Note
that "wisdom" files are not portable - they must be generated on the
hardware on which they will be used, for the specific FFT conditions
encountered.
- For ka9q-radio: To generate custom wisdom files for ka9q-radio see the page: Making custom "Wisdom" files for the FFTW processes in ka9q-radio - link. It
cannot be over emphasized how taking the time to allow an in-depth
Wisdom calculation to complete can improve overall performance of
ka9q-radio and the streams that it produces.
- For the PA3FWM WebSDR: In the file "websdr.cfg" you will find the parameter "fftplaneffort".
The default for this is 0 - which is not very efficient at all
and a value of 1 - which takes only seconds to do - is much better.
A value of 2 is much better, taking several minutes on a faster
processor, delaying the start-up of the WebSDR by that amount. A
value of 3 may take many minutes or hours, but remember that this
process need be done only ONCE
for a given sample rate on a given machine so dealing with it is simply
a matter of planning ahead and scheduling enough down-time to allow the
calculations to complete.
- Strategy in ka9q-radio receiver definition. In the description of the "radiod@xxxx.conf" file all
bands were defined in a single statement. You probably would NOT
do it this way, but have several separate definitions as described
below:
- Different definitions for different sample rates.
While 768 kHz would make sense for 80, 15 and 10 meters, a
coverage of 384 kHz would be sufficient for 160, 40 and 20 meters while
192 kHz would be fine for 30, 17 and 12 meters: 1536 might be
considered to cover most of 10 meters. Breaking the definitions
into groups would make sense - with the caveat in the next section.
- Or - Different definitions for bands and gain settings. You may note that only one value for "gain" may be specified in the definition and you will probably want to have different gain settings for each band. For this reason you may actually wish to have only ONE frequency per definition to allow sample rate and gain to be specified on a per-band basis.
- ka9q-radio need not be run on the same computer as the WebSDR. It should be remembered that ka9q-radio need NOT
be run on the same computer as the WebSDR: If another computer is
on the same LAN segment and it's capable of passing multicast packets,
one computer could be running ka9q-radio (and possibly even the WebSDR) while another runs the WebSDR: This is one way to permit the coverage of many HF bands (more than the limit of eight currently imposed by the PA3FWM server) using a single piece of receive hardware (e.g. the RX-888).
- Remember: ka9q-radio uses multicast
packets and these will likely not traverse wireless connections with
any sort of reliability and many pieces of consumer and "prosumer"
network gear can't properly deal with it, either: If you use
multicast across a network be prepared to consult your local network
guru and/or pull your hair out! (It's possible to use unicast, instead - contact the author for more information.)
- External clock for improved frequency accuracy/stability. The RX-888 (and similar hardware)
typically have a means by which external clocking may be applied and
many users of the RX-888 use a Leo Bodnar GPS reference to produce the
27 MHz external clocking, but recent versions of ka9q-radio permit the
use of other reference frequencies (e.g. 10 MHz)
- but not that this would likely preclude reception of WWV/H and other
time signals on this and 20 MHz. With the RX-888 in particular,
it's strongly
recommended that one applies the external clock via a 6-10 dB resistive
attenuator as its input is very sensitive to waveform quality and quite
fragile.
- Finally, as with other receive hardware, pay attention go
ground loops. A receiver connected to a USB port of a computer as
well as an antenna cable (and possible an external clock source)
will have multiple paths by which common-mode RF currents may appear in
the received spectrum as interference and the liberal use of ferrite
devices and other techniques to minimize such signals are strongly
suggested, including:
- Ferrite device on USB cable. Winding 6-12 turns on toroid of mix 31 or 43 (or equivalent) will provide a reasonable amount of common-mode decoupling between the (noisy!) computer and its power supply across the HF spectrum - but it will likely have diminishing effects below 1 MHz.
- Common-mode choke on all coaxial lines. 6-12 turns on one or more toroids in a string using mix 31 and/or 43 (or equivalent) will also minimize common-mode currents between the coaxial lines feeding the receiver (antenna input and external clock) - but these, too, will have diminishing effects below 1 MHz.
- If reception below 1 MHz is desired (e.g. LF, VLF, 630 and 2200 meter bands) normal ferrite devices may have limited efficacy.
- In this case the use of old-stye analog video
common-mode chokes - which were designed to choke common-mode current
at 50/60 Hz mains frequencies - can be highly effective.
- Similar devices were employed to permit the use of
analog video on CAT-5 network cable as well although their choking
impedance may be less at mains frequencies.
- The use of a 1:1 "voltage balun" - which is really just
a 1:1 transformer. The Mini-Circuits "T1-1" is commonly used,
although its response may not extend to VLF frequencies and it may be subject to common-mode ingress at higher HF frequencies.
- The use of external amplification. One way of overcoming conducted noise is to amplify the signal prior
to the receiver, reducing the gain of the receiver itself to
compensate. In other words, it's better to provide extra gain before
the receiver than try to do so in the receiver. If one uses a
high dynamic range, low-noise RF amplifier, it's even possible to
improvise the overall receive system noise figure and maintain the same or better A/D clipping level with careful analysis ad measurement.
Conclusion:
This gives, in a nutshell, the methods that may be used to obtain
>768 KHz of coverage on a PA3FWM WebSDR - and also how to avoid
using any ALSA or sound system devices.
This is primarily useful for interfacing with "ka9q-radio" where any
number of arbitrary receivers of may be defined: If other virtual
receivers are needed, adding them to ka9q-radio will impose minimal
additional CPU overhead. This method may also be used with
"sdrplayalsa" and other software where "pipes" or similar may be used
to move data.
* * * * *
Acknowledgment: I would
like to thank Rostislav, UW5EHX for suggesting this method and noting also that it works at 1536 kHz.
Additional
information:
- For general information about this WebSDR system -
including contact info - go to the about
page (link).
- For the latest news about this system and current issues,
visit the latest news
page (link).
- For more information about this server you may contact
Clint, KA7OEI using his callsign at ka7oei dot com.
- For more information about the WebSDR project in general -
including information about other WebSDR servers worldwide and
additional technical information - go to http://www.websdr.org
Back to the Northern Utah WebSDR landing page