BPSK and Pi/2-BPSK using a DDS via an Arduino
What do they it look like?



Using an Arduino connected to the PC to control an AD9850 DDS module which produces a square wave output whose phase can be adjusted in steps of 11.25°, I went about creating an application that could use the DDS module to modulate data. I wanted the PC to dictate what the modulation scheme was rather than hard coding it into the Arduino, this way the PC application decides whether or not the modulation is going to be BPSK QPSK etc. The application uses my SLIP library to communicate between the PC and the Arduino thus allowing packet based communication structure while the Arduino makes sure it keeps the correct symbol timing. When the Arduino gets low on symbols it asks the PC for more symbols.

 

 

 

jbpsk.png

GUI on PC that controls the DDS module

 

BPSK goes through 180° phase shifts which can cause a somewhat clicking sound as if the wave is at its maximum voltage and a symbol change occurs all of a sudden it switches to its minimum voltage which is why it sounds clicky. With filtering and being displayed on an IQ plot it appears to go through the origin going from +1 to -1. QPSK also passes through the origin but sometimes symbol transitions don’t as can be seen in the left-hand figure below.

 

QPSK-RRCp3.pngpi_2-BPSK-RRCp3.png

QPSK left (or top) and Pi/2-BPSK right (or bottom)

 

Pi/2-BPSK is like BPSK but changes in constellation orientation by 90° between each symbol. This changing of orientation by 90° means it never appears to go through the origin as can be seen in the right-hand figure above. The maximum phase shift using Pi/2-BPSK becomes 90° rather than 180° with BPSK this makes the sound it produces less clicky when listening to it. I wondered how BPSK and Pi/2-BPSK would compare when being produced without any root raised cosine filter (RRC) that usually I use to remove this clicky sound as well as the side lobes, and instead use a DDS module that outputted instantaneous transitions.

Why are large phase shifts undesirable? As far as I can tell it seems to be a problem when using nonlinear amplifiers. Nonlinear amplifiers are great because they are very efficient but it seems they suffer from a phenomenon called spectral regrowth when trajectories go through or close to the origin ( http://cp.literature.agilent.com/litweb/pdf/5965-7160E.pdf ).

I tried both BPSK and Pi/2-BPSK with exactly the same setup going from the DDS module to an SDR-RTL dongle using SDR#. There was no aerial on the DDS module and just a small piece of random hookup wire connected to the SDR-RTL dongle. I had the laptop powered by battery as when it was connected via the mains I would get a small amount of 50 Hz hum. The following screenshots show the difference in the signal between the two modulation schemes. Listening to the two schemes BPSK sounded clicky while Pi/2-BPSK sounded as if it was pulsating but didn’t have the warbling sound that the HAM protocol PSK31 is renowned for having. The HAM protocol PSK31 gets around the instantaneous transitions by reducing the volume slowly to zero before transition happens, hence why it sounds warbly.

sdr_31bpsk_dds_test.pngsdr_pi2_31bpsk_dds_test.png

BPSK31 left (or top) and Pi/2-BPSK31 right (or bottom)

 

The following two screenshots show the same setup as before but this time instead of 31.25 bits per second I change the speed to 1000 bits per second.

 

sdr_1000bpsk_dds_test.pngsdr_pi2_1000bpsk_dds_test.png

BPSK1000 left (or top) and Pi/2-BPSK1000 right (or bottom)

 

This time I couldn’t hear much difference, but visually BPSK1000 appears more spiky than Pi/2-BPSK1000. As you can see the side lobes are not as spiky but they look like they contain just as much energy. I don’t like the side lobes as they are wasted energy.

Below is a screenshot of Fldigi where I was decoding what I was modulating with the DDS at 1000bps.

fldigi_1000bpsk_ddds_test.png

BPSK1000

The maximum speed I have gotten up to is 1250bps.

So visually with my particular set up there seems little difference between Pi/2-BPSK and BPSK apart from Pi/2-BPSK looks less spiky. Sound wise Pi/2-BPSK sounds smoother. I couldn’t see any difference in the width of the side lobes between the two schemes. I think because there is no nonlinear amplifier amplifying the output from the DDS module I do not see any widening of the side lobes.

At the moment the PC application can choose one of 16 different phases, although the DDS chip can do 32 different phases I went for 16 so each symbol could be encoded using four bits hence two symbols per byte transferred between the PC application and the Arduino. With Pi/2-BPSK I’m only using four of the phases, so now I’m wondering whether or not I can use the other 12 phases to produce smaller phase shifts between symbols. I’m thinking that this means I’ll be encoding information with movement rather than location and hence will more resemble some sort of cross between CPFSK and and PSK. Anyway that’s a future thing to think about.

 

Downloads:

Source code

psk-dds-src.zip

 

 

Jonti 2015
Home

 

 

 

Jonti. Last modified Fri, 3 Jul 2020 05:18:00 GMT.