►
From YouTube: Decoding Interplanetary Spacecraft
Description
Daniel Estévez presented this workshop on Decoding Interplanetary Spacecraft at the GNU Radio Conference in September 2020.
Additional resources and code can be found at his GitHub repository.
https://github.com/daniestevez/grcon2020-workshop/
A
Hello,
everyone
and
thank
you
for
joining
this
workshop.
So
let's
just
get
started.
As
I
said
in
the
chat
window,
please
any
questions
you
may
have
during
the
workshop
just
asking
there
I'll
be
reading
the
chat
window
always
so
there
we
go.
A
What
are
we
going
to
do
in
this
workshop?
We
have
some
iq
recordings.
These
are.
These:
are
digital
recordings
of
radio
signals
transmitted
from
real,
deep
space
probes
and
we're
going
to
use
guinea
radio
to
analyze.
These
signals
find
these
specifications.
This
is
a
simple
reverse
engineering.
I
call
it
simple,
because
the
specifications
are
well
detailed.
It's
just
we
don't
know
a
few
of
the
parameters
or
what
kind
of
codes
are
used.
A
This
will
be
clear
throughout
the
workshop
and
then,
as
we
go
analyze
these
signals,
we
will
build
a
decoder
to
decode
the
telemetry
from
this
spacecraft.
Why
could
anyone
be
interested
in
doing
this?
Well?
First
of
all,
I
think
it's
very
cool
to
go
and
actually
receive
a
real
telemetry
from
spacecraft
which
are
going
into
the
depths
of
the
solar
system.
A
Second,
it's
actually
not
so
difficult
many
times
beginners
to
get
a
radio
tell
me.
Well,
I
have
this
key
fob,
which
is
a
garage
door
opener
or
a
car
key,
or
something
like
that.
It
transmits
ask
I'm
pretty
keen.
I
want
to
decode
it,
and
this
is
not
so
easy.
Actually,
because
it's
a
bursty
transmission.
It
consists
of
short
bursts
sliced
in
ask.
A
Modulation
is
not
so
trivial,
so
here
we
have
these
deep
spacecraft
telemetry,
which
is
a
constant
signal
and
it's
actually
easier
to
decode
than
your
typical
remote
control
and
maybe
you're
also
interested
in
learning
how
deep
space
communications
work.
So,
what's
better
than
having
a
first-hand
experience,
the
focus
of
this
workshop
is
hands-on,
with
gun
radio
actually
with
gun
radio
companion,
I'm
going
to
try
and
build
the
decoder
in
real
time.
During
the
workshop,
you
already
have
with
the
workshop
material
the
steps
in
which
I'm
going
to
build
the
decoder.
A
So
if
you're
following
along
maybe
fall
behind,
don't
worry,
you
can
just
load
the
proper
step
and
skip
ahead,
and
maybe,
if
I'm
running
short
on
time,
I
will
also
cheat
and
instead
of
doing
everything
by
hand
just
load
up
some
of
the
pre
dawn
flow
graphs.
A
But
the
organizers
of
the
conference
made
a
very
good
suggestion
to
keep
a
balance
between
theory
and
practice,
so
I've
also
included
some
theoretical
background
in
the
slides.
This
means
there
is
some
math
in
the
slides.
If
you
understand
the
math,
then
that's
great.
If
you
don't,
then
that's
also
great,
it
seems
some
attendee
doesn't
have
any
audio.
Is
it
the
same
for
everyone?
A
Okay,
so
just
a
local
problem.
Thank
you.
So
if
you
don't
understand
the
math,
I'm
going
to
try
to
explain
in
simple
terms
what
it
means
and
then,
if
you
want
to
study
the
math,
you
can
always
come
back
to
the
slides
and
look
it
up
later.
A
The
spacecraft
we're
going
to
use
our
isa,
solar
orbiter
was
which
was
launched
in
february
this
year
towards
the
sun.
It
will
study
the
sun's
atmosphere
and
solar,
wind
and
also
baby
colombo,
which
is
a
joint
and
jack
summation
to
mercury
it
launched
two
years
ago,
but
on
its
way
to
mercury.
It
will.
It
did
actually,
on
april
this
year,
an
earth
flyby.
A
It
will
do
several
flybys
around
venus,
so
the
recording
is
of
the
earth
flyby
on
april
this
year
and,
as
you
can
see
in
the
diagram
here,
this
spacecraft
actually
consists
of
different
modules,
which
are
going
to
break
up
upon
arrival
to
mercury
and
orbit
and
perform
different
experiments.
A
Well,
does
it
take
one
to
receive
these
kind
of
signals?
Well,
these
signals
are
transmitted
in
expand
around
8.4
gigahertz.
The
signal
cannot
surely
be
detected
with
small
dishes.
You
may
have
in
your
garden
I'm
talking
about
maybe
a
couple
meters,
this
size
from
long
distances
from
jupiter
saturn.
A
But
if
we
want
to
demodulate
the
data,
then
the
spacecraft
needs
to
be
quite
close
to
earth.
Keep
in
mind
that
these
spacecraft
are
usually
received
with
dishes
of
34
or
70
meters,
and
the
recordings
we
have
here
are
either
taken
shortly
after
launch
in
the
case
of
solar,
orbiter
or
around
the
earth
fly
by
in
the
case
of
baby
colombo,
but
actually
more
than
this
is
possible
paul.
Who
is
the
person
in
the
uk
who
made
the
recordings
I'm
using
here
is
currently
so
as
of
today
demodulating
tienwen
one?
A
I
really
cannot
imagine
16
million
kilometers
so
to
help
put
these
numbers
into
perspective,
the
earth
to
the
moon
distance
is
around
0.8
million
kilometers
and
light
takes
10
seconds
to
travel
three
million
kilometers.
So
this
means
that
tianguang
one
is
so
far
that
the
signal
takes
almost
a
minute
to
arrive
to
paul
station.
A
This
is
paul's
antenna
on
his
garden.
It's
a
2.4
meter
antenna
and
on
the
top
of
the
structure
you
see
here
is
typical
microwave
receive
equipment.
You
have
a
microwave
feed,
an
lna,
a
down
converter,
to
get
the
signal
into
a
suitable
intermediate
frequency
running
throughout
the
coax
and
into
paul's
home,
where
he
has
an
sdr
receiver,
I'm
not
so
sure
about
the
model
he
uses.
A
The
mathematics
behind
is
to
use
the
fourier
transform
to
pass
from
time
domain
to
frequency
domain.
In
a
radio
we
can
use
the
gui
frequency
sink
to
view
the
spectrum
on
the
waterfall
sink
to
view
the
waterfall,
and
it's
also
a
very
good
tool
by
mike
walters
in
spectrum.
You
can
use
it
to
view
the
waterfall
of
the
recording
and,
if
you're,
using
the
ubuntu
vm
provided
with
the
conference
in
spectrum,
is
also
installed.
A
Yes-
and
here
I
have
a
good
radio
companion
working,
this
is
where
I'll
be
working
most
of
the
time.
I
also
have
loaded
up
the
virtual
machine
in
case.
Anyone
is
using
it
and
has
specific
questions
about
the
virtual
machine,
so
my
recommendation
is
either
you
have
downloaded
the
base
virtual
machine
and
then
downloaded
gercon
workshop
or
you
already
downloaded,
the
virtual
machine
with
which
has
jericho
workshop
and
all
the
dependencies
included.
A
A
A
What
I'm
doing
here
is
going
to
the
list
of
blocks,
I'm
pressing,
ctrl
f,
to
search
for
the
block.
Then
one
file
source,
I'm
going
to
pick
here,
the
recording
of
solar
orbiter,
and
then
this
is
an
iq
recording.
I
need
two
channels.
Of
course
you
need
to
know
the
format
of
the
iq
recording
you're
using
so
another
thing
I
need
to
use
is
the
sample
rate,
the
sample
rate-
I
don't
know
it
by
heart,
so
I'm
going
to
cheat
and
look
it
up.
A
A
So
then
we
have
two
real
channels:
the
I
channel
and
the
q
channel
in
group
radio,
you,
we
usually
work
with
complex
signals
and
the
way
to
convert
from
two
real
channels
to
one
complex
signal
is
to
use
flow
to
complex.
A
A
A
A
A
A
So
you
raised
your
hand,
I'm
I'm
sorry.
I
don't
know
where
to
see
that
just
just
type
your
question
in
and
I'm
not
sure
if
the
questions
you
type
so
this
chat
is
going
to
appear
in
the
recording
we
tested
this
yesterday
and
these
lights
are
in
the
recording
and
also
the
shared
screen.
But
I'm
not
sure
about
the
chat.
A
So,
okay,
let's
move
on
this
is
actually
some
of
the
math
involved.
So
the
thing
you
need
to
know
here
is
that
deep
space
communications
use
a
residual
carrier
phase
modulation.
This
means
that
we
move
the
face
of
a
signal
and
usually
we
work
with
iq
signals.
This
means
complex,
baseband
representation.
A
A
Then
we
have
a
subcarrier
which
might
be
a
sine
wave
or
square
wave
and
we'll
see
why
this
is
done,
and
then
we
have
the
data
modulation,
which
is
just
a
non-return
to
zero
signal,
an
nrz
signal.
This
is
just
ones
and
minus
ones,
for
the
bits
and
manchester
encoding
is
in
a
special
case
of
this
and
the
way
it
works
is
well
for
us.
So
current
frequency,
which
is
equal
to
the
symbol
rate
we
have
manchester
encoding,
we'll
see
some
pictures
about
it.
A
The
residual
carrier,
which
is
the
spike
you
saw
in
the
center
of
the
spectrum,
is
used
for
to
help
the
receiver
record
recover.
The
carrier
phase
of
the
signal
this
is
essential
for
demodulation
in
very
weak
signal
conditions
that
these
spacecraft
signals
typically
face,
as
they
are
very
very
away
very,
very
far
from
health.
A
A
A
If
we
drive
the
data
sidebands
towards
the
middle,
then
we
arrive
to
manchester
modulation.
We
will
have
this
gap
in
the
middle
for
the
residual
carrier,
but
the
data
securers
are
very
close
to
it
and
on
the
very
extreme,
where
we
don't
have
any
subcarrier,
then
we
have
baseball
modulation.
A
The
data
is
just
on
top
of
the
subcarrier
and
it
is
interfering
with
it.
So
this
is
only
used
for
high
speed
signals
where
you
don't
want
to
use
as
much
bandwidth
as
you
need
to
separate
using
the
subcarrier.
A
A
Let's
get
to
carrier
phase
recovery,
so
the
transmitter
is
transmitting
the
residual
carrier,
which
is
mathematically
represented
by
a
number
one,
and
then
the
data,
which
is
what
we
are
mainly
interested
in,
but
in
the
receiver
we
receive
not
this
original
signal,
but
a
signal
which
has
a
different
frequency
and
phase
to
what
was
being
transmitted.
This
is
mainly
because
of
two
reasons.
First
reason:
the
transmitter
and
received
local
oscillators
are
not
synchronized
in
phase
and
second
because
in
changes
of
the
propagation
path,
so
in
particular
the
spacecraft
is
moving.
A
What
we
use
is
a
pll
which
is
a
device
that
can
detect
and
track
the
frequency
of
the
on
the
face
of
the
residual
carrier
and
then
correct
for
it
and
cancel
this
extra
term,
which
we
don't
want.
This
is
used.
This
is
done
with
the
pll
carrier
tracking
gun
radio
block
many
of
the
blocks
which
do
a
control
loop
inside
guinea,
radio
assume
an
amplitude
of
one.
A
A
I
put
it
just
in
the
middle
of
the
signal,
and
this
is
going
to
automatically
adjust
the
amplitude
of
my
signal.
Whatever
it
is,
the
reference
one
is
the
amplitude
I
want
to
achieve.
So
that's,
okay
and
the
alpha
controls.
How
fast
the
block
responds
for
this
signal,
which
doesn't
have
a
large
changes
in
amplitude.
A
A
A
If
you
put
a
very
low
bandwidth,
then
the
output
of
the
pll
is
not
very
noisy,
so
this
is
good,
but
it
might
lose
lock
if
the
signal
moves
around
a
lot.
On
the
contrary,
if
we
put
a
large
pll
bandwidth,
then
it's
easier
to
track
the
signal
variations,
but
you'll
get
a
much
more
noisy
output.
In
this
case,
100
hertz
is
okay,
and
then
we
also
have
a
variable
which
I
can
use
to
set
the
pll
limit.
This
is
the
frequency
limit.
A
It
will
try
to
lock
on
so
10
kilohertz
is
okay
and
something
important
about
many
of
these
blocks
is
the
units
in
the
documentation.
You
probably
can
see.
The
units
are
not
hertz
rather
radians,
for
example,
so
to
convert
from
hertz
to
radians
per
sample.
We
can
multiply
by
2,
pi
and
divide
over
the
sample
rate,
and
here
I'm
using
pi.
Where
can
I
get
pi
from?
A
So
from
math
I
can
import
pi
and
this
will
bring
me
the
value
of
pi
and
then
what
happens
not
sure,
I'm
going
to
set
my
maximum
frequency
limit
and
my
minimum
frequency
limit
so
ma,
plus
10
kilohertz
and
minus
10
kilohertz,
and
I
did
something
wrong
with
the
import
I'm
using
a
t.
So
now
I
have
these
numbers
in
radians
per
hertz.
I
radiance,
for
example.
Sorry
I
don't
care
too
much
about
them.
A
Let's
play
and
run
this,
so
I
can
see
the
output
and
the
input
of
the
pll
are
very
similar.
The
input
is
in
blue,
the
output
is
in
red
and
the
main
difference
is
well.
The
carrier
of
the
original
signal
was
three
kilohertz
away
from
the
center,
because
tuning
was
not
perfect
and
the
pll
is
managing
to
move
this
to
zero
hertz.
So
this
is
what
we
mean
by
appeal:
locking
onto
the
signal
and
performing
carrier
recovery.
A
I'm
going
to
put
another
gui
frequency
sink
and
then
separate
this
complex
signal
into
real
part
and
imaginary
part,
and
this
can
be
done
by
the
block
complex
to
float.
A
A
Also,
probably
mike
is
saying,
a
throttle
block
would
be
appropriate,
maybe
also
not
sure,
my
camera,
I
think
it's
putting
too
much
load
onto
the
computer,
so
the
phase
modulation
works
by
going
up
and
down
through
the
unit
circle
a
bit
one
is
transmitted
by
going
here
and
a
bit
minus
one
or
zero
is
transmitted
by
going
there,
and
if
we
move
along
this
black
line,
this
is
not
so
different
from
moving
up
and
down
like
this.
So
this
is
the
real,
the
actual
phase
modulation.
A
This
is
just
an
approximation
which
looks
like
quadrature
modulation.
Here
we
have
a
constant
which
is
a
suppressed
carrier
and
only
appears
in
the
real
part,
and
we
also
have
an
imaginary
part
which
goes
up
and
down
with
the
data.
So
this
is
a
very
nice
way
to
check
that
your
pll
log
is
working.
You
should
get
the
suppressed
carrier
on
the
real
part
and
the
data
on
the
imaginary
part.
This
approximation
actually
comes
from
this
formula,
which
is
taylor's
theorem.
A
Now
the
idea
is,
we
have
two
sidebands
in
the
data
we
are
going
to
select
one
of
the
sidebands
and
this
is
done
with
a
hilbert
filter
which
what
it
does
is
to
filter
the
positive
frequencies.
So
we
are
going
to
remove
the
left
sideband
and
only
use
the
right
sideband,
we'll
use
the
hilbert
filter
to
remove
the
sorry
to
leave
the
right
sideband
in
place,
and
then
we
are
going
to
move
it
to
baseband,
which
means
move
the
right
sideband
to
the
center
you'll
see
what
this
looks
like
in
radio.
A
A
A
This
will
give
us
the
phase.
Modulation
so
remember.
We
said
this
modulation
works
by
shifting
the
face
of
the
signal
with
complex
to
arc.
We
can
access
the
face
by
suggestion
of
mic.
I
think
I'm
going
to
put
a
throttle
block.
A
What
this
does
is
to
load
down
the
flow
graph
so
that
it
doesn't
choke
all
my
cpu,
then
the
next
theme
I'm
going
to
do
is
to
show
the
spectrum
of
this
actually
so
frequency.
A
A
And
then
we
need
a
complex
exponential
that
is
called
signal
source
inside
going
to
radio.
So
in
signal
source
you
can
generate
all
the
kinds
of
signals
you
want
triangle,
sawtooth
etc,
but
also
cosine,
which
means
a
complex
exponential,
and
here
I'm
going
to
put
minus
five.
Can
minus
500
kilohertz?
Why?
If
we
saw
in
the
frequency
plot,
the
center
of
the
sideband
is
more
or
less
around
500
or
actually
550,
I'm
going
to
cheat
a
little
bit
since
I
know
the
answer:
550
kilohertz,
that's
more
or
less
the
center
of
the
sideband.
A
What
I
find
is
what
was
before
on
the
right
hand,
side
of
the
spectrum
now
has
moved
to
the
center.
What
was
before
at
550
kilohertz,
now
it's
at
zero
hertz.
Why
are
we
doing
this?
Well?
The
main
reason
is
this
signal
we
have
now
here
looks
like
a
bpsk
signal
and
we
can
process
it
like
so.
A
So,
let's
close,
this
go
back
again
to
the
slides
and
now
I'm
going
to
show
a
couple
of
simple
reverse
engineering
techniques
and
probably
I'll
preload
the
pre-dawn
flow
graphs
not
to
spend
so
much
time
on
these
details.
So
the
first
question
we
may
have
is
well.
The
frequency
of
550
kilohertz
I
use
was
just
an
eyeball
estimated.
A
Can
we
check
the
real
carrier,
frequency
of
this
bpsk
signal?
And
yes,
there
is
a
very
nifty
little
trick,
which
goes
as
follows.
We
have
our
bpsk
signal
y
of
t
and
mathematically.
It
looks
like
this,
so
it's
like
a
hump
in
the
noise
of
the
spectrum
as
you
as
you
have
seen,
it
doesn't
have
any
theaters.
We
can
recognize,
but
we
take
the
square
when
we
take
the
square.
We
get
this
exponential,
which
look
like
a
carrier.
A
This
is
a
peak
in
the
spectrum
we
can
see
and
we
can
measure
the
frequency
and
the
frequency
will
be
2f.
Where
f
was
the
original
frequency
of
the
bpsk
signal
and
the
rest
of
this?
I
don't
care
too
much
about
it.
It
just
looks
like
noise.
There
is
nothing
very
specific
about
bpsk
in
this
trick.
The
same
would
work
for
mpsk,
so
this
is
when
you
have
multiple
phase
shift
gain
by
computing.
The
nth
power
instead
of
the
power
2.
A
A
It's
not
too
good
to
rush
things,
and
then
here
I
have
the
flow
graph,
so
this
is
more
or
less
as
we
left
it,
and
what
I'm
doing
here
is
to
multiply
the
signal
by
itself.
So
I
used
a
multiply
block
to
square
the
signal
and
for
the
time
being,
let's
disable
this
and
run.
A
This
is
because
this
is
a
solution,
so
I
have
already
the
correct
frequency
here.
If
I
put
550
as
before-
and
here
I'm
doing
multiply
conjugate,
which
is
the
same
as
putting
a
minus
in
the
frequency
you'll
see.
This
has
a
frequency
error.
So,
instead
of
getting
this
carrier
at
zero
hertz,
we
get
it
at
11
kilohertz.
A
There's
a
question
about
how
do
I
get
rid
of
spinning
arrows
to
see
the
radio
design
it
should
pop
up
as
the
shirt
screen
should
pop
up
for
you
it
at
least
it's
it's
popping
up
for
me?
Maybe
it's
slow
to
to
pop
up
for
you
and
that's
another
question
of
how
to
pick
the
number
of
taps
for
the
hilbert
filter.
Usually
the
default
of
65
taps
works
good.
A
So
sharper
edges
on
your
filter.
So
in
this
way
you
can
see
the
frequency
error
you
can.
You
are
doing
here
and
actually
replace
by
the
correct
number,
which
is
five:
five:
five,
five,
five,
five
hertz
the
thing
I
have
in
the
bottom.
I
don't
want
to
take
much
time
to
explain.
It
is
well
in
this
gui
frequency
sync.
I
don't
have
too
much
frequency
resolution
to
see
small
frequency
variations,
maybe
I'm
mistuned
by
just
10
hertz
or
something
like
that.
So
how
can
I
know?
A
This
will
increase
your
frequency
resolution
in
100
times
and
here
instead
of
seeing
two
megahertz
of
spectrum
you'll
be
able
to
see
only
the
20
central
kilohertz,
so
you'll
be
able
to
see
much
better
frequency
resolution.
A
A
Let's
come
back
and
discuss
about
how
how
to
find
the
symbol
rate,
the
symbol
rate
is
the
speed
at
which
these
are
plus
ones,
and
minus
ones
are
sent
and
there's
a
very
little
trick
to
find
this
symbol
rate
here
is
the
math,
but
you
need
not
to
look
at
it
much.
A
The
key
is
y
of
n
is
our
original
signal.
We
are
going
to
take
y
of
n
delay
at
one
sample
and
then
do
the
complex,
conjugate
and
multiply.
A
There
is
a
very
good
question
about
if
it
is
possible
to
attract
the
frequency
adaptively
on
runtime.
So,
yes,
this
is
possible.
This
is
done
either
by
by
nfl
there's
a
bandpass
fll
in
gun
radio,
and
it
is
also
possible
by
doing
a
costas
loop
which
we'll
get
to
in
a
few
slides
and
also
schneider,
is
suggesting
it
is
sensitive
to
the
sample
rate
of
the
sdr.
A
Yes,
it
depends
a
little
bit
on
the
sample
rate
of
the
esdr,
but
it
doesn't
matter
a
lot.
In
fact,
the
choice
of
one
here
is
arbitrary.
You
could
do
a
different
delay
and
it
would
still
work.
The
idea
here
is
that
often
y
of
n
and
y
of
n
minus
one
lie
on
the
same
symbol.
So
when
you
multiply,
then
here
you
get
a
real
and
positive
number,
but
when
y
of
n
and
y
of
n
minus
one
lie
on
different
symbols
say
this
is
a
plus
one.
A
This
is
the
symbol
before
which
was
a
minus
1.
Then
we
have
plus
1
times
-1,
which
is
it
will
give
you
a
minus
sign
so
well.
This
signal,
zn
looks,
look,
looks
like
it's
a
sequence
of
pulses
which
occur
on
some
of
the
symbol
transitions
I
bel,
and
by
looking
at
the
spectrum
of
zn,
we
can
see
where
this
characteristic
frequency
about
the
symbol
rate
happens,
and
this
very
simple
trick
comes
from
cyclostationary
analysis,
which
is
a
very
powerful
theory
and
tool.
We
can
use
to
explore
many
different
aspects
of.
A
A
A
A
Okay,
there
we
go
again,
sorry,
I'm
using
kind
of
a
slightly
complex
setup
to
share
the
screen.
So
I
closed
it
in
accidentally.
A
So,
yes,
the
analysis
for
the
symbol
rate
shows
that
the
symbol
rate
is
five:
five,
five,
five,
five
five.
This
is
the
same
as
the
frequency
we
had
here,
and
this
is
not
surprising.
It
is
because
in
manchester
modulation,
the
subcarrier
frequency
and
the
symbol
rate
are
the
same.
A
As
I
already
explained
in
one
of
the
previous
slides,
and
here
I
have
the
same
trick
as
before,
to
get
more
resolution
on
the
frequency
measurement,
but
since
now
the
frequency
of
interest,
it's
not
a
center
at
zero
hertz,
but
rather
at
five
five,
five
point:
five:
five:
five
kilohertz:
we
do
a
frequency
translating
fire
filter
which
is
like
the
low
pass
filter,
but
first
it
moves
a
particular
frequency
in
this
case
this
one
to
baseband,
and
then
it
decimates
all
right.
A
Now
the
signal
we
have,
if
we
look
at
it
in
the
time
domain,
looks
like
this
picture.
It
has
a
plus
ones
for
the
one
bits
it
has
minus
ones
for
the
minus
one
bits,
but
it's
really
noisy.
So
we
want
to
do
two
things.
First,
we
need
a
matched
filter
to
remove
this
noise
and
then
we
need
to
find
the
optimal
sampling
locations
for
the
symbol.
A
These
are
shown
here
in
red.
This
is
where
to
read.
This
is
one
one:
zero,
zero
row
of
ones,
couple
of
zeros,
one
zero
et
cetera
the
way
to
do
this
in
green
radio,
the
match
filtering
cc.
We
can
use
an
far
filter
for
this,
and
since
here
the
pulse
shape
is
just
a
square
wave.
The
matched
filter
will
be
a
square
wave,
which
means
a
moving
average
for
the
optimal
sampling
locations.
A
A
What
we're
going
to
do
to
correct
for
that
frequency
error
is
to
use
a
costas
loop,
so
the
costas
loop
is
similar
to
the
pll,
but
the
difference
is
a
pll
will
work
on
a
carrier
on
a
signal
which
has
a
spike
on
the
spectrum
and
a
costa's
loop
is
designed
to
work
with
psk
modulations,
which
has
a
data
changing
plus
one
minus
one,
and
there
is
a
small
particularity
about
the
costas
loop,
which
is
there
is
a
180
degrees
phase
ambiguity.
A
A
A
So,
let's
maybe
disable
that
throw
this
away.
A
Divided
sorry,
the
sample
rate
divided
by
portrait.
I
see
a
good
question
in
there.
Does
the
cost
of
loop
replace
the
signal
squaring
block
kind
of
yes?
Actually,
the
costas
loop
inside
does
some
kind
of
squaring
of
the
signal,
so
the
two
techniques
are
very
much
related.
A
So,
let's
go
and
put
decimating
fir,
filter.
A
And
then
here
I
want
to
have
just
once
as
many
ones
as
samples
per
symbol.
Okay,
the
samples
per
symbol
is
3.6.
I
cannot
have
a
vector
with
3.6
ones.
A
A
A
So
simple
sync
has
large
number
of
parameters.
I
said
this
requires
the
full
talk
to
explain
here.
I'm
going
to
use
the
gartner
time
error
detection,
we
already
have
our
samples
per
symbol
variable
the
loop
bandwidth
is
the
same
as
a
pll
bandwidth.
It
sets
the
speed
of
response
of
the
system
here.
The
signal
is
very
stable,
so
I
can
use
a
really
small
outlook.
Bandwidth
and
here
maximum
deviation
also
sets
how
much
deviation
from
the
nominal
samples
per
symbol
is
going
to
try
this
block
to
achieve
so,
let's
go
and
put
a
constellation
sync.
A
A
So
costa's
loop
will
correct
for
that
rotation.
In
phase
again
we
have
bandwidth
everything
which
has
bandwidth
on
it
has
a
loop
bandwidth
which
needs
to
be
tuned
to
the
specifics.
I
see
a
couple
questions
one
is:
is
the
fir
filter
a
decimated
moving
average?
It's
actually
not
decimated.
A
A
A
I
can
see
my
constellation
is
this
blob
of
tho
of
dots,
which
is
a
symbol
minus
one,
this
blob
of
dots,
which
is
the
symbol
plus
one
and
one
thing
to
notice.
The
symbols
are
not
really
centered
at
one.
They
are
centered
at
1.16
or
something.
A
A
So,
by
putting
their
1.6,
we
have
nice
symbols
centered
at
plus
one
and
minus
one.
A
All
right,
another
thing
which
is
good
to
use
this,
I'm
going
to
probably
fetch
it
from
here-
is
the
cutie
gui
time.
Sync,
the
cutie
gui
time
sync,
which
we
will
be
using.
A
Let's
just
see
the
symbols
like,
so
let
me
insert
the
throttle
block.
A
A
A
Okay,
so
now
we
have
the
symbols,
the
symbols
look,
just
as
you
saw
as
a
continuous
stream
of
plus
ones
minus
ones.
What
do
we
do
with
them?
Well,
there
are
a
number
of
standard
protocols
which
are
used
in
deep
space
communications
and
also
many
other
kinds
of
space
communications
which
are
called
ccsds
protocols.
They
are
standardized
by
a
committee
and
they
are
described
in
the
blue
books.
So
if
you
search
online
for
ccsds
bluebooks,
you
will
see
there
are
a
number
of
documents
describing
the
standards.
A
One
of
the
most
important
for
this
talk
is
the
dm
synchronization
and
channel
code
in
bluebook.
This
describes
a
number
of
things.
We
are
interested
in
the
error
correction,
so
these
are
algorithms
used
to
encode
the
message
so
that
the
receiver
can
detect
and
correct
bit
errors
the
scrambling.
This
is
used
to
make
the
message.
The
transmitted
message
look
random,
but
this
isn't
used
for
encryption
or
obscurity
or
anything
like
that.
It
is
done
for
performance.
A
There's.
A
very
nice
quote
I
like
from
phil
karn,
which
is
that
any
advanced
enough
form
of
communication
is
indistinguishable
from
noise,
and
this
is
quite
true.
The
more
your
modulation
and
data
looks
like
random
noise,
the
better
many
signal,
processing,
algorithms
and
techniques.
I
work,
so
this
scrambling
is
dome
to
make
the
message
look
random.
A
So
let's
say
we
have
a
32-bit
sync
word.
That
means
that,
before
every
message
we
use
the
same
32-bit
fixed
string
of
bits,
so
this
is
used
by
the
receiver
to
detect
where
the
frames
begin,
rather
than
be
looking
at
a
continuous
stream
of
of
neverending
data.
A
There
are
a
different
number
of
error:
correction
algorithms
used
in
the
ccs
blue
books,
and
these
are
the
following.
There
are
convolutional
codes
which
are
better
known
by
the
decoder,
which
is
called
viterbi
decoder,
and
there
you
have
a
couple
of
viterbi
decoders
inside
gun
radio.
There
are
rich
solomon
error,
correction,
algorithms.
Also,
you
have
a
rich
solomon
decoder
in
gun,
radio
and
also
another
one
in
geo
satellites.
A
A
There
are
turbo
codes
and
ldpc
codes,
and
these
are
state-of-the-art
error
correction
codes,
which
are
able
to
perform
very
well
with
serious
with
respect
to
the
data
transmission
theory
of
channel
the
channel
limits
and
things
like
that
so
ca.
How
can
we
guess?
What
is
the
forward
error
correction
method
used
by
our
solar
orbiter
signal?
We
are
working
with
here.
A
So,
in
a
large
number
of
error-
correction
techniques-
we
have
this
32-bit
sync
word,
but
for
some
of
the
ldbcs
and
actually
for
some
of
the
turbo
codes,
we
have
different
sync
words
by
trying
to
search
for
each
of
these
in
our
data
and
getting
a
match.
For
example,
in
our
case,
we'll
be
able
to
find
this
sync
word
we
can
identify,
which
is
the
correct
error.
Correction
code
to
use.
A
The
only
thing
to
take
note
is
that,
with
convolutional
codes,
this
sync
word
is
not
sent
in
the
clear
it's
actually
sent
encoded
if
you
know
anything
about
convolutional
codes.
This
is
like
a
continuous
encoder,
where
you
put
all
your
information,
including
the
sync
word,
so
the
receiver
has
to
do
continuous
decoding
a
continuous
vter
bit
decoding,
and
then
it
can
look
for
the
sync
word
in
the
output
of
the
viterbi
decoder
for
the
rest
of
the
error
correction
schemes.
A
It's
the
other
way
around
the
receiver,
first
searches
for
the
sync
word
in
the
data,
and
then
it
can
know
where
the
frames
start
and
then
it
can
push
those
frames
to
the
error
correction
decoder.
A
So
we
are
going
to
use
correlation
to
find
this
encore
actually
and
the
way
we
correlate
is
again
using
the
decimating
fire
filter
block.
A
This
slide
sorry
the
flow
graph
which
I'm
going
to
open
because,
as
you'll
see
to
save
me
from
typing
here
I
have
some
variables
with
the
data
already
loaded.
This
is
a
sync
word
in
hexadecimal,
just
copy
it
straight
away
from
the
blue
book
document.
A
This
is
the
sync
word
as
a
sequence
of
bits,
so
minus
ones
and
plus
ones.
We
could
go
and
compute
this
by
hand,
but
here
I
have
preferred
to
use
a
rather
convoluted
numpy
thing
to
get
the
string
in
hex
decoded,
then
unpack
the
bits
and
grab
and
transform
those
as
minus
ones
and
plus
ones
for
further
reference.
A
You
have
these
with
the
workshop
material,
so
this
is
just
the
thing
where
we're
looking
for
minus
ones
and
plus
ones,
and
then
we'll
also
need
the
same
thing,
but
as
a
string
of
zeros
and
ones,
because
there
is
a
block
from
guinea.
Radio
which
expects
this
kind
of
format
for
the
same
quad.
A
A
So
we
just
get
the
bpsk
modulation
by
passing
to
the
real
part
for
qpsk
modulation.
We
would
get
the
real
part
we
could.
We
would
get
the
imaginary
part
and
we
would
have
some
of
the
bits
in
the
real
part.
Some
of
the
bits
in
the
imaginary
part.
I
see
a
question
here
is:
can
samples
per
symbol
being
a
known
integer
such
such
as
in
here
3.6,
be
an
issue?
A
That's
a
really
good
question.
So
this
is
an
issue
here,
I'm
not
doing
the
correct,
matched
filter,
I'm
doing
an
approximation,
I'm
only
using
three
symbols
to
average
sorry,
three
samples
to
average
instead
of
3.6,
so
a
fractional
resampling
could
be
used
to
arrive
to
a
samples
per
symbol
which
is
integer
or
close
to
integer,
and
then
this
filter
would
be
better,
but
it
is
good
enough
for
us
and
then,
when
working
with
the
symbolsync
block.
No,
you
don't
need
any
sort
of
integer
number
here.
A
It
can
work
correctly
with
any
samples
per
symbol.
You
you
can
think
of
and
eminem,
which
is
the
mueller
mullet
block,
is
a
very
popular
block
and
you
shouldn't
use
it
actually,
because
all
the
functionality
about
mueller
muller
is
contained
in
here,
and
this
block
fixes
a
few
bags
of
the
old
miller
miller
book,
but
it
doesn't
need
a
an
integer
samples
per
symbol
either.
A
Then
we
have
the
symbols
here
we
are
correlating
and
correlating
is
the
same
as
doing
a
matched
filter
against
the
sync
word.
But
we
have
this
funny.
Looking
dot,
sorry
column,
column,
minus
one
in
python.
This
means
a
revert,
the
order
of
the
sequence
so
just
turn
it
around.
The
first
element
becomes
the
last
one
etc.
A
This
is
done
because
to
correlate
with
an
fire
filter,
you
need
to
reverse
your
thing.
You're
trying
to
correlate
with
the
mathematical
reason
is
an
affair.
Filter
performs
convolution,
we
are
wanting
to
do
correlation
correlation
and
convolution
are
quite
related,
but
there's
a
reversal
in
the
middle.
So
don't
forget
to
reverse
your
sync
word
here:
I'm
also
dividing
by
the
singular
size
to
keep
things
normalized.
A
So
here
synchro
size
is
64.,
and
this
is
so
that
the
I'm
throwing
plus
ones
and
minus
once
the
sum
of
the
absolute
values
of
all
of
these
is
going
to
be
one.
So
the
maximum
value
I'm
going
to
have
at
the
output
is
plus
one.
So
that's
the
reason
of
the
normalization
to
have
plus
one
or
minus
one,
because
we
have
this
plus
or
minus
ambiguity
of
the
costas
loop,
and
here
we
have
the
gui
time.
A
Sync,
the
only
notable
thing
is
I'm
using
100
000
symbols
just
because
the
packets
are
very
long.
So
in
this
way
we
are
able
to
see
several
frames
inside
the
window.
A
So,
let's
run
and
let's
stop-
I
actually
have
a
trigger.
So
I
went
to
more
involved
things
in
the
supplied
flow
graph
and
put
a
trigger
to
trigger
on
this
sync
word,
but
it's
not
necessary.
We
have
the
sync
word
displayed
here
here.
It
is
in
red,
I'm
trying
to
zoom
on
it.
A
A
And
let's
see
what
we
have
ahead?
Okay
now
we
know
where
the
friends
start,
but
there
is
another
important
thing
about.
We
also
know
that
these
are
turbo
codes,
because
the
sync
word
we
were
able
to
find
is
only
used
for
turbo
codes
of
a
particular
rate,
which
is
rate
one
half,
and
that's
very
nice,
but
there
are
a
number
of
different
sizes
for
these
are
turbo
codes
and
this
table
six
two
is
again
taken
from
the
blue
book
straight
away
with
the
sizes
of
the
different
frame
sizes.
A
There
is
more
detail
in
the
blue
book,
but
the
thing
this
works
is
this:
is
the
number
of
symbols
transmitted?
So
this
is
symbols
which
include
overhead
due
to
error
correction.
A
The
way
that
error
correction
works
is
to
send
redundant
symbols,
so
we
are
always
sending
many
more
symbols
than
the
size
of
the
original
message.
In
fact,
rather
one-half
means
roughly
we
send
twice
as
many
symbols
as
the
size
of
your
of
our
original
message.
So
this
is
the
number
of
symbols
we
are
expecting
to
receive
in
here.
We,
you
can
see
it's
almost
half
of
what
we
have
here.
A
This
is
the
size
of
the
original
message.
So,
okay,
we
are
dealing
with
symbols
yet
so
we
are
trying
to
find
one
of
its
lengths
and
we
take
advantage
here
of
the
fact
that
frames
are
transmitted
back
to
back
the
way
it's
done.
Is
we
have
the
sync
word
for
one
frame?
Then
we
have
the
contents
of
the
frame
going
to
spoil
a
little
bit
and
tell
you
that
this
is
the
correct
size.
So
then
one
we
have
one.
A
Seventeen
thousand
symbols
following
the
sync
word,
and
then
the
next
frame
begins
with
the
next
sync
word.
So
the
idea
is
to
find
the
distance
between
sync
words,
to
be
able
to
find
that
this
is
actually
17
000
and
not
14,
000
or
3500,
and
then
from
this
to
be
able
to
guess
the
frame
size.
A
For
this
we
are
going
to
use
two
I'm
going
to
radio
blocks.
The
first
one
is
called
a
correct
access
code
tag.
This
is
done
to
so.
What
this
block
does
is
to
find
the
sync
word:
it
can
allow
a
certain
number
of
bits
to
be
wrong
in
the
sync
word,
but
other
than
these
bit
errors.
It
will
look
that
the
sequence
looks
exactly
like
the
sync
we're
searching
and
whenever
it
sees
a
sync
word,
it
will
detect
the
sync
word
and
add
a
tag.
A
Tags
are
objects
used
inside
google
radio
to
add
a
metadata
to
a
running
string
of
symbols
such
that
we
can
mark
any
number
of
things
where
words
begin.
What
is
the
current
time?
What
is
the
frequency
we're
tuned
to
and
many
other
things
we
want
to
attach
information
to
a
particular
sample.
We
do
that
with
the
tag.
A
A
The
distance
in
the
locations
of
the
tags
as
printed
out
by
tag
debug,
will
be
the
distance
in
symbols
between
the
sync
words.
A
A
This
is
useful
when
dealing
with
noisy
signals
never
impose
that.
Your
sync
word
is
100.
Correct,
leave
a
chance
for
a
few
bit
errors,
don't
put
too
many
bit
errors
here,
because
then
you
will
do
false.
Detections
you'll
trigger
on
things
which
are
not
the
correct
sync
word,
but
do
leave
a
small
amount
for
error,
and
then
we
need
a
name
for
the
tag
that
is
going
to
be
inserted
by
correlate
access
tag,
and
this
is
going
to
be
called
sync
word.
A
As
I
said,
we
are
not
sure
if
we
are
looking
at
our
original
stream
or
of
data
or
at
the
stream
of
data
multiplied
by
one,
because
the
particularities
of
the
cost
of
loop,
so
we
run
to
decoding
chains
in
parallel.
One
of
them
will
succeed
and
the
other
one
will
fail
in
the
first
one.
We
consider
the
stream
of
data
is
okay
in
the
second
one.
We
consider
this
stream
of
data
needs
to
be
inverted,
and
this
we
do
by
multiplying
by
minus
one
with
this
multiply
const
block.
A
Actually,
the
way
this
flow
graph
has
locked
on
the
costa's
loop
we
already
saw
on
the
previous
flow
graph
is
through
the
-1
branch.
We
saw
that
correlations
were
negative,
but
this
could
change
any
time
if
you
run
with
another
recording,
if
you
run
with
different
parameters,
so
always
treat
both
cases
in
parallel
and
then
tag.
The
back
doesn't
have
anything
fancy.
I've
set
it
to
two
inputs,
because
I
have
well
two
streams
of
data.
A
I'm
filtering
it
to
only
log
on
tags,
which
are
called
sync
word,
and
this
is
going
to
display
some
data
about
the
sync
work,
all
right,
so
small
notes
about
this
by
default
when
running
these
flow
graphs,
generator
companion,
will
print
information
here.
This
is
not
very
efficient.
This
tag
debug
is
going
to
generate
a
lot
of
messages
to
print
here,
so
it's
better
to
run
it
on
the
terminal
like
here.
A
As
you
may
know,
when
you
hit
this
generate
button
on
gun
radio
companion,
it
will
generate
a
python
script
for
you
that
then
you
can
run
from
anywhere.
So
this
is
what
I'm
doing
here,
but
this
is
number
eight.
What
I
need?
A
Yes,
sorry,
I
need
number
eight,
so
let's
run
number
eight
and
stop
it
really
quick
and,
as
you
can
see
there
are
these
sync
word
details
printed
by
the
tag,
debug
message.
It
says
the
name
of
the
tag
is
sync
word
some
other
data
here
we
are
interested
in
the
offset,
but
before
is
it
possible
to
have
false
positive
in
the
synchro
detection?
This
is
a
question.
Yes,
it
is.
A
If
you
I
use
a
larger
threshold,
you'll
definitely
get
a
false
positives,
so
do
adjust
your
threshold
to
get
a
reasonable
amount
of
false
positives,
especially
if
sync
words
are
very
very
short,
then
it's
quite
likely
to
get
false
positives
with
a
16
bit
singular.
For
example,
even
if
you
don't
allow
any
bit
error,
you
will
still
get
false
positives.
A
So,
yes,
this
is
not
foolproof.
You
can
come
up
with
better
schemes
which
are
lock
only
once
and
then
expect
that
the
name
that's
the
next
frame
will
start
at
the
appropriate
location
after
the
second
frame
or
where
you
need
to
detect
several
thing
words
in
a
row,
but
none
of
these
is
100
foolproof,
okay,
so
coming
back
to
these
offsets,
what
we
want
to
do
is
subtract
these
two,
and
I
can
do
this
in
python.
A
And
this
will
tell
me
the
distance
between
the
beginnings
of
two
consecutive
sync
words.
This
is
7912.
This
is
pretty
close
to
the
number
we
had
on
the
table
taken
from
the
blue
book,
but
not
exactly
the
same.
Why
not?
The
numbers
on
the
table
from
the
blue
book
measure
only
the
symbols
inside
the
frame?
They
don't
measure
the
length
of
the
sync
word
so
here
we
need
to
subtract
the
length
of
the
sync
word,
which
is
64
bits,
and
then
we
get
7848
symbols
per
frame.
This
matches
the
table
on
the
ccsds
bluebook.
A
So
now
we
are
completely
sure
that
the
forward
error
correction
is
a
turbo
code
with
the
largest
possible
frame
size.
A
Now
we
want
to
do
tableau
decoding
so
how
our
turbo
codes
work
is
quite
interesting,
but
of
course,
there's
not
any
time
to
go
into
the
details
here.
I'll
just
mention
that
here
we
are
using
a
an
implementation
done
by
john
luka
marcon
for
a
university
course
project
in
2017.
A
A
Quite
nice
to
publish
his
implementation
as
open
source
code,
so
in
fact
this
was
used
later
wayne
chan
from
having
institute
of
technology
in
china
took
lucas
implementation
and
I
incorporated
it
in
some
kind
of
radio
blocks
inside
this
larger
gr
dslwp
out
of
three
module.
This
was
used
during
the
long-term
to
a
chinese
lunar
micro
satellite
mission,
which
ended
on
august
last
year.
A
This
was
a
chinese
micro
satellite
using
turbo
codes
and
amateur
radio
bands
and
gun
radio
on
the
decoder,
and
we
used
the
drinkalo
telescope
in
the
netherlands
to
receive
and
decode
the
telemetry.
So
all
of
the
ground
station
was
done
in
guru,
radio
and
there's
actually
a
paper
published
about
it.
So
you
can
look
about
that.
If
you're
interested
this
auto
stream
module
was
done
originally
for
radio
3.7.
A
Here
I
have
ported
the
auto
stream
module
to
3.8,
just
because
I
wanted
to
use
our
turbo
decoding
for
this
token,
for
all
the
projects
keep
in
mind
that
I'm
pretty
sure
not
all
the
full
gear
dslwp
is
working
on
my
3.8
port.
I
need
to
go
back
at
it
and
fix
a
few
things,
but
the
turbo
decoding
we
are
going
to
use
here
is
is
working.
A
We
are
going
to
use
three
different
blocks
from
grdslwp
and
these
are
the
following.
First,
we
have
frame
splitter
f.
This
is
very
simple:
it
will
find
the
tags
we
are
already
generating
marking
the
beginning
of
the
frames
and
it
will
extract
each
frame
and
put
it
in
a
pdu.
A
A
Grab
the
turbo
decoding
flow
graph
and,
as
you
can
see
where
we
assume,
where
we
left
with
finding
sync
words
with
correlate
access
code
tag,
and
here
we
have
the
frame-
splitter
f
block
f.
A
A
So
this
will
just
wait
for
a
sync
word:
take
the
17848
bits
following
or
rather
symbols
following
the
sync
word
and
I'll
put
those
as
a
pdu.
We
have
two
because
we
have
two
different
decoding
branches,
but
then,
since
we're
working
with
pdus,
we
can
mix
everything
in
a
single
branch.
A
And
here
let
me
see
if
I
can
scroll.
Yes,
we
have
the
turbot
code.
A
few
parameters
are
important.
The
base
is
always
two
to
three
unless
you
are
doing
something
really.
Non-Standard
octet
sets
this
the
size
of
the
of
the
frame.
A
This
is
related
to
the
1
000
17
000
bits
we
are
selecting
and
the
correspondence
is
detailed
in
the
ccsds
bluebook,
the
curate
one
half
is
also
important,
and
here
we
have
iterations
the
more
iterations
we
put
in
the
best
the
decoder
will
perform,
but
the
slower
it
will
be-
and
I
need
to
remark
that
this
toolbar
decoder
is
not
very
optimized.
It
doesn't
use
sim
the
instructions,
so
it
really
runs
slowly.
A
So,
all
right
after
we
get
the
decoded
pdus,
this
is
the
way
we
store
them
to
a
file.
We
use
pdu
to
tact
stream
to
convert
the
pdus
to
a
stream
of
bytes.
This
will
just
put
one
pdu
after
another
in
a
stream
of
bytes,
and
then
we
use
a
file
sync
where
we
can
write
wherever
we
want
a
file
with
the
decoded
frames,
and
since
these
are
unsigned
8
bit
numbers,
I
tend
to
use
u8
for
the
extension,
but
you
can
use
anything
you
want.
A
You
need
to
set
the
input
type
to
byte
and,
as
I
said,
this
doesn't
run
in
real
time.
If
you
run
it,
you'll
find
that
the
graphical
part
of
the
decoder,
this
gui
sync,
which
shows
the
symbols
and
everything
else,
will
finish
at
some
point,
but
your
cpu
load
will
still
be
quite
high,
because
the
turbo
decoder
has
large
backlog
of
undecoded
messages
and
is
going
through
all
of
them,
and
only
when
you
see
that
your
cpu
load
goes
down
and
your
frames
file
stops
growing.
A
A
So
in
the
interest
of
time
plus,
I
see
I
have
really
quite
some
time.
So,
yes,
maybe
maybe
I'll
run
this
I'll.
Try
running
this.
A
A
We
get
again
the
decoder
gui
and
then
probably
it's
better
to
do
here.
A
If
we
check
upon
our
frames
dot
u8,
we
can
see
it's
growing
size
as
the
turbo
decoder
processes
more
and
more
frames.
So,
let's.
A
Now
we
have
our
frames
file
with
decoded
frames
from
the
satellite
and
here
actually
or
working
radio
companion
ends,
but
how?
Where
else
can
we
go
from
here?
If
we
want
to
continue
doing
things
with
this
frames?
We
can
look
at
these
blue
books
from
ccsds
which
define
the
link
layer
protocols
that
are
used.
The
two
more
important
four
transmissions
from
spacecraft
to
ground
are
the
tm,
which
means
telemetry
space
data
link
and
the
aos
space
data
link.
Aos
means
advanced
whatever.
A
A
A
But,
however,
if
we
feed
in
a
signal
with
lots
of
errors
or
maybe
even
garbage
random
noise,
they
will
also
output
complete
garbage.
This
follows
the
principle
garbage
in
garbage
out.
So
with
all
these
four
zero
correction,
algorithms,
we
need
to
check
that
the
output
is
okay.
A
A
An
exception
to
this.
If
you're
working
with
read
solomon
frames,
read
some
frames,
don't
always
succeed,
they
tend
to
fail
when
the
number
of
errors
is
large,
so
they
can
be
used
as
a
built-in
error
correction
scheme,
sorry
error,
detection
scheme
and
it
is
useful
not
to
include
a
crc
16
with
rich
solomon.
A
A
So
many
times
space
packets
are
used
on
top
of
tm
or
aos
space
data
link,
and
typically,
when
I
get
my
frames
from
gun
radio
into
a
file
as
I've
shown,
what
I'll
do
is
to
launch
up
a
jupyter
notebook
and
try
to
see
in
python
things
about
these
protocols
to
try
to
try
the
information
see
if
I
can
recognize
anything
about
the
data
etc.
A
I'm
going
to
show
an
example
about
this,
but
I
want
to
mention
that
probably
we
can
also,
in
this
case,
use
the
nice
ccsds
blocks
included
in
gr
satellites.
This
was
made
by
by
athanasius
the
harris,
a
student
from
thessaloniki
university
in
greece
during
last
year
in
isa
summit
of
code
in
space,
which
is
kind
of
similar
to
google
sum
of
code,
but
sponsored
by
issa,
and
all
projects
need
to
have
some
relation
to
space.
A
There
is
the
remark
that
ldpc
codes
can
also
do
error.
Checking,
probably
I'm
not
really
sure,
I'm
not
so
familiar
with
ldpc
codes.
I
think
it
would
depend
on
the
algorithm
you
use
to
to
decode
the
ldpc
codes.
A
Most
of
the
good
ones
are
based
on
probability
and
probability
of
message
passing
algorithms
and
they
kind
of
estimate.
What
was
the
most
likely
message
that
was
transmitted,
so
they
will
always
tend
to
give
you
some
message,
even
if
it's
garbage,
but
maybe
you
can
turn
it
into
a
an
error
checking
scheme
as
well.
A
So
coming
back
to
the
tm
frames,
the
this
is
one
of
the
good
parts
of
the
blue
book.
This
is
the
things
you
need
to
look
for
if
you're
just
doing
a
quick
read
of
the
blue
books
tables
where
you
have
the
frame
structure,
the
fields,
how
many
bits,
what
is
the
meaning
of
of
the
fit
of
each
field?
A
So
this
is
the
the
header,
the
number
of
the
number
of
bits
and
the
name
of
each
of
the
frames,
and
there
is
a
trick
to
distinguish
between
tm
space
data
link
and
aos
space
data
link,
which
is
that
this
first
field
is
the
same
for
both
the
structure
for
the
remaining
fields
is
different,
but
this
is
the
the
the
same
for
both
and
the
value
will
be
different.
I
think
a
value,
zero,
zero
marks
tm
here
on
zero,
one
marks
aos.
A
And
then,
let's
try
to
look
at
this
jupyter
notebook
with
the
crc
and
the
tm
headers.
A
A
The
way
jupyter
notebook
works
is
by
typing
in
a
python
code
or
code
from
another
programming
language
into
these
cells,
and
then
you
will
evaluate
cell
by
cell
and
the
output
of
the
cell
will
be
printed
below
the
cell,
and
you
can
also
do
inline
documentation,
type
markdown
and
things
like
that
and
inline
plots
and
so
on.
A
So
this
is
intended
as
something
you
can
carry
with
you
to
home
and
to
serve
you
as
the
basis
for
for
the
analysis.
If
you
will,
this
shows
you
how
to
open
the
frames
here.
We
use
the
frame
size
in
bytes,
and
here
you
here,
we
check
we
have
decoded
1
600
1656
frames.
This
is
from
a
previous
run.
I
did
where
I
let
the
decoder
run
and
the
completion
of
the
turbo
decoder.
A
So
nothing
special
here
we
check
what
frames
have
valid
crc
and
we
we
find
two
frames
have
invalid
crc
and
the
others
have
valid
crc.
A
Then
it's
very
useful
to
print
the
data
as
as
an
image
the
bytes
in
the
messages,
so
each
packet
would
be
a
row
and
then
each
column
represents
a
byte
within
the
within
the
data
and
the
bytes
are
color
coded.
A
So,
in
fact
this
is
maybe
too
small
to
see
not
sure.
If
I
can
zoom
in
it
seems
not,
but
maybe
on
the
left
column
you
can
see
the
headers.
There
are
some
counters
which
count
the
number
of
frames
we'll
see
this
in
a
moment
and
you
can
see
there
are
different
textures.
A
So
this
is
because
there
are
different
kinds
of
data
being
transmitted
by
the
spacecraft,
and
this
already
can
you
give
you
some
indications
about
what
to
look.
If
you
want
to
delve
any
further
and
grab
some
really
useful
data
from
the
spacecraft
telemetry
and
in
some
lucky
cases
this
is
actually
possible.
You
can
look
at
this
and
scratch
your
head
and
come
up
with
some
meaning
and
interpret
some
of
the
data
and
do
something
useful
with
that.
A
So
something
else
you
can
do.
There
is
a
nice
python
package
which
is
called
construct.
It
can
be
used
to
define
binary
structures
like
here.
This
field
has
two
bits
and
it's
an
integer,
this
one's
10,
bits,
etc,
and
then
it
will
automatically
parse
and
build
so
both
decode
and
encode.
These
binary
structures
for
you.
A
So
we
can
use
this
to
parse
the
tm
primary
headers
in
the
tm
space
data
link
protocol,
it's
a
very
a
few
bytes
at
the
start
of
the
packet,
and
we
can,
for
instance,
print
the
contents.
So
here
we
you
can
see
the
transfer
frame
version
number
zero.
As
I
said,
this
indicates
the
protocol
between
tma,
tm
and
aos.
A
You
can
also
see
the
spacecraft
id
so
different.
Spacecrafts
will
use
a
different
id.
I
think,
of
these.
As
an
ip
address,
you
can
see
virtual
channels
which
are
used
to
separate
different
applications,
different
kinds
of
data.
You
can
see
master
channel
frame
count,
which
is
a
frame
control
that
keeps
increasing
with
every
frame.
This
is
used
by
the
decoder
to
check
for
missing
frames.
So
here
you
can
see.
The
first
frame
has
a
six,
then
seven
great
each
virtual
channel
has
also
its
own
private
frame
counter.
A
A
We
can
classify
by
virtual
channel
and
cone
how
many
packets
are
in
each
of
these
virtual
channels.
So
we
see
most
of
the
packets
are
in
virtual
channel
number
two,
but
we
have
a
few
on
virtual
channels,
zero
and
four-
and
maybe
it's
a
good
idea
to
look
first
at
these
two,
because
there
are
data
which
isn't
not
transmitted
very
often,
maybe
there's
something
interesting
now
which
we
can
figure
out
easily.
A
Let's
also
look
at
virtual
channel
number
two,
because
sometimes
just
by
looking
at
a
sheer
large
amount
of
data,
you
can
figure
out
patterns
with
which
might
be
not
obvious
in
less
frames.
We
can
plot
the
values
of
the
frame
counter.
As
you
see,
it
goes
from
0
to
255,
because
this
is
an
8-bit
counter
and
then
rolls
over,
and
this
can
be
taking
correct
care
of
the
rollover
to
detect
the
number
of
packets
lost,
so
zero
packets
lost.
A
A
A
The
thing
that
is
great
for
with
guinea,
radio
and
radio
companion
is
to
build
a
stream
streaming
things
that
grub
data
processes
it
you
can
have
a
very,
very
large
recording
and
the
radio
will
keep
reading
from
it.
It
will
not
read
it
completely
in
your
ram,
and
that
is
very
useful
for
many
things,
but
if
you
want
to
have
a
static
vision
of
the
data,
maybe
do
some
press
processing
analysis
correlate.
Some
things
try
to
find
patterns
in
the
data.
A
I
think
it's
better
to
investigate
some
prototype
within
python
or
any
other
language
which
lets
to
look
at
plots
really
quickly,
all
the
data
at
once,
and
then
your
your
guesses,
your
findings,
you
can
turn
those
into
radio
and
using
the
built-in
you
can
radio
python
block.
This
can
be
as
easy
as
maybe
capping
copying
over
code,
you
first
design
in
ipython
or
in
jupiter
or
somewhere
else,.
A
So
about
a
beppy
columbo,
there
were
two
recordings
supplied
with
the
workshop
material.
We've
only
worked
so
far
with
solar
orbiter
baby
colombo
is
very
similar
to
solar
orbiter.
Here
you
have
the
parameters
for
both
spacecraft
and
the
only
difference
is
the
baud
rate
both
use
manchester
coding,
the
same
frame,
size,
turboframes
rate,
one
half
the
same
tm
protocol,
etc.
A
The
interesting
thing
about
the
bepic
on
the
recording
is
that,
since
the
spacecraft
was
further
away
from
earth,
the
recording
is
much
weaker
than
solar
orbiters.
So
it's
a
very
good
exercise
to
grab
your
solar
orbiter
decoding
load,
the
baby
colombo
recording
on
it.
A
Of
course,
I
changed
the
board
rate
and
the
sukari
rate
for
the
manchester
parameters
to
match
with
baby
colombo
and
then
see
if
it
still
works,
see
if
it
decodes
correctly,
because
where
I
was
a
bit
careless
with
the
parameters
I
use
for
the
pll
block
for
the
symbol,
sync
for
the
costus
loop,
because
the
solar
orbiter
signal
is
actually
quite
great.
It
has
a
very
good
snr.
A
So
good
exercise,
as
I
said,
not
sure
what
there
is
on
solar
orbiter
telemetry
on
baby
colombo.
Most
of
the
telemetry
contains
idle
data,
which
is
just
when
what
a
spacecraft
would
transmit
when
it
doesn't
have
anything
not
worthy
to
say,
but
it
still
wants
to
keep
the
transmitter
running
to
make
the
signal
a
visible
and
trackable
from
from
the
ground
station.
A
A
What
else
further
reading,
if
you're
interested
in
these
kinds
of
things,
I've
done
quite
a
lot
recently.
Actually
this
workshop
abstract
was
submitted,
I'm
not
sure,
maybe
around
june
or
may,
but
in
july,
three
different
spacecraft,
emirates,
mars
mission
from
the
arab
united
arab
emirates.
A
Sorry
tian
won
one
from
china
and
march
2020
from
the
u.s
having
launched
to
mars,
taking
advantage
of
the
earth
to
mass
launch
window
and
in
collaboration
with
paul
marsh
with
other
radiometers
and
with
amsat
dl,
the
radiometer
satellite
association
and
bahrum
observatory,
where
they
have
a
20
meter
antenna
which
is
really
good
to
receive
these
weak
signals.
A
A
I
need
at
some
point
to
go
back
to
solar
orbiter
and
take
closer
look
at
the
data,
because
at
that
time
in
february
I
think
I
wasn't
able
to
to
figure
out
much
about
it,
but
I
think
there's
some
data.
Maybe
we
can.
We
can
pull
things
on
this
spacecraft.
Yes,
so
for
tien
one
one
we've
been
able
to
find
lots
of
telemetry
variables.
A
We
are
actually
able
to
make
sense
of
the
adcs
system
to
know
where
the
spacecraft
is
pointing
in
real
time
to
know
where
the
spacecraft
is
in
real
time,
because
these
spacecraft
has
something
rather
unusual.
It
also
broadcasts
its
orbit
information
and
we
are
able
to
find
a
number
of
things
and
bohum
is
tracking
taiwan
one
each
day
and
govern
and
gathering
lots
and
lots
of
data.
If
you
just
go
to
my
blog
and
just
read
the
latest
post
or
search
about
this
spacecraft,
you'll
see
the
kind
of
things
you're
doing.
A
What
else
and
nothing
else
I
had
some
additional
material-
and
this
is
me
this
was
mainly
intended
in
case.
I
had
lots
and
lots
of
remaining
time.
A
What
this
is
about
is
well
we've
seen
here
one
approach
of
decoding
manchester
modulation,
which
is
used
in
many
other
contexts,
besides
spacecraft,
for
example,
for
any
radio
amateurs
out
there,
the
q100,
the
geostationary
satellite
for
amateur
radio,
uses
manchester
encoding
on
its
timer
to
beacon.
So
we've
seen
just
one
approach
to
decoding
manchester
modulation
here
I
wanted
to
leave
you
two
all
the
approaches
that
are
interested
for
manchester
demodulation,
I'm
not
going
to
explain
them
now.
A
I
think
it's
better
to
do
a
wrap-up
and
do
some
comments
or
questions
from
you
and
if
you
happen
to
be
interested
in
these
techniques
of
manchester
demodulation,
you
can
always
look
at
the
slides
I'm
going
to
be
available
on
the
chat
throughout
the
conference.
So
just
message
me
on
the
chat
or
my
email
can
be
easily
found
online
drop
me
a
message
and
we
can
talk.
A
So
I'm
probably
giving
you
the
microphone
for
questions
comments.
Probably
I
went
too
fast
at
the
beginning.
I
don't
know
if
there's
something
I
should
cover
in
more
detail.
A
Okay,
I
see
there's
a
couple
questions
there
is:
is
there
a
gcc
generalized
cross,
correlator
block
in
gr4
low
snr
sync
code
detection?
I
think
I'm
not
sure
what
generalized
cross
correlator
is.
So
maybe,
if
you
can
explain
about
generalized
cross
correlator
I'll,
be
able
to
answer
that
more
accurately
for
just
normal
cross-correlation,
you
can
do
using
an
fir
filter
as
I
showed,
but
this
is
not
optimal.
A
This
is
o
of
n
squared
for
anyone
which
knows
the
big
o
notation
you
can
do
with
o
n
log
n
by
taking
advantage
of
a
few
rare
transforms,
so
you
can
fourier
transform
your
data,
you
can
fully
transform
your
sync
quote
and
you
can
multiply.
The
fourier
transforms
do
for
your
transform
inverse.
So
maybe
those
who
know
to
do
cross
correlation
on
the
frequency
domain
know
what
I'm
talking
about.
If
you
don't,
I
think
there's
plenty
of
material
out
there.
A
Still
not
sure
what
is
it?
Probably,
you
can
do
your
own,
so
it's
not
built
in,
but
building
on
top
of
the
fft
blocks
and
the
vector
multiply
and
so
on.
Probably
you
might
be
able
to
to
do
your
own.
What
are
you
working
on
now
for
the
future,
so
plenty
of
things
ben
mentioned
in
the
introducing
talk,
my
dear
satellites
project.
A
This
is
the
thing
I
devote
most
of
my
radio
time
so
to
say-
and
here
we
only
use
the
agc
block,
but
geosatellites
has
full
collection
of
decoders
for
amateur
satellites.
You
can
see
my
talk
about
it
last
year
in
jirkon,
I'm
also
working
further
with
the
data
from
tiangong
one.
We
are
actually
expecting
to
be
able
to
detect
a
correction
burn
on
some
time
on
september.
We
don't
know
when
the
amazing
part
of
this
mission
is
the
chinese.
A
So
this
is
like
my
continuation
for
the
workshop
here
and
I'm
also
involved
with
many
other
site
projects
on
on
dsp,
and
here
matalan
is
talking
about.
Who
wants
your
satellites
in
in
debian?
I
think
I
wanted
actually
using
dbm
for
the
build
root,
so
the
continuous
integration
of
of
gr,
satellites,
debian
testing
and
it
works
great-
would
it
make
sense
to
have
a
dbm
package
for
year?
Satellites?
A
Probably
yes,
but
this
is
something
I
kind
of
talked
with
with
maitland
last
year
at
tirkon,
maybe
not
in
in
db
unstable,
because
the
problem
with
geosatellites
is
look.
These
people
keep
launching
new
and
new
satellites,
so
I
keep
updating
geosatellites
to
keep
track
of
what
everyone
is
doing,
launching
new
birds.
A
So
typically,
there
is
an
update
every
month
or
every
couple
months
to
to
gear
satellites
in
in
debian
stable.
It
would
get
outdated,
real
fast,
but
having
it
as
a
site
repository
some
people
are
suggesting
underboning
or
just
having
it
as
a
downloading
in
github.
I
think
that
would
be
really
interesting
and
I'm
looking
forward
to
to
doing
that
myself
to
bothering
maitland
with
any
questions
or
issues.
A
I
might
run
into
and
yes,
another
question:
has
anyone
tried
tracking
mass,
so
mlm
orbital
mission,
this
mars
orbiter
mission,
I
think
from
india,
I'm
not
sure,
maybe
not
with
a
2.4
meter
dish
you
have.
I
think
you
should
be
able
to
detect
a
faint
trace
on
the
spectrum,
so
this
is
something
I
said
at
the
beginning.
A
This
kind
of
data
demodulation,
where
we
are
able
to
run
photo
correction
to
grab
the
bits
to
see
the
data
needs
a
lot
of
snr.
You
need
the
20
meter
dish
at
bohum
to
be
able
to
do
it
from
mars,
and
the
thanks
for
the
amazing
virtual
machine
should
go
actually
for
the
gunner
radio
team,
the
project's
official
officers
and
actually
boston
blossom.
Who
was
kind
enough
to
do
a
modified
virtual
machine
with
the
staff
for
this
workshop
inside.
A
Are
there
more
files?
If
we
don't
have
a
dish?
Yes,
there
are
a
few
of
them.
Maybe
I
need
to
do
a
comprehensive
list.
There
are
some
further
recordings
that
paul
marsh
has
published.
There
are
some
from
video
in
estonia.
I
think
they
have
a
large
dish
in
the
university,
so
I
might
point
you
to
that.
A
If
you're
interested
pray
I'll,
add
a
comment
to
the
read
me
on
the
workshop
material
with
more
links-
and
there
is
lots
of
recording
material
at
donald,
unfortunately,
it's
not
easier
to
publish
those
due
to
internal
policy,
so
to
speak.
So,
yes
sharing.
This
is
well.
There
tend
to
be
large
because
the
sample
rate
is
usually
large
and
also
policy
about
who
recorded
the
signal.
Is
this
friendly
enough?
Is
this
considered
spying
on
someone
else's
satellite?
A
So
there
are
always
this
kind
of
things,
but
even
there
is
some
very
interesting
recording
from
five
years
ago.
I
think
I
might
point
you,
which
was
done
in
greenbank
observatory
by
breakthrough,
listen,
which
is
a
project
from
seti,
since
we
are
celebrating
this
year
that
seti
and
guru
radio
are
joining
forces.
A
I
think
it
would
be
really
interesting
to
go
grab
that
iq,
recording,
which
is
a
recording
of
voyager,
not
sure
if
it's
one
or
two
with
the
rather
large
dish
at
greenbank,
steve
croft,
is
saying
maybe
more
new
captures
for
everyone
from
alan's
from
alantos
corporate
roger
one.
A
So
yes,
through
this
collaboration
with
seti,
maybe
we
can
have
more
data
available
to
us
just
to
play
around
with
it
and
to
learn
and
see
so
looking
forward
to
that
with
with
steve
crofton
the
rest
of
the
city
members,
I'm
not
sure
if
I
skipped
any
other
questions.
A
For
the
for
the
parameters,
so
the
correct
parameters
of
the
previous
slide,
I
don't
recall
anymore.
What
was
the
previous
slide
when
the
question
was
made,
but
for
guessing
the
correct
parameters,
the
correct
parameters?
You
have
them
at
the
grc
files
in
the
works
material,
and
here
I've
tried
to
especially
at
the
beginning
where
I
was
working
building
the
photograph
live.
I
tried
to
show
how
I
really
work
in
practice
with
an
unknown
signal.
A
A
It
takes
trial
and
error
to
find
correct
parameters
for
anything,
and
there
are
false
paths
you
might
take
down
the
road,
but
hopefully,
in
the
end
you
have
everything
running
so
yes,
experience
helps,
but
there's
a
good
load
of
just
test
and
see
what
runs
so.
I
don't
want
to
extend
anymore.
I
think
it's
already
nine
o'clock
here
in
western
europe,
so
I'll
be
closing
here.