Giter VIP home page Giter VIP logo

project-cogsworth's Introduction

PROJECT COGSWORTH

An attempt at seeing wifi

What_Does_The_Scouter_Say_About_His_Power_Level.grc The GNU Radio program that reads off the HackRF connected to the antenna we wiggle around with robotic (handcut) precision. Outputs the signal power level onto the network as UDP packets stuffed with a chewy little endian 32 bit float center. Spared no expense! (Nervously checks for raptors...)

manip.py Nothing fancy aside from it uses ALL THE DATA you've collected. But it's parallelized...so the more cores, the faster. So at least is has that going for it. You may have to up your allowed open file descriptor with ulimit -n 65000. Solid State Drives are nice for this part as well...

wiggle.py Contains the code that generates the GCODE used to control the robotic component, as well as feeding that generated command stream to the robot itself. It also runs a thread that samples for 250ms off of a UDP port set to 9000. It writes these to individual files for each sample.

The controller is an AVR development board (also known by lesser mortals as an Arduino...) with a RAMPS1.4 daughterboard (outside of engineering circles, also known as a shield...).
It drives a pair of unipolar steppers with a step resolution of about 200 full steps per revolution.

It's recommended you figure out how to at least run this on PyPy to have human-scale processing times.

For the rest of you, I leave getting this to compile to LLVM-IR as an exercise to the reader...

To go with the following video series...

Part 1 => https://www.youtube.com/watch?v=o6WHhqDHSQ4
Part 2 => https://www.youtube.com/watch?v=VABeN4uv03s
Part 3 => https://www.youtube.com/watch?v=g3LT_b6K0Mc

project-cogsworth's People

Contributors

danukeru 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  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  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

project-cogsworth's Issues

Get low!

Hi. I rewrote your "manip.py" for Python3/numpy/matplotlib. No chance to test it yet, but this should run way faster than your current version, even without threads or multiprocessing. If you like, give it a try and let me know if it works, if not, nevermind ;)

import numpy as np
# adapt the following line whatever backend you have available, or remove it for auto
import matplotlib as mpl; mpl.use("Qt5Agg")   
from matplotlib import pyplot as plt
import argparse

def process_data_to_img(stamp, width, height):
    img = np.zeros((height, width))
    for i in range(width):
        for j in range(height):
            with open('SAMPLE_{}_{}_{}.dmp'.format(stamp, i, j), 'rb') as f:
                data = np.fromfile(f, dtype=np.float32)
            colour = int(data.mean()/100*255)
            reverse = height - 1 if i % 2 else 0
            img[width-1-i, abs(j-reverse)] = colour
    return img


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Process antenna data to image.')
    for argname in ["stamp", "horizontal", "vertical"]:
        parser.add_argument(argname, type=int)
    args = parser.parse_args()
    
    img = process_data_to_img(args.stamp, args.horizontal, args.vertical)
    print("done.")
    plt.imshow(img, cmap="jet", interpolation="none")
    plt.show()

how to make image lode faster

instead of processing the image after process it while you are getting data in another thread, you can even use this to display it live, i will make you a nice tkinter ui if you want that in your project

Image enhancement - polarization

This might be too much work but if you mount for example a yagi off axis and a helical antenna you can experiment with seeing what results you get. The off-axis yagi will pick up more reflected signal and less directly from the antenna. Not sure how it would compare with the helical. Another option would be to use two yagis in different orientations and then make a graphics filter to take the weaker signal in "strong" spots and the stronger signal in "weak" spots for more detail.

enhanced image - HDR

If you use a high dynamic range filter you might be able to get more detail out of the bright spots and dark spots.

moc.liamtoh nrobsogd

Why are you using a Helical antanna?

Awesome project!

But I'm a bit puzzled as to why you decided to use a Helical antenna design for your Wifi Telescope?

AFAIK, Helical antenna designs are primarily used for Circularly polarized radiation, which again are mostly used by SatCom and intranet broadcasting. I believe you would get far better results by using a dish, also as the radiation pattern for helical's are awful in comparison to the much cleaner and focused ones for dishes.

easy enhanced image - xy scan

First pull an image the normal way you do, then have it scan by starting at the top and going left to right, dropping a level and doing it again. Average the two images.

Need QT version of GRC file

GNU radio has been updated and the older GRC file you gave is showing error
can you provide New GRC file for updated GNU radio ?

Image enhancement - multiband

Not for visualizing wifi, but for visualizing your environment. At each plotted point take measurements from multiple bands - wifi, gsm, cdma, etc. Use the different bands for false color.

If you do these, please please please send me the resulting image.

Possible strategy to getting smooth density plots.

I've noticed that you get these 'pockets' of density from the output of the image processing. I've dealt with some density stuff before and I used something called a Kernel Density Estimator. You can see an example of this on on Sci-kit learn's documentation page for their implementation of a KDE.

It can be used to create smooth heatmaps of your wifi data and generally would look prettier. I'd love to play around with some of the data if you upload it somewhere.

Where are the printable parts

I have been trying to find the parts for this to print but cant find them. Do you have a 3d stl for this project?

Automatic gain?

I'm not super familiar with how the gnuradio settings map to hackrf settings, but... it seems like having "automatic gain enabled" wouldn't work out so well when you're trying to work out the absolute power level of a location?

I'd suggest trying this without automatic gain, and manually calibrating the gain.

I'd also suggest:

  • looking at the baseband filter so you don't pick up any nearby frequencies (you're watching >10MHz of spectrum).
  • downsampling in gnuradio before trying to transmit stuff.
  • ..or just outright copying what hackrf_sweep does. ๐Ÿ˜„

<key>gain_mode0</key>
<value>True</value>

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.