Git Product home page Git Product logo

ampkt's Introduction

AMPKT - Amateur radio packet explorer

This is a project to facilitate experimentation with connecting two Linux machine's network stacks via the amateur radio bands.

Required Hardware

You will need two full-duplex SDRs, one for each machine. They will also need to be compatible with SoapySDR.

Hardware that is known to work:

  • USRP N210
  • BladeRF
  • LimeSDR

Getting Started

  1. Build the project:
cargo build --release
  1. Connect your SDR hardware and start the ampkt binary (note that you will probably need to run with sudo so that the tap interface can be created):
sudo ./target/release/ampkt "driver=bladerf" 433000000 435000000

This will start ampkt using bladerf hardware, Txing on 433MHz and Rxing on 435MHz.

  1. On a second machine do the same, ensuring that you swap the frequencies.

  2. On both machines, bring up the tap interface and assign an IP address:

sudo ifconfig tap0 up
sudo ip add 10.0.0.1/24 dev tap0

Making sure you use a different IP address on the other machine.

  1. At this point you should have working comms. You can check running pingand seeing whether you get a reply from the other machine
ping 10.0.0.2

Technical Information

A Linux TAP interface is created. This interface is used as the sink for the RX path and the source for the TX path.

Tx Path

Each incoming packet that is read from the tap interface is converted into a frame. The frame consists of a sync header (repeated twice) a frame size (as u16) followed by the packet data. We then convert the frame to a stream of symbols. We use QPSK modulation which means we have two bits per symbol. Each 2-bit nibble is converted into a symbol using the following map:

A => 0b00
B => 0b01
C => 0b10
D => 0b11

We then module the symbol stream into QPSK with the following constellation:

       Im
       |
    B  |   A
       |
       |
-------------> re
       |
       |
    D  |   C
       |

The output of the QPSK modulator is then sent to the SDR for Tx.

Rx Path

Samples from the SDR are first sent into the clock sync block. This block decimates the incoming stream by selection of particular samples from the input stream. The number of samples that are 'skipped' during selection is shifted by an error function which attempts to pick the sample at the peak of a symbol.

The decimated stream is then sent into the carrier sync block. This attempts to compensate for any difference in clocks between the SDRs by 'de-reotating' the constellation. When this block has 'locked' the output should be stable samples in each quadrent of the constellation plot.

Next, the samples passed through the QPSK demodulator which converts the samples into a stream of symbols.

The symbol stream is then passed through a frame decoder. This block attempts to create the original packet of data from a stream of symbols. We use a SYNC header of 16-bytes (repeated twice) to resolve the phase ambiguity. Then the computed difference in phase is applied to all incoming symbols to decode the frame.

Finally the frames are written to the TAP interface for injection into the Linux kernel network stack.

ampkt's People

Contributors

hexagonal-sun avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.