Block for Doppler shift correction

Hi,

I’ve recently needed to correct some satellite signals for Doppler
shift. I found that there was no easy way to do this yet - so I’ve
created a small block that takes the Doppler shift information from
Gpredict and populates a variable in GNU Radio with it any time the
doppler shift changes. It allows for easy shift correction by mixing
the signal, I’ve added an example flowgraph to do so as well.

You can find it here: GitHub - wnagele/gr-gpredict-doppler: GNU Radio Gpredict Doppler shift correction block

Let me know what you think.

Cheers,
Wolfgang

Hi Wolfgang,

You Wrote:

On 01/08/15 09:17, Wolfgang Nagele wrote:

Hi,

I’ve recently needed to correct some satellite signals for Doppler
shift. I found that there was no easy way to do this yet - so I’ve

Interesting. The way I did it was the following (using predict, rather
than gpredict):

a) Add a XMLRPC Server block to my flowgraph
b) Write a piece of python glue code which:
   i) Gets the normalised doppler info from predict via UDP 1210
   ii) Calculates the correct doppler for the s/c frequency
   iii) Sends it onto gnuradio to set a variable, which twiddles

a FIR filter by the correct amount rather than mixing via a multiply
block.

Here is a version of the whole thing used for tracking Funcube-1
aka AO-73. I use similar scripts for doppler correcting the NOAA birds
as well, and do have a version which handles multiple spacecraft on one
flowgraph

#!/usr/bin/env python

import sys
import time
import socket
import xmlrpclib

Create UDP Socket

predsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

Create XML Object

s = xmlrpclib.Server(“http://localhost:8080”);

Get Satellite object or name

s_c = str(sys.argv[1]);

doppler_msg = "GET_DOPPLER " + s_c

while True:

Get Doppler from Predict

predsock.sendto(doppler_msg , (“127.0.0.1”,1210))
doppler_str,predaddr = predsock.recvfrom(24)

Adjust for correct frequency

dopp_float = float(doppler_str)
dopp_freq = (145.935/100.000)*dopp_float
print dopp_freq , dopp_float

Send to grc

try:
s.set_dopp_freq(dopp_freq)
except socket.error:
pass

Sleep

time.sleep(1)

All the Best

Iain

Hi,

Yes - I found that example but found it a bit complicated to use.

Basically I already plan my satellite recordings using Gpredict so
attaching that to my GNU Radio flowgraph seemed like the simple next
step.

I also thought about using GitHub - nsat/pypredict: Spire port of predict open-source tracking library to have
it all in GNU Radio.

Cheers,
Wolfgang