ESA SOCIS2016 ideas for

ESA Summer of Code in Space 2016 with and the Institute of Photogrammetry (IFP, University of Stuttgart)

This is’s common ideas page for the European Space Agency’s ESA Summer of Code in Space 2016. It’s an open-source coding campaign where students work on space related software for 3 months and are getting paid 4000€. How awesome is that?!

Read everything, have fun, make space possible!


Constellation brings space to people by means of citizen science. We believe there is an open space for everybody…

„Space, is big. Really big. You just won’t believe how vastly, hugely, mind-bogglingly big it is. I mean, you may think it’s a long way down the road to the chemist’s, but that’s just peanuts to space“ – Douglas Adams


We really enjoyed mentoring creative students during ESA SOCIS 2013, 2014 and 2015. We gain a lot and we learned a lot, so we want to share this experience again and support you! We collaborated with Cosmic Dust Group of the Institute of Space Systems (IRS) at the University of Stuttgart. With them, we achieved two new apps, we even supported the European Space Agency (ESA) and their Interplanetary Meteoroid Environment for Exploration (IMEX) project, we released several papers, simulated comets worth 10000 hours of computing power and discussed our findings with an Astronaut and experts. How cool is that? And we want you to be part of this again. So we are re-applying this year and give you three chances to be part of this coding family.

– Be a SOCIS Student!
– Be a SOCIS Mentor!
– Provide a SOCIS Project!

We didn’t expect overwhelming reactions about our ideas and the great support by people also being a mentor. So we would like to expand the mentor and project scale here and please keep on applying for these important tasks.
There is space for everyone!

To give you an impression what we did last time, watch this…

Infos for Students:

We are almost there at our projects and ideas list. Please read this carefully, because you students are important for us and the project.

Being accepted as a SOCIS 2016 student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. Simply copying and pasting an idea here will not work. On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out. But we encourage you to also submit and post your own ideas. Prepared and working code works best for our well-acceptance.

As a result of our last two participations in ESA and Google summer of code campaigns, we adapted our selection process. We now have a transparent application scheme where you see for what you get points. And you get points for what we expect of you. We tried to find a good compromise between the fundamental skills we want to see, and also give newcomers and space students a fair chance. And as you can see, there is also a way to surprise us with your creativity. We like to be convinced with working prototypes and good community interaction. Overall, we BELIEVE everyone can do that and we mentors will help you help yourself.

When you will ask us afterwards, we will also take time to discuss with you how you ranked. This could help you improve for next year’s SOCIS.

Transparent Application Rating (New for 2016)


  • 5pts Communicated with us org mentors (via their emails below)?
  • 5pts Communicated with the community (via email list)?
  • 5pts Does your application contain a motivation letter? Tell us why you like us and our projects! And prove that you know who we are and what we do! 😉 (1 page is okay)
  • 5pts Do you reference projects you coded WITH links to repos or provided code?
  • 5pts Do you provide all demanded ways of contact (email, skype, mobile/phone, and twitter, chat and/or tumblr if available)
  • 3pts Do you add a preliminary project plan (before, during, after SOCIS)?
  • 3pts Do you state which project you are applying for and why you think you can do that?
  • 3pts Do you have time for SOCIS? This is a paid job! State that you have time in your motivation letter, and list other commitments!
  • 1pts Only applied via the SOCIS 2016 page (please don’t send it directly to us!)
  • 1pts Added a link to ALL your application files to a cloud hoster like github or dropbox? (easy points! 😉 )
  • 0pts Be honest! Only universal Karma points. 🙂


  • 5pts Did you do push code to the existing code? Or did a bugfix?
  • 10pts Do you have an aerospace background and did you reference it in your application?
  • 15pts Wild space. Be creative, impress us! 🙂
  • 5pts completed CV (1-2 pages optimal!)
  • 2pts If you select on of the hardware related projects, do you have (access to) it?

Please try to follow this list to get the maximum number of points! If something is not clear, ask us :).

Coding Ideas List

