1

I'm going to start off by saying that I'm very new to SDR and GNU Radio. This may be a dumb question, but I have been googling and testing things for about two months now trying to get this to work without success. Any help or pointers would be appreciated!

I'm attempting to use GNU Radio 3.8 to transfer a file using differential QPSK. I've tried to follow the tutorials on the wiki as well as several similar academic papers I found on the internet (which also seem to be based off the wiki tutorial). None of them worked on their own but combining what actually works from each one, I managed to create a flowgraph sans hardware that does indeed send and receive the data from a file. Here's the Flowgraph and here is a screenshot of the results. The results show the four constellation points, and the data from the file source matches up perfectly with the data having gone though the entire transmit+receive chain. In the simulation I have a throttle block and a channel model block where the LimeSDR Source and LimeSDR Sink block would be. So far so good (at least as far as I can tell).

When I actually start transmitting this signal with the SDR, the received data no longer matches up with what is transmitted. Here's the flowgraph I've been using for the transmission. I added a protocol formatter and some FEC blocks that I could have removed for this illustration, but the point is that simply looking at what bits are going into the modulator vs what's being recovered, the two do not match up. The constellation looks good (as far as I can tell) but the bits are all wrong. Here's a screenshot showing the bits being transmitted. You'll notice in the screenshot of the transmitted signal that the signal has a repeating series of three flat top "1's" surrounded on both sides by a period of "0's" (at time 1.5ms and 3.5ms). This is a screenshot of the received bits. At time 1ms and 3ms you can see how it is has significantly more transitions between 1 and 0 than it should.

So at this point I'm stumped. The simulation worked but the real world test does not. I've messed around with the RRC filter properties a significant amount. I have no clue if the values I have chosen are correct as I have not found a tutorial or explanation on how to do so. I just looked at some of the example flowgraphs and made some guesses as to how those values were derived and applied those guesses to my use case. It worked well in the simulation so I thought it would be fine in the real world test. I've tried a variety of samples per symbol but my goal is for a 4800 bit per second transfer speed, and using different samples per symbol didn't help anyway. What should I change in order to get this to work?

Bonus question: The constellation object has QPSK and DQPSK, and the constellation modulator has a differential checkbox. What is the best practice combination of selections to get a differential QPSK modulation?

sniporbob
  • 11
  • 2
  • One thing that springs to mind is that your carrier recovery loop could be stuck in some sort of false lock (so your constellation is actually spinning in some number of full circles between each symbol, plus the actual differential phase). A CMA equalizer would certainly allow this to happen. What kind of status can you read off? Can you view your carrier recovery frequency? Equalizer taps? Adaptive resampling rate? Or any intermediate data points (e.g. after the equalizer, after the carrier recovery loop)? Have you considered simplifying to standard BPSK to get yourself started? – Harry Dec 04 '19 at 21:56
  • Huh, I didn't think of that but perhaps that's what is happening. So from the Symbol Sync block I can get error, T_inst, and T_avg (I'm honestly not sure what these are), as well as viewing the constellation or putting a time sink. The CMA Equalizer has no special outputs so the only options are viewing the constellation or a time sink. The Costas Loop has a frequency, phase, and error output. The constellation from that is pictured above. I'll try to edit my question to include images of these data points. Regarding BPSK, I could use it instead so if it's easier I'll just go with that! – sniporbob Dec 05 '19 at 23:46

0 Answers0