Software-defined radio (SDR), which emerged in the 1990s, has become a core development method in certain high-profile fields, including military and space communications. High cost and problems with hardware availability, however, prevented this technology from being widely disseminated. The advent of low-cost hardware beginning in the 2010s, however, has made GNU Radio - the leading open-source software toolkit for developing SDR systems - an increasingly viable and even critical tool for a new generation of radio frequency communication engineers.
Communication Systems Engineering with GNU Radio provides an accessible overview of this toolkit and its applications. Beginning with the fundamentals of using GNU radio for digital signal processing, the volume then moves to the practicalities of decoding data and the advantages of accessing raw data normally unavailable in hardware-defined radio frequency receivers. The result is a potentially crucial tool for engineers looking to adopt this cost-effective and flexible standard for transmitting and processing radio frequency signals.
Readers will also find: - A careful balance of radio communications theory with GNU Radio practicalities- Practical implementation examples employing well-developed open-source GNU Radio platforms- Extensive accompanying documentation and explanation
Communication Systems Engineering with GNU Radio is ideal for graduate and undergraduate students in communications systems courses, as well as professionals working in SDR.
Table of Contents
About the Authors xi
Foreword xiii
Acknowledgments xvii
Acronyms xix
About the Companion Website xxi
Introduction xxiii
1 Getting Started with GNU Radio: Synthetic Signals 1
1.1 Evolution of Radio Frequency Electronics Toward SDR 1
1.2 The Complex Envelope and the Justification of the IQ Structure 2
1.3 Complex Number Manipulation 7
1.4 GNU Radio and GNU Radio Companion 7
1.5 Sample Rates, Decimation and Aliasing 13
1.6 Low-pass Filtering or Working on Upper Nyquist Zones 19
1.7 ADC and DAC Resolution 24
1.8 Power Spectral Density Display with the Frequency Sink 27
1.9 Conclusion 29
References 29
2 Using GNU Radio with Signals Collected from SDR Hardware 31
2.1 SDR Hardware Architecture 32
2.2 Using Readily Available Processing Tools 33
2.3 Amplitude Modulation and Demodulation 36
2.4 Frequency Modulation and Demodulation 41
2.4.1 Commercial FM Broadcast: Demodulation and Audio Output 46
2.4.2 Stereo Sound and RDS 48
2.4.3 FSK Modulation 50
2.5 Phase Modulation and Demodulation 53
2.5.1 Phase Modulation 53
2.5.2 Phase Demodulation 55
2.5.3 Radio Data System (RDS) 55
2.5.4 The Global Positioning System (GPS) 57
2.6 Spectral Occupation of the Various Modulation Schemes 63
2.7 Local Oscillator Leakage Issue 63
2.8 Conclusion 67
References 67
3 Communicating with External Software (Python, Networking, ZeroMQ, MQTT) 69
3.1 Connecting to an External Sentence Decoding Tool Using Named Pipes 70
3.1.1 POCSAG Single Channel Decoding 70
3.1.2 POCSAG Multichannel Decoding 72
3.2 TCP/IP Server Running in a Separate Thread 75
3.3 XML-RPC 81
3.4 Zero MQ (0MQ) Streaming 84
3.5 MQTT 93
3.5.1 MQTT for Python, Bash and Octave 94
3.6 Conclusion 96
References 96
4 Correlating: Passive and Active Software-Defined Radio (SDR)-RADAR 99
4.1 SDR-RADAR Requirements and Design 99
4.2 Correlation: GNU Radio Implementation 103
4.3 Passive RADAR Principle and Implementation 113
4.4 Active RADAR Principle and Implementation 113
4.5 Measurement Principle 114
4.6 From Theory to Experiment: Ranging by Frequency Stacking 115
4.7 Results 120
4.8 Conclusion on Range Measurement 122
4.9 Azimuth Resolution Through Spatial Diversity: Synthetic Aperture RADAR 122
4.9.1 OFDM RADAR (WiFi) 126
4.10 Acquisition for Azimuth Measurement 129
4.11 Suppressing Direct Coupling Interference 132
4.12 Signal Processing 132
4.13 Result Analysis 135
4.14 Interferometric Measurement 136
4.15 Reproducible Positioning of the Receiving Antenna: Motorized Rail 138
4.16 The Radio Frequency Corner Reflector 139
4.17 Fine Displacement Measurement 141
4.18 Impact of the Atmosphere 142
4.19 Time of Flight Measurement with Sub-sampling Period Resolution and the Use of a Surface Acoustic Wave Cooperative Target for Reproducible Range Simulation 144
4.20 Conclusion 149
References 150
5 Digital Communications in Action: Design and Realization of a QPSK Modem 153
5.1 Digital Communication Concepts 153
5.1.1 What Is Digital Information? 153
5.1.2 From Digital Data to Electrical Pulses 155
5.1.3 Occupied Bandwidth and Spectral Efficiency 157
5.2 Building a QPSK Modulator with GNU Radio 160
5.3 Building a QPSK Demodulator with GNU Radio 165
5.3.1 Synchronization 167
5.3.1.1 The Digital PLL 168
5.3.1.2 Maximum Likelihood Estimation and the Costas Loop 174
5.3.1.3 QPSK Timing Recovery 176
5.3.2 Automatic Gain Control (AGC) 181
5.3.3 Assembling All the Components: The Ultimate QPSK Receiver Flowgraph 182
5.4 Conclusion 187
References 188
6 Messages, Tags, and Packet Communications 189
6.1 Introduction 189
6.2 Polymorphic Types 190
6.3 Messages 193
6.4 Tags 202
6.5 Case Studies 206
6.5.1 Improving the gr-nordic OOT Module 206
6.5.2 Converting the QPSK Modem to Packet Mode 212
6.6 Conclusion 216
References 217
7 A Digital Communication Standard: The DAB+ Radio Broadcasting System 219
7.1 Introduction 219
7.2 The DAB+ Standard 220
7.2.1 Foundations of Digital Audio Coding 220
7.2.1.1 The Absolute Threshold of Hearing 220
7.2.1.2 Critical Bands 220
7.2.1.3 Masking 222
7.2.2 Audio Coding Standards and Their Usage in DAB and DAB+ 224
7.2.2.1 The MPEG/ISO/IEC International Audio Standards 224
7.2.2.2 The DAB and DAB+ Audio Coders 225
7.2.3 Digital Transmission over Time and Frequency-Selective Channels: The Need for COFDM 228
7.2.3.1 Time and Frequency-Selective Wireless Channels 228
7.2.3.2 COFDM: Digital Communication Techniques for the Wireless Channel 232
7.2.3.3 The ETSI EN 300 401 DAB Standard 236
7.3 Building a DAB+ Transmitter 241
7.4 Building a DAB+ Receiver with GNU Radio 244
7.4.1 Basic Usage of gr-dab 244
7.4.2 gr-dab in More Details 246
7.5 Conclusion 249
References 249
8 QPSK and CCSDS Packets: Meteor-M 2N Satellite Signal Reception 251
8.1 Introduction 251
8.2 When Will the Satellite Fly Overhead? 255
8.3 Why Such a Complex Protocol? 258
8.4 How to Tackle the Challenge? 260
8.5 From the Radio frequency Signal to Bits 261
8.5.1 Data Format 262
8.5.2 Decoding Data 264
8.5.3 Convolutional Encoding of the Synchronization Word 265
8.5.4 Convolutional Code Representation as State Machines 267
8.5.5 Decoding a Convolutional Code: Viterbi Algorithm 269
8.5.6 Constellation Rotation 271
8.5.7 From Bits to Sentences: Applying the Viterbi Algorithm Decoding 273
8.6 From Sentences to Paragraphs 279
8.7 So Much Text … Pictures Now 281
8.8 JPEG Image Decoding 286
8.9 Conclusion 291
References 296
9 Custom Source and Sink Blocks: Adding Your Own Hardware Interface 297
9.1 Python Block 298
9.2 Out-of-Tree Blocks 300
9.3 Cross-compiling for Running on Headless Embedded Systems 310
9.4 Conclusion 312
References 312
10 Conclusion 315
References 318
Index 319