Simple Digital Mode Transmitter

A low-power, all-digital transmitter.

Similar projects worth following
An HF-band low-power (QRP) transmitter for just about any FSK digital mode.

This is not just another AD9850-based source! Neither is it an FSK transmitter. This does audio tone frequency estimation, which drives the DDS, so that the output is essentially the same as is achieved by upconversion but without doing any mixing, and therefore avoids the need for a bunch of analogue/RF circuitry.

Motivation: I want to play with amateur radio digital modes (like FT8, WSPR, etc.). There are several software tools that can manage all the encoding/decoding, which use the soundcard to generate/receive audio waveforms, but I don't have a rig capable of USB AM modulation which does the translation to RF. (Although the modulation is AM, the resulting waveform is essentially FSK).

I do, however, have an SDR dongle, so I can receive just fine. This project is about creating a general-purpose transmitter capable of any FSK waveform.

Concept: The AD9850/51 is a cheap and powerful DDS ('synth') which can easily generate signals at all of the RF frequencies I'm interested in, and is agile enough to add frequency or phase modulation. A simple microcontroller (e.g. Arduino Nano) should be able to take the audio waveform from the PC, determine the frequency, and program the DDS accordingly. Do this fast enough, and the DDS should track the audio as the FSK tones change

  • 1 × Arduino Nano (or clone)
  • 1 × AD9850 module
  • 1 × RTL-SDR or similar (only for receiving, not part of the transmitter)
  • 1 × 45W amplifier "530 v303" type
  • 1 × Relpol RM822N-2112-85-S005 DPDT relay

