Starting to set up the transmission environment and getting it to run was much harder than simulation, especially dealing with the Linux system environment, as being unfamiliar with command line operations consumed a lot of time. I feel that my understanding of the equipment is not very accurate, but for now, the main goal is to get it running and achieve the first step of sending and receiving. I welcome any criticism or corrections regarding my understanding of the equipment.
1 Equipment Introduction
1.1 Transmission Equipment
Recently, I bought a Microsemi E310:
Figure 1 Microsemi SDR Equipment
PlutoSDR (also known as ADALM-PLUTO) is a low-cost SDR manufactured by ADI, based on the AD9364 RFIC (the same RFIC used in USRP B200) but marked as AD9363. I don’t really understand the specifics. Let’s take a look at several parameters of the PlutoSDR Sink that I need:
Below is my understanding of the parameters:
Figure 2 Parameter Understanding
The buffer size refers to the amount of data transmitted at once. For example, if I want to send 2 million points at once, I set it to 2M; if I want to send it in two batches, I set it to 1M.
1.2 Receiving Equipment
The parameters and meanings of the HackRF one device can be looked up online and understood in reference to the transmission equipment mentioned above.
Figure 3 HackRF one Device
2 Transmitter Design
The flowchart is as follows:
Figure 4 Transmitter Flow Design
Where the source coding and channel coding refer to previous article content:
A Simple QPSK Digital Communication System Gu Ge, WeChat Public Account: Communication Algorithm Notes and Software Defined Radio Practice A Simple QPSK Digital Communication System
After symbol mapping, it goes to the following flowchart.
Then in the corresponding OOT module in gnuradio, the flowchart is displayed as follows:
Figure 5 Transmitter OOT Module Design
In the above figure, the Rational Resample module is the digital up-conversion (DUC), which upsamples the signal with a sampling rate of 8000Hz to 2MHz. Here, I directly call the internal block, and the implementation method can use zero insertion and anti-aliasing filtering. (In ideal interpolation, the number of signal points changes from the original 390 to 390*250), but after calling the Rational Resample function, the data points change from 390 to 89846. This is probably due to the anti-aliasing filter; anyway, I won’t consider too much for now. So, after reading the above file, the baseband signal with a sampling rate of 8000Hz is up-converted to 2MHz and then sent out with 89846 points.
Figure 6 Transmitter Interface
Looking at the parameters, the sampling rate is set to 2MHz; the buffer is set for continuous reading to the length of 89846 after up-conversion; the attenuation is set to 10dB; the carrier frequency and local oscillator frequency are set to 501MHz to meet the equipment range.
The transmitted waveform is as follows:
Figure 7 Baseband Waveform of Transmission (This is a graph drawn by octave)
In practice, the segment of this time-domain signal is sent repeatedly to maintain a continuous signal.
3 Receiver
The receiver flow is as follows:
Figure 8 Receiver Gnuradio Module Diagram
The receiver doesn’t have a flow design yet, as I am still learning about synchronization. So I will save it as a file for learning.
The time-frequency diagram of the received signal is as follows:
Figure 9 Received Time-Frequency Diagram
Since we opened the receiver first, there was no time for sending signals at the beginning.
After getting the data, I started to perform coherent demodulation. I have always been puzzled why both the transmitter and receiver know the carrier frequency, but still need carrier recovery. It wasn’t until I operated that I realized that due to various issues (which I still don’t know), the frequency was inaccurate. It was really frustrating.
When sending, it was 501MHz; I used a 500.5MHz intermediate frequency to down-convert 2MHz, which gives [499.5-501.5]MHz. Therefore, the carrier frequency for processing this segment of the signal should be 0.5MHz, and then I directly use coherent down-conversion and low-pass filtering, followed by digital down-conversion (DDC) to down-sample the signal to 8000Hz after matched filtering for analysis. The waveform is as follows:
Figure 10 Data After Mixing and Filtering Down-Conversion
It is obviously incorrect, with the frequency shifted left by 404Hz (I embarrassingly figured this out myself) as shown in the following figure:
Figure 11 Left-Shifted 404Hz Signal
It looks much better now. We will discuss carrier recovery algorithms later.