Difference between revisions of "Packet Communications"

From GNU Radio
Jump to: navigation, search
(Simulating Baseband Packet Processing)
Line 1: Line 1:
 
<b>DRAFT (A Work in Progress)</b>
 
<b>DRAFT (A Work in Progress)</b>
  
This tutorial presents methods to transmit and receive packet data using burst transmissions. The data can originate from a message source or a stream source. A hardware implementation is shown using BPSK modulation.
+
This tutorial presents methods to transmit and receive packet data using burst transmissions. The examples show data originating from a PDU message source. A hardware simulation is shown using BPSK modulation.
  
 
== Prerequisites ==
 
== Prerequisites ==
Line 15: Line 15:
 
== Simulating Baseband Packet Processing ==
 
== Simulating Baseband Packet Processing ==
  
In order to grasp the basics of packet processing, this section presents a transmitter and receiver without any modulation or channel impairments.
+
In order to grasp the basics of packet processing, this section presents a transmitter and receiver simulation using standard GNU Radio blocks without any modulation or channel impairments. As was shown in the QPSK and BPSK tutorials, the received bit data stream could be verified by comparing it to the (delayed) transmitted data. However, there was no way to recover the byte alignment of those bits. That is where packet processing comes into play.
  
 
=== Building the flowgraph ===
 
=== Building the flowgraph ===
Line 30: Line 30:
 
For the Message Strobe to generate a PDU, the Message PMT must be of the form
 
For the Message Strobe to generate a PDU, the Message PMT must be of the form
 
   pmt.cons(pmt.PMT_NIL,pmt.init_u8vector(9,(71,78,85,32,82,97,100,105,111)))
 
   pmt.cons(pmt.PMT_NIL,pmt.init_u8vector(9,(71,78,85,32,82,97,100,105,111)))
This specific vector has a length of 9 and the character values of "GNU Radio".
+
This specific vector has a length of 9 and the character values of "GNU Radio". It is sent every two seconds.
  
 
==== Variable, Id: hdr_format ====
 
==== Variable, Id: hdr_format ====
 
The Protocol Formatter uses a Format Object to define its parameters. The one used in this example is
 
The Protocol Formatter uses a Format Object to define its parameters. The one used in this example is
 
   hdr_format digital.header_format_crc(len_key, num_key)
 
   hdr_format digital.header_format_crc(len_key, num_key)
 +
It generates a header with the packet length, packet number, and a 16-bit CRC. No access code is created.
  
 
==== Protocol Formatter ====
 
==== Protocol Formatter ====
Line 41: Line 42:
 
==== Protocol Parser ====
 
==== Protocol Parser ====
 
The entry for the Format Obj. is 'hdr_format'
 
The entry for the Format Obj. is 'hdr_format'
 
==== PDU to PMT ====
 
 
This block is an Embedded Python Block which converts a PDU string into a PMT string. The code is contained in Pkt_7_base.grc
 
  
 
=== Testing ===
 
=== Testing ===
Line 70: Line 67:
 
   Offset: 13  Source: n/a    Key: packet_num  Value: 1
 
   Offset: 13  Source: n/a    Key: packet_num  Value: 1
 
----------------------------------------------------------------------
 
----------------------------------------------------------------------
******* MESSAGE DEBUG PRINT ********
+
***** VERBOSE PDU DEBUG PRINT ******
GNU Radio
+
((packet_num . 1))
 +
pdu length = 9 bytes
 +
pdu vector contents =
 +
0000: 47 4e 55 20 52 61 64 69 6f
 
************************************
 
************************************
 
</pre>
 
</pre>
Line 81: Line 81:
 
The Tag Debug shows the length tag and the packet number tag.
 
The Tag Debug shows the length tag and the packet number tag.
  
The MESSAGE DEBUG PRINT shows the payload data as a string.
+
The third PDU DEBUG PRINT is the received payload ("GNU Radio").
  
== Using BPSK and Hardware ==
+
== Using BPSK with a Hardware Simulation ==
  
 
=== Transmitting a Signal ===
 
=== Transmitting a Signal ===
  
 
=== Receiving a Signal ===
 
=== Receiving a Signal ===

Revision as of 00:47, 23 October 2021

DRAFT (A Work in Progress)

This tutorial presents methods to transmit and receive packet data using burst transmissions. The examples show data originating from a PDU message source. A hardware simulation is shown using BPSK modulation.

Prerequisites

Simulating Baseband Packet Processing

In order to grasp the basics of packet processing, this section presents a transmitter and receiver simulation using standard GNU Radio blocks without any modulation or channel impairments. As was shown in the QPSK and BPSK tutorials, the received bit data stream could be verified by comparing it to the (delayed) transmitted data. However, there was no way to recover the byte alignment of those bits. That is where packet processing comes into play.

Building the flowgraph

Build the following flowgraph using the details given below:

Pkt 7 base fg.png


This flowgraph can be downloaded from Media:Pkt_7_base.grc.

Message Strobe

For the Message Strobe to generate a PDU, the Message PMT must be of the form

 pmt.cons(pmt.PMT_NIL,pmt.init_u8vector(9,(71,78,85,32,82,97,100,105,111)))

This specific vector has a length of 9 and the character values of "GNU Radio". It is sent every two seconds.

Variable, Id: hdr_format

The Protocol Formatter uses a Format Object to define its parameters. The one used in this example is

 hdr_format digital.header_format_crc(len_key, num_key)

It generates a header with the packet length, packet number, and a 16-bit CRC. No access code is created.

Protocol Formatter

The entry for the Format Obj. is 'hdr_format'

Protocol Parser

The entry for the Format Obj. is 'hdr_format'

Testing

To test the flowgraph, click the "Execute the flowgraph" icon, or press F6. An example of the output is:

***** VERBOSE PDU DEBUG PRINT ******
()
pdu length = 4 bytes
pdu vector contents = 
0000: 0d 10 00 3a 
************************************
***** VERBOSE PDU DEBUG PRINT ******
()
pdu length = 13 bytes
pdu vector contents = 
0000: 47 4e 55 20 52 61 64 69 6f 8f aa 09 f1 
************************************

----------------------------------------------------------------------
Tag Debug: 
Input Stream: 00
  Offset: 13  Source: n/a     Key: packet_len   Value: 13
  Offset: 13  Source: n/a     Key: packet_num   Value: 1
----------------------------------------------------------------------
***** VERBOSE PDU DEBUG PRINT ******
((packet_num . 1))
pdu length = 9 bytes
pdu vector contents = 
0000: 47 4e 55 20 52 61 64 69 6f 
************************************

The first PDU DEBUG PRINT is the header data containing the payload length, packet number, and a CRC16 of the header.

The second PDU DEBUG PRINT is the payload including a CRC32 of the data.

The Tag Debug shows the length tag and the packet number tag.

The third PDU DEBUG PRINT is the received payload ("GNU Radio").

Using BPSK with a Hardware Simulation

Transmitting a Signal

Receiving a Signal