View all 6 components

  • Low-pass filter

    RobG07/14/2021 at 09:31 0 comments

    I have now cobbled together a low-pass filter to try to suppress the PA harmonics. This one has a corner frequency of 28MHz (to allow me to use it up to 10m band), using the following components (left to right):

    shunt C: 100pF

    series L: 12T on T37-6 core, making about 485nH

    shunt C: 180pF

    series L: 13T on T37-6 core, making about 580nH

    shunt C: 180pF

    series L: 12T on T37-6 core, making about 485nH

    shunt C: 100pF

    28MHz LPF

    Performance simulated in LTSpice, and then confirmed with a nanoVNA. I'm now feeling a bit happier about winding the power up without annoying the neighbours...

  • And we're off!...

    RobG07/04/2021 at 10:38 0 comments

    Finally had a chance to get the PA up and running, add variable output power control to the DDS, and connect the two together. Everything's working very nicely and I can now easily adjust output power between <100mW and 10W (and more). I bought an old (and very sickly) power/SWR meter, and calibrated it to 10W, so at least I have a rough indication of power level.

    All the bits hurriedly lashed down to a bit of ply - not pretty but it works.

    No output low-pass harmonic filter yet, but harmonics are approx. -40dBc at second and -25dBc at third, so probably won't cause too much interference. For now I'll keep the output power to around 1W to be on the safe side. Actually, the old 12V lead-acid battery I'm using to power the PA is knackered so most of the time I'm probably only making half that...

    On my very first FT8 transmission I got a QSO - so clearly it works! And now getting spots well in excess of 5000km on FT8.

  • Get smart

    RobG06/20/2021 at 15:00 0 comments

    Took a little time to transfer the Arduino/DDS circuit to a bit of copper-clad board but I'm glad I did because it looks much neater.

    Still regularly trying it on 20m, 15m and 10m bands, using WSPR and FT8 modes. Regularly hitting 900-1000km using WSPR, but almost no luck at all on FT8 (unsurprisingly). Really must get that PA finished!

  • First look at the PA

    RobG06/17/2021 at 16:39 0 comments

    Was in the office today so had a chance to run up the PA on the bench. Having first carefully set the MOSFET bias so that each was passing something like 25mA (according to instructions here), I could then adjust the drive levels to get a nominal 10W out. Then, sweeping the frequency in bands (4-8, 8-16 and 16-32MHz) the plot below shows how the output looks, including harmonics:

    PA output, whilst frequency is swept - max hold on.

    Clearly the output power isn't very flat, but conveniently for me it peaks at about 14MHz (20m band) which is where I was intending to use it most. Third harmonic is the worst offender, at about 23dB down, so a filter is required on the output - no surprises there. Would be good to get the 2nd harmonic from -33dBc down to <-43dBc, so then I'd only need a single LP filter (with corner=28MHz) to cover all the bands from 20m to 10m and still meet "the -43dBc requirement"*. Will see if I can tweak the MOSFET biases to achieve that.

    The real shocker was the drive level required: only -27dBm! (at 14MHz). I might just bypass the first stage as I definitely don't need all that gain...

    Lastly, this: (14MHz, 12V supply)

    Pout (W)last stage current (A)Efficiency (%)

    I'm hoping a simple moving-coil ammeter on the PA supply will be enough to give me a rough idea of output power.

    *interesting that the UK requirements seem to be much more relaxed: " free from Unwanted Emissions as the state of technical development for amateur radio apparatus reasonably permits"

  • A bit of a surprise...

    RobG06/11/2021 at 18:39 0 comments

    I finally got into the office today and had a chance to put the transmitter on the bench. First job was to swap out the filter components - though actually the new filter isn't that great either (the roll off needs to be steeper) so I might change it again one day...

    Output power measured on spec. an. (CW swept over 1-60MHz, max hold on)

    But the next thing was to measure the output power: a measly -2dBm! Barely 0.5mW! And that's after I changed Rset for a 2kohm to increase the output power. No wonder I'm struggling to get the signal out...

  • Switch it around

    RobG05/25/2021 at 13:43 0 comments

    Replaced the TX/RX relay today. Was previously SPDT, now DPDT configured so that the RX port is shorted to ground during transmit for a bit more isolation. When I've got a 10W PA hanging off the other port, and only 10mW (1000x less) into the receiver will damage it, I want to be very sure that I've got all the isolation I can manage!

    Relay is a Relpol RM822N-2112-85-S005. A quick look on my VNA shows >60dB from DC to 50MHz. That'll do...

    Here's the circuit so far:

  • First spot!

    RobG05/23/2021 at 17:33 0 comments

    I've been trying, on and off, to make a QSO but the output power of the DDS is just too low to be heard. I'd just about given up until I managed to get an FT8 packet received by a station in Germany - about 900km away - on 20m. Not bad for 10mW or so...

    I have one of those "45W amplifiers" (found cheaply all over the Internet) knocking around, so the next plan is to use it to boost the output of the DDS. First I'll tweak it slightly to bring the power down to 5-10W (the most I'm allowed on a Foundation Licence) and hopefully also lower the risk of popping the transistors.

    I've also just realised that I can adjust the output power of the DDS chip by sticking a trimmer pot where Rset should go, giving a means of controlling the output of the PA once its connected.

  • Yaesu emulator

    RobG05/15/2021 at 18:37 0 comments

    Today's coding fun was all about adding CAT functionality, so that JTDX, WSPR-X, and so on can all interact with the transmitter just like a real rig. After a bit of choosing I settled on emulating the Yaesu FT-450. The CAT commands are well-documented, though debugging without any way to see what was passing over the serial port was a bit of a git. Got there in the end.

    So now the transmitter jumps frequencies whenever you change bands in whatever software you're using - sweet. Or I can manually change frequency by sending an ASCII string like "FA14074000;"

  • SPICE-ing things up

    RobG05/14/2021 at 17:37 0 comments

    Had a bit of a muck about with LTspice, but can't seem to work out a way to gang the DAC outputs together to get more power - the balun approach doesn't seem to work*.

    However, what I did find is that the filter supposedly on the module is a bunch of junk - certainly not suitable for driving a notionally 50ohm antenna. A better one might be:





    together with R4=51ohms, R5=no fit, R6 (Rset)=1.95kohm. Oh, and a series DC blocking cap somewhere.

    LTSpice then gives the output power around 20mW (+13dBm) and rolls off at about 70MHz. When I next get into work I'll swap all the components over, and stick the output on a power meter and see...

    (*update: oh hang on, maybe I've just worked out a way to get ~38mW (+16dBm) out?)

  • more testing

    RobG05/13/2021 at 18:27 0 comments

    Looks like WSPR will work too. Just tried the same test as last night - namely using a .wav recording of a packet to drive the transmitter - and the PC software happily decodes it.

    Next step is to try and squeeze a few more dBm out of the synth. I have a plan to bodge on a 1:1 balun on the outputs of the synth so that both pins are combined (double the power?). Also might try changing Rset to get them to drive more current. Maybe get a whopping 3-4dBm this way?

    Finally I need to fit a TX/RX switch (a cheap 5V relay) driven by one of the Arduino pins. This then disconnects the SDR dongle, and connects the transmitter, whenever the PC makes a tone - i.e. we want to transmit.

View all 12 project logs

Enjoy this project?



Aaron Jaufenthaler wrote 07/14/2021 at 11:53 point

Thanks for sharing. Congrats for the nice idea and build. 73 de IN3EDA

  Are you sure? yes | no

RobG wrote 07/14/2021 at 12:36 point

Glad you like it. I'm quite pleased with how it's turning out!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates