From Trammell Hudson's Projects
I'm working on an embedded software-defined radio for sending PSK31 telemetry data that can run in the BeagleBone Black PRU (or perhaps repurposing the LCD interface) as well as smaller devices like the Teensy 3.1 with an embedded Digital-to-analog converter. Preliminary source is available from github.com/osresearch/soft-ssb.
Teensy 3.1 with built in DAC
The image above shows the custom software defined radio code running in the Teensy 3.1 using the DAC to generate the (low frequency) RF that is received by the IC-7000 in LSB mode at 64 KHz. The audio baseband is output to the laptop running fldigi that prints the received message encoded at the 1 KHz. The oscilloscope shows the (not quite perfect) modulated output; the PSK31 waveform is clearly visible.
I was able to successfully receive the transmission a few centimeters away using only a random length of wire as an antenna directly driven from the output pin; an RF amp is definitely required.
This is different from ka70ei PSK transmitter -- his design generated only the baseband and used a 4x crystal to generate the RF. The amplifier design should be considered to amplify the output of the Teensy.
BeagleBone Black PRU
Using a BeagleBone Black instead of the teensy opens up more useful spectrum. The DAC on the Teensy is limited to mostly audio frequency ranges, but the PRU can easily generate a smooth 2.5 MHz carrier. A simple R2R DAC isn't the cleanest , but generates acceptable signal that was capable of being received a few meters from the IC-7000 without any amplifier.
There is a significant issue with the PRU that needs to be address in the code before it is ready for use -- the PRU clocks out the 4096 sample buffer in 102.4 microseconds (25 ns per sample), but it takes the ARM 200 microseconds to copy the 8192 bytes into the buffer. Using the second PRU to buffer from DDR to the shared RAM will probably help.