Okay, ready for lift-off, we are approaching our coding ideas list for SOCIS 2016.
The following is our list of current tasks we offer you. Feel free to select one or more for your application. If you cannot find one you like, we have our old ideas list attached and you can always propose your own.

Those projects we have listed here are divided in two: our’s Distributed Ground Station Network project and we serve as an umbrella org for groups at the University of Stuttgart. We had a great collaboration last time and want to foster this relationship. For instance, the Distributed Ground Station Network project is supported by te Institute of Photogrammetry (IFP).

And we have lift-off…


  • [DGSN1601] Lone Pseudoranger: Python Port and Expansion
  • [DGSN1602] LonePseudoranger: Orbit Determination with Big Data sets of position (x,y,z) data [statistics]
  • [DGSN1603] Ground Station: Spectrum monitoring and signal detection
  • [DGSN1604] Ground Station: Mutual trust in the IOT era – using local radio transmission as „a code“ for positioning
  • [DGSN1605] Ground Station: Detecting GNSS satellite spread spectrum code (GPS, Galileo,…)
  • [DGSN1606] Extracting the time source from different broadcast services (DAB+, UMTS, LTE, DVB-T, GPS…)
  • [DGSN1607] Signal Processing: Fast payload signal detection in noisy IQ-streams by SDRs
  • [DGSN1608] Signal Processing: Signal correlation of different records of the same radio transmission source a.k.a. detect everything
  • [DGSN16XX] Propose YOUR idea!
  • [XXXX16XX] Propose your very own space project!

Distributed Ground Station Network [DGSN]

The Distributed Ground Station Network is a system for tracking and communication with small satellites and other aerial vehicles. The concept includes a global network of small and cheap ground stations that track beacon signals sent by the satellite, plane or balloon. The ground stations are located at ordinary people at home, so called citizen scientists, and are connected via the internet. A broadcasted beacon signal is received by at least 5 stations and can be used then for trilateration to obtain the position of the signal’s origin. For this each ground station correlates the received signal with the precise reception time, which is globally provided and synchronized by GPS.
This shall help small satellite provider and even Google’s Loon project to be able to track their vehicles fast, globally and simple!

