I’ve had a little luck transmitting to a satellite. I’m using packet as I can use the 2m Cebik Moxon aerial for both transmit and receive. To see if the ISS should be able to hear my signals I wrote a link budget program in Racket. There’s a few assumptions in it but it seems to confirm the ISS should have no problem hearing me on 2m. The program shows:

```
Transmit power (W)?
5
Frequency (MHz)?
145.825
Elevation (°)?
40
Transmit power: 5 W (36.99 dBm)
Frequency: 145.825 MHz
Satellite height: 403 km
Elevation angle: 40°
Satellite is 5396 km away
Signal at satellite is 9 dB above noise
```

This seems borne out as I do receive what seem to be digipeated packets just after I transmit them. But I can’t confirm on the ISS site that they are real and not just an echo from somewhere.

70cms doesn’t look as good:

```
Transmit power (W)?
5
Frequency (MHz)?
435.255
Elevation (°)?
40
Transmit power: 5 W (36.99 dBm)
Frequency: 435.255 MHz
Satellite height: 403 km
Elevation angle: 40°
Satellite is 5396 km away
Signal at satellite is -0 dB above noise
```

Increasing the power to 25W might work:

```
Transmit power (W)?
25
Frequency (MHz)?
435.255
Elevation (°)?
40
Transmit power: 25 W (43.98 dBm)
Frequency: 435.255 MHz
Satellite height: 403 km
Elevation angle: 40°
Satellite is 5396 km away
Signal at satellite is 7 dB above noise
```

I’m currently building the 70cms version and will try some FM voice contacts.

Here’s the link budget program:

```
#lang racket
; link budget for Cebik Moxon in attic
; Andy Fletcher Jan 9, 2019
;
; definitions
;
(define (get_user_input prompt)
(begin
(displayln prompt)
(string->number (read-line))))
(define (log10 n)
(/ (log n) (log 10)))
(define (watts2dbm w)
(* 10 (log10 (* w 1000))))
(define (degrees2radians d)
(* (/ pi 180) d))
(define (square x)
(* x x))
; distance to satellite in km
(define (satellite_distance e_degrees height)
(let* ([e (degrees2radians e_degrees)]
[earth_radius 6371] ; kms
[r (+ height earth_radius)] ; distance between geocentre and satellite
)
(sqrt (+ (square (* earth_radius (cos e))) (square r) (- (square earth_radius)) (- (* earth_radius (cos e)))))))
; free space path loss
(define (fspl f d)
(- (+ (* 20 (log10 f)) (* 20 (log10 d)) 32.45)))
;
; execute
;
(let* (
[ptx_watts (get_user_input "Transmit power (W)?")]
[f (get_user_input "Frequency (MHz)?")]
[e_degrees (get_user_input "Elevation (°)?")]
[h 403] ; satellite height in kms
[cable_loss -3.55] ; measured dB
[tx_gain 6.0] ; Cebik Moxon modelled gain in dB
[roof_loss -6.0] ; assumed loss of signal going through the roof in dB
[rx_gain 2.0] ; assumed receive gain at satellite in dB
[sat_max_sens 124.0] ; assumed satellite maximum sensitivity in dBm
[distance_to_satellite (satellite_distance e_degrees h)]
[ptx (watts2dbm ptx_watts)]
)
(begin
(printf "Transmit power: ~a W (~a dBm)\n" ptx_watts (~r ptx #:min-width 1 #:precision 2))
(printf "Frequency: ~a MHz\n" f)
(printf "Satellite height: ~a km\n" (~r h #:min-width 1 #:precision 0))
(printf "Elevation angle: ~a°\n" e_degrees)
(printf "\nSatellite is ~a km away\n" (~r distance_to_satellite #:min-width 1 #:precision 0))
(printf "Signal at satellite is ~a dB above noise\n"
(~r (+ ptx cable_loss tx_gain roof_loss (fspl f distance_to_satellite) rx_gain sat_max_sens) #:min-width 1 #:precision 0))))
```