Packet Communications
DRAFT (A Work in Progress)
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.
Prerequisites
- QPSK Modulation / Demodulation
- BPSK Demodulation
- Polymorphic Types (PMTs)
- Stream Tags
- Message Passing
- Understanding ZMQ Blocks
- Packet Communications
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.
Building the flowgraph
Build the following flowgraph using the details given below:
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".
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)
Protocol Formatter
The entry for the Format Obj. is 'hdr_format'
Protocol Parser
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
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 ---------------------------------------------------------------------- ******* MESSAGE DEBUG PRINT ******** GNU Radio ************************************
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 MESSAGE DEBUG PRINT shows the payload data as a string.