Further information can be found


  1. Andreas Hornig (,
  2. Daniel Howedel (,

Full Descriptions:

[DGSN1601] Lone Pseudoranger: Python Port and Expansion

During Google Summer of Code (GSOC) 2014, the Lone Pseudoranger was developed. It locates the satellite by its beacon signal via pseudo-ranging. This is done via tri-laterating the signal’s origin. You can think of this as “GPS-reverse”. You receive the one propagated signal at 5 or more ground station and via time of arrival measurements, the position is determined. We intend to use it for analysing our ground station data and get the various cubesats and satellite positions.

Expected results:

  • Porting the code to Python.
  • The LPR requires an expansion towards multi-beacon calculation, clustering-algorithm, increase of calculation speed
  • GUI for presenting the result as in this video of the c++ version
  • (optional) making it work real time by feeding in the input continiously.


Knowledge Prerequisite:

  • Coding level – medium
  • Space level – medium for navigation and statistics
  • Language – Python

[DGSN1502] LonePseudoranger: Orbit Determination with Big Data sets of position (x,y,z) data [statistics]

The output of the Lone Pseudoranger is a set of position data (x,y,z) over time for each satellite. You an see that in the above video. This can result in a huge volume of data of single positions. This needs to be analysed for determining the Kepler orbital elements. Due to statistical noise, there will be true false results that we need to filter out before determing the orbit.

You can apply methods of regression and statistics to find the best fitting solution to the orbit ellipsis. When having found a solution, we can determing the Keplerian orbit elements from that.

Expected results:

  • Find the orbit elements of each satellite within the position data.
  • This will require for several filtering methods and statistical techniques to deal with the amount of data.
  • filling the orbit data to a sqlite database

Knowledge Prerequisite:

  • Coding level – medium
  • Space level – medium for orbit mechanics and medium/high for statistics.
  • Language – to be discussed, preferred Python

[DGSN1603] Ground Station: Spectrum monitoring and signal detection

We want are building ground stations that can operate autonomously and track everything it receives. This means the station must receive a radio band (let’s say 2MHz) and find in their smaller bands of activity. For example a cubesat signal with 100 KHz signal bandwidth. As seen in the photo, most of the radio band is noise of the same level. And then there is a peak in a small frequency band of the cubesat signal. The task is to distinguish a signal from the noise floor level. And to make it a bit more complicated, there can be even more cubesat signals and thus peaks we need to detect.

  • Expected results:
    detect a small signal band of activity from the noise level of the wider radio band it is in.
  • detect several signals in the band
  • the cubesat signal freuquency is allocated on that frequency by the International Telecommunication Union. So we can correlate it the detected signal to a frequency allocation database
  • including a doppler shift compensation, because the signal frequency seems to change over time due to high relative veloity.
  • training the algorithm to find not just narrow signal bands, but also wider signal bands like the NOAA weather satellites. Here is a signal as IQ-stream for your first testing, download the NOAA satellite signal here…

Knowledge Prerequisite:

  • Coding level – medium
  • Space level – low
  • Language – Python


[DGSN1604] Ground Station: Mutual trust in the IOT era – using local radio transmission as „a code“ for positioning

We are surrounded by man-made electro-magnetic emissions like radio channels, tv-multiplexes, cellphone carriers and more. Each of those services are allocated on a specific frequency for their coverage region. This varies for land-based antenna towers with only regional coverage to space-based satellite platforms delivering services to full continents.

Because of this allocation plan, this results in a specific „fingerprint“ of active radio emissions in the local spectrum of each position. We all experienced to change to the next radio station when driving longer distances than 200km. Combining the allocations of several radio channel stations, the tv-broadcasters and further radio services, this will give a unique fingerprint for that region. And this can be used to determine the position of the receiver when correlating the fingerprint to a geo refferenced database.

We want to use this for DGSN and provide our users the possibility to „blur“ their own ground station position a bit and still allowing DGSN to have a rough estimation where it is. This is due to the fact that if the fingerprint database says, your ground station is in Stuttgart, Germany, the user’s input of Chicago, IL cannot be 100% accurate. So this gives control to the user to protect their private data to en extant that DGSN can still be functional. If the user blurrs the location of about 400m, DGSN can still track a satellite and get good results. We believe, this mutual trust can be a real asset for the „IoT Era“.

Expected results:

  • database of frequency allocation filled with known broadcasting services (radio, tv, telephone, satellite,…)
  • geo refferences of the allocation plan
  • correlation of fingerprints to find the best match of geo location
  • testing with rtl-sdr receiver sticks and iq-data (can be provided).
  • mapping and gui

Knowledge Prerequisite:

  • Coding level – low
  • Space level – low, medium for radio communication
  • Language – preferred Python

[DGSN1605] Ground Station: Detecting GNSS satellite spread spectrum code (GPS, Galileo,…)

The DGSN works with „time of arrival“ of the signals it receives. When you can correlate the received signal with a global synchronized time, you can se it for the mentioned tri-lateration (above).

So you need to find a nice signal in the radio spectrum first, and you need to find the same signal at several ground station locations. GNSS signals are great for that. The signal is encoded with a spread spectrum code using a pseudo random number sequence (PRN). When you know the PRN, you can even detect the signal below noise level. And the important part for DGSN is, that you can determine the exact start of the signal very precisely. So if you can find the signal start of a GNSS satellite like GPS at our ground stations, we can also use the time of arrival method and track GPS satellites. And the funny part is, we also use GPS for synchronizing the ground station time. So we can use GPS for two things, essential time synch and also tracking them with their own time signal.

Expected results:

  • implement a PRN code detection of GPS (c/a) for analyzing an IQ-stream provided by RTL-SDR receivers.
  • output the basic information of signal start wrt. the sample position within the stream.
  • decode the GNSS stream wrt. to the pseudo random number and if possible service data (ephimerides, almanach, time….)

Knowledge Prerequisite:

  • Coding level – medium
  • Space level – medium to high for radio communication
  • Language – preferred Python

[DGSN1606] Extracting the time source from different broadcast services (DAB+, UMTS, LTE, DVB-T, GPS…)

This task is related to the „radio transmission as a code“, because it involves using exisiting services in your ground station area. In this case, DGSN should have a method to evaluate its own system time. System time will be provided by GPS, because it is most precise and globally available. But in case our hardware and software has hickups, a cross check with another source is helpful. Adequate enough time sources (seconds level) are available in DAB+, LTE, DVB-T and more. So a calibration check shall be implemented in DGSN to decode the time date from some or all of these sources.

Expected results:

  • implement decoding of the service signals (DAB+, UMTS, LTE, DVB-T, GPS…)
  • implement a calibration check based on RTL-SDR receivers.
  • testing it with hardware. IQ-stream can be provided if needed

Knowledge Prerequisite:

  • Coding level – medium
  • Space level – low for radio communication
  • Language – preferred Python

[DGSN1607] Signal Processing: Fast payload signal detection in noisy IQ-streams by SDRs

A little bit of backstory: We are building a ground station network with a lot of stations. This will only work as a citizen science project with a lot of people. Making many people involved is only possible by cheap and simple hardware for the station. So we found a way to do that with those famous little RTL-SDR receiver dongles. We use it as the satellite signal receiver and inject the GPS reference ticks and data directly into the received streams. You can see that in the image below.

We do that injection, because we need to have the received signal correlatable to a synchronized time source. In our case it is GPS. In this way you can determine the „time of arrival“ of each satellite signal to the GPS time. And with this, you can compute the position of the signals origin if you have 5 or more stations that received this signal.

So this project is about finding the injected signal, a byte code of time, location, quality of GPS signal, and more (left side in the figure) and the received signal (in the figure case it is a dab+ music channel on the right side). Both signals can be quite noisy or it will be roughly above noise level. So this is a digital signal processing task.

Expected results:

  • find signals in a noisy iq-stream.
  • signals can be from satellites, dab+, dvb-t, analogue fm radio, metoerite scattering or else
  • find the injected byte code and decode it
  • make te code fast! We have working code, but it is not fast yet! You can use FFT or other algorithms to boost this to (near) realtime!

Knowledge Prerequisite:

  • Coding level – medium for software
  • Space level – low
  • Language – preferred Python


[DGSN1608] Signal Processing: Signal correlation of different records of the same radio transmission source a.k.a. detect and distinguish everything

The Distributed Ground Station Network uses SDR for good reasons, the possibility to process signals in infinite ways and way more flexible than hardware receivers could.
One of those tasks is the synchronization of two separately recorded IQ-streams of the same signal source. This could be an FM music radio or a digital DVB-T stream or satellite signals. Due to the fact that the receiver clocks cannot be synchronized via the remote distance, this tasks shall investigate the possibility to find the correlation of two signals (offset of relative start, position of certain needle segment in the full haystack, etc).
This will be used for signal detection and for the time of arrival measurements of the beacon signals and any other signal.

Expected Results:

  • Correlation of two and more signals with different sampling frequencies (+-100ppm) and different recording length.
  • Determine the offset and the relative position of one needle signal in the other haystack signals.
  • To experiment this, here are two recordings of the sam FM radio channel.
  • This task is related to [DGSN1607] to find the same signals

Knowledge Prerequisite:

  • Coding level – medium for signal processing
  • Space level – medium for radio communication
  • Language – preferred Python

[DGSN16XX] & [XXXX16XX] Propose YOUR idea!

This is up to you! Propose your idea what you think we need and miss. Please contact us to discuss it beforehand. Also provide your expected results. Having working code would be beneficial!

What else we offer?

  • Awesome space projects
  • long term involvement
  • scientific papers with you as co-author for international conferences
  • letter of recommendation, if you showed us your passion for space