From 61f97d2d4f3ea4d4165b638f445ef898d6ab2f74 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 09:06:07 -0400 Subject: [PATCH 001/287] Update transmit.py add doppler time shift --- transmit.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 75f59de0..22244ac0 100644 --- a/transmit.py +++ b/transmit.py @@ -949,11 +949,18 @@ if __name__ == "__main__": print("Beacon mode off so no repeater transmission") print("Ready to detect carrier") + start_time = time.perf_counter() + doppler_start_tz = txr * 1e6 + doppler_freq_hz = txr * 1e6 while True: if (input(squelch) == False) and (command_tx == True): + doppler_freq_hz = doppler_start_hz + (time.perf_counter() - start_time) * 60 + print(doppler_freq_hz) + tx = "{:.3f}".format(doppler_freq/1000) + print(tx) print("Carrier detected, starting repeater") output(txLed, 1) - system("sudo nc -l 8011 | csdr convert_i16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1 &") + system("sudo nc -l 8011 | csdr convert_i16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + tx + " > /dev/null 2>&1 &") sleep(0.5) system("sudo arecord -D shared_mic -r48000 -fS16_LE -c1 | nc localhost 8011 &") while (input(squelch) == False): From f566645b71a3a8d136249278e323559144eba8e6 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 09:08:17 -0400 Subject: [PATCH 002/287] Update transmit.py print start freq --- transmit.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 22244ac0..e922da92 100644 --- a/transmit.py +++ b/transmit.py @@ -950,8 +950,9 @@ if __name__ == "__main__": print("Ready to detect carrier") start_time = time.perf_counter() - doppler_start_tz = txr * 1e6 + doppler_start_hz = txr * 1e6 doppler_freq_hz = txr * 1e6 + print(doppler_start_hz) while True: if (input(squelch) == False) and (command_tx == True): doppler_freq_hz = doppler_start_hz + (time.perf_counter() - start_time) * 60 From ea71c0537de83d027558ae0a3011aa0564094da7 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 09:09:28 -0400 Subject: [PATCH 003/287] Update transmit.py fix variable --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index e922da92..82c9a20a 100644 --- a/transmit.py +++ b/transmit.py @@ -957,7 +957,7 @@ if __name__ == "__main__": if (input(squelch) == False) and (command_tx == True): doppler_freq_hz = doppler_start_hz + (time.perf_counter() - start_time) * 60 print(doppler_freq_hz) - tx = "{:.3f}".format(doppler_freq/1000) + tx = "{:.3f}".format(doppler_freq_hz/1000) print(tx) print("Carrier detected, starting repeater") output(txLed, 1) From c0d12522cdfb768c977a7c5b7de40fffaa397ec0 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 09:28:28 -0400 Subject: [PATCH 004/287] Update transmit.py move program_fm to function --- transmit.py | 79 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 33 deletions(-) diff --git a/transmit.py b/transmit.py index 82c9a20a..eceef102 100644 --- a/transmit.py +++ b/transmit.py @@ -216,7 +216,37 @@ def camera_photo(): return True else: return False - + +def program_fm(rx, tx, rxpl_value, sq, txpl_value): + + global gpsd_status + global pd + global ptt + if (gpsd_status == "active"): + print("Stopping gpsd.socket") + system("sudo systemctl stop gpsd.socket") + print("Programming FM module!\n"); + output(pd, 1) + output (ptt, 1) + try: + ser = serial.Serial("/dev/ttyAMA0", 9600) + print(ser.portstr) + # uhf_string = "AT+DMOSETGROUP=0," + rx +"," + tx + ",0,3,0,0\r\n" + uhf_string = "AT+DMOSETGROUP=0," + rx + "," + tx + "," + rxpl_value + "," + sq + "," + txpl_value + ",0\r\n" + print(uhf_string) + for i in range(6): + # ser.write(b"AT+DMOSETGROUP=0,435.0000,434.9000,0,3,0,0\r\n") + ser.write(uhf_string.encode()) + sleep(0.1) + ser.close() + ser = serial.Serial("/dev/ttyAMA0", 115200) # reset back to 115200 for cubesatsim code for payload sensor data + except: + print("Error in serial write") + output(pd, 0) + if (gpsd_status == "active"): + print("Restarting gpsd.socket") + system("sudo systemctl restart gpsd.socket") + print("CubeSatSim v2.2 transmit.py starting...") pd = 21 @@ -389,12 +419,12 @@ if __name__ == "__main__": print(f'squelch: {sq}') if len(config) > 6: txf = float(config[6]) + tx = "{:.4f}".format(txf) if (mode == 'e'): txr = (txf - 290.0) # - 0.1 # Cross Band Repeater mode transmit frequency in 2m band - tx = "{:.4f}".format(txr) + print("Transmit frequency: ",txr) else: - tx = "{:.4f}".format(txf) - print("Transmit frequency: ",tx) + print("Transmit frequency: ",tx) if len(config) > 7: rxf = float(config[7]) # print(rxf) @@ -488,33 +518,9 @@ if __name__ == "__main__": print(f"Output of the command (stdout): {e.stdout}") # print(f"Error output of the command (stderr): {e.stderr}") - if (mode != 'e'): +# if (mode != 'e'): + program_fm(rx,tx,rxpl_value,sq,txpl_value) - if (gpsd_status == "active"): - print("Stopping gpsd.socket") - system("sudo systemctl stop gpsd.socket") - print("Programming FM module!\n"); - output(pd, 1) - output (ptt, 1) - try: - ser = serial.Serial("/dev/ttyAMA0", 9600) - print(ser.portstr) - # uhf_string = "AT+DMOSETGROUP=0," + rx +"," + tx + ",0,3,0,0\r\n" - uhf_string = "AT+DMOSETGROUP=0," + rx + "," + tx + "," + rxpl_value + "," + sq + "," + txpl_value + ",0\r\n" - print(uhf_string) - for i in range(6): - # ser.write(b"AT+DMOSETGROUP=0,435.0000,434.9000,0,3,0,0\r\n") - ser.write(uhf_string.encode()) - sleep(0.1) - ser.close() - ser = serial.Serial("/dev/ttyAMA0", 115200) # reset back to 115200 for cubesatsim code for payload sensor data - except: - print("Error in serial write") - output(pd, 0) - if (gpsd_status == "active"): - print("Restarting gpsd.socket") - system("sudo systemctl restart gpsd.socket") - sim_failure_check() if (hab_mode == True) and (mode == 'a'): print("Don't transmit CW ID since APRS HAB mode is active") @@ -527,10 +533,17 @@ if __name__ == "__main__": status = status + " C" if sim_mode: status = status + " S" - if (debug_mode == 1): - system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3") + if (mode != 'e'): + if (debug_mode == 1): + system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3") + else: + system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1") else: - system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1") + if (debug_mode == 1): + system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + txr + "e3") + else: + system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + txr + "e3 > /dev/null 2>&1") + output(txLed, 0) sleep(1) From e09eaa5ce8e55fe9d650c9c3d1e1603c7c889034 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 09:30:28 -0400 Subject: [PATCH 005/287] Update transmit.py make txr string --- transmit.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index eceef102..6c049f0d 100644 --- a/transmit.py +++ b/transmit.py @@ -421,7 +421,8 @@ if __name__ == "__main__": txf = float(config[6]) tx = "{:.4f}".format(txf) if (mode == 'e'): - txr = (txf - 290.0) # - 0.1 # Cross Band Repeater mode transmit frequency in 2m band + txrf = (txf - 290.0) # - 0.1 # Cross Band Repeater mode transmit frequency in 2m band + txr = "{:.4f}".format(txrf) print("Transmit frequency: ",txr) else: print("Transmit frequency: ",tx) From 67461651cd501510bdc94f9a468912189c5f4538 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 09:32:25 -0400 Subject: [PATCH 006/287] Update transmit.py fix txr --- transmit.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/transmit.py b/transmit.py index 6c049f0d..d0de724f 100644 --- a/transmit.py +++ b/transmit.py @@ -964,18 +964,18 @@ if __name__ == "__main__": print("Ready to detect carrier") start_time = time.perf_counter() - doppler_start_hz = txr * 1e6 - doppler_freq_hz = txr * 1e6 + doppler_start_hz = txrf * 1e6 + doppler_freq_hz = txrf * 1e6 print(doppler_start_hz) while True: if (input(squelch) == False) and (command_tx == True): doppler_freq_hz = doppler_start_hz + (time.perf_counter() - start_time) * 60 print(doppler_freq_hz) - tx = "{:.3f}".format(doppler_freq_hz/1000) - print(tx) + txr = "{:.3f}".format(doppler_freq_hz/1000) + print(txr) print("Carrier detected, starting repeater") output(txLed, 1) - system("sudo nc -l 8011 | csdr convert_i16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + tx + " > /dev/null 2>&1 &") + system("sudo nc -l 8011 | csdr convert_i16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + txr + " > /dev/null 2>&1 &") sleep(0.5) system("sudo arecord -D shared_mic -r48000 -fS16_LE -c1 | nc localhost 8011 &") while (input(squelch) == False): From 2cd07c5f76e10694e1e4e99d4be41f6719f21ee9 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 09:43:38 -0400 Subject: [PATCH 007/287] Update transmit.py fix doppler freq --- transmit.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/transmit.py b/transmit.py index d0de724f..a0135477 100644 --- a/transmit.py +++ b/transmit.py @@ -964,12 +964,13 @@ if __name__ == "__main__": print("Ready to detect carrier") start_time = time.perf_counter() - doppler_start_hz = txrf * 1e6 - doppler_freq_hz = txrf * 1e6 - print(doppler_start_hz) + tx_doppler_start_hz = txrf * 1e6 + tx_doppler_shift_hz = 0 + print(tx_doppler_start_hz + tx_doppler_shift_hz) while True: if (input(squelch) == False) and (command_tx == True): - doppler_freq_hz = doppler_start_hz + (time.perf_counter() - start_time) * 60 + doppler_shift_hz = (time.perf_counter() - start_time) * 60 + doppler_freq_hz = doppler_start_hz + doppler_shift_hz print(doppler_freq_hz) txr = "{:.3f}".format(doppler_freq_hz/1000) print(txr) From 7aa35b3f63e8f8516ea28a7c102f887c31a51009 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 09:45:43 -0400 Subject: [PATCH 008/287] Update transmit.py rename tx_doppler --- transmit.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/transmit.py b/transmit.py index a0135477..abdced43 100644 --- a/transmit.py +++ b/transmit.py @@ -969,10 +969,10 @@ if __name__ == "__main__": print(tx_doppler_start_hz + tx_doppler_shift_hz) while True: if (input(squelch) == False) and (command_tx == True): - doppler_shift_hz = (time.perf_counter() - start_time) * 60 - doppler_freq_hz = doppler_start_hz + doppler_shift_hz - print(doppler_freq_hz) - txr = "{:.3f}".format(doppler_freq_hz/1000) + tx_doppler_shift_hz = (time.perf_counter() - start_time) * 60 + tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz + print(tx_doppler_freq_hz) + txr = "{:.3f}".format(tx_doppler_freq_hz/1000) print(txr) print("Carrier detected, starting repeater") output(txLed, 1) From a78d3a61989efcc4a4bc7f49132e38c3dfc565f1 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 09:52:30 -0400 Subject: [PATCH 009/287] Update transmit.py add start and stop repeater functions --- transmit.py | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/transmit.py b/transmit.py index abdced43..512a4df5 100644 --- a/transmit.py +++ b/transmit.py @@ -247,6 +247,28 @@ def program_fm(rx, tx, rxpl_value, sq, txpl_value): print("Restarting gpsd.socket") system("sudo systemctl restart gpsd.socket") +def start_repeater(txr): + global txLed + print("Starting repeater") + output(txLed, 1) + system("sudo nc -l 8011 | csdr convert_i16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + txr + " > /dev/null 2>&1 &") + sleep(0.5) + system("sudo arecord -D shared_mic -r48000 -fS16_LE -c1 | nc localhost 8011 &") + +def stop_repeater(): + global txLed +# print("No carrier detected, stopping repeater") + output(txLed, 0) + system("sudo rpitx -i null > /dev/null 2>&1") + system("sudo killall -9 arecord > /dev/null 2>&1") + system("sudo killall -9 nc > /dev/null 2>&1") + system("sudo killall -9 rpitx > /dev/null 2>&1") + print("Resetting audio") + system("sudo /etc/init.d/alsa-utils stop") + system("sudo /etc/init.d/alsa-utils start") + print("Finished resetting audio") +# print("Ready to detect carrier") + print("CubeSatSim v2.2 transmit.py starting...") pd = 21 @@ -974,24 +996,12 @@ if __name__ == "__main__": print(tx_doppler_freq_hz) txr = "{:.3f}".format(tx_doppler_freq_hz/1000) print(txr) - print("Carrier detected, starting repeater") - output(txLed, 1) - system("sudo nc -l 8011 | csdr convert_i16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + txr + " > /dev/null 2>&1 &") - sleep(0.5) - system("sudo arecord -D shared_mic -r48000 -fS16_LE -c1 | nc localhost 8011 &") + print("Carrier detected") + start_repeater() while (input(squelch) == False): sleep(1) - print("No carrier detected, stopping repeater") - output(txLed, 0) - system("sudo rpitx -i null > /dev/null 2>&1") - system("sudo killall -9 arecord > /dev/null 2>&1") - system("sudo killall -9 nc > /dev/null 2>&1") - system("sudo killall -9 rpitx > /dev/null 2>&1") - print("Resetting audio") - system("sudo /etc/init.d/alsa-utils stop") - system("sudo /etc/init.d/alsa-utils start") - print("Finished resetting audio") - print("Ready to detect carrier") + print("No carrier detected") + stop_repeater() else: print("FSK") print("turn on FM rx") From 89bdf87859cb6079dc969637a04054fc6957b771 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 09:53:40 -0400 Subject: [PATCH 010/287] Update transmit.py add txr to start_repeater --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 512a4df5..9720b89e 100644 --- a/transmit.py +++ b/transmit.py @@ -997,7 +997,7 @@ if __name__ == "__main__": txr = "{:.3f}".format(tx_doppler_freq_hz/1000) print(txr) print("Carrier detected") - start_repeater() + start_repeater(txr) while (input(squelch) == False): sleep(1) print("No carrier detected") From 8367544b1c1c083b07062cf4eab5b0eec8133764 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 10:03:22 -0400 Subject: [PATCH 011/287] Update transmit.py program rx --- transmit.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 9720b89e..9f0eb5e8 100644 --- a/transmit.py +++ b/transmit.py @@ -988,7 +988,10 @@ if __name__ == "__main__": start_time = time.perf_counter() tx_doppler_start_hz = txrf * 1e6 tx_doppler_shift_hz = 0 - print(tx_doppler_start_hz + tx_doppler_shift_hz) + print(tx_doppler_start_hz) + rx_doppler_start_hz = rxf * 1e6 + rx_doppler_shift_hz = 0 + print(rx_doppler_start_hz) while True: if (input(squelch) == False) and (command_tx == True): tx_doppler_shift_hz = (time.perf_counter() - start_time) * 60 @@ -996,6 +999,10 @@ if __name__ == "__main__": print(tx_doppler_freq_hz) txr = "{:.3f}".format(tx_doppler_freq_hz/1000) print(txr) + rx_doppler_freq_hz = rx_doppler_start_hz + tx_doppler_shift_hz + rx = "{:.3f}".format(rx_doppler_freq_hz/1e6) + print(tx) + program_fm(rx,tx,rxpl_value,sq,txpl_value) print("Carrier detected") start_repeater(txr) while (input(squelch) == False): From c076d57caa0b8b8a4bd4157cce27be40ec2649d2 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 10:08:17 -0400 Subject: [PATCH 012/287] Update transmit.py print rx --- transmit.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index 9f0eb5e8..6619b3d1 100644 --- a/transmit.py +++ b/transmit.py @@ -991,7 +991,8 @@ if __name__ == "__main__": print(tx_doppler_start_hz) rx_doppler_start_hz = rxf * 1e6 rx_doppler_shift_hz = 0 - print(rx_doppler_start_hz) + print(rx_doppler_start_hz) + print(rx_doppler_freq_hz) while True: if (input(squelch) == False) and (command_tx == True): tx_doppler_shift_hz = (time.perf_counter() - start_time) * 60 @@ -1000,8 +1001,9 @@ if __name__ == "__main__": txr = "{:.3f}".format(tx_doppler_freq_hz/1000) print(txr) rx_doppler_freq_hz = rx_doppler_start_hz + tx_doppler_shift_hz + print(rx_doppler_freq_hz) rx = "{:.3f}".format(rx_doppler_freq_hz/1e6) - print(tx) + print(rx) program_fm(rx,tx,rxpl_value,sq,txpl_value) print("Carrier detected") start_repeater(txr) From 929a6e306376ba318c8e9bede824c5264082d6f6 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 10:10:24 -0400 Subject: [PATCH 013/287] Update transmit.py extra print --- transmit.py | 1 - 1 file changed, 1 deletion(-) diff --git a/transmit.py b/transmit.py index 6619b3d1..19969159 100644 --- a/transmit.py +++ b/transmit.py @@ -992,7 +992,6 @@ if __name__ == "__main__": rx_doppler_start_hz = rxf * 1e6 rx_doppler_shift_hz = 0 print(rx_doppler_start_hz) - print(rx_doppler_freq_hz) while True: if (input(squelch) == False) and (command_tx == True): tx_doppler_shift_hz = (time.perf_counter() - start_time) * 60 From c52e4c484c04b1cf604b1f086febacdd14383c33 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 10:12:24 -0400 Subject: [PATCH 014/287] Update transmit.py don't turn off receiver in program_fm --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 19969159..c6f5d705 100644 --- a/transmit.py +++ b/transmit.py @@ -242,7 +242,7 @@ def program_fm(rx, tx, rxpl_value, sq, txpl_value): ser = serial.Serial("/dev/ttyAMA0", 115200) # reset back to 115200 for cubesatsim code for payload sensor data except: print("Error in serial write") - output(pd, 0) +# output(pd, 0) # Don't turn off receiver if (gpsd_status == "active"): print("Restarting gpsd.socket") system("sudo systemctl restart gpsd.socket") From b766789e4565f9a5b89e29fcd2e5130b8074a7f2 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 12:48:59 -0400 Subject: [PATCH 015/287] Update transmit.py rx with 4 decimal places --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index c6f5d705..72c50942 100644 --- a/transmit.py +++ b/transmit.py @@ -1001,7 +1001,7 @@ if __name__ == "__main__": print(txr) rx_doppler_freq_hz = rx_doppler_start_hz + tx_doppler_shift_hz print(rx_doppler_freq_hz) - rx = "{:.3f}".format(rx_doppler_freq_hz/1e6) + rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) print(rx) program_fm(rx,tx,rxpl_value,sq,txpl_value) print("Carrier detected") From e1df088e52424f3d9b07f328b22d6c73c5804613 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 12:59:09 -0400 Subject: [PATCH 016/287] Update transmit.py 20k max doppler shift --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 72c50942..315f5cdf 100644 --- a/transmit.py +++ b/transmit.py @@ -994,7 +994,7 @@ if __name__ == "__main__": print(rx_doppler_start_hz) while True: if (input(squelch) == False) and (command_tx == True): - tx_doppler_shift_hz = (time.perf_counter() - start_time) * 60 + tx_doppler_shift_hz = ((time.perf_counter() - start_time) * 100) % 20000 tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz print(tx_doppler_freq_hz) txr = "{:.3f}".format(tx_doppler_freq_hz/1000) From eb6ecaa84ddcbc2a833909c9acc8368cf299da49 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 15:25:09 -0400 Subject: [PATCH 017/287] Update transmit.py add iss_doppler_passes --- transmit.py | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) diff --git a/transmit.py b/transmit.py index 315f5cdf..c9dbfd83 100644 --- a/transmit.py +++ b/transmit.py @@ -269,6 +269,156 @@ def stop_repeater(): print("Finished resetting audio") # print("Ready to detect carrier") +iss_doppler_passes = { + 20: [ + {"time_sec": -180, "velocity_kms": -5.81, "doppler_434_khz": 8.43, "obs_434_mhz": 434.9084, "doppler_144_khz": 2.81, "obs_144_mhz": 144.9028}, + {"time_sec": -170, "velocity_kms": -5.68, "doppler_434_khz": 8.24, "obs_434_mhz": 434.9082, "doppler_144_khz": 2.75, "obs_144_mhz": 144.9027}, + {"time_sec": -160, "velocity_kms": -5.55, "doppler_434_khz": 8.05, "obs_434_mhz": 434.9081, "doppler_144_khz": 2.68, "obs_144_mhz": 144.9027}, + {"time_sec": -150, "velocity_kms": -5.39, "doppler_434_khz": 7.82, "obs_434_mhz": 434.9078, "doppler_144_khz": 2.61, "obs_144_mhz": 144.9026}, + {"time_sec": -140, "velocity_kms": -5.22, "doppler_434_khz": 7.57, "obs_434_mhz": 434.9076, "doppler_144_khz": 2.52, "obs_144_mhz": 144.9025}, + {"time_sec": -130, "velocity_kms": -5.02, "doppler_434_khz": 7.28, "obs_434_mhz": 434.9073, "doppler_144_khz": 2.43, "obs_144_mhz": 144.9024}, + {"time_sec": -120, "velocity_kms": -4.81, "doppler_434_khz": 6.98, "obs_434_mhz": 434.9070, "doppler_144_khz": 2.32, "obs_144_mhz": 144.9023}, + {"time_sec": -110, "velocity_kms": -4.57, "doppler_434_khz": 6.63, "obs_434_mhz": 434.9066, "doppler_144_khz": 2.21, "obs_144_mhz": 144.9022}, + {"time_sec": -100, "velocity_kms": -4.30, "doppler_434_khz": 6.24, "obs_434_mhz": 434.9062, "doppler_144_khz": 2.08, "obs_144_mhz": 144.9021}, + {"time_sec": -90, "velocity_kms": -4.00, "doppler_434_khz": 5.80, "obs_434_mhz": 434.9058, "doppler_144_khz": 1.93, "obs_144_mhz": 144.9019}, + {"time_sec": -80, "velocity_kms": -3.68, "doppler_434_khz": 5.34, "obs_434_mhz": 434.9053, "doppler_144_khz": 1.78, "obs_144_mhz": 144.9018}, + {"time_sec": -70, "velocity_kms": -3.32, "doppler_434_khz": 4.82, "obs_434_mhz": 434.9048, "doppler_144_khz": 1.60, "obs_144_mhz": 144.9016}, + {"time_sec": -60, "velocity_kms": -2.92, "doppler_434_khz": 4.24, "obs_434_mhz": 434.9042, "doppler_144_khz": 1.41, "obs_144_mhz": 144.9014}, + {"time_sec": -50, "velocity_kms": -2.50, "doppler_434_khz": 3.63, "obs_434_mhz": 434.9036, "doppler_144_khz": 1.21, "obs_144_mhz": 144.9012}, + {"time_sec": -40, "velocity_kms": -2.04, "doppler_434_khz": 2.96, "obs_434_mhz": 434.9030, "doppler_144_khz": 0.99, "obs_144_mhz": 144.9010}, + {"time_sec": -30, "velocity_kms": -1.56, "doppler_434_khz": 2.26, "obs_434_mhz": 434.9023, "doppler_144_khz": 0.75, "obs_144_mhz": 144.9008}, + {"time_sec": -20, "velocity_kms": -1.05, "doppler_434_khz": 1.52, "obs_434_mhz": 434.9015, "doppler_144_khz": 0.51, "obs_144_mhz": 144.9005}, + {"time_sec": -10, "velocity_kms": -0.53, "doppler_434_khz": 0.77, "obs_434_mhz": 434.9008, "doppler_144_khz": 0.26, "obs_144_mhz": 144.9003}, + {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, + {"time_sec": 10, "velocity_kms": 0.53, "doppler_434_khz": -0.77, "obs_434_mhz": 434.8992, "doppler_144_khz": -0.26, "obs_144_mhz": 144.8997}, + {"time_sec": 20, "velocity_kms": 1.05, "doppler_434_khz": -1.52, "obs_434_mhz": 434.8985, "doppler_144_khz": -0.51, "obs_144_mhz": 144.8995}, + {"time_sec": 30, "velocity_kms": 1.56, "doppler_434_khz": -2.26, "obs_434_mhz": 434.8977, "doppler_144_khz": -0.75, "obs_144_mhz": 144.8992}, + {"time_sec": 40, "velocity_kms": 2.04, "doppler_434_khz": -2.96, "obs_434_mhz": 434.8970, "doppler_144_khz": -0.99, "obs_144_mhz": 144.8990}, + {"time_sec": 50, "velocity_kms": 2.50, "doppler_434_khz": -3.63, "obs_434_mhz": 434.8964, "doppler_144_khz": -1.21, "obs_144_mhz": 144.8988}, + {"time_sec": 60, "velocity_kms": 2.92, "doppler_434_khz": -4.24, "obs_434_mhz": 434.8958, "doppler_144_khz": -1.41, "obs_144_mhz": 144.8986}, + {"time_sec": 70, "velocity_kms": 3.32, "doppler_434_khz": -4.82, "obs_434_mhz": 434.8952, "doppler_144_khz": -1.60, "obs_144_mhz": 144.8984}, + {"time_sec": 80, "velocity_kms": 3.68, "doppler_434_khz": -5.34, "obs_434_mhz": 434.8947, "doppler_144_khz": -1.78, "obs_144_mhz": 144.8982}, + {"time_sec": 90, "velocity_kms": 4.00, "doppler_434_khz": -5.80, "obs_434_mhz": 434.8942, "doppler_144_khz": -1.93, "obs_144_mhz": 144.8981}, + {"time_sec": 100, "velocity_kms": 4.30, "doppler_434_khz": -6.24, "obs_434_mhz": 434.8938, "doppler_144_khz": -2.08, "obs_144_mhz": 144.8979}, + {"time_sec": 110, "velocity_kms": 4.57, "doppler_434_khz": -6.63, "obs_434_mhz": 434.8934, "doppler_144_khz": -2.21, "obs_144_mhz": 144.8978}, + {"time_sec": 120, "velocity_kms": 4.81, "doppler_434_khz": -6.98, "obs_434_mhz": 434.8930, "doppler_144_khz": -2.32, "obs_144_mhz": 144.8977}, + {"time_sec": 130, "velocity_kms": 5.02, "doppler_434_khz": -7.28, "obs_434_mhz": 434.8927, "doppler_144_khz": -2.43, "obs_144_mhz": 144.8976}, + {"time_sec": 140, "velocity_kms": 5.22, "doppler_434_khz": -7.57, "obs_434_mhz": 434.8924, "doppler_144_khz": -2.52, "obs_144_mhz": 144.8975}, + {"time_sec": 150, "velocity_kms": 5.39, "doppler_434_khz": -7.82, "obs_434_mhz": 434.8922, "doppler_144_khz": -2.61, "obs_144_mhz": 144.8974}, + {"time_sec": 160, "velocity_kms": 5.55, "doppler_434_khz": -8.05, "obs_434_mhz": 434.8919, "doppler_144_khz": -2.68, "obs_144_mhz": 144.8973}, + {"time_sec": 170, "velocity_kms": 5.68, "doppler_434_khz": -8.24, "obs_434_mhz": 434.8918, "doppler_144_khz": -2.75, "obs_144_mhz": 144.8973}, + {"time_sec": 180, "velocity_kms": 5.81, "doppler_434_khz": -8.43, "obs_434_mhz": 434.8916, "doppler_144_khz": -2.81, "obs_144_mhz": 144.8972} + ], + 40: [ + {"time_sec": -180, "velocity_kms": -6.67, "doppler_434_khz": 9.68, "obs_434_mhz": 434.9097, "doppler_144_khz": 3.22, "obs_144_mhz": 144.9032}, + {"time_sec": -170, "velocity_kms": -6.60, "doppler_434_khz": 9.57, "obs_434_mhz": 434.9096, "doppler_144_khz": 3.19, "obs_144_mhz": 144.9032}, + {"time_sec": -160, "velocity_kms": -6.52, "doppler_434_khz": 9.46, "obs_434_mhz": 434.9095, "doppler_144_khz": 3.15, "obs_144_mhz": 144.9032}, + {"time_sec": -150, "velocity_kms": -6.43, "doppler_434_khz": 9.33, "obs_434_mhz": 434.9093, "doppler_144_khz": 3.11, "obs_144_mhz": 144.9031}, + {"time_sec": -140, "velocity_kms": -6.32, "doppler_434_khz": 9.17, "obs_434_mhz": 434.9092, "doppler_144_khz": 3.05, "obs_144_mhz": 144.9031}, + {"time_sec": -130, "velocity_kms": -6.19, "doppler_434_khz": 8.98, "obs_434_mhz": 434.9090, "doppler_144_khz": 2.99, "obs_144_mhz": 144.9030}, + {"time_sec": -120, "velocity_kms": -6.04, "doppler_434_khz": 8.76, "obs_434_mhz": 434.9088, "doppler_144_khz": 2.92, "obs_144_mhz": 144.9029}, + {"time_sec": -110, "velocity_kms": -5.86, "doppler_434_khz": 8.50, "obs_434_mhz": 434.9085, "doppler_144_khz": 2.83, "obs_144_mhz": 144.9028}, + {"time_sec": -100, "velocity_kms": -5.65, "doppler_434_khz": 8.20, "obs_434_mhz": 434.9082, "doppler_144_khz": 2.73, "obs_144_mhz": 144.9027}, + {"time_sec": -90, "velocity_kms": -5.39, "doppler_434_khz": 7.82, "obs_434_mhz": 434.9078, "doppler_144_khz": 2.61, "obs_144_mhz": 144.9026}, + {"time_sec": -80, "velocity_kms": -5.08, "doppler_434_khz": 7.37, "obs_434_mhz": 434.9074, "doppler_144_khz": 2.46, "obs_144_mhz": 144.9025}, + {"time_sec": -70, "velocity_kms": -4.72, "doppler_434_khz": 6.85, "obs_434_mhz": 434.9068, "doppler_144_khz": 2.28, "obs_144_mhz": 144.9023}, + {"time_sec": -60, "velocity_kms": -4.28, "doppler_434_khz": 6.21, "obs_434_mhz": 434.9062, "doppler_144_khz": 2.07, "obs_144_mhz": 144.9021}, + {"time_sec": -50, "velocity_kms": -3.77, "doppler_434_khz": 5.47, "obs_434_mhz": 434.9055, "doppler_144_khz": 1.82, "obs_144_mhz": 144.8993}, # manual note context adjustments active + {"time_sec": -40, "velocity_kms": -3.17, "doppler_434_khz": 4.60, "obs_434_mhz": 434.9046, "doppler_144_khz": 1.53, "obs_144_mhz": 144.9015}, + {"time_sec": -30, "velocity_kms": -2.48, "doppler_434_khz": 3.60, "obs_434_mhz": 434.9036, "doppler_144_khz": 1.20, "obs_144_mhz": 144.9012}, + {"time_sec": -20, "velocity_kms": -1.70, "doppler_434_khz": 2.47, "obs_434_mhz": 434.9025, "doppler_144_khz": 0.82, "obs_144_mhz": 144.9008}, + {"time_sec": -10, "velocity_kms": -0.87, "doppler_434_khz": 1.26, "obs_434_mhz": 434.9013, "doppler_144_khz": 0.42, "obs_144_mhz": 144.9004}, + {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, + {"time_sec": 10, "velocity_kms": 0.87, "doppler_434_khz": -1.26, "obs_434_mhz": 434.8987, "doppler_144_khz": -0.42, "obs_144_mhz": 144.8996}, + {"time_sec": 20, "velocity_kms": 1.70, "doppler_434_khz": -2.47, "obs_434_mhz": 434.8975, "doppler_144_khz": -0.82, "obs_144_mhz": 144.8992}, + {"time_sec": 30, "velocity_kms": 2.48, "doppler_434_khz": -3.60, "obs_434_mhz": 434.8964, "doppler_144_khz": -1.20, "obs_144_mhz": 144.8988}, + {"time_sec": 40, "velocity_kms": 3.17, "doppler_434_khz": -4.60, "obs_434_mhz": 434.8954, "doppler_144_khz": -1.53, "obs_144_mhz": 144.8985}, + {"time_sec": 50, "velocity_kms": 3.77, "doppler_434_khz": -5.47, "obs_434_mhz": 434.8945, "doppler_144_khz": -1.82, "obs_144_mhz": 144.8982}, + {"time_sec": 60, "velocity_kms": 4.28, "doppler_434_khz": -6.21, "obs_434_mhz": 434.8938, "doppler_144_khz": -2.07, "obs_144_mhz": 144.8979}, + {"time_sec": 70, "velocity_kms": 4.72, "doppler_434_khz": -6.85, "obs_434_mhz": 434.8932, "doppler_144_khz": -2.28, "obs_144_mhz": 144.8977}, + {"time_sec": 80, "velocity_kms": 5.08, "doppler_434_khz": -7.37, "obs_434_mhz": 434.8926, "doppler_144_khz": -2.46, "obs_144_mhz": 144.8975}, + {"time_sec": 90, "velocity_kms": 5.39, "doppler_434_khz": -7.82, "obs_434_mhz": 434.8922, "doppler_144_khz": -2.61, "obs_144_mhz": 144.8974} + ], + 70: [ + {"time_sec": -180, "velocity_kms": -7.00, "doppler_434_khz": 10.15, "obs_434_mhz": 434.9102, "doppler_144_khz": 3.38, "obs_144_mhz": 144.9034}, + {"time_sec": -170, "velocity_kms": -6.95, "doppler_434_khz": 10.09, "obs_434_mhz": 434.9101, "doppler_144_khz": 3.36, "obs_144_mhz": 144.9034}, + {"time_sec": -160, "velocity_kms": -6.91, "doppler_434_khz": 10.02, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.34, "obs_144_mhz": 144.9033}, + {"time_sec": -150, "velocity_kms": -6.86, "doppler_434_khz": 9.95, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.32, "obs_144_mhz": 144.9033}, + {"time_sec": -140, "velocity_kms": -6.78, "doppler_434_khz": 9.84, "obs_434_mhz": 434.9098, "doppler_144_khz": 3.28, "obs_144_mhz": 144.9033}, + {"time_sec": -130, "velocity_kms": -6.70, "doppler_434_khz": 9.72, "obs_434_mhz": 434.9097, "doppler_144_khz": 3.24, "obs_144_mhz": 144.9032}, + {"time_sec": -120, "velocity_kms": -6.62, "doppler_434_khz": 9.60, "obs_434_mhz": 434.9096, "doppler_144_khz": 3.20, "obs_144_mhz": 144.9032}, + {"time_sec": -110, "velocity_kms": -6.47, "doppler_434_khz": 9.39, "obs_434_mhz": 434.9094, "doppler_144_khz": 3.13, "obs_144_mhz": 144.9031}, + {"time_sec": -100, "velocity_kms": -6.32, "doppler_434_khz": 9.17, "obs_434_mhz": 434.9092, "doppler_144_khz": 3.05, "obs_144_mhz": 144.9031}, + {"time_sec": -90, "velocity_kms": -6.17, "doppler_434_khz": 8.95, "obs_434_mhz": 434.9090, "doppler_144_khz": 2.98, "obs_144_mhz": 144.9030}, + {"time_sec": -80, "velocity_kms": -5.86, "doppler_434_khz": 8.50, "obs_434_mhz": 434.9085, "doppler_144_khz": 2.83, "obs_144_mhz": 144.9028}, + {"time_sec": -70, "velocity_kms": -5.55, "doppler_434_khz": 8.05, "obs_434_mhz": 434.9081, "doppler_144_khz": 2.68, "obs_144_mhz": 144.9027}, + {"time_sec": -60, "velocity_kms": -5.24, "doppler_434_khz": 7.60, "obs_434_mhz": 434.9076, "doppler_144_khz": 2.53, "obs_144_mhz": 144.9025}, + {"time_sec": -50, "velocity_kms": -4.60, "doppler_434_khz": 6.67, "obs_434_mhz": 434.9067, "doppler_144_khz": 2.22, "obs_144_mhz": 144.9022}, + {"time_sec": -40, "velocity_kms": -3.96, "doppler_434_khz": 5.74, "obs_434_mhz": 434.9057, "doppler_144_khz": 1.91, "obs_144_mhz": 144.9019}, + {"time_sec": -30, "velocity_kms": -3.32, "doppler_434_khz": 4.82, "obs_434_mhz": 434.9048, "doppler_144_khz": 1.60, "obs_144_mhz": 144.9016}, + {"time_sec": -20, "velocity_kms": -2.21, "doppler_434_khz": 3.21, "obs_434_mhz": 434.9032, "doppler_144_khz": 1.07, "obs_144_mhz": 144.9011}, + {"time_sec": -10, "velocity_kms": -1.11, "doppler_434_khz": 1.61, "obs_434_mhz": 434.9016, "doppler_144_khz": 0.53, "obs_144_mhz": 144.9005}, + {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, + {"time_sec": 10, "velocity_kms": 1.11, "doppler_434_khz": -1.61, "obs_434_mhz": 434.8984, "doppler_144_khz": -0.53, "obs_144_mhz": 144.8995}, + {"time_sec": 20, "velocity_kms": 2.21, "doppler_434_khz": -3.21, "obs_434_mhz": 434.8968, "doppler_144_khz": -1.07, "obs_144_mhz": 144.8989}, + {"time_sec": 30, "velocity_kms": 3.32, "doppler_434_khz": -4.82, "obs_434_mhz": 434.8952, "doppler_144_khz": -1.60, "obs_144_mhz": 144.8984}, + {"time_sec": 40, "velocity_kms": 3.96, "doppler_434_khz": -5.74, "obs_434_mhz": 434.8943, "doppler_144_khz": -1.91, "obs_144_mhz": 144.8981}, + {"time_sec": 50, "velocity_kms": 4.60, "doppler_434_khz": -6.67, "obs_434_mhz": 434.8933, "doppler_144_khz": -2.22, "obs_144_mhz": 144.8978}, + {"time_sec": 60, "velocity_kms": 5.24, "doppler_434_khz": -7.60, "obs_434_mhz": 434.8924, "doppler_144_khz": -2.53, "obs_144_mhz": 144.8975}, + {"time_sec": 70, "velocity_kms": 5.55, "doppler_434_khz": -8.05, "obs_434_mhz": 434.8919, "doppler_144_khz": -2.68, "obs_144_mhz": 144.8973}, + {"time_sec": 80, "velocity_kms": 5.86, "doppler_434_khz": -8.50, "obs_434_mhz": 434.8915, "doppler_144_khz": -2.83, "obs_144_mhz": 144.8972}, + {"time_sec": 90, "velocity_kms": 6.17, "doppler_434_khz": -8.95, "obs_434_mhz": 434.8910, "doppler_144_khz": -2.98, "obs_144_mhz": 144.8970}, + {"time_sec": 100:, "velocity_kms": 6.32, "doppler_434_khz": -9.17, "obs_434_mhz": 434.8908, "doppler_144_khz": -3.05, "obs_144_mhz": 144.8969}, + {"time_sec": 110, "velocity_kms": 6.47, "doppler_434_khz": -9.39, "obs_434_mhz": 434.8906, "doppler_144_khz": -3.13, "obs_144_mhz": 144.8969}, + {"time_sec": 120, "velocity_kms": 6.62, "doppler_434_khz": -9.60, "obs_434_mhz": 434.8904, "doppler_144_khz": -3.20, "obs_144_mhz": 144.8968}, + {"time_sec": 130, "velocity_kms": 6.70, "doppler_434_khz": -9.72, "obs_434_mhz": 434.8903, "doppler_144_khz": -3.24, "obs_144_mhz": 144.8968}, + {"time_sec": 140, "velocity_kms": 6.78, "doppler_434_khz": -9.84, "obs_434_mhz": 434.8902, "doppler_144_khz": -3.28, "obs_144_mhz": 144.8967}, + {"time_sec": 150, "velocity_kms": 6.86, "doppler_434_khz": -9.95, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.32, "obs_144_mhz": 144.8967}, + {"time_sec": 160, "velocity_kms": 6.91, "doppler_434_khz": -10.02, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.34, "obs_144_mhz": 144.8967}, + {"time_sec": 170, "velocity_kms": 6.95, "doppler_434_khz": -10.09, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.36, "obs_144_mhz": 144.8966}, + {"time_sec": 180, "velocity_kms": 7.00, "doppler_434_khz": -10.15, "obs_434_mhz": 434.8898, "doppler_144_khz": -3.38, "obs_144_mhz": 144.8966} + ], + 85: [ + {"time_sec": -180, "velocity_kms": -7.15, "doppler_434_khz": 10.37, "obs_434_mhz": 434.9104, "doppler_144_khz": 3.46, "obs_144_mhz": 144.9035}, + {"time_sec": -170, "velocity_kms": -7.12, "doppler_434_khz": 10.32, "obs_434_mhz": 434.9103, "doppler_144_khz": 3.44, "obs_144_mhz": 144.9034}, + {"time_sec": -160, "velocity_kms": -7.08, "doppler_434_khz": 10.28, "obs_434_mhz": 434.9103, "doppler_144_khz": 3.42, "obs_144_mhz": 144.9034}, + {"time_sec": -150, "velocity_kms": -7.05, "doppler_434_khz": 10.23, "obs_434_mhz": 434.9102, "doppler_144_khz": 3.41, "obs_144_mhz": 144.9034}, + {"time_sec": -140, "velocity_kms": -6.99, "doppler_434_khz": 10.15, "obs_434_mhz": 434.9101, "doppler_144_khz": 3.38, "obs_144_mhz": 144.9034}, + {"time_sec": -130, "velocity_kms": -6.94, "doppler_434_khz": 10.06, "obs_434_mhz": 434.9101, "doppler_144_khz": 3.35, "obs_144_mhz": 144.9034}, + {"time_sec": -120, "velocity_kms": -6.88, "doppler_434_khz": 9.98, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.33, "obs_144_mhz": 144.9033}, + {"time_sec": -110, "velocity_kms": -6.75, "doppler_434_khz": 9.80, "obs_434_mhz": 434.9098, "doppler_144_khz": 3.26, "obs_144_mhz": 144.9033}, + {"time_sec": -100, "velocity_kms": -6.63, "doppler_434_khz": 9.61, "obs_434_mhz": 434.9096, "doppler_144_khz": 3.20, "obs_144_mhz": 144.9032}, + {"time_sec": -90, "velocity_kms": -6.50, "doppler_434_khz": 9.43, "obs_434_mhz": 434.9094, "doppler_144_khz": 3.14, "obs_144_mhz": 144.9031}, + {"time_sec": -80, "velocity_kms": -6.23, "doppler_434_khz": 9.04, "obs_434_mhz": 434.9090, "doppler_144_khz": 3.01, "obs_144_mhz": 144.9030}, + {"time_sec": -70, "velocity_kms": -5.97, "doppler_434_khz": 8.66, "obs_434_mhz": 434.9087, "doppler_144_khz": 2.88, "obs_144_mhz": 144.9029}, + {"time_sec": -60, "velocity_kms": -5.70, "doppler_434_khz": 8.27, "obs_434_mhz": 434.9083, "doppler_144_khz": 2.76, "obs_144_mhz": 144.9028}, + {"time_sec": -50, "velocity_kms": -5.10, "doppler_434_khz": 7.40, "obs_434_mhz": 434.9074, "doppler_144_khz": 2.47, "obs_144_mhz": 144.9025}, + {"time_sec": -40, "velocity_kms": -4.50, "doppler_434_khz": 6.53, "obs_434_mhz": 434.9065, "doppler_144_khz": 2.18, "obs_144_mhz": 144.9022}, + {"time_sec": -30, "velocity_kms": -3.90, "doppler_434_khz": 5.66, "obs_434_mhz": 434.9057, "doppler_144_khz": 1.89, "obs_144_mhz": 144.9019}, + {"time_sec": -20 ,"velocity_kms": -2.60, "doppler_434_khz": 3.77, "obs_434_mhz": 434.9038, "doppler_144_khz": 1.26, "obs_144_mhz": 144.9013}, + {"time_sec": -10 ,"velocity_kms": -1.30, "doppler_434_khz": 1.89, "obs_434_mhz": 434.9019, "doppler_144_khz": 0.63, "obs_144_mhz": 144.9006}, + {"time_sec": 0 ,"velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, + {"time_sec": 10 ,"velocity_kms": 1.30, "doppler_434_khz": -1.89, "obs_434_mhz": 434.8981, "doppler_144_khz": -0.63, "obs_144_mhz": 144.8994}, + {"time_sec": 20 ,"velocity_kms": 2.60, "doppler_434_khz": -3.77, "obs_434_mhz": 434.8962, "doppler_144_khz": -1.26, "obs_144_mhz": 144.8987}, + {"time_sec": 30 ,"velocity_kms": 3.90, "doppler_434_khz": -5.66, "obs_434_mhz": 434.8943, "doppler_144_khz": -1.89, "obs_144_mhz": 144.8981}, + {"time_sec": 40 ,"velocity_kms": 4.50, "doppler_434_khz": -6.53, "obs_434_mhz": 434.8935, "doppler_144_khz": -2.18, "obs_144_mhz": 144.8978}, + {"time_sec": 50 ,"velocity_kms": 5.10, "doppler_434_khz": -7.40, "obs_434_mhz": 434.8926, "doppler_144_khz": -2.47, "obs_144_mhz": 144.8975}, + {"time_sec": 60 ,"velocity_kms": 5.70, "doppler_434_khz": -8.27, "obs_434_mhz": 434.8917, "doppler_144_khz": -2.76, "obs_144_mhz": 144.8972}, + {"time_sec": 70 ,"velocity_kms": 5.97, "doppler_434_khz": -8.66, "obs_434_mhz": 434.8913, "doppler_144_khz": -2.88, "obs_144_mhz": 144.8971}, + {"time_sec": 80 ,"velocity_kms": 6.23, "doppler_434_khz": -9.04, "obs_434_mhz": 434.8910, "doppler_144_khz": -3.01, "obs_144_mhz": 144.8970}, + {"time_sec": 90 ,"velocity_kms": 6.50, "doppler_434_khz": -9.43, "obs_434_mhz": 434.8906, "doppler_144_khz": -3.14, "obs_144_mhz": 144.8969}, + {"time_sec": 100 ,"velocity_kms": 6.63, "doppler_434_khz": -9.61, "obs_434_mhz": 434.8904, "doppler_144_khz": -3.20, "obs_144_mhz": 144.8968}, + {"time_sec": 110 ,"velocity_kms": 6.75, "doppler_434_khz": -9.80, "obs_434_mhz": 434.8902, "doppler_144_khz": -3.26, "obs_144_mhz": 144.8967}, + {"time_sec": 120 ,"velocity_kms": 6.88, "doppler_434_khz": -9.98, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.33, "obs_144_mhz": 144.8967}, + {"time_sec": 130 ,"velocity_kms": 6.94, "doppler_434_khz": -10.06, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.35, "obs_144_mhz": 144.8966}, + {"time_sec": 140 ,"velocity_kms": 6.99, "doppler_434_khz": -10.15, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.38, "obs_144_mhz": 144.8966}, + {"time_sec": 150 ,"velocity_kms": 7.05, "doppler_434_khz": -10.23, "obs_434_mhz": 434.8898, "doppler_144_khz": -3.41, "obs_144_mhz": 144.8966}, + {"time_sec": 160 ,"velocity_kms": 7.08, "doppler_434_khz": -10.28, "obs_434_mhz": 434.8917, "doppler_144_khz": -3.42, "obs_144_mhz": 144.8966}, + {"time_sec": 170 ,"velocity_kms": 7.12, "doppler_434_khz": -10.32, "obs_434_mhz": 434.8897, "doppler_144_khz": -3.44, "obs_144_mhz": 144.8966}, + {"time_sec": 180 ,"velocity_kms": 7.15, "doppler_434_khz": -10.37, "obs_434_mhz": 434.8896, "doppler_144_khz": -3.46, "obs_144_mhz": 144.8965} + ] +} + print("CubeSatSim v2.2 transmit.py starting...") pd = 21 From 42978df6ce57aa8ffb924f1b98c0132d5d7eba46 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 15:29:16 -0400 Subject: [PATCH 018/287] Update transmit.py extra : --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index c9dbfd83..9bf72d46 100644 --- a/transmit.py +++ b/transmit.py @@ -368,7 +368,7 @@ iss_doppler_passes = { {"time_sec": 70, "velocity_kms": 5.55, "doppler_434_khz": -8.05, "obs_434_mhz": 434.8919, "doppler_144_khz": -2.68, "obs_144_mhz": 144.8973}, {"time_sec": 80, "velocity_kms": 5.86, "doppler_434_khz": -8.50, "obs_434_mhz": 434.8915, "doppler_144_khz": -2.83, "obs_144_mhz": 144.8972}, {"time_sec": 90, "velocity_kms": 6.17, "doppler_434_khz": -8.95, "obs_434_mhz": 434.8910, "doppler_144_khz": -2.98, "obs_144_mhz": 144.8970}, - {"time_sec": 100:, "velocity_kms": 6.32, "doppler_434_khz": -9.17, "obs_434_mhz": 434.8908, "doppler_144_khz": -3.05, "obs_144_mhz": 144.8969}, + {"time_sec": 100, "velocity_kms": 6.32, "doppler_434_khz": -9.17, "obs_434_mhz": 434.8908, "doppler_144_khz": -3.05, "obs_144_mhz": 144.8969}, {"time_sec": 110, "velocity_kms": 6.47, "doppler_434_khz": -9.39, "obs_434_mhz": 434.8906, "doppler_144_khz": -3.13, "obs_144_mhz": 144.8969}, {"time_sec": 120, "velocity_kms": 6.62, "doppler_434_khz": -9.60, "obs_434_mhz": 434.8904, "doppler_144_khz": -3.20, "obs_144_mhz": 144.8968}, {"time_sec": 130, "velocity_kms": 6.70, "doppler_434_khz": -9.72, "obs_434_mhz": 434.8903, "doppler_144_khz": -3.24, "obs_144_mhz": 144.8968}, From c55843147f8d408dacb1120a1f2cd3234528f286 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 15:37:34 -0400 Subject: [PATCH 019/287] Update transmit.py add doppler retrieval code --- transmit.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/transmit.py b/transmit.py index 9bf72d46..8e00fd32 100644 --- a/transmit.py +++ b/transmit.py @@ -1142,6 +1142,32 @@ if __name__ == "__main__": rx_doppler_start_hz = rxf * 1e6 rx_doppler_shift_hz = 0 print(rx_doppler_start_hz) + + TARGET_PASS = 85 # Maximum elevation profile + PASS_START_TIME = -180 # The absolute time index where the pass begins + TIME_FROM_START = 30 # 30 seconds into the pass + + # Map the "time from start" to the "relative time index" used in the table + relative_time_index = PASS_START_TIME + TIME_FROM_START + index = 10/10 + + try: + # Navigate the dictionary structure + pass_profile = iss_doppler_database[TARGET_PASS] + data_entry = pass_profile[index] # relative_time_index] + + # Extract the specific metric + doppler_shift = data_entry["doppler_434"] + + print(f"Pass Elevation: {TARGET_PASS}°") +# print(f"Time Index: {TIME_FROM_START} seconds from start (Relative: {relative_time_index}s)") + print(f"Time Index: {index}") + print(f"Extracted Doppler Shift (434.9 MHz): {doppler_shift} kHz") + + except KeyError: + print("Error: The requested pass elevation or time index does not exist in the database.") + + while True: if (input(squelch) == False) and (command_tx == True): tx_doppler_shift_hz = ((time.perf_counter() - start_time) * 100) % 20000 From 8fc5d62437a921f82d27e49b0d6ca31c8a4c1dce Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 15:38:33 -0400 Subject: [PATCH 020/287] Update transmit.py change to passes --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 8e00fd32..8b70a3c6 100644 --- a/transmit.py +++ b/transmit.py @@ -1153,7 +1153,7 @@ if __name__ == "__main__": try: # Navigate the dictionary structure - pass_profile = iss_doppler_database[TARGET_PASS] + pass_profile = iss_doppler_passes[TARGET_PASS] data_entry = pass_profile[index] # relative_time_index] # Extract the specific metric From d9eb34fef2d6356185e56807ce1e71a7bda5dfbd Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 15:39:53 -0400 Subject: [PATCH 021/287] Update transmit.py make index int --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 8b70a3c6..053fa491 100644 --- a/transmit.py +++ b/transmit.py @@ -1149,7 +1149,7 @@ if __name__ == "__main__": # Map the "time from start" to the "relative time index" used in the table relative_time_index = PASS_START_TIME + TIME_FROM_START - index = 10/10 + index = int(10/10) try: # Navigate the dictionary structure From 6da20d3c4e8dc0a188eb796fc3223f176f6c4dee Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 15:48:42 -0400 Subject: [PATCH 022/287] Update transmit.py change indexes --- transmit.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/transmit.py b/transmit.py index 053fa491..351a9c32 100644 --- a/transmit.py +++ b/transmit.py @@ -1153,11 +1153,18 @@ if __name__ == "__main__": try: # Navigate the dictionary structure - pass_profile = iss_doppler_passes[TARGET_PASS] - data_entry = pass_profile[index] # relative_time_index] - - # Extract the specific metric - doppler_shift = data_entry["doppler_434"] +# pass_profile = iss_doppler_passes[TARGET_PASS] +# data_entry = pass_profile[index] # relative_time_index] + + third_row = iss_doppler_passes[TARGET_PASS][index] + + print("Full Third:") + print(third_row) + print("\n" + "="*40 + "\n") + + time_index = third_row["time_sec"] + doppler_shift = third_row["doppler_434"] + uhf_freq = third_row["obs_434_mhz"] print(f"Pass Elevation: {TARGET_PASS}°") # print(f"Time Index: {TIME_FROM_START} seconds from start (Relative: {relative_time_index}s)") From af69b00d62bb7fff6e0b06bbef44c37f2c8ee765 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 15:50:10 -0400 Subject: [PATCH 023/287] Update transmit.py fix indent --- transmit.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/transmit.py b/transmit.py index 351a9c32..f7a8f2e8 100644 --- a/transmit.py +++ b/transmit.py @@ -1166,15 +1166,14 @@ if __name__ == "__main__": doppler_shift = third_row["doppler_434"] uhf_freq = third_row["obs_434_mhz"] - print(f"Pass Elevation: {TARGET_PASS}°") + print(f"Pass Elevation: {TARGET_PASS}°") # print(f"Time Index: {TIME_FROM_START} seconds from start (Relative: {relative_time_index}s)") - print(f"Time Index: {index}") - print(f"Extracted Doppler Shift (434.9 MHz): {doppler_shift} kHz") + print(f"Time Index: {index}") + print(f"Extracted Doppler Shift (434.9 MHz): {doppler_shift} kHz") except KeyError: - print("Error: The requested pass elevation or time index does not exist in the database.") - - + print("Error: The requested pass elevation or time index does not exist in the database.") + while True: if (input(squelch) == False) and (command_tx == True): tx_doppler_shift_hz = ((time.perf_counter() - start_time) * 100) % 20000 From 56efeff989e9dbbe0d107c504d0f3e90c68be618 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 15:53:33 -0400 Subject: [PATCH 024/287] Update transmit.py fix index --- transmit.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index f7a8f2e8..285ae666 100644 --- a/transmit.py +++ b/transmit.py @@ -1163,13 +1163,14 @@ if __name__ == "__main__": print("\n" + "="*40 + "\n") time_index = third_row["time_sec"] - doppler_shift = third_row["doppler_434"] + doppler_shift = third_row["doppler_434_khz"] uhf_freq = third_row["obs_434_mhz"] print(f"Pass Elevation: {TARGET_PASS}°") # print(f"Time Index: {TIME_FROM_START} seconds from start (Relative: {relative_time_index}s)") print(f"Time Index: {index}") print(f"Extracted Doppler Shift (434.9 MHz): {doppler_shift} kHz") + print(f"UHF frequency (434.9 MHz): {uhf_freq} MHz") except KeyError: print("Error: The requested pass elevation or time index does not exist in the database.") From 856d4ac540c23b6e8ff60c451c7f87cb84e173a2 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 16:05:28 -0400 Subject: [PATCH 025/287] Update transmit.py lookup tx and rx doppler --- transmit.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/transmit.py b/transmit.py index 285ae666..4c063826 100644 --- a/transmit.py +++ b/transmit.py @@ -269,7 +269,7 @@ def stop_repeater(): print("Finished resetting audio") # print("Ready to detect carrier") -iss_doppler_passes = { +doppler_passes = { 20: [ {"time_sec": -180, "velocity_kms": -5.81, "doppler_434_khz": 8.43, "obs_434_mhz": 434.9084, "doppler_144_khz": 2.81, "obs_144_mhz": 144.9028}, {"time_sec": -170, "velocity_kms": -5.68, "doppler_434_khz": 8.24, "obs_434_mhz": 434.9082, "doppler_144_khz": 2.75, "obs_144_mhz": 144.9027}, @@ -1156,6 +1156,7 @@ if __name__ == "__main__": # pass_profile = iss_doppler_passes[TARGET_PASS] # data_entry = pass_profile[index] # relative_time_index] + doppler_table = iss_doppler_passes[TARGET_PASS] third_row = iss_doppler_passes[TARGET_PASS][index] print("Full Third:") @@ -1177,15 +1178,22 @@ if __name__ == "__main__": while True: if (input(squelch) == False) and (command_tx == True): - tx_doppler_shift_hz = ((time.perf_counter() - start_time) * 100) % 20000 + + relative_time = time.perf_counter() - start_time + index = int(relative_time/10) + table_row = iss_doppler_table[index] + rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 + tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 + +# tx_doppler_shift_hz = ((time.perf_counter() - start_time) * 100) % 20000 tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz - print(tx_doppler_freq_hz) + print(f"Tx Doppler shift: {tx_doppler_freq_hz}") txr = "{:.3f}".format(tx_doppler_freq_hz/1000) print(txr) rx_doppler_freq_hz = rx_doppler_start_hz + tx_doppler_shift_hz - print(rx_doppler_freq_hz) + print(f"Rx Doppler shift: {rx_doppler_freq_hz}") rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) - print(rx) +# print(rx) program_fm(rx,tx,rxpl_value,sq,txpl_value) print("Carrier detected") start_repeater(txr) From 81f428db9fb79a4c69a77806b56aeef5d946b11f Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 16:06:56 -0400 Subject: [PATCH 026/287] Update transmit.py change to doppler_table --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 4c063826..524d5a53 100644 --- a/transmit.py +++ b/transmit.py @@ -1181,7 +1181,7 @@ if __name__ == "__main__": relative_time = time.perf_counter() - start_time index = int(relative_time/10) - table_row = iss_doppler_table[index] + table_row = doppler_table[index] rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 From faba648eae4909599401eebd2e0ab7612f8c1a98 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 16:08:32 -0400 Subject: [PATCH 027/287] Update transmit.py iss_doppler_passes --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 524d5a53..048ddaed 100644 --- a/transmit.py +++ b/transmit.py @@ -269,7 +269,7 @@ def stop_repeater(): print("Finished resetting audio") # print("Ready to detect carrier") -doppler_passes = { +iss_doppler_passes = { 20: [ {"time_sec": -180, "velocity_kms": -5.81, "doppler_434_khz": 8.43, "obs_434_mhz": 434.9084, "doppler_144_khz": 2.81, "obs_144_mhz": 144.9028}, {"time_sec": -170, "velocity_kms": -5.68, "doppler_434_khz": 8.24, "obs_434_mhz": 434.9082, "doppler_144_khz": 2.75, "obs_144_mhz": 144.9027}, From 2ecd386418c0dd03750a8270fa06c94e331f36ea Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 16:19:08 -0400 Subject: [PATCH 028/287] Update transmit.py time in 370 second periods --- transmit.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/transmit.py b/transmit.py index 048ddaed..88daea48 100644 --- a/transmit.py +++ b/transmit.py @@ -1138,17 +1138,17 @@ if __name__ == "__main__": start_time = time.perf_counter() tx_doppler_start_hz = txrf * 1e6 tx_doppler_shift_hz = 0 - print(tx_doppler_start_hz) + print(f"Tx center frequency: {tx_doppler_start_hz}") rx_doppler_start_hz = rxf * 1e6 rx_doppler_shift_hz = 0 - print(rx_doppler_start_hz) + print(f"Rx center frequency: {rx_doppler_start_hz}") TARGET_PASS = 85 # Maximum elevation profile - PASS_START_TIME = -180 # The absolute time index where the pass begins - TIME_FROM_START = 30 # 30 seconds into the pass +# PASS_START_TIME = -180 # The absolute time index where the pass begins +# TIME_FROM_START = 30 # 30 seconds into the pass # Map the "time from start" to the "relative time index" used in the table - relative_time_index = PASS_START_TIME + TIME_FROM_START +# relative_time_index = PASS_START_TIME + TIME_FROM_START index = int(10/10) try: @@ -1159,9 +1159,9 @@ if __name__ == "__main__": doppler_table = iss_doppler_passes[TARGET_PASS] third_row = iss_doppler_passes[TARGET_PASS][index] - print("Full Third:") - print(third_row) - print("\n" + "="*40 + "\n") +# print("Full Third:") +# print(third_row) +# print("\n" + "="*40 + "\n") time_index = third_row["time_sec"] doppler_shift = third_row["doppler_434_khz"] @@ -1170,8 +1170,8 @@ if __name__ == "__main__": print(f"Pass Elevation: {TARGET_PASS}°") # print(f"Time Index: {TIME_FROM_START} seconds from start (Relative: {relative_time_index}s)") print(f"Time Index: {index}") - print(f"Extracted Doppler Shift (434.9 MHz): {doppler_shift} kHz") - print(f"UHF frequency (434.9 MHz): {uhf_freq} MHz") + print(f"Extracted Doppler Shift (435.0 MHz): {doppler_shift} kHz") + print(f"UHF frequency (435.0 MHz): {uhf_freq} MHz") except KeyError: print("Error: The requested pass elevation or time index does not exist in the database.") @@ -1179,7 +1179,7 @@ if __name__ == "__main__": while True: if (input(squelch) == False) and (command_tx == True): - relative_time = time.perf_counter() - start_time + relative_time = (time.perf_counter() - start_time) % 370 index = int(relative_time/10) table_row = doppler_table[index] rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 @@ -1190,7 +1190,7 @@ if __name__ == "__main__": print(f"Tx Doppler shift: {tx_doppler_freq_hz}") txr = "{:.3f}".format(tx_doppler_freq_hz/1000) print(txr) - rx_doppler_freq_hz = rx_doppler_start_hz + tx_doppler_shift_hz + rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz print(f"Rx Doppler shift: {rx_doppler_freq_hz}") rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) # print(rx) From d9d6b90c21a4d691bb513fd67f37c883dee32847 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 16:38:52 -0400 Subject: [PATCH 029/287] Update transmit.py cleanup doppler table --- transmit.py | 109 ++++++++++++++++++++++++++++------------------------ 1 file changed, 59 insertions(+), 50 deletions(-) diff --git a/transmit.py b/transmit.py index 88daea48..bc589740 100644 --- a/transmit.py +++ b/transmit.py @@ -337,38 +337,47 @@ iss_doppler_passes = { {"time_sec": 60, "velocity_kms": 4.28, "doppler_434_khz": -6.21, "obs_434_mhz": 434.8938, "doppler_144_khz": -2.07, "obs_144_mhz": 144.8979}, {"time_sec": 70, "velocity_kms": 4.72, "doppler_434_khz": -6.85, "obs_434_mhz": 434.8932, "doppler_144_khz": -2.28, "obs_144_mhz": 144.8977}, {"time_sec": 80, "velocity_kms": 5.08, "doppler_434_khz": -7.37, "obs_434_mhz": 434.8926, "doppler_144_khz": -2.46, "obs_144_mhz": 144.8975}, - {"time_sec": 90, "velocity_kms": 5.39, "doppler_434_khz": -7.82, "obs_434_mhz": 434.8922, "doppler_144_khz": -2.61, "obs_144_mhz": 144.8974} - ], + {"time_sec": 90, "velocity_kms": 5.39, "doppler_434_khz": -7.82, "obs_434_mhz": 434.8922, "doppler_144_khz": -2.61, "obs_144_mhz": 144.8974}, + {"time_sec": 100, "velocity_kms": 0.87, "doppler_434_khz": -8.19, "obs_434_mhz": 434.8918, "doppler_144_khz": -2.73, "obs_144_mhz": 144.8973}, + {"time_sec": 110, "velocity_kms": 1.70, "doppler_434_khz": -8.50, "obs_434_mhz": 434.8915, "doppler_144_khz": -2.83, "obs_144_mhz": 144.8972}, + {"time_sec": 120, "velocity_kms": 2.48, "doppler_434_khz": -8.76, "obs_434_mhz": 434.8912, "doppler_144_khz": -2.92, "obs_144_mhz": 144.8971}, + {"time_sec": 130, "velocity_kms": 3.17, "doppler_434_khz": -8.98, "obs_434_mhz": 434.8910, "doppler_144_khz": -2.99, "obs_144_mhz": 144.8970}, + {"time_sec": 140, "velocity_kms": 3.77, "doppler_434_khz": -9.17, "obs_434_mhz": 434.8908, "doppler_144_khz": -3.05, "obs_144_mhz": 144.8969}, + {"time_sec": 150, "velocity_kms": 4.28, "doppler_434_khz": -9.33, "obs_434_mhz": 434.8907, "doppler_144_khz": -3.11, "obs_144_mhz": 144.8969}, + {"time_sec": 160, "velocity_kms": 4.72, "doppler_434_khz": -9.46, "obs_434_mhz": 434.8905, "doppler_144_khz": -3.15, "obs_144_mhz": 144.8968}, + {"time_sec": 170, "velocity_kms": 5.08, "doppler_434_khz": -9.58, "obs_434_mhz": 434.8904, "doppler_144_khz": -3.19, "obs_144_mhz": 144.8968}, + {"time_sec": 180, "velocity_kms": 5.39, "doppler_434_khz": -9.68, "obs_434_mhz": 434.8903, "doppler_144_khz": -3.22, "obs_144_mhz": 144.8968} + ], 70: [ {"time_sec": -180, "velocity_kms": -7.00, "doppler_434_khz": 10.15, "obs_434_mhz": 434.9102, "doppler_144_khz": 3.38, "obs_144_mhz": 144.9034}, {"time_sec": -170, "velocity_kms": -6.95, "doppler_434_khz": 10.09, "obs_434_mhz": 434.9101, "doppler_144_khz": 3.36, "obs_144_mhz": 144.9034}, {"time_sec": -160, "velocity_kms": -6.91, "doppler_434_khz": 10.02, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.34, "obs_144_mhz": 144.9033}, - {"time_sec": -150, "velocity_kms": -6.86, "doppler_434_khz": 9.95, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.32, "obs_144_mhz": 144.9033}, - {"time_sec": -140, "velocity_kms": -6.78, "doppler_434_khz": 9.84, "obs_434_mhz": 434.9098, "doppler_144_khz": 3.28, "obs_144_mhz": 144.9033}, - {"time_sec": -130, "velocity_kms": -6.70, "doppler_434_khz": 9.72, "obs_434_mhz": 434.9097, "doppler_144_khz": 3.24, "obs_144_mhz": 144.9032}, - {"time_sec": -120, "velocity_kms": -6.62, "doppler_434_khz": 9.60, "obs_434_mhz": 434.9096, "doppler_144_khz": 3.20, "obs_144_mhz": 144.9032}, - {"time_sec": -110, "velocity_kms": -6.47, "doppler_434_khz": 9.39, "obs_434_mhz": 434.9094, "doppler_144_khz": 3.13, "obs_144_mhz": 144.9031}, - {"time_sec": -100, "velocity_kms": -6.32, "doppler_434_khz": 9.17, "obs_434_mhz": 434.9092, "doppler_144_khz": 3.05, "obs_144_mhz": 144.9031}, - {"time_sec": -90, "velocity_kms": -6.17, "doppler_434_khz": 8.95, "obs_434_mhz": 434.9090, "doppler_144_khz": 2.98, "obs_144_mhz": 144.9030}, - {"time_sec": -80, "velocity_kms": -5.86, "doppler_434_khz": 8.50, "obs_434_mhz": 434.9085, "doppler_144_khz": 2.83, "obs_144_mhz": 144.9028}, - {"time_sec": -70, "velocity_kms": -5.55, "doppler_434_khz": 8.05, "obs_434_mhz": 434.9081, "doppler_144_khz": 2.68, "obs_144_mhz": 144.9027}, - {"time_sec": -60, "velocity_kms": -5.24, "doppler_434_khz": 7.60, "obs_434_mhz": 434.9076, "doppler_144_khz": 2.53, "obs_144_mhz": 144.9025}, - {"time_sec": -50, "velocity_kms": -4.60, "doppler_434_khz": 6.67, "obs_434_mhz": 434.9067, "doppler_144_khz": 2.22, "obs_144_mhz": 144.9022}, - {"time_sec": -40, "velocity_kms": -3.96, "doppler_434_khz": 5.74, "obs_434_mhz": 434.9057, "doppler_144_khz": 1.91, "obs_144_mhz": 144.9019}, - {"time_sec": -30, "velocity_kms": -3.32, "doppler_434_khz": 4.82, "obs_434_mhz": 434.9048, "doppler_144_khz": 1.60, "obs_144_mhz": 144.9016}, - {"time_sec": -20, "velocity_kms": -2.21, "doppler_434_khz": 3.21, "obs_434_mhz": 434.9032, "doppler_144_khz": 1.07, "obs_144_mhz": 144.9011}, - {"time_sec": -10, "velocity_kms": -1.11, "doppler_434_khz": 1.61, "obs_434_mhz": 434.9016, "doppler_144_khz": 0.53, "obs_144_mhz": 144.9005}, - {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, - {"time_sec": 10, "velocity_kms": 1.11, "doppler_434_khz": -1.61, "obs_434_mhz": 434.8984, "doppler_144_khz": -0.53, "obs_144_mhz": 144.8995}, - {"time_sec": 20, "velocity_kms": 2.21, "doppler_434_khz": -3.21, "obs_434_mhz": 434.8968, "doppler_144_khz": -1.07, "obs_144_mhz": 144.8989}, - {"time_sec": 30, "velocity_kms": 3.32, "doppler_434_khz": -4.82, "obs_434_mhz": 434.8952, "doppler_144_khz": -1.60, "obs_144_mhz": 144.8984}, - {"time_sec": 40, "velocity_kms": 3.96, "doppler_434_khz": -5.74, "obs_434_mhz": 434.8943, "doppler_144_khz": -1.91, "obs_144_mhz": 144.8981}, - {"time_sec": 50, "velocity_kms": 4.60, "doppler_434_khz": -6.67, "obs_434_mhz": 434.8933, "doppler_144_khz": -2.22, "obs_144_mhz": 144.8978}, - {"time_sec": 60, "velocity_kms": 5.24, "doppler_434_khz": -7.60, "obs_434_mhz": 434.8924, "doppler_144_khz": -2.53, "obs_144_mhz": 144.8975}, - {"time_sec": 70, "velocity_kms": 5.55, "doppler_434_khz": -8.05, "obs_434_mhz": 434.8919, "doppler_144_khz": -2.68, "obs_144_mhz": 144.8973}, - {"time_sec": 80, "velocity_kms": 5.86, "doppler_434_khz": -8.50, "obs_434_mhz": 434.8915, "doppler_144_khz": -2.83, "obs_144_mhz": 144.8972}, - {"time_sec": 90, "velocity_kms": 6.17, "doppler_434_khz": -8.95, "obs_434_mhz": 434.8910, "doppler_144_khz": -2.98, "obs_144_mhz": 144.8970}, - {"time_sec": 100, "velocity_kms": 6.32, "doppler_434_khz": -9.17, "obs_434_mhz": 434.8908, "doppler_144_khz": -3.05, "obs_144_mhz": 144.8969}, + {"time_sec": -150, "velocity_kms": -6.86, "doppler_434_khz": 9.95, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.32, "obs_144_mhz": 144.9033}, + {"time_sec": -140, "velocity_kms": -6.78, "doppler_434_khz": 9.84, "obs_434_mhz": 434.9098, "doppler_144_khz": 3.28, "obs_144_mhz": 144.9033}, + {"time_sec": -130, "velocity_kms": -6.70, "doppler_434_khz": 9.72, "obs_434_mhz": 434.9097, "doppler_144_khz": 3.24, "obs_144_mhz": 144.9032}, + {"time_sec": -120, "velocity_kms": -6.62, "doppler_434_khz": 9.60, "obs_434_mhz": 434.9096, "doppler_144_khz": 3.20, "obs_144_mhz": 144.9032}, + {"time_sec": -110, "velocity_kms": -6.47, "doppler_434_khz": 9.39, "obs_434_mhz": 434.9094, "doppler_144_khz": 3.13, "obs_144_mhz": 144.9031}, + {"time_sec": -100, "velocity_kms": -6.32, "doppler_434_khz": 9.17, "obs_434_mhz": 434.9092, "doppler_144_khz": 3.05, "obs_144_mhz": 144.9031}, + {"time_sec": -90, "velocity_kms": -6.17, "doppler_434_khz": 8.95, "obs_434_mhz": 434.9090, "doppler_144_khz": 2.98, "obs_144_mhz": 144.9030}, + {"time_sec": -80, "velocity_kms": -5.86, "doppler_434_khz": 8.50, "obs_434_mhz": 434.9085, "doppler_144_khz": 2.83, "obs_144_mhz": 144.9028}, + {"time_sec": -70, "velocity_kms": -5.55, "doppler_434_khz": 8.05, "obs_434_mhz": 434.9081, "doppler_144_khz": 2.68, "obs_144_mhz": 144.9027}, + {"time_sec": -60, "velocity_kms": -5.24, "doppler_434_khz": 7.60, "obs_434_mhz": 434.9076, "doppler_144_khz": 2.53, "obs_144_mhz": 144.9025}, + {"time_sec": -50, "velocity_kms": -4.60, "doppler_434_khz": 6.67, "obs_434_mhz": 434.9067, "doppler_144_khz": 2.22, "obs_144_mhz": 144.9022}, + {"time_sec": -40, "velocity_kms": -3.96, "doppler_434_khz": 5.74, "obs_434_mhz": 434.9057, "doppler_144_khz": 1.91, "obs_144_mhz": 144.9019}, + {"time_sec": -30, "velocity_kms": -3.32, "doppler_434_khz": 4.82, "obs_434_mhz": 434.9048, "doppler_144_khz": 1.60, "obs_144_mhz": 144.9016}, + {"time_sec": -20, "velocity_kms": -2.21, "doppler_434_khz": 3.21, "obs_434_mhz": 434.9032, "doppler_144_khz": 1.07, "obs_144_mhz": 144.9011}, + {"time_sec": -10, "velocity_kms": -1.11, "doppler_434_khz": 1.61, "obs_434_mhz": 434.9016, "doppler_144_khz": 0.53, "obs_144_mhz": 144.9005}, + {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, + {"time_sec": 10, "velocity_kms": 1.11, "doppler_434_khz": -1.61, "obs_434_mhz": 434.8984, "doppler_144_khz": -0.53, "obs_144_mhz": 144.8995}, + {"time_sec": 20, "velocity_kms": 2.21, "doppler_434_khz": -3.21, "obs_434_mhz": 434.8968, "doppler_144_khz": -1.07, "obs_144_mhz": 144.8989}, + {"time_sec": 30, "velocity_kms": 3.32, "doppler_434_khz": -4.82, "obs_434_mhz": 434.8952, "doppler_144_khz": -1.60, "obs_144_mhz": 144.8984}, + {"time_sec": 40, "velocity_kms": 3.96, "doppler_434_khz": -5.74, "obs_434_mhz": 434.8943, "doppler_144_khz": -1.91, "obs_144_mhz": 144.8981}, + {"time_sec": 50, "velocity_kms": 4.60, "doppler_434_khz": -6.67, "obs_434_mhz": 434.8933, "doppler_144_khz": -2.22, "obs_144_mhz": 144.8978}, + {"time_sec": 60, "velocity_kms": 5.24, "doppler_434_khz": -7.60, "obs_434_mhz": 434.8924, "doppler_144_khz": -2.53, "obs_144_mhz": 144.8975}, + {"time_sec": 70, "velocity_kms": 5.55, "doppler_434_khz": -8.05, "obs_434_mhz": 434.8919, "doppler_144_khz": -2.68, "obs_144_mhz": 144.8973}, + {"time_sec": 80, "velocity_kms": 5.86, "doppler_434_khz": -8.50, "obs_434_mhz": 434.8915, "doppler_144_khz": -2.83, "obs_144_mhz": 144.8972}, + {"time_sec": 90, "velocity_kms": 6.17, "doppler_434_khz": -8.95, "obs_434_mhz": 434.8910, "doppler_144_khz": -2.98, "obs_144_mhz": 144.8970}, + {"time_sec": 100, "velocity_kms": 6.32, "doppler_434_khz": -9.17, "obs_434_mhz": 434.8908, "doppler_144_khz": -3.05, "obs_144_mhz": 144.8969}, {"time_sec": 110, "velocity_kms": 6.47, "doppler_434_khz": -9.39, "obs_434_mhz": 434.8906, "doppler_144_khz": -3.13, "obs_144_mhz": 144.8969}, {"time_sec": 120, "velocity_kms": 6.62, "doppler_434_khz": -9.60, "obs_434_mhz": 434.8904, "doppler_144_khz": -3.20, "obs_144_mhz": 144.8968}, {"time_sec": 130, "velocity_kms": 6.70, "doppler_434_khz": -9.72, "obs_434_mhz": 434.8903, "doppler_144_khz": -3.24, "obs_144_mhz": 144.8968}, @@ -392,30 +401,30 @@ iss_doppler_passes = { {"time_sec": -80, "velocity_kms": -6.23, "doppler_434_khz": 9.04, "obs_434_mhz": 434.9090, "doppler_144_khz": 3.01, "obs_144_mhz": 144.9030}, {"time_sec": -70, "velocity_kms": -5.97, "doppler_434_khz": 8.66, "obs_434_mhz": 434.9087, "doppler_144_khz": 2.88, "obs_144_mhz": 144.9029}, {"time_sec": -60, "velocity_kms": -5.70, "doppler_434_khz": 8.27, "obs_434_mhz": 434.9083, "doppler_144_khz": 2.76, "obs_144_mhz": 144.9028}, - {"time_sec": -50, "velocity_kms": -5.10, "doppler_434_khz": 7.40, "obs_434_mhz": 434.9074, "doppler_144_khz": 2.47, "obs_144_mhz": 144.9025}, + {"time_sec": -50, "velocity_kms": -5.10, "doppler_434_khz": 7.40, "obs_434_mhz": 434.9074, "doppler_144_khz": 2.47, "obs_144_mhz": 144.9025}, {"time_sec": -40, "velocity_kms": -4.50, "doppler_434_khz": 6.53, "obs_434_mhz": 434.9065, "doppler_144_khz": 2.18, "obs_144_mhz": 144.9022}, {"time_sec": -30, "velocity_kms": -3.90, "doppler_434_khz": 5.66, "obs_434_mhz": 434.9057, "doppler_144_khz": 1.89, "obs_144_mhz": 144.9019}, - {"time_sec": -20 ,"velocity_kms": -2.60, "doppler_434_khz": 3.77, "obs_434_mhz": 434.9038, "doppler_144_khz": 1.26, "obs_144_mhz": 144.9013}, - {"time_sec": -10 ,"velocity_kms": -1.30, "doppler_434_khz": 1.89, "obs_434_mhz": 434.9019, "doppler_144_khz": 0.63, "obs_144_mhz": 144.9006}, - {"time_sec": 0 ,"velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, - {"time_sec": 10 ,"velocity_kms": 1.30, "doppler_434_khz": -1.89, "obs_434_mhz": 434.8981, "doppler_144_khz": -0.63, "obs_144_mhz": 144.8994}, - {"time_sec": 20 ,"velocity_kms": 2.60, "doppler_434_khz": -3.77, "obs_434_mhz": 434.8962, "doppler_144_khz": -1.26, "obs_144_mhz": 144.8987}, - {"time_sec": 30 ,"velocity_kms": 3.90, "doppler_434_khz": -5.66, "obs_434_mhz": 434.8943, "doppler_144_khz": -1.89, "obs_144_mhz": 144.8981}, - {"time_sec": 40 ,"velocity_kms": 4.50, "doppler_434_khz": -6.53, "obs_434_mhz": 434.8935, "doppler_144_khz": -2.18, "obs_144_mhz": 144.8978}, - {"time_sec": 50 ,"velocity_kms": 5.10, "doppler_434_khz": -7.40, "obs_434_mhz": 434.8926, "doppler_144_khz": -2.47, "obs_144_mhz": 144.8975}, - {"time_sec": 60 ,"velocity_kms": 5.70, "doppler_434_khz": -8.27, "obs_434_mhz": 434.8917, "doppler_144_khz": -2.76, "obs_144_mhz": 144.8972}, - {"time_sec": 70 ,"velocity_kms": 5.97, "doppler_434_khz": -8.66, "obs_434_mhz": 434.8913, "doppler_144_khz": -2.88, "obs_144_mhz": 144.8971}, - {"time_sec": 80 ,"velocity_kms": 6.23, "doppler_434_khz": -9.04, "obs_434_mhz": 434.8910, "doppler_144_khz": -3.01, "obs_144_mhz": 144.8970}, - {"time_sec": 90 ,"velocity_kms": 6.50, "doppler_434_khz": -9.43, "obs_434_mhz": 434.8906, "doppler_144_khz": -3.14, "obs_144_mhz": 144.8969}, - {"time_sec": 100 ,"velocity_kms": 6.63, "doppler_434_khz": -9.61, "obs_434_mhz": 434.8904, "doppler_144_khz": -3.20, "obs_144_mhz": 144.8968}, - {"time_sec": 110 ,"velocity_kms": 6.75, "doppler_434_khz": -9.80, "obs_434_mhz": 434.8902, "doppler_144_khz": -3.26, "obs_144_mhz": 144.8967}, - {"time_sec": 120 ,"velocity_kms": 6.88, "doppler_434_khz": -9.98, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.33, "obs_144_mhz": 144.8967}, - {"time_sec": 130 ,"velocity_kms": 6.94, "doppler_434_khz": -10.06, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.35, "obs_144_mhz": 144.8966}, - {"time_sec": 140 ,"velocity_kms": 6.99, "doppler_434_khz": -10.15, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.38, "obs_144_mhz": 144.8966}, - {"time_sec": 150 ,"velocity_kms": 7.05, "doppler_434_khz": -10.23, "obs_434_mhz": 434.8898, "doppler_144_khz": -3.41, "obs_144_mhz": 144.8966}, - {"time_sec": 160 ,"velocity_kms": 7.08, "doppler_434_khz": -10.28, "obs_434_mhz": 434.8917, "doppler_144_khz": -3.42, "obs_144_mhz": 144.8966}, - {"time_sec": 170 ,"velocity_kms": 7.12, "doppler_434_khz": -10.32, "obs_434_mhz": 434.8897, "doppler_144_khz": -3.44, "obs_144_mhz": 144.8966}, - {"time_sec": 180 ,"velocity_kms": 7.15, "doppler_434_khz": -10.37, "obs_434_mhz": 434.8896, "doppler_144_khz": -3.46, "obs_144_mhz": 144.8965} + {"time_sec": -20 ,"velocity_kms": -2.60, "doppler_434_khz": 3.77, "obs_434_mhz": 434.9038, "doppler_144_khz": 1.26, "obs_144_mhz": 144.9013}, + {"time_sec": -10 ,"velocity_kms": -1.30, "doppler_434_khz": 1.89, "obs_434_mhz": 434.9019, "doppler_144_khz": 0.63, "obs_144_mhz": 144.9006}, + {"time_sec": 0 ,"velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, + {"time_sec": 10 ,"velocity_kms": 1.30, "doppler_434_khz": -1.89, "obs_434_mhz": 434.8981, "doppler_144_khz": -0.63, "obs_144_mhz": 144.8994}, + {"time_sec": 20 ,"velocity_kms": 2.60, "doppler_434_khz": -3.77, "obs_434_mhz": 434.8962, "doppler_144_khz": -1.26, "obs_144_mhz": 144.8987}, + {"time_sec": 30 ,"velocity_kms": 3.90, "doppler_434_khz": -5.66, "obs_434_mhz": 434.8943, "doppler_144_khz": -1.89, "obs_144_mhz": 144.8981}, + {"time_sec": 40 ,"velocity_kms": 4.50, "doppler_434_khz": -6.53, "obs_434_mhz": 434.8935, "doppler_144_khz": -2.18, "obs_144_mhz": 144.8978}, + {"time_sec": 50 ,"velocity_kms": 5.10, "doppler_434_khz": -7.40, "obs_434_mhz": 434.8926, "doppler_144_khz": -2.47, "obs_144_mhz": 144.8975}, + {"time_sec": 60 ,"velocity_kms": 5.70, "doppler_434_khz": -8.27, "obs_434_mhz": 434.8917, "doppler_144_khz": -2.76, "obs_144_mhz": 144.8972}, + {"time_sec": 70 ,"velocity_kms": 5.97, "doppler_434_khz": -8.66, "obs_434_mhz": 434.8913, "doppler_144_khz": -2.88, "obs_144_mhz": 144.8971}, + {"time_sec": 80 ,"velocity_kms": 6.23, "doppler_434_khz": -9.04, "obs_434_mhz": 434.8910, "doppler_144_khz": -3.01, "obs_144_mhz": 144.8970}, + {"time_sec": 90 ,"velocity_kms": 6.50, "doppler_434_khz": -9.43, "obs_434_mhz": 434.8906, "doppler_144_khz": -3.14, "obs_144_mhz": 144.8969}, + {"time_sec": 100 ,"velocity_kms": 6.63, "doppler_434_khz": -9.61, "obs_434_mhz": 434.8904, "doppler_144_khz": -3.20, "obs_144_mhz": 144.8968}, + {"time_sec": 110 ,"velocity_kms": 6.75, "doppler_434_khz": -9.80, "obs_434_mhz": 434.8902, "doppler_144_khz": -3.26, "obs_144_mhz": 144.8967}, + {"time_sec": 120 ,"velocity_kms": 6.88, "doppler_434_khz": -9.98, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.33, "obs_144_mhz": 144.8967}, + {"time_sec": 130 ,"velocity_kms": 6.94, "doppler_434_khz": -10.06, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.35, "obs_144_mhz": 144.8966}, + {"time_sec": 140 ,"velocity_kms": 6.99, "doppler_434_khz": -10.15, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.38, "obs_144_mhz": 144.8966}, + {"time_sec": 150 ,"velocity_kms": 7.05, "doppler_434_khz": -10.23, "obs_434_mhz": 434.8898, "doppler_144_khz": -3.41, "obs_144_mhz": 144.8966}, + {"time_sec": 160 ,"velocity_kms": 7.08, "doppler_434_khz": -10.28, "obs_434_mhz": 434.8917, "doppler_144_khz": -3.42, "obs_144_mhz": 144.8966}, + {"time_sec": 170 ,"velocity_kms": 7.12, "doppler_434_khz": -10.32, "obs_434_mhz": 434.8897, "doppler_144_khz": -3.44, "obs_144_mhz": 144.8966}, + {"time_sec": 180 ,"velocity_kms": 7.15, "doppler_434_khz": -10.37, "obs_434_mhz": 434.8896, "doppler_144_khz": -3.46, "obs_144_mhz": 144.8965} ] } From 7ed05076d8895390bfa8206f73bb39dbcea620aa Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 16:48:09 -0400 Subject: [PATCH 030/287] Update transmit.py print relative time --- transmit.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index bc589740..960b249b 100644 --- a/transmit.py +++ b/transmit.py @@ -1190,6 +1190,7 @@ if __name__ == "__main__": relative_time = (time.perf_counter() - start_time) % 370 index = int(relative_time/10) + print(f"relative time: {relative_time} seconds after AOS is index: {index}") table_row = doppler_table[index] rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 @@ -1198,7 +1199,7 @@ if __name__ == "__main__": tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz print(f"Tx Doppler shift: {tx_doppler_freq_hz}") txr = "{:.3f}".format(tx_doppler_freq_hz/1000) - print(txr) +# print(txr) rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz print(f"Rx Doppler shift: {rx_doppler_freq_hz}") rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) From e1fe3085c8ead02533073436a8bc52cd13bc1af3 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 16:54:02 -0400 Subject: [PATCH 031/287] Update transmit.py add formatting to prints --- transmit.py | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/transmit.py b/transmit.py index 960b249b..54c6b2bb 100644 --- a/transmit.py +++ b/transmit.py @@ -269,7 +269,7 @@ def stop_repeater(): print("Finished resetting audio") # print("Ready to detect carrier") -iss_doppler_passes = { +doppler_passes = { 20: [ {"time_sec": -180, "velocity_kms": -5.81, "doppler_434_khz": 8.43, "obs_434_mhz": 434.9084, "doppler_144_khz": 2.81, "obs_144_mhz": 144.9028}, {"time_sec": -170, "velocity_kms": -5.68, "doppler_434_khz": 8.24, "obs_434_mhz": 434.9082, "doppler_144_khz": 2.75, "obs_144_mhz": 144.9027}, @@ -1161,26 +1161,16 @@ if __name__ == "__main__": index = int(10/10) try: - # Navigate the dictionary structure -# pass_profile = iss_doppler_passes[TARGET_PASS] -# data_entry = pass_profile[index] # relative_time_index] - doppler_table = iss_doppler_passes[TARGET_PASS] third_row = iss_doppler_passes[TARGET_PASS][index] - -# print("Full Third:") -# print(third_row) -# print("\n" + "="*40 + "\n") - time_index = third_row["time_sec"] doppler_shift = third_row["doppler_434_khz"] uhf_freq = third_row["obs_434_mhz"] print(f"Pass Elevation: {TARGET_PASS}°") -# print(f"Time Index: {TIME_FROM_START} seconds from start (Relative: {relative_time_index}s)") print(f"Time Index: {index}") - print(f"Extracted Doppler Shift (435.0 MHz): {doppler_shift} kHz") - print(f"UHF frequency (435.0 MHz): {uhf_freq} MHz") + print(f"Extracted Doppler Shift (435.0 MHz): {doppler_shift:.2f} kHz") + print(f"UHF frequency (435.0 MHz): {uhf_freq:.4f} MHz") except KeyError: print("Error: The requested pass elevation or time index does not exist in the database.") @@ -1190,18 +1180,18 @@ if __name__ == "__main__": relative_time = (time.perf_counter() - start_time) % 370 index = int(relative_time/10) - print(f"relative time: {relative_time} seconds after AOS is index: {index}") + print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") table_row = doppler_table[index] rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 # tx_doppler_shift_hz = ((time.perf_counter() - start_time) * 100) % 20000 tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz - print(f"Tx Doppler shift: {tx_doppler_freq_hz}") + print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") txr = "{:.3f}".format(tx_doppler_freq_hz/1000) # print(txr) rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz - print(f"Rx Doppler shift: {rx_doppler_freq_hz}") + print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) # print(rx) program_fm(rx,tx,rxpl_value,sq,txpl_value) From 9de04dac3cbb37134dc678ca9bb86c029d2b45eb Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 16:55:02 -0400 Subject: [PATCH 032/287] Update transmit.py add back iss_ --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 54c6b2bb..4946f10e 100644 --- a/transmit.py +++ b/transmit.py @@ -269,7 +269,7 @@ def stop_repeater(): print("Finished resetting audio") # print("Ready to detect carrier") -doppler_passes = { +iss_doppler_passes = { 20: [ {"time_sec": -180, "velocity_kms": -5.81, "doppler_434_khz": 8.43, "obs_434_mhz": 434.9084, "doppler_144_khz": 2.81, "obs_144_mhz": 144.9028}, {"time_sec": -170, "velocity_kms": -5.68, "doppler_434_khz": 8.24, "obs_434_mhz": 434.9082, "doppler_144_khz": 2.75, "obs_144_mhz": 144.9027}, From 460801dbe967220faedb7270a978726329866c77 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 17:10:29 -0400 Subject: [PATCH 033/287] Update transmit.py add 5 degree pass --- transmit.py | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 4946f10e..f4d849c9 100644 --- a/transmit.py +++ b/transmit.py @@ -270,6 +270,45 @@ def stop_repeater(): # print("Ready to detect carrier") iss_doppler_passes = { + 5: [ + {"time_sec": -180, "velocity_kms": -4.00, "doppler_434_khz": 5.79, "obs_434_mhz": 434.9058, "doppler_144_khz": 1.93, "obs_144_mhz": 144.9019}, + {"time_sec": -170, "velocity_kms": -3.89, "doppler_434_khz": 5.64, "obs_434_mhz": 434.9056, "doppler_144_khz": 1.88, "obs_144_mhz": 144.9019}, + {"time_sec": -160, "velocity_kms": -3.78, "doppler_434_khz": 5.48, "obs_434_mhz": 434.9055, "doppler_144_khz": 1.83, "obs_144_mhz": 144.9018}, + {"time_sec": -150, "velocity_kms": -3.67, "doppler_434_khz": 5.32, "obs_434_mhz": 434.9053, "doppler_144_khz": 1.77, "obs_144_mhz": 144.9018}, + {"time_sec": -140, "velocity_kms": -3.54, "doppler_434_khz": 5.14, "obs_434_mhz": 434.9051, "doppler_144_khz": 1.71, "obs_144_mhz": 144.9017}, + {"time_sec": -130, "velocity_kms": -3.42, "doppler_434_khz": 4.96, "obs_434_mhz": 434.9050, "doppler_144_khz": 1.65, "obs_144_mhz": 144.9017}, + {"time_sec": -120, "velocity_kms": -3.28, "doppler_434_khz": 4.76, "obs_434_mhz": 434.9048, "doppler_144_khz": 1.59, "obs_144_mhz": 144.9016}, + {"time_sec": -110, "velocity_kms": -3.14, "doppler_434_khz": 4.55, "obs_434_mhz": 434.9046, "doppler_144_khz": 1.52, "obs_144_mhz": 144.9015}, + {"time_sec": -100, "velocity_kms": -2.99, "doppler_434_khz": 4.33, "obs_434_mhz": 434.9043, "doppler_144_khz": 1.44, "obs_144_mhz": 144.9014}, + {"time_sec": -90, "velocity_kms": -2.83, "doppler_434_khz": 4.10, "obs_434_mhz": 434.9041, "doppler_144_khz": 1.37, "obs_144_mhz": 144.9014}, + {"time_sec": -80, "velocity_kms": -2.66, "doppler_434_khz": 3.86, "obs_434_mhz": 434.9039, "doppler_144_khz": 1.29, "obs_144_mhz": 144.9013}, + {"time_sec": -70, "velocity_kms": -2.48, "doppler_434_khz": 3.60, "obs_434_mhz": 434.9036, "doppler_144_khz": 1.20, "obs_144_mhz": 144.9012}, + {"time_sec": -60, "velocity_kms": -2.29, "doppler_434_khz": 3.32, "obs_434_mhz": 434.9033, "doppler_144_khz": 1.11, "obs_144_mhz": 144.9011}, + {"time_sec": -50, "velocity_kms": -2.09, "doppler_434_khz": 3.03, "obs_434_mhz": 434.9030, "doppler_144_khz": 1.01, "obs_144_mhz": 144.9010}, + {"time_sec": -40, "velocity_kms": -1.87, "doppler_434_khz": 2.71, "obs_434_mhz": 434.9027, "doppler_144_khz": 0.90, "obs_144_mhz": 144.9009}, + {"time_sec": -30, "velocity_kms": -1.63, "doppler_434_khz": 2.37, "obs_434_mhz": 434.9024, "doppler_144_khz": 0.79, "obs_144_mhz": 144.9008}, + {"time_sec": -20, "velocity_kms": -1.33, "doppler_434_khz": 1.93, "obs_434_mhz": 434.9019, "doppler_144_khz": 0.64, "obs_144_mhz": 144.9006}, + {"time_sec": -10, "velocity_kms": -0.84, "doppler_434_khz": 1.22, "obs_434_mhz": 434.9012, "doppler_144_khz": 0.41, "obs_144_mhz": 144.9004}, + {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": 0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": 0.00, "obs_144_mhz": 144.9000}, + {"time_sec": 10, "velocity_kms": 0.84, "doppler_434_khz": -1.22, "obs_434_mhz": 434.8988, "doppler_144_khz": -0.41, "obs_144_mhz": 144.8996}, + {"time_sec": 20, "velocity_kms": 1.33, "doppler_434_khz": -1.93, "obs_434_mhz": 434.8981, "doppler_144_khz": -0.64, "obs_144_mhz": 144.8994}, + {"time_sec": 30, "velocity_kms": 1.63, "doppler_434_khz": -2.37, "obs_434_mhz": 434.8976, "doppler_144_khz": -0.79, "obs_144_mhz": 144.8992}, + {"time_sec": 40, "velocity_kms": 1.87, "doppler_434_khz": -2.71, "obs_434_mhz": 434.8973, "doppler_144_khz": -0.90, "obs_144_mhz": 144.8991}, + {"time_sec": 50, "velocity_kms": 2.09, "doppler_434_khz": -3.03, "obs_434_mhz": 434.8970, "doppler_144_khz": -1.01, "obs_144_mhz": 144.8990}, + {"time_sec": 60, "velocity_kms": 2.29, "doppler_434_khz": -3.32, "obs_434_mhz": 434.8967, "doppler_144_khz": -1.11, "obs_144_mhz": 144.8989}, + {"time_sec": 70, "velocity_kms": 2.48, "doppler_434_khz": -3.60, "obs_434_mhz": 434.8964, "doppler_144_khz": -1.20, "obs_144_mhz": 144.8988}, + {"time_sec": 80, "velocity_kms": 2.66, "doppler_434_khz": -3.86, "obs_434_mhz": 434.8961, "doppler_144_khz": -1.29, "obs_144_mhz": 144.8987}, + {"time_sec": 90, "velocity_kms": 2.83, "doppler_434_khz": -4.10, "obs_434_mhz": 434.8959, "doppler_144_khz": -1.37, "obs_144_mhz": 144.8986}, + {"time_sec": 100, "velocity_kms": 2.99, "doppler_434_khz": -4.33, "obs_434_mhz": 434.8957, "doppler_144_khz": -1.44, "obs_144_mhz": 144.8986}, + {"time_sec": 110, "velocity_kms": 3.14, "doppler_434_khz": -4.55, "obs_434_mhz": 434.8954, "doppler_144_khz": -1.52, "obs_144_mhz": 144.8985}, + {"time_sec": 120, "velocity_kms": 3.28, "doppler_434_khz": -4.76, "obs_434_mhz": 434.8952, "doppler_144_khz": -1.59, "obs_144_mhz": 144.8984}, + {"time_sec": 130, "velocity_kms": 3.42, "doppler_434_khz": -4.96, "obs_434_mhz": 434.8950, "doppler_144_khz": -1.65, "obs_144_mhz": 144.8983}, + {"time_sec": 140, "velocity_kms": 3.54, "doppler_434_khz": -5.14, "obs_434_mhz": 434.8949, "doppler_144_khz": -1.71, "obs_144_mhz": 144.8983}, + {"time_sec": 150, "velocity_kms": 3.67, "doppler_434_khz": -5.32, "obs_434_mhz": 434.8947, "doppler_144_khz": -1.77, "obs_144_mhz": 144.8982}, + {"time_sec": 160, "velocity_kms": 3.78, "doppler_434_khz": -5.48, "obs_434_mhz": 434.8945, "doppler_144_khz": -1.83, "obs_144_mhz": 144.8982}, + {"time_sec": 170, "velocity_kms": 3.89, "doppler_434_khz": -5.64, "obs_434_mhz": 434.8944, "doppler_144_khz": -1.88, "obs_144_mhz": 144.8981}, + {"time_sec": 180, "velocity_kms": 4.00, "doppler_434_khz": -5.79, "obs_434_mhz": 434.8942, "doppler_144_khz": -1.93, "obs_144_mhz": 144.8981} + ], 20: [ {"time_sec": -180, "velocity_kms": -5.81, "doppler_434_khz": 8.43, "obs_434_mhz": 434.9084, "doppler_144_khz": 2.81, "obs_144_mhz": 144.9028}, {"time_sec": -170, "velocity_kms": -5.68, "doppler_434_khz": 8.24, "obs_434_mhz": 434.9082, "doppler_144_khz": 2.75, "obs_144_mhz": 144.9027}, @@ -425,7 +464,46 @@ iss_doppler_passes = { {"time_sec": 160 ,"velocity_kms": 7.08, "doppler_434_khz": -10.28, "obs_434_mhz": 434.8917, "doppler_144_khz": -3.42, "obs_144_mhz": 144.8966}, {"time_sec": 170 ,"velocity_kms": 7.12, "doppler_434_khz": -10.32, "obs_434_mhz": 434.8897, "doppler_144_khz": -3.44, "obs_144_mhz": 144.8966}, {"time_sec": 180 ,"velocity_kms": 7.15, "doppler_434_khz": -10.37, "obs_434_mhz": 434.8896, "doppler_144_khz": -3.46, "obs_144_mhz": 144.8965} - ] + ], + 89: [ + {"time_sec": -180, "velocity_kms": -7.17, "doppler_434_khz": 10.40, "obs_434_mhz": 434.9104, "doppler_144_khz": 3.47, "obs_144_mhz": 144.9035}, + {"time_sec": -170, "velocity_kms": -7.13, "doppler_434_khz": 10.35, "obs_434_mhz": 434.9103, "doppler_144_khz": 3.45, "obs_144_mhz": 144.9034}, + {"time_sec": -160, "velocity_kms": -7.09, "doppler_434_khz": 10.28, "obs_434_mhz": 434.9103, "doppler_144_khz": 3.43, "obs_144_mhz": 144.9034}, + {"time_sec": -150, "velocity_kms": -7.04, "doppler_434_khz": 10.21, "obs_434_mhz": 434.9102, "doppler_144_khz": 3.40, "obs_144_mhz": 144.9034}, + {"time_sec": -140, "velocity_kms": -6.97, "doppler_434_khz": 10.12, "obs_434_mhz": 434.9101, "doppler_144_khz": 3.37, "obs_144_mhz": 144.9034}, + {"time_sec": -130, "velocity_kms": -6.90, "doppler_434_khz": 10.01, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.33, "obs_144_mhz": 144.9033}, + {"time_sec": -120, "velocity_kms": -6.81, "doppler_434_khz": 9.87, "obs_434_mhz": 434.9099, "doppler_144_khz": 3.29, "obs_144_mhz": 144.9033}, + {"time_sec": -110, "velocity_kms": -6.69, "doppler_434_khz": 9.71, "obs_434_mhz": 434.9097, "doppler_144_khz": 3.24, "obs_144_mhz": 144.9032}, + {"time_sec": -100, "velocity_kms": -6.55, "doppler_434_khz": 9.51, "obs_434_mhz": 434.9095, "doppler_144_khz": 3.17, "obs_144_mhz": 144.9032}, + {"time_sec": -90, "velocity_kms": -6.38, "doppler_434_khz": 9.25, "obs_434_mhz": 434.9093, "doppler_144_khz": 3.08, "obs_144_mhz": 144.9031}, + {"time_sec": -80, "velocity_kms": -6.15, "doppler_434_khz": 8.93, "obs_434_mhz": 434.9089, "doppler_144_khz": 2.97, "obs_144_mhz": 144.9030}, + {"time_sec": -70, "velocity_kms": -5.87, "doppler_434_khz": 8.51, "obs_434_mhz": 434.9085, "doppler_144_khz": 2.84, "obs_144_mhz": 144.9028}, + {"time_sec": -60, "velocity_kms": -5.49, "doppler_434_khz": 7.97, "obs_434_mhz": 434.9080, "doppler_144_khz": 2.66, "obs_144_mhz": 144.9027}, + {"time_sec": -50, "velocity_kms": -5.01, "doppler_434_khz": 7.26, "obs_434_mhz": 434.9073, "doppler_144_khz": 2.42, "obs_144_mhz": 144.9024}, + {"time_sec": -40, "velocity_kms": -4.37, "doppler_434_khz": 6.34, "obs_434_mhz": 434.9063, "doppler_144_khz": 2.11, "obs_144_mhz": 144.9021}, + {"time_sec": -30, "velocity_kms": -3.55, "doppler_434_khz": 5.15, "obs_434_mhz": 434.9051, "doppler_144_khz": 1.72, "obs_144_mhz": 144.9017}, + {"time_sec": -20, "velocity_kms": -2.53, "doppler_434_khz": 3.67, "obs_434_mhz": 434.9037, "doppler_144_khz": 1.22, "obs_144_mhz": 144.9012}, + {"time_sec": -10, "velocity_kms": -1.32, "doppler_434_khz": 1.92, "obs_434_mhz": 434.9019, "doppler_144_khz": 0.64, "obs_144_mhz": 144.9006}, + {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": 0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": 0.00, "obs_144_mhz": 144.9000}, + {"time_sec": 10, "velocity_kms": 1.32, "doppler_434_khz": -1.92, "obs_434_mhz": 434.8981, "doppler_144_khz": -0.64, "obs_144_mhz": 144.8994}, + {"time_sec": 20, "velocity_kms": 2.53, "doppler_434_khz": -3.67, "obs_434_mhz": 434.8963, "doppler_144_khz": -1.22, "obs_144_mhz": 144.8988}, + {"time_sec": 30, "velocity_kms": 3.55, "doppler_434_khz": -5.15, "obs_434_mhz": 434.8949, "doppler_144_khz": -1.72, "obs_144_mhz": 144.8983}, + {"time_sec": 40, "velocity_kms": 4.37, "doppler_434_khz": -6.34, "obs_434_mhz": 434.8937, "doppler_144_khz": -2.11, "obs_144_mhz": 144.8979}, + {"time_sec": 50, "velocity_kms": 5.01, "doppler_434_khz": -7.26, "obs_434_mhz": 434.8927, "doppler_144_khz": -2.42, "obs_144_mhz": 144.8976}, + {"time_sec": 60, "velocity_kms": 5.49, "doppler_434_khz": -7.97, "obs_434_mhz": 434.8920, "doppler_144_khz": -2.66, "obs_144_mhz": 144.8973}, + {"time_sec": 70, "velocity_kms": 5.87, "doppler_434_khz": -8.51, "obs_434_mhz": 434.8915, "doppler_144_khz": -2.84, "obs_144_mhz": 144.8972}, + {"time_sec": 80, "velocity_kms": 6.15, "doppler_434_khz": -8.93, "obs_434_mhz": 434.8911, "doppler_144_khz": -2.97, "obs_144_mhz": 144.8970}, + {"time_sec": 90, "velocity_kms": 6.38, "doppler_434_khz": -9.25, "obs_434_mhz": 434.8907, "doppler_144_khz": -3.08, "obs_144_mhz": 144.8969}, + {"time_sec": 100, "velocity_kms": 6.55, "doppler_434_khz": -9.51, "obs_434_mhz": 434.8905, "doppler_144_khz": -3.17, "obs_144_mhz": 144.8968}, + {"time_sec": 110, "velocity_kms": 6.69, "doppler_434_khz": -9.71, "obs_434_mhz": 434.8903, "doppler_144_khz": -3.24, "obs_144_mhz": 144.8968}, + {"time_sec": 120, "velocity_kms": 6.81, "doppler_434_khz": -9.87, "obs_434_mhz": 434.8901, "doppler_144_khz": -3.29, "obs_144_mhz": 144.8967}, + {"time_sec": 130, "velocity_kms": 6.90, "doppler_434_khz": -10.01, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.33, "obs_144_mhz": 144.8967}, + {"time_sec": 140, "velocity_kms": 6.97, "doppler_434_khz": -10.12, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.37, "obs_144_mhz": 144.8966}, + {"time_sec": 150, "velocity_kms": 7.04, "doppler_434_khz": -10.21, "obs_434_mhz": 434.8898, "doppler_144_khz": -3.40, "obs_144_mhz": 144.8966}, + {"time_sec": 160, "velocity_kms": 7.09, "doppler_434_khz": -10.28, "obs_434_mhz": 434.8897, "doppler_144_khz": -3.43, "obs_144_mhz": 144.8966}, + {"time_sec": 170, "velocity_kms": 7.13, "doppler_434_khz": -10.35, "obs_434_mhz": 434.8897, "doppler_144_khz": -3.45, "obs_144_mhz": 144.8966}, + {"time_sec": 180, "velocity_kms": 7.17, "doppler_434_khz": -10.40, "obs_434_mhz": 434.8896, "doppler_144_khz": -3.47, "obs_144_mhz": 144.8965} + ] } print("CubeSatSim v2.2 transmit.py starting...") From 59de158f0c9385086e1b6516043c8adc48ecdbfd Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 23:26:57 -0400 Subject: [PATCH 034/287] Update transmit.py add doppler mode to a,s,m modes --- transmit.py | 128 ++++++++++++++++++++++++++-------------------------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/transmit.py b/transmit.py index f4d849c9..c4a494a7 100644 --- a/transmit.py +++ b/transmit.py @@ -247,10 +247,11 @@ def program_fm(rx, tx, rxpl_value, sq, txpl_value): print("Restarting gpsd.socket") system("sudo systemctl restart gpsd.socket") -def start_repeater(txr): +def start_repeater(tx_doppler_freq_hz): global txLed print("Starting repeater") output(txLed, 1) + txr = "{:.3f}".format(tx_doppler_freq_hz/1000) system("sudo nc -l 8011 | csdr convert_i16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + txr + " > /dev/null 2>&1 &") sleep(0.5) system("sudo arecord -D shared_mic -r48000 -fS16_LE -c1 | nc localhost 8011 &") @@ -506,6 +507,27 @@ iss_doppler_passes = { ] } +def update_doppler(): + + global start_time + global tx_doppler_freq_hz + global rx_doppler_freq_hz + global rxpl_value + global txpl_value + global sq + relative_time = (time.perf_counter() - start_time) % 370 + index = int(relative_time/10) + print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") + table_row = doppler_table[index] + rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 + tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 + tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz + print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") + rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz + print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") + rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) + program_fm(rx,tx,rxpl_value,sq,txpl_value) + print("CubeSatSim v2.2 transmit.py starting...") pd = 21 @@ -652,6 +674,7 @@ if __name__ == "__main__": sim_mode = False sim_config = False hab_mode = False + doppler_mode == True try: file = open("/home/pi/CubeSatSim/sim.cfg") @@ -780,6 +803,19 @@ if __name__ == "__main__": # if (mode != 'e'): program_fm(rx,tx,rxpl_value,sq,txpl_value) + + if (doppler_mode == True): + tx_doppler_start_hz = txrf * 1e6 + tx_doppler_shift_hz = 0 + print(f"Tx center frequency: {tx_doppler_start_hz}") + rx_doppler_start_hz = rxf * 1e6 + rx_doppler_shift_hz = 0 + print(f"Rx center frequency: {rx_doppler_start_hz}") + + TARGET_PASS = 85 # Maximum elevation profile + + doppler_table = iss_doppler_passes[TARGET_PASS] + print(f"Pass Max Elevation: {TARGET_PASS}°") sim_failure_check() if (hab_mode == True) and (mode == 'a'): @@ -884,11 +920,10 @@ if __name__ == "__main__": system("cat /home/pi/CubeSatSim/t.txt") if (command_tx == True): output(txLed, 1) -# output(pd, 1) -# output (ptt, 0) -# sleep(.1) -# -# battery_saver_check() + if (doppler_mode == True): + update_doppler() + txf = tx_doppler_freq_hz / 1000 + tx = "{:.4f}".format(txf) if (txc): sim_failure_check() # output(pd, 1) @@ -940,7 +975,10 @@ if __name__ == "__main__": ## chan = chan + 1 if (command_tx == True): output(txLed, 1) - + if (doppler_mode == True): + update_doppler() + txf = tx_doppler_freq_hz / 1000 + tx = "{:.4f}".format(txf) if (txc): sim_failure_check() # output (pd, 1) @@ -1028,10 +1066,13 @@ if __name__ == "__main__": system("/home/pi/PiSSTVpp/pisstvpp -r 48000 -p s2 /home/pi/CubeSatSim/camera_out.jpg") system("sudo rm /home/pi/CubeSatSim/camera_out.jpg > /dev/null 2>&1") -# command_control_check() - if (command_tx == True): print ("Sending SSTV image") + if (doppler_mode == True): + update_doppler() + txf = tx_doppler_freq_hz / 1000 + tx = "{:.4f}".format(txf) + output(txLed, 1) # battery_saver_check() @@ -1099,11 +1140,13 @@ if __name__ == "__main__": system("/home/pi/PiSSTVpp/pisstvpp -r 48000 -p s2 /home/pi/CubeSatSim/sstv_image_2_320_x_256.jpg") while 1: - -# command_control_check() - if (command_tx == True): print ("Sending SSTV image") + if (doppler_mode == True): + update_doppler() + txf = tx_doppler_freq_hz / 1000 + tx = "{:.4f}".format(txf) + output(txLed, 1) # battery_saver_check() @@ -1131,11 +1174,11 @@ if __name__ == "__main__": system("(while true; do (sleep 10 && cat /home/pi/CubeSatSim/wav/sstv.wav); done) | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + tx + "e3 &") while 1: if (command_tx == True): -# command_control_check() - + if (doppler_mode == True): + update_doppler() + txf = tx_doppler_freq_hz / 1000 + tx = "{:.4f}".format(txf) output(txLed, 1) - -# battery_saver_check() if (txc): sim_failure_check() @@ -1223,58 +1266,15 @@ if __name__ == "__main__": print("Ready to detect carrier") start_time = time.perf_counter() - tx_doppler_start_hz = txrf * 1e6 - tx_doppler_shift_hz = 0 - print(f"Tx center frequency: {tx_doppler_start_hz}") - rx_doppler_start_hz = rxf * 1e6 - rx_doppler_shift_hz = 0 - print(f"Rx center frequency: {rx_doppler_start_hz}") - - TARGET_PASS = 85 # Maximum elevation profile -# PASS_START_TIME = -180 # The absolute time index where the pass begins -# TIME_FROM_START = 30 # 30 seconds into the pass - - # Map the "time from start" to the "relative time index" used in the table -# relative_time_index = PASS_START_TIME + TIME_FROM_START - index = int(10/10) - - try: - doppler_table = iss_doppler_passes[TARGET_PASS] - third_row = iss_doppler_passes[TARGET_PASS][index] - time_index = third_row["time_sec"] - doppler_shift = third_row["doppler_434_khz"] - uhf_freq = third_row["obs_434_mhz"] - - print(f"Pass Elevation: {TARGET_PASS}°") - print(f"Time Index: {index}") - print(f"Extracted Doppler Shift (435.0 MHz): {doppler_shift:.2f} kHz") - print(f"UHF frequency (435.0 MHz): {uhf_freq:.4f} MHz") - - except KeyError: - print("Error: The requested pass elevation or time index does not exist in the database.") while True: if (input(squelch) == False) and (command_tx == True): - - relative_time = (time.perf_counter() - start_time) % 370 - index = int(relative_time/10) - print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") - table_row = doppler_table[index] - rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 - tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 - -# tx_doppler_shift_hz = ((time.perf_counter() - start_time) * 100) % 20000 - tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz - print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") - txr = "{:.3f}".format(tx_doppler_freq_hz/1000) -# print(txr) - rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz - print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") - rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) -# print(rx) - program_fm(rx,tx,rxpl_value,sq,txpl_value) print("Carrier detected") - start_repeater(txr) + if (doppler_mode == True): + update_doppler() + start_repeater(tx_doppler_freq_hz) + else: + start_repeater(txr) while (input(squelch) == False): sleep(1) print("No carrier detected") From 07316a5841b25b987d30a359602b6b79b162e7d5 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 23:28:43 -0400 Subject: [PATCH 035/287] Update transmit.py stray space --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index c4a494a7..dfa95695 100644 --- a/transmit.py +++ b/transmit.py @@ -977,7 +977,7 @@ if __name__ == "__main__": output(txLed, 1) if (doppler_mode == True): update_doppler() - txf = tx_doppler_freq_hz / 1000 + txf = tx_doppler_freq_hz / 1000 tx = "{:.4f}".format(txf) if (txc): sim_failure_check() From c9055440acf9b925c09fdcab3c6b277433ff4d7a Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 23:30:35 -0400 Subject: [PATCH 036/287] Update transmit.py more extra spaces --- transmit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index dfa95695..46261851 100644 --- a/transmit.py +++ b/transmit.py @@ -1144,7 +1144,7 @@ if __name__ == "__main__": print ("Sending SSTV image") if (doppler_mode == True): update_doppler() - txf = tx_doppler_freq_hz / 1000 + txf = tx_doppler_freq_hz / 1000 tx = "{:.4f}".format(txf) output(txLed, 1) @@ -1176,7 +1176,7 @@ if __name__ == "__main__": if (command_tx == True): if (doppler_mode == True): update_doppler() - txf = tx_doppler_freq_hz / 1000 + txf = tx_doppler_freq_hz / 1000 tx = "{:.4f}".format(txf) output(txLed, 1) From eddebacb848a17eba884c755e787d828581b446a Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 23:31:37 -0400 Subject: [PATCH 037/287] Update transmit.py fix doppler_mode assignment --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 46261851..e8be0128 100644 --- a/transmit.py +++ b/transmit.py @@ -674,7 +674,7 @@ if __name__ == "__main__": sim_mode = False sim_config = False hab_mode = False - doppler_mode == True + doppler_mode = True try: file = open("/home/pi/CubeSatSim/sim.cfg") From 400b7619429d922ff850c651ec71c885075d7443 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 23:38:45 -0400 Subject: [PATCH 038/287] Update transmit.py fix txrf --- transmit.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index e8be0128..69f4a361 100644 --- a/transmit.py +++ b/transmit.py @@ -805,7 +805,10 @@ if __name__ == "__main__": program_fm(rx,tx,rxpl_value,sq,txpl_value) if (doppler_mode == True): - tx_doppler_start_hz = txrf * 1e6 + if (mode == 'e'): + tx_doppler_start_hz = txrf * 1e6 + else: + tx_doppler_start_hz = txf * 1e6 tx_doppler_shift_hz = 0 print(f"Tx center frequency: {tx_doppler_start_hz}") rx_doppler_start_hz = rxf * 1e6 From 4c4a2f395ac9f03c8c5d7ac53cdde2d4dcf2abc9 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 18 Jun 2026 23:45:35 -0400 Subject: [PATCH 039/287] Update transmit.py doppler mode off --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 69f4a361..df72e3a1 100644 --- a/transmit.py +++ b/transmit.py @@ -674,7 +674,7 @@ if __name__ == "__main__": sim_mode = False sim_config = False hab_mode = False - doppler_mode = True + doppler_mode = False # True try: file = open("/home/pi/CubeSatSim/sim.cfg") From 1046f39d51c80faf04701ed3e924b746d31a54ce Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 19 Jun 2026 08:10:55 -0400 Subject: [PATCH 040/287] Update transmit.py cleanup --- transmit.py | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/transmit.py b/transmit.py index df72e3a1..52e21bea 100644 --- a/transmit.py +++ b/transmit.py @@ -709,27 +709,25 @@ if __name__ == "__main__": else: print("Transmit frequency: ",tx) if len(config) > 7: - rxf = float(config[7]) -# print(rxf) -# print( "{:.4f}".format(rxf)) - rx = "{:.4f}".format(rxf) - print(rx) + rxf = float(config[7]) + rx = "{:.4f}".format(rxf) + print(rx) if len(config) > 8: if config[8] == 'y' or config[8] == 'yes': hab_mode = True print("Balloon (HAB) mode is configured.") if len(config) > 9: - rxpl = float(config[9]) - # print(rxpl) - # print( "{:.0f}".format(rxpl)) - rxpl_value = "{:.0f}".format(rxpl) - print(rxpl_value) + rxpl = float(config[9]) +# print(rxpl) +# print( "{:.0f}".format(rxpl)) + rxpl_value = "{:.0f}".format(rxpl) + print(rxpl_value) if len(config) > 10: - txpl = float(config[10]) + txpl = float(config[10]) # print(txpl) # print( "{:.0f}".format(txpl)) - txpl_value = "{:.0f}".format(txpl) - print(txpl_value) + txpl_value = "{:.0f}".format(txpl) + print(txpl_value) print(config) print # print(callsign) From 0724a0c84e63e80962714e39fcc329eb29632727 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 19 Jun 2026 08:19:40 -0400 Subject: [PATCH 041/287] Update transmit.py fix indent --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 52e21bea..cdd5a5be 100644 --- a/transmit.py +++ b/transmit.py @@ -711,7 +711,7 @@ if __name__ == "__main__": if len(config) > 7: rxf = float(config[7]) rx = "{:.4f}".format(rxf) - print(rx) + print(rx) if len(config) > 8: if config[8] == 'y' or config[8] == 'yes': hab_mode = True From 3f64db3ae7938a315635acc934f526aa003c216d Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 19 Jun 2026 08:20:43 -0400 Subject: [PATCH 042/287] Update transmit.py doppler_mode true --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index cdd5a5be..451d302a 100644 --- a/transmit.py +++ b/transmit.py @@ -674,7 +674,7 @@ if __name__ == "__main__": sim_mode = False sim_config = False hab_mode = False - doppler_mode = False # True + doppler_mode = True try: file = open("/home/pi/CubeSatSim/sim.cfg") From 54ec56f6fc35b031fe7ed65cf472458b85e8541d Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 19 Jun 2026 08:25:04 -0400 Subject: [PATCH 043/287] Update transmit.py print doppler --- transmit.py | 1 + 1 file changed, 1 insertion(+) diff --git a/transmit.py b/transmit.py index 451d302a..7becf5e2 100644 --- a/transmit.py +++ b/transmit.py @@ -515,6 +515,7 @@ def update_doppler(): global rxpl_value global txpl_value global sq + print("update_doppler") relative_time = (time.perf_counter() - start_time) % 370 index = int(relative_time/10) print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") From 49deca66615453a1c8a894acd15039710131fe10 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 19 Jun 2026 08:27:47 -0400 Subject: [PATCH 044/287] Update transmit.py don't program fm in update --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 7becf5e2..b482b5ed 100644 --- a/transmit.py +++ b/transmit.py @@ -527,7 +527,7 @@ def update_doppler(): rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) - program_fm(rx,tx,rxpl_value,sq,txpl_value) +# program_fm(rx,tx,rxpl_value,sq,txpl_value) print("CubeSatSim v2.2 transmit.py starting...") From ddd6c01258c5560aba09ad1a493481e0585c0f1b Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 19 Jun 2026 08:34:14 -0400 Subject: [PATCH 045/287] Update transmit.py add prints --- transmit.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/transmit.py b/transmit.py index b482b5ed..c18216ad 100644 --- a/transmit.py +++ b/transmit.py @@ -986,6 +986,7 @@ if __name__ == "__main__": # output (pd, 1) sleep(0.3) output (ptt, 0) + print("aplay") system("aplay -D plughw:CARD=" + card + ",DEV=0 /home/pi/CubeSatSim/morse.wav") sleep(0.1) output (ptt, 1) @@ -1003,6 +1004,7 @@ if __name__ == "__main__": sleep(10) except: # command_control_check() + print("cw not ready") sleep(1) elif (mode == 's'): print("SSTV") From be9d96d5ebfbbf6acc14a8bd576836f34ed7f6f8 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 19 Jun 2026 08:37:55 -0400 Subject: [PATCH 046/287] Update transmit.py add try to update_doppler --- transmit.py | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/transmit.py b/transmit.py index c18216ad..b6097b31 100644 --- a/transmit.py +++ b/transmit.py @@ -509,25 +509,28 @@ iss_doppler_passes = { def update_doppler(): - global start_time - global tx_doppler_freq_hz - global rx_doppler_freq_hz - global rxpl_value - global txpl_value - global sq - print("update_doppler") - relative_time = (time.perf_counter() - start_time) % 370 - index = int(relative_time/10) - print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") - table_row = doppler_table[index] - rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 - tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 - tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz - print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") - rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz - print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") - rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) -# program_fm(rx,tx,rxpl_value,sq,txpl_value) + try: + global start_time + global tx_doppler_freq_hz + global rx_doppler_freq_hz + global rxpl_value + global txpl_value + global sq + print("update_doppler") + relative_time = (time.perf_counter() - start_time) % 370 + index = int(relative_time/10) + print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") + table_row = doppler_table[index] + rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 + tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 + tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz + print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") + rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz + print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") + rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) + program_fm(rx,tx,rxpl_value,sq,txpl_value) + except: + print("update_doppler failed") print("CubeSatSim v2.2 transmit.py starting...") From 3a9881f310a4d676c4c7471fc5f883356ec8f7ee Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 19 Jun 2026 08:47:55 -0400 Subject: [PATCH 047/287] Update transmit.py set start_time if not set --- transmit.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index b6097b31..33e468b7 100644 --- a/transmit.py +++ b/transmit.py @@ -516,8 +516,13 @@ def update_doppler(): global rxpl_value global txpl_value global sq + global doppler_table print("update_doppler") - relative_time = (time.perf_counter() - start_time) % 370 + try: + relative_time = (time.perf_counter() - start_time) % 370 + except: + start_time = time.perf_counter() + relative_time = (time.perf_counter() - start_time) % 370 index = int(relative_time/10) print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") table_row = doppler_table[index] From fe1d16187906cc1a681e11a0030dee239ee7e375 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 19 Jun 2026 08:52:37 -0400 Subject: [PATCH 048/287] Update transmit.py use uhf doppler unless mode e --- transmit.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/transmit.py b/transmit.py index 33e468b7..1240e772 100644 --- a/transmit.py +++ b/transmit.py @@ -517,6 +517,7 @@ def update_doppler(): global txpl_value global sq global doppler_table + global mode print("update_doppler") try: relative_time = (time.perf_counter() - start_time) % 370 @@ -527,7 +528,10 @@ def update_doppler(): print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") table_row = doppler_table[index] rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 - tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 + if (mode == 'e'): + tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 + else: + tx_doppler_shift_hz = rx_doppler_shift_hz tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz @@ -994,7 +998,6 @@ if __name__ == "__main__": # output (pd, 1) sleep(0.3) output (ptt, 0) - print("aplay") system("aplay -D plughw:CARD=" + card + ",DEV=0 /home/pi/CubeSatSim/morse.wav") sleep(0.1) output (ptt, 1) @@ -1012,7 +1015,7 @@ if __name__ == "__main__": sleep(10) except: # command_control_check() - print("cw not ready") +# print("cw not ready") sleep(1) elif (mode == 's'): print("SSTV") From d2c4dcd6eece0f75cf797212e105a863cdf9bf15 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 19 Jun 2026 08:55:57 -0400 Subject: [PATCH 049/287] Update transmit.py change tx in update_doppler --- transmit.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/transmit.py b/transmit.py index 1240e772..81270ce3 100644 --- a/transmit.py +++ b/transmit.py @@ -537,6 +537,8 @@ def update_doppler(): rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) + if (mode == 'e'): + tx = "{:.4f}".format(tx_doppler_freq_hz/1e6) program_fm(rx,tx,rxpl_value,sq,txpl_value) except: print("update_doppler failed") From 35395941d4369ed5f3b256a14818c3b251fe299a Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 19 Jun 2026 08:58:25 -0400 Subject: [PATCH 050/287] Update transmit.py print tx --- transmit.py | 1 + 1 file changed, 1 insertion(+) diff --git a/transmit.py b/transmit.py index 81270ce3..07323e0e 100644 --- a/transmit.py +++ b/transmit.py @@ -539,6 +539,7 @@ def update_doppler(): rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) if (mode == 'e'): tx = "{:.4f}".format(tx_doppler_freq_hz/1e6) + print(tx) program_fm(rx,tx,rxpl_value,sq,txpl_value) except: print("update_doppler failed") From 6151dcb0c5c886eeba5f1455808cac6b249b4fdf Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 19 Jun 2026 09:21:39 -0400 Subject: [PATCH 051/287] Update transmit.py add try in program_fm --- transmit.py | 53 ++++++++++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/transmit.py b/transmit.py index 07323e0e..32bb851c 100644 --- a/transmit.py +++ b/transmit.py @@ -219,33 +219,36 @@ def camera_photo(): def program_fm(rx, tx, rxpl_value, sq, txpl_value): - global gpsd_status - global pd - global ptt - if (gpsd_status == "active"): - print("Stopping gpsd.socket") - system("sudo systemctl stop gpsd.socket") - print("Programming FM module!\n"); - output(pd, 1) - output (ptt, 1) try: - ser = serial.Serial("/dev/ttyAMA0", 9600) - print(ser.portstr) - # uhf_string = "AT+DMOSETGROUP=0," + rx +"," + tx + ",0,3,0,0\r\n" - uhf_string = "AT+DMOSETGROUP=0," + rx + "," + tx + "," + rxpl_value + "," + sq + "," + txpl_value + ",0\r\n" - print(uhf_string) - for i in range(6): - # ser.write(b"AT+DMOSETGROUP=0,435.0000,434.9000,0,3,0,0\r\n") - ser.write(uhf_string.encode()) - sleep(0.1) - ser.close() - ser = serial.Serial("/dev/ttyAMA0", 115200) # reset back to 115200 for cubesatsim code for payload sensor data + global gpsd_status + global pd + global ptt + if (gpsd_status == "active"): + print("Stopping gpsd.socket") + system("sudo systemctl stop gpsd.socket") + print("Programming FM module!\n"); + output(pd, 1) + output (ptt, 1) + try: + ser = serial.Serial("/dev/ttyAMA0", 9600) + print(ser.portstr) + # uhf_string = "AT+DMOSETGROUP=0," + rx +"," + tx + ",0,3,0,0\r\n" + uhf_string = "AT+DMOSETGROUP=0," + rx + "," + tx + "," + rxpl_value + "," + sq + "," + txpl_value + ",0\r\n" + print(uhf_string) + for i in range(6): + # ser.write(b"AT+DMOSETGROUP=0,435.0000,434.9000,0,3,0,0\r\n") + ser.write(uhf_string.encode()) + sleep(0.1) + ser.close() + ser = serial.Serial("/dev/ttyAMA0", 115200) # reset back to 115200 for cubesatsim code for payload sensor data + except: + print("Error in serial write") + # output(pd, 0) # Don't turn off receiver + if (gpsd_status == "active"): + print("Restarting gpsd.socket") + system("sudo systemctl restart gpsd.socket") except: - print("Error in serial write") -# output(pd, 0) # Don't turn off receiver - if (gpsd_status == "active"): - print("Restarting gpsd.socket") - system("sudo systemctl restart gpsd.socket") + print("program_fm failed") def start_repeater(tx_doppler_freq_hz): global txLed From 4ec2f0bbea3fda4e4c206fcb1d57da1f2bda8011 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 19 Jun 2026 09:25:31 -0400 Subject: [PATCH 052/287] Update transmit.py add prints to update_doppler --- transmit.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/transmit.py b/transmit.py index 32bb851c..dd9b4633 100644 --- a/transmit.py +++ b/transmit.py @@ -539,11 +539,20 @@ def update_doppler(): print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") - rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) + try: + rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) + except: + print("1") if (mode == 'e'): - tx = "{:.4f}".format(tx_doppler_freq_hz/1e6) + try: + tx = "{:.4f}".format(tx_doppler_freq_hz/1e6) + except: + print("2") print(tx) - program_fm(rx,tx,rxpl_value,sq,txpl_value) + try: + program_fm(rx,tx,rxpl_value,sq,txpl_value) + except: + print("3") except: print("update_doppler failed") From a36cf5a1bb65648a5c24d0bd89fe8cfb220e5c1a Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 19 Jun 2026 09:27:11 -0400 Subject: [PATCH 053/287] Update transmit.py more prints --- transmit.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index dd9b4633..d0d4deec 100644 --- a/transmit.py +++ b/transmit.py @@ -549,7 +549,13 @@ def update_doppler(): except: print("2") print(tx) - try: + try: + print(rx) + print(tx) + print(rxpl_value) + print(sq) + print(txpl_value) + print("Program_fm") program_fm(rx,tx,rxpl_value,sq,txpl_value) except: print("3") From 45504bfb3bdc3a4fe3d0a4ce383012b856107cbe Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 19 Jun 2026 09:28:33 -0400 Subject: [PATCH 054/287] Update transmit.py add global tx --- transmit.py | 1 + 1 file changed, 1 insertion(+) diff --git a/transmit.py b/transmit.py index d0d4deec..a1c8a45f 100644 --- a/transmit.py +++ b/transmit.py @@ -521,6 +521,7 @@ def update_doppler(): global sq global doppler_table global mode + global tx print("update_doppler") try: relative_time = (time.perf_counter() - start_time) % 370 From d59a9cce438b7d0de87c32055a7dcce414342d59 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 19 Jun 2026 09:35:56 -0400 Subject: [PATCH 055/287] Update transmit.py fix tx --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index a1c8a45f..dca09a54 100644 --- a/transmit.py +++ b/transmit.py @@ -544,7 +544,7 @@ def update_doppler(): rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) except: print("1") - if (mode == 'e'): + if (mode != 'e'): try: tx = "{:.4f}".format(tx_doppler_freq_hz/1e6) except: From 4e3829fe729fdaad60b8823d25ce6fffc3f3cad0 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 19 Jun 2026 09:46:22 -0400 Subject: [PATCH 056/287] Update transmit.py remove extra prints --- transmit.py | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/transmit.py b/transmit.py index dca09a54..14a5bd01 100644 --- a/transmit.py +++ b/transmit.py @@ -540,26 +540,12 @@ def update_doppler(): print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") - try: - rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) - except: - print("1") + rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) if (mode != 'e'): - try: - tx = "{:.4f}".format(tx_doppler_freq_hz/1e6) - except: - print("2") + tx = "{:.4f}".format(tx_doppler_freq_hz/1e6) print(tx) - try: - print(rx) - print(tx) - print(rxpl_value) - print(sq) - print(txpl_value) - print("Program_fm") - program_fm(rx,tx,rxpl_value,sq,txpl_value) - except: - print("3") + program_fm(rx,tx,rxpl_value,sq,txpl_value) + except: print("update_doppler failed") From 3b7d31e39c64e6eab1c98c63703ada88c7711e5e Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 20 Jun 2026 20:36:11 -0400 Subject: [PATCH 057/287] Update transmit.py doppler_mode from sim.cfg --- transmit.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index 14a5bd01..2898ad30 100644 --- a/transmit.py +++ b/transmit.py @@ -695,7 +695,7 @@ if __name__ == "__main__": sim_mode = False sim_config = False hab_mode = False - doppler_mode = True + doppler_mode = False try: file = open("/home/pi/CubeSatSim/sim.cfg") @@ -748,7 +748,12 @@ if __name__ == "__main__": # print(txpl) # print( "{:.0f}".format(txpl)) txpl_value = "{:.0f}".format(txpl) - print(txpl_value) + print(txpl_value) + if len(config) > 11: + if config[11] == 'y' or config[11] == 'yes': + doppler_mode = True + print("Doppler mode is configured.") + print(config) print # print(callsign) From 0ba4ac3f80b2aed4abd6263aee6905e23ead9380 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 20 Jun 2026 20:53:28 -0400 Subject: [PATCH 058/287] Update config add doppler mode -K --- config | 105 ++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 77 insertions(+), 28 deletions(-) diff --git a/config b/config index 634d4d57..d0cf7ca4 100755 --- a/config +++ b/config @@ -260,6 +260,12 @@ if [ "$1" = "" ]; then echo "Random Failure Mode is OFF" fi + if [ "${14}" = "y" ] || [ "${14}" = "yes" ] ; then + echo "Doppler frequency shift mode enabled" + else + echo "Doppler frequency shift is OFF" + fi + echo -n "TX Frequency is: " echo -n ${7} echo -n " MHz, RX Frequency is: " @@ -368,7 +374,7 @@ if [ "$1" = "" ]; then echo -e "Current sim.cfg configuration file:" # echo - echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} + echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} echo echo "To change, include an OPTION" @@ -497,7 +503,7 @@ elif [ "$1" = "-t" ]; then echo -# $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${12} ${13} +# $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${12} ${13} ${14} echo "Do you want Simulated Telemetry ON (y/n) " read sim @@ -515,8 +521,8 @@ elif [ "$1" = "-t" ]; then # echo echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" # echo - echo $1 $2 $3 $4 $sim $6 $7 $8 $9 ${10} ${11} ${12} ${13} - echo $1 $2 $3 $4 $sim $6 $7 $8 $9 ${10} ${11} ${12} ${13} > /home/pi/CubeSatSim/sim.cfg + echo $1 $2 $3 $4 $sim $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} + echo $1 $2 $3 $4 $sim $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14}> /home/pi/CubeSatSim/sim.cfg echo ## echo "Rebooting CubeSatSim with new configuration file" ## echo @@ -545,7 +551,7 @@ elif [ "$1" = "-c" ]; then echo $oldcallsign echo -# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${12} ${13} +# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${12} ${13} ${14} echo "Enter callsign in all capitals: " read callsign @@ -559,8 +565,8 @@ elif [ "$1" = "-c" ]; then echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" - echo $callsign $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} - echo $callsign $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} > /home/pi/CubeSatSim/sim.cfg + echo $callsign $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} + echo $callsign $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} > /home/pi/CubeSatSim/sim.cfg fi if [ "$norestart" = "1" ]; then @@ -593,7 +599,7 @@ elif [ "$1" = "-r" ]; then echo $2 echo -# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} +# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} echo -e "Enter Reset Count (integer): " @@ -613,8 +619,8 @@ elif [ "$1" = "-r" ]; then echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" - echo $1 $resets $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} - echo $1 $resets $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} > /home/pi/CubeSatSim/sim.cfg + echo $1 $resets $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} + echo $1 $resets $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} > /home/pi/CubeSatSim/sim.cfg fi if [ "$norestart" = "1" ]; then @@ -648,7 +654,7 @@ elif [ "$1" = "-l" ]; then echo $3 echo -# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} +# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} echo -e "Enter latitude (decimal degrees, positive is north): " @@ -690,8 +696,8 @@ elif [ "$1" = "-l" ]; then fi echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" - echo $1 $2 $lat $long $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} - echo $1 $2 $lat $long $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} > /home/pi/CubeSatSim/sim.cfg + echo $1 $2 $lat $long $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} + echo $1 $2 $lat $long $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} > /home/pi/CubeSatSim/sim.cfg if [ "$norestart" = "1" ]; then echo @@ -1002,7 +1008,7 @@ elif [ "$1" = "-q" ]; then echo $6 echo -# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} +# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} echo -e "Enter squelch (integer 1 - 8): " @@ -1024,8 +1030,8 @@ elif [ "$1" = "-q" ]; then # echo echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" # echo - echo $1 $2 $3 $4 $5 $sq $7 $8 $9 ${10} ${11} ${12} ${13} - echo $1 $2 $3 $4 $4 $sq $7 $8 $9 ${10} ${11} ${12} ${13} > /home/pi/CubeSatSim/sim.cfg + echo $1 $2 $3 $4 $5 $sq $7 $8 $9 ${10} ${11} ${12} ${13} ${14} + echo $1 $2 $3 $4 $4 $sq $7 $8 $9 ${10} ${11} ${12} ${13} ${14} > /home/pi/CubeSatSim/sim.cfg echo echo "Restarting CubeSatSim with new configuration file" ## echo @@ -1061,7 +1067,7 @@ elif [ "$1" = "-P" ]; then echo ${11} echo -# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} +# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} echo -e "Enter RX PL value integer 0: None, 01-38: CTCSS (analog, 39-121:CDCSS (digital)" @@ -1104,8 +1110,8 @@ elif [ "$1" = "-P" ]; then # echo echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" # echo - echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $rxpl $txpl ${12} ${13} - echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $rxpl $txpl ${12} ${13} > /home/pi/CubeSatSim/sim.cfg + echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $rxpl $txpl ${12} ${13} ${14} + echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $rxpl $txpl ${12} ${13} ${14} > /home/pi/CubeSatSim/sim.cfg echo ## echo "Rebooting CubeSatSim with new configuration file" ## echo @@ -1135,7 +1141,7 @@ elif [ "$1" = "-F" ]; then echo $8 echo -# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} +# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} echo "Enter tx frequency as 4XX.XXXX: " read tx @@ -1156,8 +1162,8 @@ elif [ "$1" = "-F" ]; then fi echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" - echo $1 $2 $3 $4 $5 $6 $tx $rx $9 ${10} ${11} ${12} ${13} - echo $1 $2 $3 $4 $5 $6 $tx $rx $9 ${10} ${11} ${12} ${13} > /home/pi/CubeSatSim/sim.cfg + echo $1 $2 $3 $4 $5 $6 $tx $rx $9 ${10} ${11} ${12} ${13} ${14} + echo $1 $2 $3 $4 $5 $6 $tx $rx $9 ${10} ${11} ${12} ${13} ${14} > /home/pi/CubeSatSim/sim.cfg echo echo "Restarting CubeSatSim with new configuration file" @@ -1228,7 +1234,7 @@ elif [ "$1" = "-H" ]; then echo -# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} +# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} echo "Do you want Balloon mode ON (y/n) " read hab @@ -1245,8 +1251,8 @@ elif [ "$1" = "-H" ]; then # echo echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" # echo - echo $1 $2 $3 $4 $5 $6 $7 $8 $hab ${10} ${11} ${12} ${13} - echo $1 $2 $3 $4 $5 $6 $7 $8 $hab ${10} ${11} ${12} ${13} > /home/pi/CubeSatSim/sim.cfg + echo $1 $2 $3 $4 $5 $6 $7 $8 $hab ${10} ${11} ${12} ${13} ${14} + echo $1 $2 $3 $4 $5 $6 $7 $8 $hab ${10} ${11} ${12} ${13} ${14} > /home/pi/CubeSatSim/sim.cfg echo ## echo "Rebooting CubeSatSim with new configuration file" ## echo @@ -1721,7 +1727,7 @@ elif [ "$1" = "-U" ]; then echo -# $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${12} ${13} +# $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${12} ${13} ${14} echo "Do you want Random Simulated Failure ON (y/n) " read sim @@ -1761,8 +1767,8 @@ elif [ "$1" = "-U" ]; then # echo echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" # echo - echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} $sim $time - echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} $sim $time > /home/pi/CubeSatSim/sim.cfg + echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} $sim $time ${14} + echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} $sim $time ${14} > /home/pi/CubeSatSim/sim.cfg echo if [ "${12}" != "$sim" ] || [ "${13}" != "$time" ] ; then @@ -1888,6 +1894,48 @@ elif [ "$1" = "-k" ]; then reboot=1 # sudo systemctl restart pacsatsim +elif [ "$1" = "-K" ]; then + + echo + echo "Editing the Doppler frequency shift setting in" + echo "the configuration file for CubeSatSim" + echo + + value=`cat /home/pi/CubeSatSim/sim.cfg` + echo "$value" > /dev/null + set -- $value + + if [ "${14}" = "yes" ] || [ "${14}" = "y" ]; then + echo "Doppler frequency shift mode is ON" + else + echo " Doppler frequency shift mode is OFF" + fi + + echo + +# $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${12} ${13} ${14} + + echo "Do you want Doppler frequency shift ON (y/n) " + read sim + echo + + if [ "$sim" = "y" ] || [ "$sim" = "yes" ] ; then + doppler="yes" + echo "Doppler frequency shift is ON" + else + doppler="no" + echo " Doppler frequency shift is OFF" + fi + +# echo + echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" +# echo + echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} $doppler + echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} $doppler > /home/pi/CubeSatSim/sim.cfg + echo + + restart=1 + elif [ "$1" = "-h" ]; then echo "config OPTION" @@ -1934,6 +1982,7 @@ elif [ "$1" = "-h" ]; then echo " -N Set next mode or failure" echo " -u Change gpsd state" echo " -k Reset the PacSatSim Configuration" + echo " -K Change the Doppler frequency shift setting" echo exit From ec9dcd9fb262df945413ee4b1063ccc70b649eee Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 20 Jun 2026 20:56:42 -0400 Subject: [PATCH 059/287] Update transmit.py doppler is position 14 --- transmit.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/transmit.py b/transmit.py index 2898ad30..c5fcbc48 100644 --- a/transmit.py +++ b/transmit.py @@ -749,10 +749,10 @@ if __name__ == "__main__": # print( "{:.0f}".format(txpl)) txpl_value = "{:.0f}".format(txpl) print(txpl_value) - if len(config) > 11: - if config[11] == 'y' or config[11] == 'yes': + if len(config) > 13: + if config[13] == 'y' or config[13] == 'yes': doppler_mode = True - print("Doppler mode is configured.") + print("Doppler frequency shift mode is configured.") print(config) print From 475f610e5ef472350d0c504ebe5339ee6dfef449 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 20 Jun 2026 20:59:58 -0400 Subject: [PATCH 060/287] Update install added doppler to sim.cfg --- install | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/install b/install index 44196645..b7b68af3 100755 --- a/install +++ b/install @@ -39,7 +39,7 @@ else touch /home/pi/CubeSatSim/command_control_direwolf echo "creating $FILE" - echo "AMSAT 0 0 0 no 3 434.9 435 no 0 0 no 60" > /home/pi/CubeSatSim/sim.cfg + echo "AMSAT 0 0 0 no 3 434.9 435 no 0 0 no 60 no" > /home/pi/CubeSatSim/sim.cfg /home/pi/CubeSatSim/config -c -n @@ -295,21 +295,22 @@ if [ -f "$FILE" ]; then if [ -z "${11}" ] ; then m2="0" ; changed=1 ; else m2=${11} ; fi # tx pl code if [ -z "${12}" ] ; then m3="no" ; changed=1 ; else m3=${12} ; fi # random fail if [ -z "${13}" ] ; then m4="60" ; changed=1 ; else m4=${13} ; fi # random fail period + if [ -z "${14}" ] ; then m5="no" ; changed=1 ; else m5=${14} ; fi # doppler mode if [ $changed -eq 1 ]; then echo -e "Current sim.cfg configuration file:" echo - echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} + echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" echo - echo $n1 $n2 $n3 $n4 $n5 $n6 $n7 $n8 $n9 $m1 $m2 $m3 $m4 - echo $n1 $n2 $n3 $n4 $n5 $n6 $n7 $n8 $n9 $m1 $m2 $m3 $m4> /home/pi/CubeSatSim/sim.cfg + echo $n1 $n2 $n3 $n4 $n5 $n6 $n7 $n8 $n9 $m1 $m2 $m3 $m4 $m5 + echo $n1 $n2 $n3 $n4 $n5 $n6 $n7 $n8 $n9 $m1 $m2 $m3 $m4 $m5 > /home/pi/CubeSatSim/sim.cfg echo fi else echo "creating $FILE" - echo "AMSAT 0 0 0 no 3 434.9 435 no 0 0 no 60" > /home/pi/CubeSatSim/sim.cfg + echo "AMSAT 0 0 0 no 3 434.9 435 no 0 0 no 60 no" > /home/pi/CubeSatSim/sim.cfg fi if [[ $(grep 'cubesatsim' /etc/motd) ]]; then From ae50461811481f32c3e25f5cfcbf32466b8c383d Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 28 Jun 2026 17:29:19 -0400 Subject: [PATCH 061/287] Update install add ft857d install --- install | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/install b/install index b7b68af3..18d10ab5 100755 --- a/install +++ b/install @@ -834,6 +834,18 @@ if [ ! -f "/home/pi/ssdv/ssdv" ]; then make fi +if [ ! -f "/home/pi/FT857d" ]; then + cd + echo "Installing FT857d for Doppler rigctld control mode" + git clone https://github.com/alanbjohnston/FT857d.git + cd FT857d/examples/FT857d + git checkout pi + g++ main.c ../../src/ft857d.cpp -lwiringPi -o ft857d + + sudo apt-get install -y libhamlib-utils socat gpredict + +fi + cd #echo "Would you like to reboot to complete the installation (y/n)?" From caee9d95fdedf4f7bee72375fef44cd5d81f4d81 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 30 Jun 2026 10:19:25 -0400 Subject: [PATCH 062/287] Create rigctld.service --- systemd/rigctld.service | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 systemd/rigctld.service diff --git a/systemd/rigctld.service b/systemd/rigctld.service new file mode 100644 index 00000000..f40d7c1c --- /dev/null +++ b/systemd/rigctld.service @@ -0,0 +1,14 @@ +[Unit] +Description=rigctld + +[Service] +TimeoutStopSec=5 +ExecStart=/home/pi/CubeSatSim/rigctld.sh +WorkingDirectory=/home/pi/CubeSatSim +StandardOutput=inherit +StandardError=inherit +Restart=always +User=pi + +[Install] +WantedBy=default.target From a85925be2da8c2478fe90bdc7d309959f7879908 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 30 Jun 2026 10:23:54 -0400 Subject: [PATCH 063/287] Create rigctld.sh --- rigctld.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 rigctld.sh diff --git a/rigctld.sh b/rigctld.sh new file mode 100644 index 00000000..9c0ae91f --- /dev/null +++ b/rigctld.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +echo "Starting virtual serial ports /tmp/vttyA and /tmp/vttyB" + +socat -d -d PTY,raw,echo=0,link=/tmp/vttyA PTY,raw,echo=0,link=/tmp/vttyB + +echo "Starting rigctl emulating FT857 rig using virtual serial port /tmp/vttyB" + +rigctld -m 1022 -r /tmp/vttyB -t 4532 -vv + +echo "rigctld ended" From cae75720f76cf3f68ffa894c6e5f92a2b715a48f Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 30 Jun 2026 10:49:31 -0400 Subject: [PATCH 064/287] make executable --- rigctld.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) mode change 100644 => 100755 rigctld.sh diff --git a/rigctld.sh b/rigctld.sh old mode 100644 new mode 100755 index 9c0ae91f..e4ec754b --- a/rigctld.sh +++ b/rigctld.sh @@ -2,7 +2,11 @@ echo "Starting virtual serial ports /tmp/vttyA and /tmp/vttyB" -socat -d -d PTY,raw,echo=0,link=/tmp/vttyA PTY,raw,echo=0,link=/tmp/vttyB +socat -d -d PTY,raw,echo=0,link=/tmp/vttyA PTY,raw,echo=0,link=/tmp/vttyB & + +echo "Starting CubeSatSim FT857 emulation" + +/home/pi/FT857d/examples/FT857d/ft857d & echo "Starting rigctl emulating FT857 rig using virtual serial port /tmp/vttyB" From 215d1e18c98eb661dbbf9848216868ed5aed2531 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 30 Jun 2026 10:56:23 -0400 Subject: [PATCH 065/287] Update rigctld.sh kill processes --- rigctld.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rigctld.sh b/rigctld.sh index e4ec754b..fd3c488f 100755 --- a/rigctld.sh +++ b/rigctld.sh @@ -1,5 +1,9 @@ #!/bin/bash +sudo killall -9 ft857d &>/dev/null +sudo killall -9 socat &>/dev/null +sudo killall -9 rigctld &>/dev/null + echo "Starting virtual serial ports /tmp/vttyA and /tmp/vttyB" socat -d -d PTY,raw,echo=0,link=/tmp/vttyA PTY,raw,echo=0,link=/tmp/vttyB & From b0c1a9395a4921425297d2a7ed606a064df2ed9d Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 30 Jun 2026 10:57:27 -0400 Subject: [PATCH 066/287] Update rigctld.sh add sleeps --- rigctld.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rigctld.sh b/rigctld.sh index fd3c488f..5c4b5e81 100755 --- a/rigctld.sh +++ b/rigctld.sh @@ -8,10 +8,14 @@ echo "Starting virtual serial ports /tmp/vttyA and /tmp/vttyB" socat -d -d PTY,raw,echo=0,link=/tmp/vttyA PTY,raw,echo=0,link=/tmp/vttyB & +sleep 1 + echo "Starting CubeSatSim FT857 emulation" /home/pi/FT857d/examples/FT857d/ft857d & +sleep 1 + echo "Starting rigctl emulating FT857 rig using virtual serial port /tmp/vttyB" rigctld -m 1022 -r /tmp/vttyB -t 4532 -vv From ce5835fffcaf1d8bd8913148609333b7154b7306 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 30 Jun 2026 11:05:57 -0400 Subject: [PATCH 067/287] Update install add rigctld.service install --- install | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/install b/install index 18d10ab5..1ce24c20 100755 --- a/install +++ b/install @@ -718,6 +718,22 @@ else FLAG=1 fi +FILE=/etc/systemd/system/rigctld.service +if [ -f "$FILE" ]; then + if [[ $(diff /home/pi/CubeSatSim/systemd/rigctld.service /etc/systemd/system/rigctld.service) ]]; then + echo "changed rigctld.service." + sudo cp /home/pi/CubeSatSim/systemd/rigctld.service /etc/systemd/system/rigctld.service + FLAG=1 + else + echo "no change to rigctld.service." + fi +else + echo "creating rigctld.service." + sudo cp /home/pi/CubeSatSim/systemd/rigctld.service /etc/systemd/system/rigctld.service + FLAG=1 +fi + + FILE=/etc/asound.conf if [ -f "$FILE" ]; then if [[ $(diff /home/pi/CubeSatSim/asound.conf /etc/asound.conf) ]]; then From 4d0d72278b0bee563b6abc32c8001daf813487d4 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 30 Jun 2026 11:12:54 -0400 Subject: [PATCH 068/287] Update install add update to FT857d --- install | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/install b/install index 1ce24c20..19520125 100755 --- a/install +++ b/install @@ -862,6 +862,17 @@ if [ ! -f "/home/pi/FT857d" ]; then fi +cd /home/pi/FT857d +git checkout pi +git pull --no-rebase > .updated_p + +if [[ $(grep 'changed' //home/pi/FT857d/.updated_p) ]]; then + echo "updating FT857d" + g++ main.c ../../src/ft857d.cpp -lwiringPi -o ft857d +else + echo "nothing to do for FT857d." +fi + cd #echo "Would you like to reboot to complete the installation (y/n)?" From f6115583ab393775848ac6e12b5031cf39c8e84f Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 30 Jun 2026 16:01:59 -0400 Subject: [PATCH 069/287] Update log added rigctld --- log | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/log b/log index a516a3c0..e3a4afc5 100755 --- a/log +++ b/log @@ -8,6 +8,7 @@ if [ "$1" = "-h" ] ; then echo " -t transmit" echo " -c command and control" echo " -p pacsat" + echo " -r rigctld" echo "Default is the log is dumpted to the screen and written to a file." echo "If an additional r is included, the log is realtime, and exits with a Control-C" echo @@ -25,7 +26,7 @@ if [ "$REALTIME" = "1" ] ; then echo sleep 2 - if [ "$1" = "-r" ] || [ "$1" = "-t" ] ; then + if [ "$1" = "-t" ] ; then sudo journalctl -af -u transmit # > /home/pi/CubeSatSim/logt.txt # cat /home/pi/CubeSatSim/logt.txt # echo -e "\nTransmit Log file also saved as /home/pi/CubeSatSim/logt.txt" @@ -37,6 +38,8 @@ if [ "$REALTIME" = "1" ] ; then sudo journalctl -af -u pacsatsim # > /home/pi/CubeSatSim/logp.txt cat /home/pi/CubeSatSim/logp.txt # echo -e "\nCommand and Control Log file also saved as /home/pi/CubeSatSim/logp.txt" + elif [ "$1" = "-r" ]; then + sudo journalctl -af -u rigctld # > /home/pi/CubeSatSim/logr.txt else sudo journalctl -af -u cubesatsim # > /home/pi/CubeSatSim/log.txt # cat /home/pi/CubeSatSim/log.txt @@ -45,7 +48,7 @@ if [ "$REALTIME" = "1" ] ; then else - if [ "$1" = "-r" ] || [ "$1" = "-t" ] ; then + if [ "$1" = "-t" ] ; then sudo journalctl -a -u transmit > /home/pi/CubeSatSim/logt.txt cat /home/pi/CubeSatSim/logt.txt echo -e "\nTransmit Log file also saved as /home/pi/CubeSatSim/logt.txt" @@ -57,6 +60,10 @@ else sudo journalctl -a -u pacsatsim > /home/pi/CubeSatSim/logp.txt cat /home/pi/CubeSatSim/logp.txt echo -e "\nCommand and Control Log file also saved as /home/pi/CubeSatSim/logp.txt" + elif [ "$1" = "-r" ]; then + sudo journalctl -a -u rigctld > /home/pi/CubeSatSim/logr.txt + cat /home/pi/CubeSatSim/logr.txt + echo -e "\nrigtcld Log file also saved as /home/pi/CubeSatSim/logr.txt" else sudo journalctl -a -u cubesatsim > /home/pi/CubeSatSim/log.txt cat /home/pi/CubeSatSim/log.txt From 726e5597e92799eb9f96505d410679c7ed555b4a Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 1 Jul 2026 09:33:13 -0400 Subject: [PATCH 070/287] Update install fix ft857d install --- install | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install b/install index 19520125..8add5b1d 100755 --- a/install +++ b/install @@ -854,12 +854,12 @@ if [ ! -f "/home/pi/FT857d" ]; then cd echo "Installing FT857d for Doppler rigctld control mode" git clone https://github.com/alanbjohnston/FT857d.git - cd FT857d/examples/FT857d + cd FT857d git checkout pi + cd examples/FT857d g++ main.c ../../src/ft857d.cpp -lwiringPi -o ft857d sudo apt-get install -y libhamlib-utils socat gpredict - fi cd /home/pi/FT857d From 0deb0d55154266e18cdea7b3ccea320c67a0208d Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 1 Jul 2026 10:36:50 -0400 Subject: [PATCH 071/287] Update .gitignore add doppler.txt --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index acb007e4..041e454e 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,4 @@ sim_mode_auto direwolf-pacsatsim-tmp.conf groundstation/direwolf-pacsat-tmp.conf tlm.bin +doppler.txt From d4565ea78c4940deecfc7c7a44144329e74001a2 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 1 Jul 2026 10:49:41 -0400 Subject: [PATCH 072/287] Update config doppler mode sim/rig/no --- config | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/config b/config index d0cf7ca4..a48b22eb 100755 --- a/config +++ b/config @@ -260,8 +260,10 @@ if [ "$1" = "" ]; then echo "Random Failure Mode is OFF" fi - if [ "${14}" = "y" ] || [ "${14}" = "yes" ] ; then - echo "Doppler frequency shift mode enabled" + if [ "${14}" = "sim" ] ; then + echo "Simulated Doppler frequency shift mode enabled" + elif [ "${14}" = "rig" ] ; then + echo "rigctld Doppler frequency shift mode enabled" else echo "Doppler frequency shift is OFF" fi @@ -1905,10 +1907,12 @@ elif [ "$1" = "-K" ]; then echo "$value" > /dev/null set -- $value - if [ "${14}" = "yes" ] || [ "${14}" = "y" ]; then - echo "Doppler frequency shift mode is ON" + if [ "${14}" = "sim" ] ; then + echo "Simulated Doppler frequency shift mode enabled" + elif [ "${14}" = "rig" ] ; then + echo "rigctld Doppler frequency shift mode enabled" else - echo " Doppler frequency shift mode is OFF" + echo "Doppler frequency shift is OFF" fi echo @@ -1921,7 +1925,17 @@ elif [ "$1" = "-K" ]; then if [ "$sim" = "y" ] || [ "$sim" = "yes" ] ; then doppler="yes" - echo "Doppler frequency shift is ON" + echo "Do you want simulated Doppler shift or rigctld Doppler (sim/rig)" + read doppler + + if [ "$doppler" = "sim" ] ; then + echo "Simulated Doppler frequency shift mode enabled" + elif [ "$doppler" = "rig" ] ; then + echo "rigctld Doppler frequency shift mode enabled" + else + doppler="no" + echo "sim or rig not entered. Doppler frequency shift is OFF" + fi else doppler="no" echo " Doppler frequency shift is OFF" From 5a83c49dab17a6e2faf2ae7539487a1cbe9abc85 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 1 Jul 2026 10:55:26 -0400 Subject: [PATCH 073/287] Update config --- config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config b/config index a48b22eb..35908e6f 100755 --- a/config +++ b/config @@ -524,7 +524,7 @@ elif [ "$1" = "-t" ]; then echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" # echo echo $1 $2 $3 $4 $sim $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} - echo $1 $2 $3 $4 $sim $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14}> /home/pi/CubeSatSim/sim.cfg + echo $1 $2 $3 $4 $sim $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} > /home/pi/CubeSatSim/sim.cfg echo ## echo "Rebooting CubeSatSim with new configuration file" ## echo @@ -1433,7 +1433,7 @@ elif [ "$1" = "-g" ]; then echo "Resetting" - echo "AMSAT 0 0 0 no 3 434.9 435 no 0 0" > /home/pi/CubeSatSim/sim.cfg + echo "AMSAT 0 0 0 no 3 434.9 435 no 0 0 no 60 no" > /home/pi/CubeSatSim/sim.cfg sudo echo "b" > /home/pi/CubeSatSim/.mode From 078ad8153e83250053cefb6485e51afedc05682d Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 1 Jul 2026 10:58:29 -0400 Subject: [PATCH 074/287] Update config print doppler --- config | 1 + 1 file changed, 1 insertion(+) diff --git a/config b/config index 35908e6f..109ea621 100755 --- a/config +++ b/config @@ -260,6 +260,7 @@ if [ "$1" = "" ]; then echo "Random Failure Mode is OFF" fi + echo ${14} if [ "${14}" = "sim" ] ; then echo "Simulated Doppler frequency shift mode enabled" elif [ "${14}" = "rig" ] ; then From 6e946df2eaa65e43f7ead6d91d181597e0f1da9b Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 1 Jul 2026 11:03:22 -0400 Subject: [PATCH 075/287] Update main.h add doppler_moe --- main.h | 1 + 1 file changed, 1 insertion(+) diff --git a/main.h b/main.h index 08a9ad5e..60e534b8 100644 --- a/main.h +++ b/main.h @@ -170,6 +170,7 @@ char sim_yes[10]; char hab_yes[10]; char fail_yes[10]; int fail_time = 60; +char doppler_mode[10]; int squelch = 3; // default squelch char rx[12], tx[12]; int tx_pl = 0; From bd96517428bedb2456b9e5b80467a974615ad5c2 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 1 Jul 2026 11:06:54 -0400 Subject: [PATCH 076/287] Update main.c add doppler_mode --- main.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/main.c b/main.c index 3152e021..c58f72d7 100644 --- a/main.c +++ b/main.c @@ -42,11 +42,11 @@ int main(int argc, char * argv[]) { // char * cfg_buf[100]; - fscanf(config_file, "%s %d %f %f %s %d %s %s %s %d %d %s %d", - call, &reset_count, &lat_file, &long_file, sim_yes, &squelch, tx, rx, hab_yes, &rx_pl, &tx_pl, fail_yes, &fail_time); + fscanf(config_file, "%s %d %f %f %s %d %s %s %s %d %d %s %d %s", + call, &reset_count, &lat_file, &long_file, sim_yes, &squelch, tx, rx, hab_yes, &rx_pl, &tx_pl, fail_yes, &fail_time, &doppler_mode); fclose(config_file); - fprintf(stderr,"Config file /home/pi/CubeSatSim/sim.cfg contains %s %d %f %f %s %d %s %s %s %d %d %s %d\n", - call, reset_count, lat_file, long_file, sim_yes, squelch, tx, rx, hab_yes, rx_pl, tx_pl, fail_yes, fail_time); + fprintf(stderr,"Config file /home/pi/CubeSatSim/sim.cfg contains %s %d %f %f %s %d %s %s %s %d %d %s %d %s\n", + call, reset_count, lat_file, long_file, sim_yes, squelch, tx, rx, hab_yes, rx_pl, tx_pl, fail_yes, fail_time, doppler_mode); fprintf(stderr, "Transmit on %s MHz Receive on %s MHz\n", tx, rx); @@ -322,7 +322,7 @@ int main(int argc, char * argv[]) { config_file = fopen("sim.cfg", "w"); fprintf(config_file, "%s %d %8.4f %8.4f %s %d %s %s %s %d %d %s %d", - call, reset_count, lat_file, long_file, sim_yes, squelch, tx, rx, hab_yes, rx_pl, tx_pl, fail_yes, fail_time); + call, reset_count, lat_file, long_file, sim_yes, squelch, tx, rx, hab_yes, rx_pl, tx_pl, fail_yes, fail_time, doppler_mode); // fprintf(config_file, "%s %d", call, reset_count); fclose(config_file); config_file = fopen("sim.cfg", "r"); From cc820aacd171b95d9ea9fa440e62d0ff06425297 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 1 Jul 2026 17:21:45 -0400 Subject: [PATCH 077/287] Update main.c fix doppler_mode --- main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.c b/main.c index c58f72d7..3ecc52e2 100644 --- a/main.c +++ b/main.c @@ -43,7 +43,7 @@ int main(int argc, char * argv[]) { // char * cfg_buf[100]; fscanf(config_file, "%s %d %f %f %s %d %s %s %s %d %d %s %d %s", - call, &reset_count, &lat_file, &long_file, sim_yes, &squelch, tx, rx, hab_yes, &rx_pl, &tx_pl, fail_yes, &fail_time, &doppler_mode); + call, &reset_count, &lat_file, &long_file, sim_yes, &squelch, tx, rx, hab_yes, &rx_pl, &tx_pl, fail_yes, &fail_time, doppler_mode); fclose(config_file); fprintf(stderr,"Config file /home/pi/CubeSatSim/sim.cfg contains %s %d %f %f %s %d %s %s %s %d %d %s %d %s\n", call, reset_count, lat_file, long_file, sim_yes, squelch, tx, rx, hab_yes, rx_pl, tx_pl, fail_yes, fail_time, doppler_mode); From 53248a7e85c3aa61d5e1d0a241da7c85a08bdf2f Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 1 Jul 2026 17:25:05 -0400 Subject: [PATCH 078/287] Update main.c write doppler_mode --- main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.c b/main.c index 3ecc52e2..08478b4a 100644 --- a/main.c +++ b/main.c @@ -321,7 +321,7 @@ int main(int argc, char * argv[]) { } config_file = fopen("sim.cfg", "w"); - fprintf(config_file, "%s %d %8.4f %8.4f %s %d %s %s %s %d %d %s %d", + fprintf(config_file, "%s %d %8.4f %8.4f %s %d %s %s %s %d %d %s %d %s", call, reset_count, lat_file, long_file, sim_yes, squelch, tx, rx, hab_yes, rx_pl, tx_pl, fail_yes, fail_time, doppler_mode); // fprintf(config_file, "%s %d", call, reset_count); fclose(config_file); From 9b08f80703989b1fa0263c61c8d7acb9fc60077d Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 1 Jul 2026 17:27:29 -0400 Subject: [PATCH 079/287] Update config don't print doppler_mode --- config | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config b/config index 109ea621..2811fdcd 100755 --- a/config +++ b/config @@ -260,11 +260,11 @@ if [ "$1" = "" ]; then echo "Random Failure Mode is OFF" fi - echo ${14} +# echo ${14} if [ "${14}" = "sim" ] ; then - echo "Simulated Doppler frequency shift mode enabled" + echo "Simulated Doppler frequency shift enabled" elif [ "${14}" = "rig" ] ; then - echo "rigctld Doppler frequency shift mode enabled" + echo "rigctld Doppler frequency shift enabled" else echo "Doppler frequency shift is OFF" fi From 72a78278237b68d592133ccbe591719461212f0f Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 1 Jul 2026 17:33:06 -0400 Subject: [PATCH 080/287] Update transmit.py start/stop rigctld based on config --- transmit.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/transmit.py b/transmit.py index c5fcbc48..df7afc9b 100644 --- a/transmit.py +++ b/transmit.py @@ -750,10 +750,17 @@ if __name__ == "__main__": txpl_value = "{:.0f}".format(txpl) print(txpl_value) if len(config) > 13: - if config[13] == 'y' or config[13] == 'yes': + if config[13] == 'sim': doppler_mode = True - print("Doppler frequency shift mode is configured.") - + print("Simulated Doppler frequency shift is enabled.") + if config[13] == 'rig': + doppler_mode = True + system("sudo systemctl restart rigctld") + print("rigctl Doppler frequency shift is enabled.") + else: + system("sudo systemctl stop rigctld") + else: + system("sudo systemctl stop rigctld") print(config) print # print(callsign) From 98939a9c3165cd181777bca61ff07065c6bfdc7a Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 13:55:31 -0400 Subject: [PATCH 081/287] Update transmit.py added true cw using rpitx --- transmit.py | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/transmit.py b/transmit.py index df7afc9b..c46e8aad 100644 --- a/transmit.py +++ b/transmit.py @@ -549,6 +549,74 @@ def update_doppler(): except: print("update_doppler failed") +morse_table = [ # 0-9, A-Z only by (ASCII - 48) + [ 3, 3, 3, 3, 3, 0 ], # 0 + [ 1, 3, 3, 3, 3, 0 ], # 1 + [ 1, 1, 3, 3, 3, 0 ], # 2 + [ 1, 1, 1, 3, 3, 0 ], # 3 + [ 1, 1, 1, 1, 3, 0 ], # 4 + [ 1, 1, 1, 1, 1, 0 ], # 5 + [ 3, 1, 1, 1, 1, 0 ], # 6 + [ 3, 3, 1, 1, 1, 0 ], # 7 + [ 3, 3, 3, 1, 1, 0 ], # 8 + [ 3, 3, 3, 3, 1, 0 ], # 9 + [ 0, 0, 0, 0, 0, 0 ], # - + [ 0, 0, 0, 0, 0, 0 ], # - + [ 0, 0, 0, 0, 0, 0 ], # - + [ 0, 0, 0, 0, 0, 0 ], # - + [ 0, 0, 0, 0, 0, 0 ], # - + [ 0, 0, 0, 0, 0, 0 ], # - + [ 0, 0, 0, 0, 0, 0 ], # - + [ 1, 3, 0, 0, 0, 0 ], # A + [ 3, 1, 1, 1, 0, 0 ], # B + [ 3, 1, 3, 1, 0, 0 ], # C + [ 3, 1, 1, 0, 0, 0 ], # D + [ 1, 0, 0, 0, 0, 0 ], # E + [ 1, 1, 3, 1, 0, 0 ], # F + [ 3, 3, 1, 0, 0, 0 ], # G + [ 1, 1, 1, 1, 0, 0 ], # H + [ 1, 1, 0, 0, 0, 0 ], # I + [ 1, 3, 3, 3, 0, 0 ], # J + [ 3, 1, 3, 0, 0, 0 ], # K + [ 1, 3, 1, 1, 0, 0 ], # L + [ 3, 3, 0, 0, 0, 0 ], # M + [ 3, 1, 0, 0, 0, 0 ], # N + [ 3, 3, 3, 0, 0, 0 ], # O + [ 1, 3, 3, 1, 0, 0 ], # P + [ 3, 3, 1, 3, 0, 0 ], # Q + [ 1, 3, 1, 0, 0, 0 ], # R + [ 1, 1, 1, 0, 0, 0 ], # S + [ 3, 0, 0, 0, 0, 0 ], # T + [ 1, 1, 3, 0, 0, 0 ], # U + [ 1, 1, 1, 3, 0, 0 ], # V + [ 1, 3, 3, 0, 0, 0 ], # W + [ 3, 1, 1, 3, 0, 0 ], # X + [ 3, 1, 3, 3, 0, 0 ], # Y + [ 3, 3, 1, 1, 0, 0 ] # Z +] + +def cw_transmit_string(string): + global morse_timing + for character in string: + if (character != ' '): + cw_transmit_char(character); + else: + sleep(6.0 * morse_timing); + +def cw_transmit_char(character): + global morse_timing + i = 0 + while (morse_table[(ord(character.upper()) - ord('0')) % 44][i] != 0): + transmit_carrier(morse_table[(ord(character.upper()) - ord('0')) % 44][i] * morse_timing); + i=i+1 + sleep(morse_timing); + sleep(morse_timing * 3.0); + +def transmit_carrier(duration): + global tx_doppler_freq_hz + command = "timeout " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 + system(command) + print("CubeSatSim v2.2 transmit.py starting...") pd = 21 From 4d853a5148d5fcbc59a4f10dd68deba9d6d4a1d0 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 14:06:01 -0400 Subject: [PATCH 082/287] Update transmit.py if doppler_mode, cw using tone --- transmit.py | 63 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/transmit.py b/transmit.py index c46e8aad..a429addd 100644 --- a/transmit.py +++ b/transmit.py @@ -614,8 +614,11 @@ def cw_transmit_char(character): def transmit_carrier(duration): global tx_doppler_freq_hz + global txLed command = "timeout " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 + output(txLed, 1) system(command) + output(txLed, 0) print("CubeSatSim v2.2 transmit.py starting...") @@ -1071,34 +1074,42 @@ if __name__ == "__main__": system("sudo rm /home/pi/CubeSatSim/cwready") ## ch = 1 for chan in range(7): - command = "gen_packets -M 20 -o /home/pi/CubeSatSim/morse.wav /home/pi/CubeSatSim/cw" + str(chan) + ".txt -r 48000 > /dev/null 2>&1" - print(command) - system(command) -## chan = chan + 1 - if (command_tx == True): - output(txLed, 1) - if (doppler_mode == True): - update_doppler() - txf = tx_doppler_freq_hz / 1000 - tx = "{:.4f}".format(txf) - if (txc): - sim_failure_check() -# output (pd, 1) - sleep(0.3) - output (ptt, 0) - system("aplay -D plughw:CARD=" + card + ",DEV=0 /home/pi/CubeSatSim/morse.wav") - sleep(0.1) - output (ptt, 1) -# output (pd, 0) + if (doppler_mode): + try: + file = open("/home/pi/CubeSatSim/cw" + str(chan) + ".txt") + string = file.readline() + cw_transmit_string(string) else: - if (debug_mode == 1): - system("cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3") + print("error reading cw string " + str(chan)) + else: + command = "gen_packets -M 20 -o /home/pi/CubeSatSim/morse.wav /home/pi/CubeSatSim/cw" + str(chan) + ".txt -r 48000 > /dev/null 2>&1" + print(command) + system(command) + ## chan = chan + 1 + if (command_tx == True): + output(txLed, 1) + if (doppler_mode == True): + update_doppler() + txf = tx_doppler_freq_hz / 1000 + tx = "{:.4f}".format(txf) + if (txc): + sim_failure_check() + # output (pd, 1) + sleep(0.3) + output (ptt, 0) + system("aplay -D plughw:CARD=" + card + ",DEV=0 /home/pi/CubeSatSim/morse.wav") + sleep(0.1) + output (ptt, 1) + # output (pd, 0) else: - system("cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1") - output(txLed, 0) - -# command_control_check() - sleep(2) + if (debug_mode == 1): + system("cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3") + else: + system("cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1") + output(txLed, 0) + + # command_control_check() + sleep(2) f.close() sleep(10) except: From 86708b0c996aa3162da41330408b02902a10736c Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 14:07:07 -0400 Subject: [PATCH 083/287] Update transmit.py fix except --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index a429addd..94f1843e 100644 --- a/transmit.py +++ b/transmit.py @@ -1079,7 +1079,7 @@ if __name__ == "__main__": file = open("/home/pi/CubeSatSim/cw" + str(chan) + ".txt") string = file.readline() cw_transmit_string(string) - else: + except: print("error reading cw string " + str(chan)) else: command = "gen_packets -M 20 -o /home/pi/CubeSatSim/morse.wav /home/pi/CubeSatSim/cw" + str(chan) + ".txt -r 48000 > /dev/null 2>&1" From 3305fae6e319242abd977dc3fb41492451631cd5 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 14:10:53 -0400 Subject: [PATCH 084/287] Update transmit.py add prints --- transmit.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/transmit.py b/transmit.py index 94f1843e..86647ad2 100644 --- a/transmit.py +++ b/transmit.py @@ -1076,9 +1076,12 @@ if __name__ == "__main__": for chan in range(7): if (doppler_mode): try: - file = open("/home/pi/CubeSatSim/cw" + str(chan) + ".txt") - string = file.readline() - cw_transmit_string(string) + filename="/home/pi/CubeSatSim/cw" + str(chan) + ".txt" + print(filename) + file = open(filename) + cw_string = file.readline() + print(cw_string) + cw_transmit_string(cw_string) except: print("error reading cw string " + str(chan)) else: From 528bb1f5ce65dae124a3d788876fb7b64abf5809 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 14:11:53 -0400 Subject: [PATCH 085/287] Update transmit.py remove try to see error --- transmit.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/transmit.py b/transmit.py index 86647ad2..bc1e67af 100644 --- a/transmit.py +++ b/transmit.py @@ -1075,15 +1075,15 @@ if __name__ == "__main__": ## ch = 1 for chan in range(7): if (doppler_mode): - try: - filename="/home/pi/CubeSatSim/cw" + str(chan) + ".txt" - print(filename) - file = open(filename) - cw_string = file.readline() - print(cw_string) - cw_transmit_string(cw_string) - except: - print("error reading cw string " + str(chan)) +# try: + filename="/home/pi/CubeSatSim/cw" + str(chan) + ".txt" + print(filename) + file = open(filename) + cw_string = file.readline() + print(cw_string) + cw_transmit_string(cw_string) +# except: +# print("error reading cw string " + str(chan)) else: command = "gen_packets -M 20 -o /home/pi/CubeSatSim/morse.wav /home/pi/CubeSatSim/cw" + str(chan) + ".txt -r 48000 > /dev/null 2>&1" print(command) From f15f8afb3d5dc2f97be240912859f03df4c69efb Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 14:14:40 -0400 Subject: [PATCH 086/287] Update transmit.py set morse_timing to 0.1 --- transmit.py | 1 + 1 file changed, 1 insertion(+) diff --git a/transmit.py b/transmit.py index bc1e67af..d5c4ddc9 100644 --- a/transmit.py +++ b/transmit.py @@ -628,6 +628,7 @@ txc_pin = 7 squelch = 6 green = 16 powerPin = 16 +morse_timing = 0.1 command_tx = True From 1792cb75548b12521dba03371fcdc79fc9afadf0 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 14:17:25 -0400 Subject: [PATCH 087/287] Update transmit.py move sleep 2 --- transmit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index d5c4ddc9..eab6e23b 100644 --- a/transmit.py +++ b/transmit.py @@ -1112,8 +1112,8 @@ if __name__ == "__main__": system("cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1") output(txLed, 0) - # command_control_check() - sleep(2) +# command_control_check() + sleep(2) f.close() sleep(10) except: From e56b63a8322364baee309e3661d06bdd3a6594bc Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 14:22:12 -0400 Subject: [PATCH 088/287] Update transmit.py test cw_transmit_string --- transmit.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index eab6e23b..e40ecba4 100644 --- a/transmit.py +++ b/transmit.py @@ -1068,7 +1068,15 @@ if __name__ == "__main__": while True: # command_control_check() output (pd, 1) - output (ptt, 1) + output (ptt, 1) + + filename="/home/pi/CubeSatSim/cw0.txt" + print(filename) + file = open(filename) + cw_string = file.readline() + print(cw_string) + cw_transmit_string(cw_string) + try: f = open("/home/pi/CubeSatSim/cwready") f.close() From a737f6f6ebb2036fd7093b8b59bdc3829fae49a2 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 14:27:00 -0400 Subject: [PATCH 089/287] Update transmit.py add except print --- transmit.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/transmit.py b/transmit.py index e40ecba4..d4863e21 100644 --- a/transmit.py +++ b/transmit.py @@ -1070,6 +1070,7 @@ if __name__ == "__main__": output (pd, 1) output (ptt, 1) + update_doppler() filename="/home/pi/CubeSatSim/cw0.txt" print(filename) file = open(filename) @@ -1084,15 +1085,17 @@ if __name__ == "__main__": ## ch = 1 for chan in range(7): if (doppler_mode): -# try: - filename="/home/pi/CubeSatSim/cw" + str(chan) + ".txt" - print(filename) - file = open(filename) - cw_string = file.readline() - print(cw_string) - cw_transmit_string(cw_string) -# except: -# print("error reading cw string " + str(chan)) + try: + update_doppler() + filename="/home/pi/CubeSatSim/cw" + str(chan) + ".txt" + print(filename) + file = open(filename) + cw_string = file.readline() + print(cw_string) + cw_transmit_string(cw_string) + except Exception as e: + print(f"An error occurred: {e}") + print("error reading cw string " + str(chan)) else: command = "gen_packets -M 20 -o /home/pi/CubeSatSim/morse.wav /home/pi/CubeSatSim/cw" + str(chan) + ".txt -r 48000 > /dev/null 2>&1" print(command) From cf455bed73dbc52d60820d69af01fe0d1333e412 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 14:28:00 -0400 Subject: [PATCH 090/287] Update transmit.py fix tabs --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index d4863e21..beb3e7f8 100644 --- a/transmit.py +++ b/transmit.py @@ -1094,7 +1094,7 @@ if __name__ == "__main__": print(cw_string) cw_transmit_string(cw_string) except Exception as e: - print(f"An error occurred: {e}") + print(f"An error occurred: {e}") print("error reading cw string " + str(chan)) else: command = "gen_packets -M 20 -o /home/pi/CubeSatSim/morse.wav /home/pi/CubeSatSim/cw" + str(chan) + ".txt -r 48000 > /dev/null 2>&1" From f4a0feb7cc73cddf7fe768f908705c5a96427d25 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 14:32:29 -0400 Subject: [PATCH 091/287] Update transmit.py update doppler each character --- transmit.py | 1 + 1 file changed, 1 insertion(+) diff --git a/transmit.py b/transmit.py index beb3e7f8..8259fb07 100644 --- a/transmit.py +++ b/transmit.py @@ -605,6 +605,7 @@ def cw_transmit_string(string): def cw_transmit_char(character): global morse_timing + update_doppler() i = 0 while (morse_table[(ord(character.upper()) - ord('0')) % 44][i] != 0): transmit_carrier(morse_table[(ord(character.upper()) - ord('0')) % 44][i] * morse_timing); From 848361627115c6028188e6ce3fa2b4214c472671 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 14:36:31 -0400 Subject: [PATCH 092/287] Update transmit.py add "no" to update_doppler for no fm --- transmit.py | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/transmit.py b/transmit.py index 8259fb07..0117c703 100644 --- a/transmit.py +++ b/transmit.py @@ -510,7 +510,7 @@ iss_doppler_passes = { ] } -def update_doppler(): +def update_doppler(fm): try: global start_time @@ -540,11 +540,12 @@ def update_doppler(): print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") - rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) - if (mode != 'e'): - tx = "{:.4f}".format(tx_doppler_freq_hz/1e6) - print(tx) - program_fm(rx,tx,rxpl_value,sq,txpl_value) + if (fm != "no"): + rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) + if (mode != 'e'): + tx = "{:.4f}".format(tx_doppler_freq_hz/1e6) + print(tx) + program_fm(rx,tx,rxpl_value,sq,txpl_value) except: print("update_doppler failed") @@ -605,7 +606,7 @@ def cw_transmit_string(string): def cw_transmit_char(character): global morse_timing - update_doppler() + update_doppler("no") i = 0 while (morse_table[(ord(character.upper()) - ord('0')) % 44][i] != 0): transmit_carrier(morse_table[(ord(character.upper()) - ord('0')) % 44][i] * morse_timing); @@ -1069,16 +1070,7 @@ if __name__ == "__main__": while True: # command_control_check() output (pd, 1) - output (ptt, 1) - - update_doppler() - filename="/home/pi/CubeSatSim/cw0.txt" - print(filename) - file = open(filename) - cw_string = file.readline() - print(cw_string) - cw_transmit_string(cw_string) - + output (ptt, 1) try: f = open("/home/pi/CubeSatSim/cwready") f.close() @@ -1087,7 +1079,7 @@ if __name__ == "__main__": for chan in range(7): if (doppler_mode): try: - update_doppler() +# update_doppler() filename="/home/pi/CubeSatSim/cw" + str(chan) + ".txt" print(filename) file = open(filename) From dc55ae6f0998683035e78446aee7f5e2450dc23c Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 14:40:38 -0400 Subject: [PATCH 093/287] Update transmit.py reduce spacing for characters --- transmit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index 0117c703..0434ad4f 100644 --- a/transmit.py +++ b/transmit.py @@ -612,7 +612,7 @@ def cw_transmit_char(character): transmit_carrier(morse_table[(ord(character.upper()) - ord('0')) % 44][i] * morse_timing); i=i+1 sleep(morse_timing); - sleep(morse_timing * 3.0); + sleep(morse_timing * 1.5); def transmit_carrier(duration): global tx_doppler_freq_hz @@ -630,7 +630,7 @@ txc_pin = 7 squelch = 6 green = 16 powerPin = 16 -morse_timing = 0.1 +morse_timing = 0.07 command_tx = True From 57835a27ac561c8433dfcd22e2370420f5743bf8 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 15:02:14 -0400 Subject: [PATCH 094/287] Update transmit.py reduce inter dit timing --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 0434ad4f..3e0d2abd 100644 --- a/transmit.py +++ b/transmit.py @@ -611,7 +611,7 @@ def cw_transmit_char(character): while (morse_table[(ord(character.upper()) - ord('0')) % 44][i] != 0): transmit_carrier(morse_table[(ord(character.upper()) - ord('0')) % 44][i] * morse_timing); i=i+1 - sleep(morse_timing); + sleep(morse_timing * 0.7); sleep(morse_timing * 1.5); def transmit_carrier(duration): From 7dd2b1cdd3cc4ef306679bc1653fafc60758eb1c Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 15:09:29 -0400 Subject: [PATCH 095/287] Update transmit.py 0.15 --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 3e0d2abd..6e006fb8 100644 --- a/transmit.py +++ b/transmit.py @@ -630,7 +630,7 @@ txc_pin = 7 squelch = 6 green = 16 powerPin = 16 -morse_timing = 0.07 +morse_timing = 0.15 command_tx = True From 479d85a2be1254f92063a73edee0647b167ce44f Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 16:33:47 -0400 Subject: [PATCH 096/287] Create frequency.py --- frequency.py | 382 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 382 insertions(+) create mode 100644 frequency.py diff --git a/frequency.py b/frequency.py new file mode 100644 index 00000000..3cfa0561 --- /dev/null +++ b/frequency.py @@ -0,0 +1,382 @@ +#!/usr/bin/env python + +#import subprocess +import time +from time import sleep +#import os +import sys +from os import system + + +iss_doppler_passes = { + 5: [ + {"time_sec": -180, "velocity_kms": -4.00, "doppler_434_khz": 5.79, "obs_434_mhz": 434.9058, "doppler_144_khz": 1.93, "obs_144_mhz": 144.9019}, + {"time_sec": -170, "velocity_kms": -3.89, "doppler_434_khz": 5.64, "obs_434_mhz": 434.9056, "doppler_144_khz": 1.88, "obs_144_mhz": 144.9019}, + {"time_sec": -160, "velocity_kms": -3.78, "doppler_434_khz": 5.48, "obs_434_mhz": 434.9055, "doppler_144_khz": 1.83, "obs_144_mhz": 144.9018}, + {"time_sec": -150, "velocity_kms": -3.67, "doppler_434_khz": 5.32, "obs_434_mhz": 434.9053, "doppler_144_khz": 1.77, "obs_144_mhz": 144.9018}, + {"time_sec": -140, "velocity_kms": -3.54, "doppler_434_khz": 5.14, "obs_434_mhz": 434.9051, "doppler_144_khz": 1.71, "obs_144_mhz": 144.9017}, + {"time_sec": -130, "velocity_kms": -3.42, "doppler_434_khz": 4.96, "obs_434_mhz": 434.9050, "doppler_144_khz": 1.65, "obs_144_mhz": 144.9017}, + {"time_sec": -120, "velocity_kms": -3.28, "doppler_434_khz": 4.76, "obs_434_mhz": 434.9048, "doppler_144_khz": 1.59, "obs_144_mhz": 144.9016}, + {"time_sec": -110, "velocity_kms": -3.14, "doppler_434_khz": 4.55, "obs_434_mhz": 434.9046, "doppler_144_khz": 1.52, "obs_144_mhz": 144.9015}, + {"time_sec": -100, "velocity_kms": -2.99, "doppler_434_khz": 4.33, "obs_434_mhz": 434.9043, "doppler_144_khz": 1.44, "obs_144_mhz": 144.9014}, + {"time_sec": -90, "velocity_kms": -2.83, "doppler_434_khz": 4.10, "obs_434_mhz": 434.9041, "doppler_144_khz": 1.37, "obs_144_mhz": 144.9014}, + {"time_sec": -80, "velocity_kms": -2.66, "doppler_434_khz": 3.86, "obs_434_mhz": 434.9039, "doppler_144_khz": 1.29, "obs_144_mhz": 144.9013}, + {"time_sec": -70, "velocity_kms": -2.48, "doppler_434_khz": 3.60, "obs_434_mhz": 434.9036, "doppler_144_khz": 1.20, "obs_144_mhz": 144.9012}, + {"time_sec": -60, "velocity_kms": -2.29, "doppler_434_khz": 3.32, "obs_434_mhz": 434.9033, "doppler_144_khz": 1.11, "obs_144_mhz": 144.9011}, + {"time_sec": -50, "velocity_kms": -2.09, "doppler_434_khz": 3.03, "obs_434_mhz": 434.9030, "doppler_144_khz": 1.01, "obs_144_mhz": 144.9010}, + {"time_sec": -40, "velocity_kms": -1.87, "doppler_434_khz": 2.71, "obs_434_mhz": 434.9027, "doppler_144_khz": 0.90, "obs_144_mhz": 144.9009}, + {"time_sec": -30, "velocity_kms": -1.63, "doppler_434_khz": 2.37, "obs_434_mhz": 434.9024, "doppler_144_khz": 0.79, "obs_144_mhz": 144.9008}, + {"time_sec": -20, "velocity_kms": -1.33, "doppler_434_khz": 1.93, "obs_434_mhz": 434.9019, "doppler_144_khz": 0.64, "obs_144_mhz": 144.9006}, + {"time_sec": -10, "velocity_kms": -0.84, "doppler_434_khz": 1.22, "obs_434_mhz": 434.9012, "doppler_144_khz": 0.41, "obs_144_mhz": 144.9004}, + {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": 0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": 0.00, "obs_144_mhz": 144.9000}, + {"time_sec": 10, "velocity_kms": 0.84, "doppler_434_khz": -1.22, "obs_434_mhz": 434.8988, "doppler_144_khz": -0.41, "obs_144_mhz": 144.8996}, + {"time_sec": 20, "velocity_kms": 1.33, "doppler_434_khz": -1.93, "obs_434_mhz": 434.8981, "doppler_144_khz": -0.64, "obs_144_mhz": 144.8994}, + {"time_sec": 30, "velocity_kms": 1.63, "doppler_434_khz": -2.37, "obs_434_mhz": 434.8976, "doppler_144_khz": -0.79, "obs_144_mhz": 144.8992}, + {"time_sec": 40, "velocity_kms": 1.87, "doppler_434_khz": -2.71, "obs_434_mhz": 434.8973, "doppler_144_khz": -0.90, "obs_144_mhz": 144.8991}, + {"time_sec": 50, "velocity_kms": 2.09, "doppler_434_khz": -3.03, "obs_434_mhz": 434.8970, "doppler_144_khz": -1.01, "obs_144_mhz": 144.8990}, + {"time_sec": 60, "velocity_kms": 2.29, "doppler_434_khz": -3.32, "obs_434_mhz": 434.8967, "doppler_144_khz": -1.11, "obs_144_mhz": 144.8989}, + {"time_sec": 70, "velocity_kms": 2.48, "doppler_434_khz": -3.60, "obs_434_mhz": 434.8964, "doppler_144_khz": -1.20, "obs_144_mhz": 144.8988}, + {"time_sec": 80, "velocity_kms": 2.66, "doppler_434_khz": -3.86, "obs_434_mhz": 434.8961, "doppler_144_khz": -1.29, "obs_144_mhz": 144.8987}, + {"time_sec": 90, "velocity_kms": 2.83, "doppler_434_khz": -4.10, "obs_434_mhz": 434.8959, "doppler_144_khz": -1.37, "obs_144_mhz": 144.8986}, + {"time_sec": 100, "velocity_kms": 2.99, "doppler_434_khz": -4.33, "obs_434_mhz": 434.8957, "doppler_144_khz": -1.44, "obs_144_mhz": 144.8986}, + {"time_sec": 110, "velocity_kms": 3.14, "doppler_434_khz": -4.55, "obs_434_mhz": 434.8954, "doppler_144_khz": -1.52, "obs_144_mhz": 144.8985}, + {"time_sec": 120, "velocity_kms": 3.28, "doppler_434_khz": -4.76, "obs_434_mhz": 434.8952, "doppler_144_khz": -1.59, "obs_144_mhz": 144.8984}, + {"time_sec": 130, "velocity_kms": 3.42, "doppler_434_khz": -4.96, "obs_434_mhz": 434.8950, "doppler_144_khz": -1.65, "obs_144_mhz": 144.8983}, + {"time_sec": 140, "velocity_kms": 3.54, "doppler_434_khz": -5.14, "obs_434_mhz": 434.8949, "doppler_144_khz": -1.71, "obs_144_mhz": 144.8983}, + {"time_sec": 150, "velocity_kms": 3.67, "doppler_434_khz": -5.32, "obs_434_mhz": 434.8947, "doppler_144_khz": -1.77, "obs_144_mhz": 144.8982}, + {"time_sec": 160, "velocity_kms": 3.78, "doppler_434_khz": -5.48, "obs_434_mhz": 434.8945, "doppler_144_khz": -1.83, "obs_144_mhz": 144.8982}, + {"time_sec": 170, "velocity_kms": 3.89, "doppler_434_khz": -5.64, "obs_434_mhz": 434.8944, "doppler_144_khz": -1.88, "obs_144_mhz": 144.8981}, + {"time_sec": 180, "velocity_kms": 4.00, "doppler_434_khz": -5.79, "obs_434_mhz": 434.8942, "doppler_144_khz": -1.93, "obs_144_mhz": 144.8981} + ], + 20: [ + {"time_sec": -180, "velocity_kms": -5.81, "doppler_434_khz": 8.43, "obs_434_mhz": 434.9084, "doppler_144_khz": 2.81, "obs_144_mhz": 144.9028}, + {"time_sec": -170, "velocity_kms": -5.68, "doppler_434_khz": 8.24, "obs_434_mhz": 434.9082, "doppler_144_khz": 2.75, "obs_144_mhz": 144.9027}, + {"time_sec": -160, "velocity_kms": -5.55, "doppler_434_khz": 8.05, "obs_434_mhz": 434.9081, "doppler_144_khz": 2.68, "obs_144_mhz": 144.9027}, + {"time_sec": -150, "velocity_kms": -5.39, "doppler_434_khz": 7.82, "obs_434_mhz": 434.9078, "doppler_144_khz": 2.61, "obs_144_mhz": 144.9026}, + {"time_sec": -140, "velocity_kms": -5.22, "doppler_434_khz": 7.57, "obs_434_mhz": 434.9076, "doppler_144_khz": 2.52, "obs_144_mhz": 144.9025}, + {"time_sec": -130, "velocity_kms": -5.02, "doppler_434_khz": 7.28, "obs_434_mhz": 434.9073, "doppler_144_khz": 2.43, "obs_144_mhz": 144.9024}, + {"time_sec": -120, "velocity_kms": -4.81, "doppler_434_khz": 6.98, "obs_434_mhz": 434.9070, "doppler_144_khz": 2.32, "obs_144_mhz": 144.9023}, + {"time_sec": -110, "velocity_kms": -4.57, "doppler_434_khz": 6.63, "obs_434_mhz": 434.9066, "doppler_144_khz": 2.21, "obs_144_mhz": 144.9022}, + {"time_sec": -100, "velocity_kms": -4.30, "doppler_434_khz": 6.24, "obs_434_mhz": 434.9062, "doppler_144_khz": 2.08, "obs_144_mhz": 144.9021}, + {"time_sec": -90, "velocity_kms": -4.00, "doppler_434_khz": 5.80, "obs_434_mhz": 434.9058, "doppler_144_khz": 1.93, "obs_144_mhz": 144.9019}, + {"time_sec": -80, "velocity_kms": -3.68, "doppler_434_khz": 5.34, "obs_434_mhz": 434.9053, "doppler_144_khz": 1.78, "obs_144_mhz": 144.9018}, + {"time_sec": -70, "velocity_kms": -3.32, "doppler_434_khz": 4.82, "obs_434_mhz": 434.9048, "doppler_144_khz": 1.60, "obs_144_mhz": 144.9016}, + {"time_sec": -60, "velocity_kms": -2.92, "doppler_434_khz": 4.24, "obs_434_mhz": 434.9042, "doppler_144_khz": 1.41, "obs_144_mhz": 144.9014}, + {"time_sec": -50, "velocity_kms": -2.50, "doppler_434_khz": 3.63, "obs_434_mhz": 434.9036, "doppler_144_khz": 1.21, "obs_144_mhz": 144.9012}, + {"time_sec": -40, "velocity_kms": -2.04, "doppler_434_khz": 2.96, "obs_434_mhz": 434.9030, "doppler_144_khz": 0.99, "obs_144_mhz": 144.9010}, + {"time_sec": -30, "velocity_kms": -1.56, "doppler_434_khz": 2.26, "obs_434_mhz": 434.9023, "doppler_144_khz": 0.75, "obs_144_mhz": 144.9008}, + {"time_sec": -20, "velocity_kms": -1.05, "doppler_434_khz": 1.52, "obs_434_mhz": 434.9015, "doppler_144_khz": 0.51, "obs_144_mhz": 144.9005}, + {"time_sec": -10, "velocity_kms": -0.53, "doppler_434_khz": 0.77, "obs_434_mhz": 434.9008, "doppler_144_khz": 0.26, "obs_144_mhz": 144.9003}, + {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, + {"time_sec": 10, "velocity_kms": 0.53, "doppler_434_khz": -0.77, "obs_434_mhz": 434.8992, "doppler_144_khz": -0.26, "obs_144_mhz": 144.8997}, + {"time_sec": 20, "velocity_kms": 1.05, "doppler_434_khz": -1.52, "obs_434_mhz": 434.8985, "doppler_144_khz": -0.51, "obs_144_mhz": 144.8995}, + {"time_sec": 30, "velocity_kms": 1.56, "doppler_434_khz": -2.26, "obs_434_mhz": 434.8977, "doppler_144_khz": -0.75, "obs_144_mhz": 144.8992}, + {"time_sec": 40, "velocity_kms": 2.04, "doppler_434_khz": -2.96, "obs_434_mhz": 434.8970, "doppler_144_khz": -0.99, "obs_144_mhz": 144.8990}, + {"time_sec": 50, "velocity_kms": 2.50, "doppler_434_khz": -3.63, "obs_434_mhz": 434.8964, "doppler_144_khz": -1.21, "obs_144_mhz": 144.8988}, + {"time_sec": 60, "velocity_kms": 2.92, "doppler_434_khz": -4.24, "obs_434_mhz": 434.8958, "doppler_144_khz": -1.41, "obs_144_mhz": 144.8986}, + {"time_sec": 70, "velocity_kms": 3.32, "doppler_434_khz": -4.82, "obs_434_mhz": 434.8952, "doppler_144_khz": -1.60, "obs_144_mhz": 144.8984}, + {"time_sec": 80, "velocity_kms": 3.68, "doppler_434_khz": -5.34, "obs_434_mhz": 434.8947, "doppler_144_khz": -1.78, "obs_144_mhz": 144.8982}, + {"time_sec": 90, "velocity_kms": 4.00, "doppler_434_khz": -5.80, "obs_434_mhz": 434.8942, "doppler_144_khz": -1.93, "obs_144_mhz": 144.8981}, + {"time_sec": 100, "velocity_kms": 4.30, "doppler_434_khz": -6.24, "obs_434_mhz": 434.8938, "doppler_144_khz": -2.08, "obs_144_mhz": 144.8979}, + {"time_sec": 110, "velocity_kms": 4.57, "doppler_434_khz": -6.63, "obs_434_mhz": 434.8934, "doppler_144_khz": -2.21, "obs_144_mhz": 144.8978}, + {"time_sec": 120, "velocity_kms": 4.81, "doppler_434_khz": -6.98, "obs_434_mhz": 434.8930, "doppler_144_khz": -2.32, "obs_144_mhz": 144.8977}, + {"time_sec": 130, "velocity_kms": 5.02, "doppler_434_khz": -7.28, "obs_434_mhz": 434.8927, "doppler_144_khz": -2.43, "obs_144_mhz": 144.8976}, + {"time_sec": 140, "velocity_kms": 5.22, "doppler_434_khz": -7.57, "obs_434_mhz": 434.8924, "doppler_144_khz": -2.52, "obs_144_mhz": 144.8975}, + {"time_sec": 150, "velocity_kms": 5.39, "doppler_434_khz": -7.82, "obs_434_mhz": 434.8922, "doppler_144_khz": -2.61, "obs_144_mhz": 144.8974}, + {"time_sec": 160, "velocity_kms": 5.55, "doppler_434_khz": -8.05, "obs_434_mhz": 434.8919, "doppler_144_khz": -2.68, "obs_144_mhz": 144.8973}, + {"time_sec": 170, "velocity_kms": 5.68, "doppler_434_khz": -8.24, "obs_434_mhz": 434.8918, "doppler_144_khz": -2.75, "obs_144_mhz": 144.8973}, + {"time_sec": 180, "velocity_kms": 5.81, "doppler_434_khz": -8.43, "obs_434_mhz": 434.8916, "doppler_144_khz": -2.81, "obs_144_mhz": 144.8972} + ], + 40: [ + {"time_sec": -180, "velocity_kms": -6.67, "doppler_434_khz": 9.68, "obs_434_mhz": 434.9097, "doppler_144_khz": 3.22, "obs_144_mhz": 144.9032}, + {"time_sec": -170, "velocity_kms": -6.60, "doppler_434_khz": 9.57, "obs_434_mhz": 434.9096, "doppler_144_khz": 3.19, "obs_144_mhz": 144.9032}, + {"time_sec": -160, "velocity_kms": -6.52, "doppler_434_khz": 9.46, "obs_434_mhz": 434.9095, "doppler_144_khz": 3.15, "obs_144_mhz": 144.9032}, + {"time_sec": -150, "velocity_kms": -6.43, "doppler_434_khz": 9.33, "obs_434_mhz": 434.9093, "doppler_144_khz": 3.11, "obs_144_mhz": 144.9031}, + {"time_sec": -140, "velocity_kms": -6.32, "doppler_434_khz": 9.17, "obs_434_mhz": 434.9092, "doppler_144_khz": 3.05, "obs_144_mhz": 144.9031}, + {"time_sec": -130, "velocity_kms": -6.19, "doppler_434_khz": 8.98, "obs_434_mhz": 434.9090, "doppler_144_khz": 2.99, "obs_144_mhz": 144.9030}, + {"time_sec": -120, "velocity_kms": -6.04, "doppler_434_khz": 8.76, "obs_434_mhz": 434.9088, "doppler_144_khz": 2.92, "obs_144_mhz": 144.9029}, + {"time_sec": -110, "velocity_kms": -5.86, "doppler_434_khz": 8.50, "obs_434_mhz": 434.9085, "doppler_144_khz": 2.83, "obs_144_mhz": 144.9028}, + {"time_sec": -100, "velocity_kms": -5.65, "doppler_434_khz": 8.20, "obs_434_mhz": 434.9082, "doppler_144_khz": 2.73, "obs_144_mhz": 144.9027}, + {"time_sec": -90, "velocity_kms": -5.39, "doppler_434_khz": 7.82, "obs_434_mhz": 434.9078, "doppler_144_khz": 2.61, "obs_144_mhz": 144.9026}, + {"time_sec": -80, "velocity_kms": -5.08, "doppler_434_khz": 7.37, "obs_434_mhz": 434.9074, "doppler_144_khz": 2.46, "obs_144_mhz": 144.9025}, + {"time_sec": -70, "velocity_kms": -4.72, "doppler_434_khz": 6.85, "obs_434_mhz": 434.9068, "doppler_144_khz": 2.28, "obs_144_mhz": 144.9023}, + {"time_sec": -60, "velocity_kms": -4.28, "doppler_434_khz": 6.21, "obs_434_mhz": 434.9062, "doppler_144_khz": 2.07, "obs_144_mhz": 144.9021}, + {"time_sec": -50, "velocity_kms": -3.77, "doppler_434_khz": 5.47, "obs_434_mhz": 434.9055, "doppler_144_khz": 1.82, "obs_144_mhz": 144.8993}, # manual note context adjustments active + {"time_sec": -40, "velocity_kms": -3.17, "doppler_434_khz": 4.60, "obs_434_mhz": 434.9046, "doppler_144_khz": 1.53, "obs_144_mhz": 144.9015}, + {"time_sec": -30, "velocity_kms": -2.48, "doppler_434_khz": 3.60, "obs_434_mhz": 434.9036, "doppler_144_khz": 1.20, "obs_144_mhz": 144.9012}, + {"time_sec": -20, "velocity_kms": -1.70, "doppler_434_khz": 2.47, "obs_434_mhz": 434.9025, "doppler_144_khz": 0.82, "obs_144_mhz": 144.9008}, + {"time_sec": -10, "velocity_kms": -0.87, "doppler_434_khz": 1.26, "obs_434_mhz": 434.9013, "doppler_144_khz": 0.42, "obs_144_mhz": 144.9004}, + {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, + {"time_sec": 10, "velocity_kms": 0.87, "doppler_434_khz": -1.26, "obs_434_mhz": 434.8987, "doppler_144_khz": -0.42, "obs_144_mhz": 144.8996}, + {"time_sec": 20, "velocity_kms": 1.70, "doppler_434_khz": -2.47, "obs_434_mhz": 434.8975, "doppler_144_khz": -0.82, "obs_144_mhz": 144.8992}, + {"time_sec": 30, "velocity_kms": 2.48, "doppler_434_khz": -3.60, "obs_434_mhz": 434.8964, "doppler_144_khz": -1.20, "obs_144_mhz": 144.8988}, + {"time_sec": 40, "velocity_kms": 3.17, "doppler_434_khz": -4.60, "obs_434_mhz": 434.8954, "doppler_144_khz": -1.53, "obs_144_mhz": 144.8985}, + {"time_sec": 50, "velocity_kms": 3.77, "doppler_434_khz": -5.47, "obs_434_mhz": 434.8945, "doppler_144_khz": -1.82, "obs_144_mhz": 144.8982}, + {"time_sec": 60, "velocity_kms": 4.28, "doppler_434_khz": -6.21, "obs_434_mhz": 434.8938, "doppler_144_khz": -2.07, "obs_144_mhz": 144.8979}, + {"time_sec": 70, "velocity_kms": 4.72, "doppler_434_khz": -6.85, "obs_434_mhz": 434.8932, "doppler_144_khz": -2.28, "obs_144_mhz": 144.8977}, + {"time_sec": 80, "velocity_kms": 5.08, "doppler_434_khz": -7.37, "obs_434_mhz": 434.8926, "doppler_144_khz": -2.46, "obs_144_mhz": 144.8975}, + {"time_sec": 90, "velocity_kms": 5.39, "doppler_434_khz": -7.82, "obs_434_mhz": 434.8922, "doppler_144_khz": -2.61, "obs_144_mhz": 144.8974}, + {"time_sec": 100, "velocity_kms": 0.87, "doppler_434_khz": -8.19, "obs_434_mhz": 434.8918, "doppler_144_khz": -2.73, "obs_144_mhz": 144.8973}, + {"time_sec": 110, "velocity_kms": 1.70, "doppler_434_khz": -8.50, "obs_434_mhz": 434.8915, "doppler_144_khz": -2.83, "obs_144_mhz": 144.8972}, + {"time_sec": 120, "velocity_kms": 2.48, "doppler_434_khz": -8.76, "obs_434_mhz": 434.8912, "doppler_144_khz": -2.92, "obs_144_mhz": 144.8971}, + {"time_sec": 130, "velocity_kms": 3.17, "doppler_434_khz": -8.98, "obs_434_mhz": 434.8910, "doppler_144_khz": -2.99, "obs_144_mhz": 144.8970}, + {"time_sec": 140, "velocity_kms": 3.77, "doppler_434_khz": -9.17, "obs_434_mhz": 434.8908, "doppler_144_khz": -3.05, "obs_144_mhz": 144.8969}, + {"time_sec": 150, "velocity_kms": 4.28, "doppler_434_khz": -9.33, "obs_434_mhz": 434.8907, "doppler_144_khz": -3.11, "obs_144_mhz": 144.8969}, + {"time_sec": 160, "velocity_kms": 4.72, "doppler_434_khz": -9.46, "obs_434_mhz": 434.8905, "doppler_144_khz": -3.15, "obs_144_mhz": 144.8968}, + {"time_sec": 170, "velocity_kms": 5.08, "doppler_434_khz": -9.58, "obs_434_mhz": 434.8904, "doppler_144_khz": -3.19, "obs_144_mhz": 144.8968}, + {"time_sec": 180, "velocity_kms": 5.39, "doppler_434_khz": -9.68, "obs_434_mhz": 434.8903, "doppler_144_khz": -3.22, "obs_144_mhz": 144.8968} + ], + 70: [ + {"time_sec": -180, "velocity_kms": -7.00, "doppler_434_khz": 10.15, "obs_434_mhz": 434.9102, "doppler_144_khz": 3.38, "obs_144_mhz": 144.9034}, + {"time_sec": -170, "velocity_kms": -6.95, "doppler_434_khz": 10.09, "obs_434_mhz": 434.9101, "doppler_144_khz": 3.36, "obs_144_mhz": 144.9034}, + {"time_sec": -160, "velocity_kms": -6.91, "doppler_434_khz": 10.02, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.34, "obs_144_mhz": 144.9033}, + {"time_sec": -150, "velocity_kms": -6.86, "doppler_434_khz": 9.95, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.32, "obs_144_mhz": 144.9033}, + {"time_sec": -140, "velocity_kms": -6.78, "doppler_434_khz": 9.84, "obs_434_mhz": 434.9098, "doppler_144_khz": 3.28, "obs_144_mhz": 144.9033}, + {"time_sec": -130, "velocity_kms": -6.70, "doppler_434_khz": 9.72, "obs_434_mhz": 434.9097, "doppler_144_khz": 3.24, "obs_144_mhz": 144.9032}, + {"time_sec": -120, "velocity_kms": -6.62, "doppler_434_khz": 9.60, "obs_434_mhz": 434.9096, "doppler_144_khz": 3.20, "obs_144_mhz": 144.9032}, + {"time_sec": -110, "velocity_kms": -6.47, "doppler_434_khz": 9.39, "obs_434_mhz": 434.9094, "doppler_144_khz": 3.13, "obs_144_mhz": 144.9031}, + {"time_sec": -100, "velocity_kms": -6.32, "doppler_434_khz": 9.17, "obs_434_mhz": 434.9092, "doppler_144_khz": 3.05, "obs_144_mhz": 144.9031}, + {"time_sec": -90, "velocity_kms": -6.17, "doppler_434_khz": 8.95, "obs_434_mhz": 434.9090, "doppler_144_khz": 2.98, "obs_144_mhz": 144.9030}, + {"time_sec": -80, "velocity_kms": -5.86, "doppler_434_khz": 8.50, "obs_434_mhz": 434.9085, "doppler_144_khz": 2.83, "obs_144_mhz": 144.9028}, + {"time_sec": -70, "velocity_kms": -5.55, "doppler_434_khz": 8.05, "obs_434_mhz": 434.9081, "doppler_144_khz": 2.68, "obs_144_mhz": 144.9027}, + {"time_sec": -60, "velocity_kms": -5.24, "doppler_434_khz": 7.60, "obs_434_mhz": 434.9076, "doppler_144_khz": 2.53, "obs_144_mhz": 144.9025}, + {"time_sec": -50, "velocity_kms": -4.60, "doppler_434_khz": 6.67, "obs_434_mhz": 434.9067, "doppler_144_khz": 2.22, "obs_144_mhz": 144.9022}, + {"time_sec": -40, "velocity_kms": -3.96, "doppler_434_khz": 5.74, "obs_434_mhz": 434.9057, "doppler_144_khz": 1.91, "obs_144_mhz": 144.9019}, + {"time_sec": -30, "velocity_kms": -3.32, "doppler_434_khz": 4.82, "obs_434_mhz": 434.9048, "doppler_144_khz": 1.60, "obs_144_mhz": 144.9016}, + {"time_sec": -20, "velocity_kms": -2.21, "doppler_434_khz": 3.21, "obs_434_mhz": 434.9032, "doppler_144_khz": 1.07, "obs_144_mhz": 144.9011}, + {"time_sec": -10, "velocity_kms": -1.11, "doppler_434_khz": 1.61, "obs_434_mhz": 434.9016, "doppler_144_khz": 0.53, "obs_144_mhz": 144.9005}, + {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, + {"time_sec": 10, "velocity_kms": 1.11, "doppler_434_khz": -1.61, "obs_434_mhz": 434.8984, "doppler_144_khz": -0.53, "obs_144_mhz": 144.8995}, + {"time_sec": 20, "velocity_kms": 2.21, "doppler_434_khz": -3.21, "obs_434_mhz": 434.8968, "doppler_144_khz": -1.07, "obs_144_mhz": 144.8989}, + {"time_sec": 30, "velocity_kms": 3.32, "doppler_434_khz": -4.82, "obs_434_mhz": 434.8952, "doppler_144_khz": -1.60, "obs_144_mhz": 144.8984}, + {"time_sec": 40, "velocity_kms": 3.96, "doppler_434_khz": -5.74, "obs_434_mhz": 434.8943, "doppler_144_khz": -1.91, "obs_144_mhz": 144.8981}, + {"time_sec": 50, "velocity_kms": 4.60, "doppler_434_khz": -6.67, "obs_434_mhz": 434.8933, "doppler_144_khz": -2.22, "obs_144_mhz": 144.8978}, + {"time_sec": 60, "velocity_kms": 5.24, "doppler_434_khz": -7.60, "obs_434_mhz": 434.8924, "doppler_144_khz": -2.53, "obs_144_mhz": 144.8975}, + {"time_sec": 70, "velocity_kms": 5.55, "doppler_434_khz": -8.05, "obs_434_mhz": 434.8919, "doppler_144_khz": -2.68, "obs_144_mhz": 144.8973}, + {"time_sec": 80, "velocity_kms": 5.86, "doppler_434_khz": -8.50, "obs_434_mhz": 434.8915, "doppler_144_khz": -2.83, "obs_144_mhz": 144.8972}, + {"time_sec": 90, "velocity_kms": 6.17, "doppler_434_khz": -8.95, "obs_434_mhz": 434.8910, "doppler_144_khz": -2.98, "obs_144_mhz": 144.8970}, + {"time_sec": 100, "velocity_kms": 6.32, "doppler_434_khz": -9.17, "obs_434_mhz": 434.8908, "doppler_144_khz": -3.05, "obs_144_mhz": 144.8969}, + {"time_sec": 110, "velocity_kms": 6.47, "doppler_434_khz": -9.39, "obs_434_mhz": 434.8906, "doppler_144_khz": -3.13, "obs_144_mhz": 144.8969}, + {"time_sec": 120, "velocity_kms": 6.62, "doppler_434_khz": -9.60, "obs_434_mhz": 434.8904, "doppler_144_khz": -3.20, "obs_144_mhz": 144.8968}, + {"time_sec": 130, "velocity_kms": 6.70, "doppler_434_khz": -9.72, "obs_434_mhz": 434.8903, "doppler_144_khz": -3.24, "obs_144_mhz": 144.8968}, + {"time_sec": 140, "velocity_kms": 6.78, "doppler_434_khz": -9.84, "obs_434_mhz": 434.8902, "doppler_144_khz": -3.28, "obs_144_mhz": 144.8967}, + {"time_sec": 150, "velocity_kms": 6.86, "doppler_434_khz": -9.95, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.32, "obs_144_mhz": 144.8967}, + {"time_sec": 160, "velocity_kms": 6.91, "doppler_434_khz": -10.02, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.34, "obs_144_mhz": 144.8967}, + {"time_sec": 170, "velocity_kms": 6.95, "doppler_434_khz": -10.09, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.36, "obs_144_mhz": 144.8966}, + {"time_sec": 180, "velocity_kms": 7.00, "doppler_434_khz": -10.15, "obs_434_mhz": 434.8898, "doppler_144_khz": -3.38, "obs_144_mhz": 144.8966} + ], + 85: [ + {"time_sec": -180, "velocity_kms": -7.15, "doppler_434_khz": 10.37, "obs_434_mhz": 434.9104, "doppler_144_khz": 3.46, "obs_144_mhz": 144.9035}, + {"time_sec": -170, "velocity_kms": -7.12, "doppler_434_khz": 10.32, "obs_434_mhz": 434.9103, "doppler_144_khz": 3.44, "obs_144_mhz": 144.9034}, + {"time_sec": -160, "velocity_kms": -7.08, "doppler_434_khz": 10.28, "obs_434_mhz": 434.9103, "doppler_144_khz": 3.42, "obs_144_mhz": 144.9034}, + {"time_sec": -150, "velocity_kms": -7.05, "doppler_434_khz": 10.23, "obs_434_mhz": 434.9102, "doppler_144_khz": 3.41, "obs_144_mhz": 144.9034}, + {"time_sec": -140, "velocity_kms": -6.99, "doppler_434_khz": 10.15, "obs_434_mhz": 434.9101, "doppler_144_khz": 3.38, "obs_144_mhz": 144.9034}, + {"time_sec": -130, "velocity_kms": -6.94, "doppler_434_khz": 10.06, "obs_434_mhz": 434.9101, "doppler_144_khz": 3.35, "obs_144_mhz": 144.9034}, + {"time_sec": -120, "velocity_kms": -6.88, "doppler_434_khz": 9.98, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.33, "obs_144_mhz": 144.9033}, + {"time_sec": -110, "velocity_kms": -6.75, "doppler_434_khz": 9.80, "obs_434_mhz": 434.9098, "doppler_144_khz": 3.26, "obs_144_mhz": 144.9033}, + {"time_sec": -100, "velocity_kms": -6.63, "doppler_434_khz": 9.61, "obs_434_mhz": 434.9096, "doppler_144_khz": 3.20, "obs_144_mhz": 144.9032}, + {"time_sec": -90, "velocity_kms": -6.50, "doppler_434_khz": 9.43, "obs_434_mhz": 434.9094, "doppler_144_khz": 3.14, "obs_144_mhz": 144.9031}, + {"time_sec": -80, "velocity_kms": -6.23, "doppler_434_khz": 9.04, "obs_434_mhz": 434.9090, "doppler_144_khz": 3.01, "obs_144_mhz": 144.9030}, + {"time_sec": -70, "velocity_kms": -5.97, "doppler_434_khz": 8.66, "obs_434_mhz": 434.9087, "doppler_144_khz": 2.88, "obs_144_mhz": 144.9029}, + {"time_sec": -60, "velocity_kms": -5.70, "doppler_434_khz": 8.27, "obs_434_mhz": 434.9083, "doppler_144_khz": 2.76, "obs_144_mhz": 144.9028}, + {"time_sec": -50, "velocity_kms": -5.10, "doppler_434_khz": 7.40, "obs_434_mhz": 434.9074, "doppler_144_khz": 2.47, "obs_144_mhz": 144.9025}, + {"time_sec": -40, "velocity_kms": -4.50, "doppler_434_khz": 6.53, "obs_434_mhz": 434.9065, "doppler_144_khz": 2.18, "obs_144_mhz": 144.9022}, + {"time_sec": -30, "velocity_kms": -3.90, "doppler_434_khz": 5.66, "obs_434_mhz": 434.9057, "doppler_144_khz": 1.89, "obs_144_mhz": 144.9019}, + {"time_sec": -20 ,"velocity_kms": -2.60, "doppler_434_khz": 3.77, "obs_434_mhz": 434.9038, "doppler_144_khz": 1.26, "obs_144_mhz": 144.9013}, + {"time_sec": -10 ,"velocity_kms": -1.30, "doppler_434_khz": 1.89, "obs_434_mhz": 434.9019, "doppler_144_khz": 0.63, "obs_144_mhz": 144.9006}, + {"time_sec": 0 ,"velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, + {"time_sec": 10 ,"velocity_kms": 1.30, "doppler_434_khz": -1.89, "obs_434_mhz": 434.8981, "doppler_144_khz": -0.63, "obs_144_mhz": 144.8994}, + {"time_sec": 20 ,"velocity_kms": 2.60, "doppler_434_khz": -3.77, "obs_434_mhz": 434.8962, "doppler_144_khz": -1.26, "obs_144_mhz": 144.8987}, + {"time_sec": 30 ,"velocity_kms": 3.90, "doppler_434_khz": -5.66, "obs_434_mhz": 434.8943, "doppler_144_khz": -1.89, "obs_144_mhz": 144.8981}, + {"time_sec": 40 ,"velocity_kms": 4.50, "doppler_434_khz": -6.53, "obs_434_mhz": 434.8935, "doppler_144_khz": -2.18, "obs_144_mhz": 144.8978}, + {"time_sec": 50 ,"velocity_kms": 5.10, "doppler_434_khz": -7.40, "obs_434_mhz": 434.8926, "doppler_144_khz": -2.47, "obs_144_mhz": 144.8975}, + {"time_sec": 60 ,"velocity_kms": 5.70, "doppler_434_khz": -8.27, "obs_434_mhz": 434.8917, "doppler_144_khz": -2.76, "obs_144_mhz": 144.8972}, + {"time_sec": 70 ,"velocity_kms": 5.97, "doppler_434_khz": -8.66, "obs_434_mhz": 434.8913, "doppler_144_khz": -2.88, "obs_144_mhz": 144.8971}, + {"time_sec": 80 ,"velocity_kms": 6.23, "doppler_434_khz": -9.04, "obs_434_mhz": 434.8910, "doppler_144_khz": -3.01, "obs_144_mhz": 144.8970}, + {"time_sec": 90 ,"velocity_kms": 6.50, "doppler_434_khz": -9.43, "obs_434_mhz": 434.8906, "doppler_144_khz": -3.14, "obs_144_mhz": 144.8969}, + {"time_sec": 100 ,"velocity_kms": 6.63, "doppler_434_khz": -9.61, "obs_434_mhz": 434.8904, "doppler_144_khz": -3.20, "obs_144_mhz": 144.8968}, + {"time_sec": 110 ,"velocity_kms": 6.75, "doppler_434_khz": -9.80, "obs_434_mhz": 434.8902, "doppler_144_khz": -3.26, "obs_144_mhz": 144.8967}, + {"time_sec": 120 ,"velocity_kms": 6.88, "doppler_434_khz": -9.98, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.33, "obs_144_mhz": 144.8967}, + {"time_sec": 130 ,"velocity_kms": 6.94, "doppler_434_khz": -10.06, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.35, "obs_144_mhz": 144.8966}, + {"time_sec": 140 ,"velocity_kms": 6.99, "doppler_434_khz": -10.15, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.38, "obs_144_mhz": 144.8966}, + {"time_sec": 150 ,"velocity_kms": 7.05, "doppler_434_khz": -10.23, "obs_434_mhz": 434.8898, "doppler_144_khz": -3.41, "obs_144_mhz": 144.8966}, + {"time_sec": 160 ,"velocity_kms": 7.08, "doppler_434_khz": -10.28, "obs_434_mhz": 434.8917, "doppler_144_khz": -3.42, "obs_144_mhz": 144.8966}, + {"time_sec": 170 ,"velocity_kms": 7.12, "doppler_434_khz": -10.32, "obs_434_mhz": 434.8897, "doppler_144_khz": -3.44, "obs_144_mhz": 144.8966}, + {"time_sec": 180 ,"velocity_kms": 7.15, "doppler_434_khz": -10.37, "obs_434_mhz": 434.8896, "doppler_144_khz": -3.46, "obs_144_mhz": 144.8965} + ], + 89: [ + {"time_sec": -180, "velocity_kms": -7.17, "doppler_434_khz": 10.40, "obs_434_mhz": 434.9104, "doppler_144_khz": 3.47, "obs_144_mhz": 144.9035}, + {"time_sec": -170, "velocity_kms": -7.13, "doppler_434_khz": 10.35, "obs_434_mhz": 434.9103, "doppler_144_khz": 3.45, "obs_144_mhz": 144.9034}, + {"time_sec": -160, "velocity_kms": -7.09, "doppler_434_khz": 10.28, "obs_434_mhz": 434.9103, "doppler_144_khz": 3.43, "obs_144_mhz": 144.9034}, + {"time_sec": -150, "velocity_kms": -7.04, "doppler_434_khz": 10.21, "obs_434_mhz": 434.9102, "doppler_144_khz": 3.40, "obs_144_mhz": 144.9034}, + {"time_sec": -140, "velocity_kms": -6.97, "doppler_434_khz": 10.12, "obs_434_mhz": 434.9101, "doppler_144_khz": 3.37, "obs_144_mhz": 144.9034}, + {"time_sec": -130, "velocity_kms": -6.90, "doppler_434_khz": 10.01, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.33, "obs_144_mhz": 144.9033}, + {"time_sec": -120, "velocity_kms": -6.81, "doppler_434_khz": 9.87, "obs_434_mhz": 434.9099, "doppler_144_khz": 3.29, "obs_144_mhz": 144.9033}, + {"time_sec": -110, "velocity_kms": -6.69, "doppler_434_khz": 9.71, "obs_434_mhz": 434.9097, "doppler_144_khz": 3.24, "obs_144_mhz": 144.9032}, + {"time_sec": -100, "velocity_kms": -6.55, "doppler_434_khz": 9.51, "obs_434_mhz": 434.9095, "doppler_144_khz": 3.17, "obs_144_mhz": 144.9032}, + {"time_sec": -90, "velocity_kms": -6.38, "doppler_434_khz": 9.25, "obs_434_mhz": 434.9093, "doppler_144_khz": 3.08, "obs_144_mhz": 144.9031}, + {"time_sec": -80, "velocity_kms": -6.15, "doppler_434_khz": 8.93, "obs_434_mhz": 434.9089, "doppler_144_khz": 2.97, "obs_144_mhz": 144.9030}, + {"time_sec": -70, "velocity_kms": -5.87, "doppler_434_khz": 8.51, "obs_434_mhz": 434.9085, "doppler_144_khz": 2.84, "obs_144_mhz": 144.9028}, + {"time_sec": -60, "velocity_kms": -5.49, "doppler_434_khz": 7.97, "obs_434_mhz": 434.9080, "doppler_144_khz": 2.66, "obs_144_mhz": 144.9027}, + {"time_sec": -50, "velocity_kms": -5.01, "doppler_434_khz": 7.26, "obs_434_mhz": 434.9073, "doppler_144_khz": 2.42, "obs_144_mhz": 144.9024}, + {"time_sec": -40, "velocity_kms": -4.37, "doppler_434_khz": 6.34, "obs_434_mhz": 434.9063, "doppler_144_khz": 2.11, "obs_144_mhz": 144.9021}, + {"time_sec": -30, "velocity_kms": -3.55, "doppler_434_khz": 5.15, "obs_434_mhz": 434.9051, "doppler_144_khz": 1.72, "obs_144_mhz": 144.9017}, + {"time_sec": -20, "velocity_kms": -2.53, "doppler_434_khz": 3.67, "obs_434_mhz": 434.9037, "doppler_144_khz": 1.22, "obs_144_mhz": 144.9012}, + {"time_sec": -10, "velocity_kms": -1.32, "doppler_434_khz": 1.92, "obs_434_mhz": 434.9019, "doppler_144_khz": 0.64, "obs_144_mhz": 144.9006}, + {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": 0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": 0.00, "obs_144_mhz": 144.9000}, + {"time_sec": 10, "velocity_kms": 1.32, "doppler_434_khz": -1.92, "obs_434_mhz": 434.8981, "doppler_144_khz": -0.64, "obs_144_mhz": 144.8994}, + {"time_sec": 20, "velocity_kms": 2.53, "doppler_434_khz": -3.67, "obs_434_mhz": 434.8963, "doppler_144_khz": -1.22, "obs_144_mhz": 144.8988}, + {"time_sec": 30, "velocity_kms": 3.55, "doppler_434_khz": -5.15, "obs_434_mhz": 434.8949, "doppler_144_khz": -1.72, "obs_144_mhz": 144.8983}, + {"time_sec": 40, "velocity_kms": 4.37, "doppler_434_khz": -6.34, "obs_434_mhz": 434.8937, "doppler_144_khz": -2.11, "obs_144_mhz": 144.8979}, + {"time_sec": 50, "velocity_kms": 5.01, "doppler_434_khz": -7.26, "obs_434_mhz": 434.8927, "doppler_144_khz": -2.42, "obs_144_mhz": 144.8976}, + {"time_sec": 60, "velocity_kms": 5.49, "doppler_434_khz": -7.97, "obs_434_mhz": 434.8920, "doppler_144_khz": -2.66, "obs_144_mhz": 144.8973}, + {"time_sec": 70, "velocity_kms": 5.87, "doppler_434_khz": -8.51, "obs_434_mhz": 434.8915, "doppler_144_khz": -2.84, "obs_144_mhz": 144.8972}, + {"time_sec": 80, "velocity_kms": 6.15, "doppler_434_khz": -8.93, "obs_434_mhz": 434.8911, "doppler_144_khz": -2.97, "obs_144_mhz": 144.8970}, + {"time_sec": 90, "velocity_kms": 6.38, "doppler_434_khz": -9.25, "obs_434_mhz": 434.8907, "doppler_144_khz": -3.08, "obs_144_mhz": 144.8969}, + {"time_sec": 100, "velocity_kms": 6.55, "doppler_434_khz": -9.51, "obs_434_mhz": 434.8905, "doppler_144_khz": -3.17, "obs_144_mhz": 144.8968}, + {"time_sec": 110, "velocity_kms": 6.69, "doppler_434_khz": -9.71, "obs_434_mhz": 434.8903, "doppler_144_khz": -3.24, "obs_144_mhz": 144.8968}, + {"time_sec": 120, "velocity_kms": 6.81, "doppler_434_khz": -9.87, "obs_434_mhz": 434.8901, "doppler_144_khz": -3.29, "obs_144_mhz": 144.8967}, + {"time_sec": 130, "velocity_kms": 6.90, "doppler_434_khz": -10.01, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.33, "obs_144_mhz": 144.8967}, + {"time_sec": 140, "velocity_kms": 6.97, "doppler_434_khz": -10.12, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.37, "obs_144_mhz": 144.8966}, + {"time_sec": 150, "velocity_kms": 7.04, "doppler_434_khz": -10.21, "obs_434_mhz": 434.8898, "doppler_144_khz": -3.40, "obs_144_mhz": 144.8966}, + {"time_sec": 160, "velocity_kms": 7.09, "doppler_434_khz": -10.28, "obs_434_mhz": 434.8897, "doppler_144_khz": -3.43, "obs_144_mhz": 144.8966}, + {"time_sec": 170, "velocity_kms": 7.13, "doppler_434_khz": -10.35, "obs_434_mhz": 434.8897, "doppler_144_khz": -3.45, "obs_144_mhz": 144.8966}, + {"time_sec": 180, "velocity_kms": 7.17, "doppler_434_khz": -10.40, "obs_434_mhz": 434.8896, "doppler_144_khz": -3.47, "obs_144_mhz": 144.8965} + ] +} + +def update_doppler(): + + try: + global start_time + global tx_doppler_freq_hz + global rx_doppler_freq_hz + global rxpl_value + global txpl_value + global sq + global doppler_table + global mode + global tx + print("update_doppler") + try: + relative_time = (time.perf_counter() - start_time) % 370 + except: + start_time = time.perf_counter() + relative_time = (time.perf_counter() - start_time) % 370 + index = int(relative_time/10) + print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") + table_row = doppler_table[index] + rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 + if (mode == 'e'): + tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 + else: + tx_doppler_shift_hz = rx_doppler_shift_hz + tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz + print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") + rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz + print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") + + except: + print("update_doppler failed") + + tx_value = '0' + rx_value = '0' + sq = '0' + tx = '434.9000' + rx = '435.0000' + txr = '144.9000' + sim_mode = False + sim_config = False + doppler_mode = "off" + try: + file = open("/home/pi/CubeSatSim/sim.cfg") + config = file.readline().split() + if len(config) > 6: + txf = float(config[6]) + tx = "{:.4f}".format(txf) + if (mode == 'e'): + txrf = (txf - 290.0) # - 0.1 # Cross Band Repeater mode transmit frequency in 2m band + txr = "{:.4f}".format(txrf) + print("Transmit frequency: ",txr) + else: + print("Transmit frequency: ",tx) + if len(config) > 7: + rxf = float(config[7]) + rx = "{:.4f}".format(rxf) + print(rx) + if len(config) > 9: + rxpl = float(config[9]) +# print(rxpl) +# print( "{:.0f}".format(rxpl)) + rxpl_value = "{:.0f}".format(rxpl) + print(rxpl_value) + if len(config) > 10: + txpl = float(config[10]) +# print(txpl) +# print( "{:.0f}".format(txpl)) + txpl_value = "{:.0f}".format(txpl) + print(txpl_value) + if len(config) > 13: + if config[13] == 'sim': + doppler_mode = 'sim' + print("Simulated Doppler frequency shift is enabled.") + if config[13] == 'rig': + doppler_mode = 'rig' + print("rigctl Doppler frequency shift is enabled.") + else: + system("sudo systemctl stop rigctld") + else: + system("sudo systemctl stop rigctld") + print(config) + print +# print(callsign) + print(sq) +# if sq == '8': +# print("squelch set to 8, no command input!") +# no_command = True +# else: + no_command = False + print(no_command) + except: + if (debug_mode == 1): + print("Can't read sim.cfg file") + file.close() + +if (doppler_mode == 'off'): + tx_freq_hz = txf * 1000 + rx_freq_hz = txf * 1000 + with open("/home/pi/CubeSatSim/frequency.txt", "w") as file: + file.write(f"{tx_freq_hz:.0f} {rx_freq_hz:.0f}") + while True: + sleep(1) + +if (doppler_mode == 'sim'): + print("Sim mode") + start_time = time.perf_counter() + current_index = 0; + while True: + relative_time = (time.perf_counter() - start_time) % 370 + index = int(relative_time/10) + if (index > current_index): + current_index = index + print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") + table_row = doppler_table[index] + rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 + if (mode == 'e'): + tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 + else: + tx_doppler_shift_hz = rx_doppler_shift_hz + tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz + print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") + rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz + print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") + + with open("/home/pi/CubeSatSim/frequency.txt", "w") as file: + file.write(f"{tx_doppler_freq_hz:.0f} {rx_doppler_freq_hz:.0f}") + sleep(1) + +if (doppler_mode == 'rig'): + print("rig mode") + while True: + sleep(1) + From d01790fac82553c32c94177a7f63687716e29e73 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 16:40:01 -0400 Subject: [PATCH 097/287] Update frequency.py fix indent --- frequency.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/frequency.py b/frequency.py index 3cfa0561..3337340b 100644 --- a/frequency.py +++ b/frequency.py @@ -358,21 +358,21 @@ if (doppler_mode == 'sim'): relative_time = (time.perf_counter() - start_time) % 370 index = int(relative_time/10) if (index > current_index): - current_index = index - print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") - table_row = doppler_table[index] - rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 - if (mode == 'e'): - tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 - else: - tx_doppler_shift_hz = rx_doppler_shift_hz - tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz - print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") - rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz - print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") + current_index = index + print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") + table_row = doppler_table[index] + rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 + if (mode == 'e'): + tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 + else: + tx_doppler_shift_hz = rx_doppler_shift_hz + tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz + print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") + rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz + print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") - with open("/home/pi/CubeSatSim/frequency.txt", "w") as file: - file.write(f"{tx_doppler_freq_hz:.0f} {rx_doppler_freq_hz:.0f}") + with open("/home/pi/CubeSatSim/frequency.txt", "w") as file: + file.write(f"{tx_doppler_freq_hz:.0f} {rx_doppler_freq_hz:.0f}") sleep(1) if (doppler_mode == 'rig'): From 148a0a19b00cc9abbf0ce176cfbeeac1730b8e7c Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 16:42:04 -0400 Subject: [PATCH 098/287] Update frequency.py fix spacing --- frequency.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/frequency.py b/frequency.py index 3337340b..1cff02c9 100644 --- a/frequency.py +++ b/frequency.py @@ -358,21 +358,21 @@ if (doppler_mode == 'sim'): relative_time = (time.perf_counter() - start_time) % 370 index = int(relative_time/10) if (index > current_index): - current_index = index - print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") - table_row = doppler_table[index] - rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 - if (mode == 'e'): - tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 - else: - tx_doppler_shift_hz = rx_doppler_shift_hz - tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz - print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") - rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz - print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") + current_index = index + print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") + table_row = doppler_table[index] + rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 + if (mode == 'e'): + tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 + else: + tx_doppler_shift_hz = rx_doppler_shift_hz + tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz + print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") + rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz + print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") - with open("/home/pi/CubeSatSim/frequency.txt", "w") as file: - file.write(f"{tx_doppler_freq_hz:.0f} {rx_doppler_freq_hz:.0f}") + with open("/home/pi/CubeSatSim/frequency.txt", "w") as file: + file.write(f"{tx_doppler_freq_hz:.0f} {rx_doppler_freq_hz:.0f}") sleep(1) if (doppler_mode == 'rig'): From 632d68d7dc8a7da709b9d282490b8da188d55c42 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 16:45:25 -0400 Subject: [PATCH 099/287] Update frequency.py fix exception --- frequency.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/frequency.py b/frequency.py index 1cff02c9..f366d571 100644 --- a/frequency.py +++ b/frequency.py @@ -279,6 +279,7 @@ def update_doppler(): except: print("update_doppler failed") +try: tx_value = '0' rx_value = '0' sq = '0' @@ -337,10 +338,14 @@ def update_doppler(): # else: no_command = False print(no_command) - except: - if (debug_mode == 1): - print("Can't read sim.cfg file") + except Exception as e: + print(f"An error occurred: {e}") + if (debug_mode == 1): + print("Can't read sim.cfg file") file.close() + +except Exception as e: + print(f"An error occurred: {e}") if (doppler_mode == 'off'): tx_freq_hz = txf * 1000 From 97d21833adac573f3c753cdf9dc25c51c878b1cc Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 16:47:48 -0400 Subject: [PATCH 100/287] Update frequency.py indent --- frequency.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frequency.py b/frequency.py index f366d571..525108a0 100644 --- a/frequency.py +++ b/frequency.py @@ -336,16 +336,16 @@ try: # print("squelch set to 8, no command input!") # no_command = True # else: - no_command = False - print(no_command) + no_command = False + print(no_command) except Exception as e: print(f"An error occurred: {e}") if (debug_mode == 1): print("Can't read sim.cfg file") file.close() -except Exception as e: - print(f"An error occurred: {e}") + except Exception as e: + print(f"An error occurred: {e}") if (doppler_mode == 'off'): tx_freq_hz = txf * 1000 From 2b30f7e0fae79abb0a9622da8536eb125fa8a987 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 16:49:29 -0400 Subject: [PATCH 101/287] Update frequency.py indent --- frequency.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/frequency.py b/frequency.py index 525108a0..10e05b6f 100644 --- a/frequency.py +++ b/frequency.py @@ -336,16 +336,16 @@ try: # print("squelch set to 8, no command input!") # no_command = True # else: - no_command = False - print(no_command) + no_command = False + print(no_command) except Exception as e: - print(f"An error occurred: {e}") - if (debug_mode == 1): - print("Can't read sim.cfg file") + print(f"An error occurred: {e}") + if (debug_mode == 1): + print("Can't read sim.cfg file") file.close() - except Exception as e: - print(f"An error occurred: {e}") +except Exception as e: + print(f"An error occurred: {e}") if (doppler_mode == 'off'): tx_freq_hz = txf * 1000 From ddd29954d7137967370a53f84ceda2f63b056dbb Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 16:50:08 -0400 Subject: [PATCH 102/287] Update frequency.py indents --- frequency.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frequency.py b/frequency.py index 10e05b6f..4d22f7fa 100644 --- a/frequency.py +++ b/frequency.py @@ -338,7 +338,7 @@ try: # else: no_command = False print(no_command) - except Exception as e: + except Exception as e: print(f"An error occurred: {e}") if (debug_mode == 1): print("Can't read sim.cfg file") From 1c3549599f2364b60bc30a143539a6608914e35b Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 16:52:40 -0400 Subject: [PATCH 103/287] Update frequency.py add mode --- frequency.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/frequency.py b/frequency.py index 4d22f7fa..e6989a12 100644 --- a/frequency.py +++ b/frequency.py @@ -289,6 +289,19 @@ try: sim_mode = False sim_config = False doppler_mode = "off" + debug_mode = True + + try: + file = open("/home/pi/CubeSatSim/.mode") + mode = file.read(1) + except: + mode = 'f' + if (debug_mode == 1): + print("Can't open .mode file, defaulting to FSK") + file.close() + print("Mode is: ") + print(mode) + try: file = open("/home/pi/CubeSatSim/sim.cfg") config = file.readline().split() From ecee07227250b8c6c558b869ec741f41f0d5be11 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 16:54:24 -0400 Subject: [PATCH 104/287] Update frequency.py add target_pass --- frequency.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frequency.py b/frequency.py index e6989a12..2dba38c8 100644 --- a/frequency.py +++ b/frequency.py @@ -370,6 +370,10 @@ if (doppler_mode == 'off'): if (doppler_mode == 'sim'): print("Sim mode") + TARGET_PASS = 85 # Maximum elevation profile + doppler_table = iss_doppler_passes[TARGET_PASS] + print(f"Pass Max Elevation: {TARGET_PASS}°") + start_time = time.perf_counter() current_index = 0; while True: From 82f8226997df8ff5e479e0601639792140744b93 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 16:57:04 -0400 Subject: [PATCH 105/287] Update frequency.py add start_hz --- frequency.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/frequency.py b/frequency.py index 2dba38c8..349d545e 100644 --- a/frequency.py +++ b/frequency.py @@ -370,6 +370,17 @@ if (doppler_mode == 'off'): if (doppler_mode == 'sim'): print("Sim mode") + + if (mode == 'e'): + tx_doppler_start_hz = txrf * 1e6 + else: + tx_doppler_start_hz = txf * 1e6 + tx_doppler_shift_hz = 0 + print(f"Tx center frequency: {tx_doppler_start_hz}") + rx_doppler_start_hz = rxf * 1e6 + rx_doppler_shift_hz = 0 + print(f"Rx center frequency: {rx_doppler_start_hz}") + TARGET_PASS = 85 # Maximum elevation profile doppler_table = iss_doppler_passes[TARGET_PASS] print(f"Pass Max Elevation: {TARGET_PASS}°") From f09a9459cacb0c4e2fb4ba45e7e386f52ca6461f Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 17:03:01 -0400 Subject: [PATCH 106/287] Update log -f prints frequencies --- log | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/log b/log index e3a4afc5..727d098f 100755 --- a/log +++ b/log @@ -9,6 +9,7 @@ if [ "$1" = "-h" ] ; then echo " -c command and control" echo " -p pacsat" echo " -r rigctld" + echo " -f frequency" echo "Default is the log is dumpted to the screen and written to a file." echo "If an additional r is included, the log is realtime, and exits with a Control-C" echo @@ -40,6 +41,11 @@ if [ "$REALTIME" = "1" ] ; then # echo -e "\nCommand and Control Log file also saved as /home/pi/CubeSatSim/logp.txt" elif [ "$1" = "-r" ]; then sudo journalctl -af -u rigctld # > /home/pi/CubeSatSim/logr.txt + elif [ "$1" = "-f" ] ; then + while true; do + cat /home/pi/CubeSatSim/frequency.txt + sleep 5 + done else sudo journalctl -af -u cubesatsim # > /home/pi/CubeSatSim/log.txt # cat /home/pi/CubeSatSim/log.txt @@ -64,6 +70,8 @@ else sudo journalctl -a -u rigctld > /home/pi/CubeSatSim/logr.txt cat /home/pi/CubeSatSim/logr.txt echo -e "\nrigtcld Log file also saved as /home/pi/CubeSatSim/logr.txt" + elif [ "$1" = "-f" ] ; then + cat /home/pi/CubeSatSim/frequency.txt else sudo journalctl -a -u cubesatsim > /home/pi/CubeSatSim/log.txt cat /home/pi/CubeSatSim/log.txt From bcef0c8d0a6efa0eaee6f227cbf467ac1646ab7c Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 17:05:16 -0400 Subject: [PATCH 107/287] Update frequency.py add modulo 37 --- frequency.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frequency.py b/frequency.py index 349d545e..1a038230 100644 --- a/frequency.py +++ b/frequency.py @@ -389,7 +389,7 @@ if (doppler_mode == 'sim'): current_index = 0; while True: relative_time = (time.perf_counter() - start_time) % 370 - index = int(relative_time/10) + index = int(relative_time/10) % 37 if (index > current_index): current_index = index print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") From dcfa155d7c582f05c7f0c4e1e4d1086478b26bb4 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 17:07:09 -0400 Subject: [PATCH 108/287] Update log add newline for -f --- log | 1 + 1 file changed, 1 insertion(+) diff --git a/log b/log index 727d098f..cb2c860d 100755 --- a/log +++ b/log @@ -44,6 +44,7 @@ if [ "$REALTIME" = "1" ] ; then elif [ "$1" = "-f" ] ; then while true; do cat /home/pi/CubeSatSim/frequency.txt + echo sleep 5 done else From 14762e50893875204af4208484d0e7cdcf40a5a1 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 17:17:21 -0400 Subject: [PATCH 109/287] Update transmit.py add read --- transmit.py | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/transmit.py b/transmit.py index 6e006fb8..c9569f08 100644 --- a/transmit.py +++ b/transmit.py @@ -523,29 +523,29 @@ def update_doppler(fm): global mode global tx print("update_doppler") - try: - relative_time = (time.perf_counter() - start_time) % 370 - except: - start_time = time.perf_counter() - relative_time = (time.perf_counter() - start_time) % 370 - index = int(relative_time/10) - print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") - table_row = doppler_table[index] - rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 - if (mode == 'e'): - tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 + + with open("/home/pi/CubeSatSim/frequency.txt", "r") as file: + frequencies = file.read().split() + + new_tx_frequency = int(frequencies[0]) + new_rx_frequency = int(frequencies[1]) + + print(f"New frequencies: {new_tx_frequency}, Second number: {new_tx_frequency}") + + if (tx_doppler_freq_hz != new_tx_frequency) or (rx_doppler_freq_hz != new_rx_frequency): + tx_doppler_freq_hz = new_tx_frequency + rx_doppler_freq_hz = new_rx_frequency + print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") + rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz + print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") + if (fm != "no"): + rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) + if (mode != 'e'): + tx = "{:.4f}".format(tx_doppler_freq_hz/1e6) + print(tx) + program_fm(rx,tx,rxpl_value,sq,txpl_value) else: - tx_doppler_shift_hz = rx_doppler_shift_hz - tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz - print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") - rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz - print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") - if (fm != "no"): - rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) - if (mode != 'e'): - tx = "{:.4f}".format(tx_doppler_freq_hz/1e6) - print(tx) - program_fm(rx,tx,rxpl_value,sq,txpl_value) + print("No frequency changes!") except: print("update_doppler failed") From c3f8ea4227b23c3fcdad7d2842e68ac3c43597bf Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 17:26:23 -0400 Subject: [PATCH 110/287] Update transmit.py add tx_doppler_freq_hz = 0 --- transmit.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/transmit.py b/transmit.py index c9569f08..4f07ee2d 100644 --- a/transmit.py +++ b/transmit.py @@ -678,6 +678,9 @@ debug_mode = 0 # change to 1 to debug transmit skip = False +tx_doppler_freq_hz = 0 +rx_doppler_freq_hz = 0 + if __name__ == "__main__": mode = "y" if (len(sys.argv)) > 1: From 75b6a99ed9d6c11ce7c3ee8f8787fc3b6c1ad100 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 2 Jul 2026 23:31:37 -0400 Subject: [PATCH 111/287] Update install add cd for ft857 update --- install | 1 + 1 file changed, 1 insertion(+) diff --git a/install b/install index 8add5b1d..54e037ed 100755 --- a/install +++ b/install @@ -868,6 +868,7 @@ git pull --no-rebase > .updated_p if [[ $(grep 'changed' //home/pi/FT857d/.updated_p) ]]; then echo "updating FT857d" + cd examples/FT857d g++ main.c ../../src/ft857d.cpp -lwiringPi -o ft857d else echo "nothing to do for FT857d." From 87fa59401739815d7c6dbcdc9fe0859a92d4133d Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 4 Jul 2026 07:04:36 -0400 Subject: [PATCH 112/287] Update and rename rigctld.service to frequency.service --- systemd/{rigctld.service => frequency.service} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename systemd/{rigctld.service => frequency.service} (72%) diff --git a/systemd/rigctld.service b/systemd/frequency.service similarity index 72% rename from systemd/rigctld.service rename to systemd/frequency.service index f40d7c1c..00624d13 100644 --- a/systemd/rigctld.service +++ b/systemd/frequency.service @@ -1,9 +1,9 @@ [Unit] -Description=rigctld +Description=frequency [Service] TimeoutStopSec=5 -ExecStart=/home/pi/CubeSatSim/rigctld.sh +ExecStart=/home/pi/CubeSatSim/frequency.sh WorkingDirectory=/home/pi/CubeSatSim StandardOutput=inherit StandardError=inherit From 76be6af3dff0f7f3e0e407252a8681effa51bf40 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 4 Jul 2026 07:05:55 -0400 Subject: [PATCH 113/287] Update log change rigctld to frequency --- log | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/log b/log index cb2c860d..81449726 100755 --- a/log +++ b/log @@ -40,7 +40,7 @@ if [ "$REALTIME" = "1" ] ; then cat /home/pi/CubeSatSim/logp.txt # echo -e "\nCommand and Control Log file also saved as /home/pi/CubeSatSim/logp.txt" elif [ "$1" = "-r" ]; then - sudo journalctl -af -u rigctld # > /home/pi/CubeSatSim/logr.txt + sudo journalctl -af -u frequency # > /home/pi/CubeSatSim/logr.txt elif [ "$1" = "-f" ] ; then while true; do cat /home/pi/CubeSatSim/frequency.txt @@ -68,7 +68,7 @@ else cat /home/pi/CubeSatSim/logp.txt echo -e "\nCommand and Control Log file also saved as /home/pi/CubeSatSim/logp.txt" elif [ "$1" = "-r" ]; then - sudo journalctl -a -u rigctld > /home/pi/CubeSatSim/logr.txt + sudo journalctl -a -u frequency > /home/pi/CubeSatSim/logr.txt cat /home/pi/CubeSatSim/logr.txt echo -e "\nrigtcld Log file also saved as /home/pi/CubeSatSim/logr.txt" elif [ "$1" = "-f" ] ; then From 3891a61b84a27979d2136154c4ab6f1c39ea0d01 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 4 Jul 2026 07:07:50 -0400 Subject: [PATCH 114/287] Update and rename rigctld.sh to frequency.sh --- frequency.sh | 5 +++++ rigctld.sh | 23 ----------------------- 2 files changed, 5 insertions(+), 23 deletions(-) create mode 100755 frequency.sh delete mode 100755 rigctld.sh diff --git a/frequency.sh b/frequency.sh new file mode 100755 index 00000000..7a81fd07 --- /dev/null +++ b/frequency.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +echo "Starting frequency control" + +python3 /home/pi/CubeSatSim/frequency.py diff --git a/rigctld.sh b/rigctld.sh deleted file mode 100755 index 5c4b5e81..00000000 --- a/rigctld.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -sudo killall -9 ft857d &>/dev/null -sudo killall -9 socat &>/dev/null -sudo killall -9 rigctld &>/dev/null - -echo "Starting virtual serial ports /tmp/vttyA and /tmp/vttyB" - -socat -d -d PTY,raw,echo=0,link=/tmp/vttyA PTY,raw,echo=0,link=/tmp/vttyB & - -sleep 1 - -echo "Starting CubeSatSim FT857 emulation" - -/home/pi/FT857d/examples/FT857d/ft857d & - -sleep 1 - -echo "Starting rigctl emulating FT857 rig using virtual serial port /tmp/vttyB" - -rigctld -m 1022 -r /tmp/vttyB -t 4532 -vv - -echo "rigctld ended" From f7ab3657d83dcc32f44758295c083d740fe49ca5 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 4 Jul 2026 07:11:39 -0400 Subject: [PATCH 115/287] Update frequency.py add rigctld code --- frequency.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/frequency.py b/frequency.py index 1a038230..ec18eea9 100644 --- a/frequency.py +++ b/frequency.py @@ -411,5 +411,24 @@ if (doppler_mode == 'sim'): if (doppler_mode == 'rig'): print("rig mode") while True: - sleep(1) + + system("sudo killall -9 ft857d &>/dev/null") + system("udo killall -9 socat &>/dev/null") + system("sudo killall -9 rigctld &>/dev/null") + + print("Starting virtual serial ports /tmp/vttyA and /tmp/vttyB") + + system("socat -d -d PTY,raw,echo=0,link=/tmp/vttyA PTY,raw,echo=0,link=/tmp/vttyB &") + + sleep(1.0) + + print("Starting CubeSatSim FT857 emulation") + system("/home/pi/FT857d/examples/FT857d/ft857d &") + + sleep(1.0) + + print("Starting rigctl emulating FT857 rig using virtual serial port /tmp/vttyB") + system("rigctld -m 1022 -r /tmp/vttyB -t 4532 -vv") + + print("rigctld ended") From fff269293ae039aa3f51a152658fdf96baf8ab00 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 4 Jul 2026 07:13:21 -0400 Subject: [PATCH 116/287] Update install change to frequency.service --- install | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/install b/install index 54e037ed..d3b7a837 100755 --- a/install +++ b/install @@ -718,18 +718,18 @@ else FLAG=1 fi -FILE=/etc/systemd/system/rigctld.service +FILE=/etc/systemd/system/frequency.service if [ -f "$FILE" ]; then - if [[ $(diff /home/pi/CubeSatSim/systemd/rigctld.service /etc/systemd/system/rigctld.service) ]]; then - echo "changed rigctld.service." - sudo cp /home/pi/CubeSatSim/systemd/rigctld.service /etc/systemd/system/rigctld.service + if [[ $(diff /home/pi/CubeSatSim/systemd/frequency.service /etc/systemd/system/frequency.service) ]]; then + echo "changed frequency.service." + sudo cp /home/pi/CubeSatSim/systemd/frequency.service /etc/systemd/system/frequency.service FLAG=1 else - echo "no change to rigctld.service." + echo "no change to frequency.service." fi else - echo "creating rigctld.service." - sudo cp /home/pi/CubeSatSim/systemd/rigctld.service /etc/systemd/system/rigctld.service + echo "creating frequency.service." + sudo cp /home/pi/CubeSatSim/systemd/frequency.service /etc/systemd/system/frequency.service FLAG=1 fi From 8b81eb0c471fb6bd54fb7bc543e273556459aec4 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 4 Jul 2026 07:21:29 -0400 Subject: [PATCH 117/287] Update log add blank line for -f --- log | 1 + 1 file changed, 1 insertion(+) diff --git a/log b/log index 81449726..020510dc 100755 --- a/log +++ b/log @@ -73,6 +73,7 @@ else echo -e "\nrigtcld Log file also saved as /home/pi/CubeSatSim/logr.txt" elif [ "$1" = "-f" ] ; then cat /home/pi/CubeSatSim/frequency.txt + echo else sudo journalctl -a -u cubesatsim > /home/pi/CubeSatSim/log.txt cat /home/pi/CubeSatSim/log.txt From 79d4bceb4561ba7776f503dee60d526799a59cf3 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 4 Jul 2026 07:26:12 -0400 Subject: [PATCH 118/287] Update log add backspaces --- log | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/log b/log index 020510dc..534432e9 100755 --- a/log +++ b/log @@ -8,8 +8,8 @@ if [ "$1" = "-h" ] ; then echo " -t transmit" echo " -c command and control" echo " -p pacsat" - echo " -r rigctld" - echo " -f frequency" + echo " -r frequency control" + echo " -f frequency display" echo "Default is the log is dumpted to the screen and written to a file." echo "If an additional r is included, the log is realtime, and exits with a Control-C" echo @@ -44,8 +44,9 @@ if [ "$REALTIME" = "1" ] ; then elif [ "$1" = "-f" ] ; then while true; do cat /home/pi/CubeSatSim/frequency.txt - echo +# echo sleep 5 + echo "/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b" done else sudo journalctl -af -u cubesatsim # > /home/pi/CubeSatSim/log.txt @@ -69,8 +70,8 @@ else echo -e "\nCommand and Control Log file also saved as /home/pi/CubeSatSim/logp.txt" elif [ "$1" = "-r" ]; then sudo journalctl -a -u frequency > /home/pi/CubeSatSim/logr.txt - cat /home/pi/CubeSatSim/logr.txt - echo -e "\nrigtcld Log file also saved as /home/pi/CubeSatSim/logr.txt" + cat /home/pi/CubeSatSim/logf.txt + echo -e "\nFrequency Log file also saved as /home/pi/CubeSatSim/logf.txt" elif [ "$1" = "-f" ] ; then cat /home/pi/CubeSatSim/frequency.txt echo From ef8f654c4ea50d9874b14d95149a59195379c506 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 4 Jul 2026 07:27:43 -0400 Subject: [PATCH 119/287] Update log backspace print --- log | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/log b/log index 534432e9..a9886927 100755 --- a/log +++ b/log @@ -1,4 +1,4 @@ -#!/bin/bash +#!\bin\bash echo -e "\nLog file script for CubeSatSim\n" @@ -46,7 +46,7 @@ if [ "$REALTIME" = "1" ] ; then cat /home/pi/CubeSatSim/frequency.txt # echo sleep 5 - echo "/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b" + echo "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b" done else sudo journalctl -af -u cubesatsim # > /home/pi/CubeSatSim/log.txt From 03223b348a26cfa6316dcd56548a9174e439ed14 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 4 Jul 2026 07:30:07 -0400 Subject: [PATCH 120/287] Update log fix bin bash --- log | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/log b/log index a9886927..bc35b63a 100755 --- a/log +++ b/log @@ -1,4 +1,4 @@ -#!\bin\bash +#!/bin/bash echo -e "\nLog file script for CubeSatSim\n" From 05e4e9ff4938f45f8f1723f3d9918719458887ed Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 4 Jul 2026 07:31:13 -0400 Subject: [PATCH 121/287] Update log add -e --- log | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/log b/log index bc35b63a..eeca2ed1 100755 --- a/log +++ b/log @@ -46,7 +46,7 @@ if [ "$REALTIME" = "1" ] ; then cat /home/pi/CubeSatSim/frequency.txt # echo sleep 5 - echo "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b" + echo -e "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b" done else sudo journalctl -af -u cubesatsim # > /home/pi/CubeSatSim/log.txt From 439c9959f202560e6f5183b6a4bbe9ab455156f1 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 4 Jul 2026 07:33:45 -0400 Subject: [PATCH 122/287] Update log no newline on cat --- log | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/log b/log index eeca2ed1..b9f8817f 100755 --- a/log +++ b/log @@ -43,7 +43,7 @@ if [ "$REALTIME" = "1" ] ; then sudo journalctl -af -u frequency # > /home/pi/CubeSatSim/logr.txt elif [ "$1" = "-f" ] ; then while true; do - cat /home/pi/CubeSatSim/frequency.txt + cat /home/pi/CubeSatSim/frequency.txt | tr -d '\n' # echo sleep 5 echo -e "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b" From be43adfe0dfa1bdca33562c2a7c2294bcf0d72a0 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 4 Jul 2026 07:36:07 -0400 Subject: [PATCH 123/287] Update log printf --- log | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/log b/log index b9f8817f..72f809ac 100755 --- a/log +++ b/log @@ -46,7 +46,7 @@ if [ "$REALTIME" = "1" ] ; then cat /home/pi/CubeSatSim/frequency.txt | tr -d '\n' # echo sleep 5 - echo -e "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b" + printf "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b" done else sudo journalctl -af -u cubesatsim # > /home/pi/CubeSatSim/log.txt From c2f4927fcd74fc5e40312183cadcc9ffc724bd4e Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 4 Jul 2026 07:39:56 -0400 Subject: [PATCH 124/287] Update transmit.py change to frequency.service --- transmit.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index 4f07ee2d..0d6f9ff5 100644 --- a/transmit.py +++ b/transmit.py @@ -829,10 +829,11 @@ if __name__ == "__main__": if len(config) > 13: if config[13] == 'sim': doppler_mode = True + system("sudo systemctl restart frequency") print("Simulated Doppler frequency shift is enabled.") - if config[13] == 'rig': + elif config[13] == 'rig': doppler_mode = True - system("sudo systemctl restart rigctld") + system("sudo systemctl restart frequency") print("rigctl Doppler frequency shift is enabled.") else: system("sudo systemctl stop rigctld") From b3d0805b0a49bf3cbd38f841a00c74495f2baaf3 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 4 Jul 2026 07:41:54 -0400 Subject: [PATCH 125/287] Update frequency.py fix tab --- frequency.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frequency.py b/frequency.py index ec18eea9..f75cb8fc 100644 --- a/frequency.py +++ b/frequency.py @@ -420,12 +420,12 @@ if (doppler_mode == 'rig'): system("socat -d -d PTY,raw,echo=0,link=/tmp/vttyA PTY,raw,echo=0,link=/tmp/vttyB &") - sleep(1.0) + sleep(1.0) print("Starting CubeSatSim FT857 emulation") system("/home/pi/FT857d/examples/FT857d/ft857d &") - sleep(1.0) + sleep(1.0) print("Starting rigctl emulating FT857 rig using virtual serial port /tmp/vttyB") system("rigctld -m 1022 -r /tmp/vttyB -t 4532 -vv") From 2f8313f9cd8a0bfe9a6b9278f06b217ed3f15f3e Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 09:50:49 -0400 Subject: [PATCH 126/287] Update frequency.py fix doppler_mode off --- frequency.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frequency.py b/frequency.py index f75cb8fc..0d76b9ad 100644 --- a/frequency.py +++ b/frequency.py @@ -338,9 +338,11 @@ try: doppler_mode = 'rig' print("rigctl Doppler frequency shift is enabled.") else: - system("sudo systemctl stop rigctld") + doppler_mode = 'off' + print("Doppler frequency shift is disabled.") else: - system("sudo systemctl stop rigctld") + doppler_mode = 'off' + print("Doppler frequency shift is disabled.") print(config) print # print(callsign) From 1b63cfa816a4194154740e899dc03eae32918fb8 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 09:52:31 -0400 Subject: [PATCH 127/287] Update log fix cat logr.txt --- log | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/log b/log index 72f809ac..472c8421 100755 --- a/log +++ b/log @@ -70,7 +70,7 @@ else echo -e "\nCommand and Control Log file also saved as /home/pi/CubeSatSim/logp.txt" elif [ "$1" = "-r" ]; then sudo journalctl -a -u frequency > /home/pi/CubeSatSim/logr.txt - cat /home/pi/CubeSatSim/logf.txt + cat /home/pi/CubeSatSim/logr.txt echo -e "\nFrequency Log file also saved as /home/pi/CubeSatSim/logf.txt" elif [ "$1" = "-f" ] ; then cat /home/pi/CubeSatSim/frequency.txt From d3c20c53a4538ec50fda2d425f2f48cb110ab18c Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 09:55:29 -0400 Subject: [PATCH 128/287] Update frequency.py fix elseif --- frequency.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frequency.py b/frequency.py index 0d76b9ad..b5637557 100644 --- a/frequency.py +++ b/frequency.py @@ -334,7 +334,7 @@ try: if config[13] == 'sim': doppler_mode = 'sim' print("Simulated Doppler frequency shift is enabled.") - if config[13] == 'rig': + elif config[13] == 'rig': doppler_mode = 'rig' print("rigctl Doppler frequency shift is enabled.") else: @@ -364,7 +364,8 @@ except Exception as e: if (doppler_mode == 'off'): tx_freq_hz = txf * 1000 - rx_freq_hz = txf * 1000 + rx_freq_hz = rxf * 1000 + print("writing sim.cfg frequency to frequency.txt") with open("/home/pi/CubeSatSim/frequency.txt", "w") as file: file.write(f"{tx_freq_hz:.0f} {rx_freq_hz:.0f}") while True: From 5697a6ae3570dc84507894460c18f094c6c76fe8 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 09:58:41 -0400 Subject: [PATCH 129/287] Update frequency.service changed to run python directly --- systemd/frequency.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/systemd/frequency.service b/systemd/frequency.service index 00624d13..03ecb550 100644 --- a/systemd/frequency.service +++ b/systemd/frequency.service @@ -3,7 +3,7 @@ Description=frequency [Service] TimeoutStopSec=5 -ExecStart=/home/pi/CubeSatSim/frequency.sh +ExecStart=python3 -u /home/pi/CubeSatSim/frequency.py WorkingDirectory=/home/pi/CubeSatSim StandardOutput=inherit StandardError=inherit From bdd58ad9ebd8807bca5a4e4cfb669ea4fd938d1e Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 10:05:31 -0400 Subject: [PATCH 130/287] Update transmit.py always start frequency.service --- transmit.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/transmit.py b/transmit.py index 0d6f9ff5..d54a1f89 100644 --- a/transmit.py +++ b/transmit.py @@ -624,6 +624,8 @@ def transmit_carrier(duration): print("CubeSatSim v2.2 transmit.py starting...") +system("sudo systemctl restart frequency") + pd = 21 ptt = 20 txc_pin = 7 @@ -829,14 +831,14 @@ if __name__ == "__main__": if len(config) > 13: if config[13] == 'sim': doppler_mode = True - system("sudo systemctl restart frequency") +# system("sudo systemctl restart frequency") print("Simulated Doppler frequency shift is enabled.") elif config[13] == 'rig': doppler_mode = True - system("sudo systemctl restart frequency") +# system("sudo systemctl restart frequency") print("rigctl Doppler frequency shift is enabled.") - else: - system("sudo systemctl stop rigctld") +# else: +# system("sudo systemctl stop rigctld") else: system("sudo systemctl stop rigctld") print(config) From 5a3dee5ad6947213c6216b4f27e7ee118ae66090 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 10:38:15 -0400 Subject: [PATCH 131/287] Update frequency.py change to MHz --- frequency.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frequency.py b/frequency.py index b5637557..fdb96b88 100644 --- a/frequency.py +++ b/frequency.py @@ -363,8 +363,8 @@ except Exception as e: print(f"An error occurred: {e}") if (doppler_mode == 'off'): - tx_freq_hz = txf * 1000 - rx_freq_hz = rxf * 1000 + tx_freq_hz = txf * 1e6 + rx_freq_hz = rxf * 1e6 print("writing sim.cfg frequency to frequency.txt") with open("/home/pi/CubeSatSim/frequency.txt", "w") as file: file.write(f"{tx_freq_hz:.0f} {rx_freq_hz:.0f}") From ffa94e0f1b9da33e5828a6cd5ca3291a92aa47a7 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 10:41:30 -0400 Subject: [PATCH 132/287] Update transmit.py shorten morse timing --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index d54a1f89..0dd6ef27 100644 --- a/transmit.py +++ b/transmit.py @@ -632,7 +632,7 @@ txc_pin = 7 squelch = 6 green = 16 powerPin = 16 -morse_timing = 0.15 +morse_timing = 0.6 command_tx = True From e65327013c6c6119c655d869a182d88005f370ad Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 10:43:35 -0400 Subject: [PATCH 133/287] Update transmit.py shorten morse timing more --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 0dd6ef27..72a1ef02 100644 --- a/transmit.py +++ b/transmit.py @@ -632,7 +632,7 @@ txc_pin = 7 squelch = 6 green = 16 powerPin = 16 -morse_timing = 0.6 +morse_timing = 0.06 command_tx = True From 658807d2c04944e6e4339311adb32626ed8bf3df Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 10:45:57 -0400 Subject: [PATCH 134/287] Update transmit.py fix morse_timing --- transmit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index 72a1ef02..3e662eed 100644 --- a/transmit.py +++ b/transmit.py @@ -611,8 +611,8 @@ def cw_transmit_char(character): while (morse_table[(ord(character.upper()) - ord('0')) % 44][i] != 0): transmit_carrier(morse_table[(ord(character.upper()) - ord('0')) % 44][i] * morse_timing); i=i+1 - sleep(morse_timing * 0.7); - sleep(morse_timing * 1.5); + sleep(morse_timing * 1.0); + sleep(morse_timing * 1.0); # 1.5); def transmit_carrier(duration): global tx_doppler_freq_hz From a496d46ee581a163ca8ec6d7d3d2ff2fe95653c9 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 10:47:17 -0400 Subject: [PATCH 135/287] Update transmit.py slower morse --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 3e662eed..e04c034e 100644 --- a/transmit.py +++ b/transmit.py @@ -632,7 +632,7 @@ txc_pin = 7 squelch = 6 green = 16 powerPin = 16 -morse_timing = 0.06 +morse_timing = 0.1 command_tx = True From bb390cbcbb0f92d3fdf71b1850ae0de596d888d7 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 10:52:12 -0400 Subject: [PATCH 136/287] Update transmit.py print duration --- transmit.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/transmit.py b/transmit.py index e04c034e..3de3fd67 100644 --- a/transmit.py +++ b/transmit.py @@ -608,11 +608,14 @@ def cw_transmit_char(character): global morse_timing update_doppler("no") i = 0 - while (morse_table[(ord(character.upper()) - ord('0')) % 44][i] != 0): - transmit_carrier(morse_table[(ord(character.upper()) - ord('0')) % 44][i] * morse_timing); + duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] + print(duration) + while (duration != 0): + transmit_carrier(morse_table[(ord(character.upper()) - ord('0')) % 44][i] * morse_timing) + sleep(morse_timing * 1.0) i=i+1 - sleep(morse_timing * 1.0); - sleep(morse_timing * 1.0); # 1.5); + duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] + sleep(morse_timing * 0.7) # 1.5); def transmit_carrier(duration): global tx_doppler_freq_hz From 15b15219fa0a96b13a25b4c3107bb5862b098b57 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 10:54:45 -0400 Subject: [PATCH 137/287] Update transmit.py duration * morse_timing --- transmit.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/transmit.py b/transmit.py index 3de3fd67..dcaf09e5 100644 --- a/transmit.py +++ b/transmit.py @@ -608,13 +608,13 @@ def cw_transmit_char(character): global morse_timing update_doppler("no") i = 0 - duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] + duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] * morse_timing print(duration) while (duration != 0): - transmit_carrier(morse_table[(ord(character.upper()) - ord('0')) % 44][i] * morse_timing) + transmit_carrier(duration) sleep(morse_timing * 1.0) i=i+1 - duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] + duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] * morse_timing sleep(morse_timing * 0.7) # 1.5); def transmit_carrier(duration): From 21d057cb3f5626b115c48c9de8a3790ada2bc54c Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 11:02:11 -0400 Subject: [PATCH 138/287] Update transmit.py fix timing --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index dcaf09e5..128caf8c 100644 --- a/transmit.py +++ b/transmit.py @@ -615,7 +615,7 @@ def cw_transmit_char(character): sleep(morse_timing * 1.0) i=i+1 duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] * morse_timing - sleep(morse_timing * 0.7) # 1.5); + sleep(morse_timing * 1.0) # 1.5); def transmit_carrier(duration): global tx_doppler_freq_hz From a37396f96ecc50dd4d0d43d471aa758426cb38cf Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 11:07:28 -0400 Subject: [PATCH 139/287] Update transmit.py shorten duration between --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 128caf8c..01586a64 100644 --- a/transmit.py +++ b/transmit.py @@ -615,7 +615,7 @@ def cw_transmit_char(character): sleep(morse_timing * 1.0) i=i+1 duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] * morse_timing - sleep(morse_timing * 1.0) # 1.5); + sleep(morse_timing * 0.3) # 1.5); def transmit_carrier(duration): global tx_doppler_freq_hz From 3e237da6935a1d6d8c707b0f43fb78b6d8143efd Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 11:10:26 -0400 Subject: [PATCH 140/287] Update transmit.py change carrier calc --- transmit.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index 01586a64..2bb7f7b1 100644 --- a/transmit.py +++ b/transmit.py @@ -620,9 +620,13 @@ def cw_transmit_char(character): def transmit_carrier(duration): global tx_doppler_freq_hz global txLed - command = "timeout " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 +# command = "timeout " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 + start = "sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 + stop = "sudo killall -9 tune" output(txLed, 1) - system(command) + system(start) + sleep(duration) + system(stop) output(txLed, 0) print("CubeSatSim v2.2 transmit.py starting...") From 1d241c57bf00b0f30aa9f1118fd221246bd6a03e Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 11:14:41 -0400 Subject: [PATCH 141/287] Update transmit.py add & --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 2bb7f7b1..4344c238 100644 --- a/transmit.py +++ b/transmit.py @@ -621,7 +621,7 @@ def transmit_carrier(duration): global tx_doppler_freq_hz global txLed # command = "timeout " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 - start = "sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 + start = "sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1 &" # 434.9e6 stop = "sudo killall -9 tune" output(txLed, 1) system(start) From 26c9d36b76db64004b63b571bad7b5c1abea5a9c Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 11:17:23 -0400 Subject: [PATCH 142/287] Update transmit.py move & --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 4344c238..c33d377f 100644 --- a/transmit.py +++ b/transmit.py @@ -621,7 +621,7 @@ def transmit_carrier(duration): global tx_doppler_freq_hz global txLed # command = "timeout " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 - start = "sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1 &" # 434.9e6 + start = "sudo tune -f " + str(tx_doppler_freq_hz) + " & > /dev/null 2>&1" # 434.9e6 stop = "sudo killall -9 tune" output(txLed, 1) system(start) From 6d8c035a1a7ab9a6cf5ac4c3d2ab89e4ac1b812d Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 11:22:27 -0400 Subject: [PATCH 143/287] Update transmit.py change start string --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index c33d377f..61920bdd 100644 --- a/transmit.py +++ b/transmit.py @@ -621,7 +621,7 @@ def transmit_carrier(duration): global tx_doppler_freq_hz global txLed # command = "timeout " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 - start = "sudo tune -f " + str(tx_doppler_freq_hz) + " & > /dev/null 2>&1" # 434.9e6 + start = "sudo tune -f " + str(tx_doppler_freq_hz) # + " & > /dev/null 2>&1" # 434.9e6 stop = "sudo killall -9 tune" output(txLed, 1) system(start) From 4ff7ff3b7e3d00405000dbe860ea5394aa286049 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 11:24:06 -0400 Subject: [PATCH 144/287] Update transmit.py add back & --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 61920bdd..a08deafe 100644 --- a/transmit.py +++ b/transmit.py @@ -621,7 +621,7 @@ def transmit_carrier(duration): global tx_doppler_freq_hz global txLed # command = "timeout " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 - start = "sudo tune -f " + str(tx_doppler_freq_hz) # + " & > /dev/null 2>&1" # 434.9e6 + start = "sudo tune -f " + str(tx_doppler_freq_hz) + " &" # + " & > /dev/null 2>&1" # 434.9e6 stop = "sudo killall -9 tune" output(txLed, 1) system(start) From 7ef0cf7b7efbd09cfd1db86d7d8ccad64c36b539 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 11:33:48 -0400 Subject: [PATCH 145/287] Update transmit.py change stop --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index a08deafe..59c8ef6d 100644 --- a/transmit.py +++ b/transmit.py @@ -622,7 +622,7 @@ def transmit_carrier(duration): global txLed # command = "timeout " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 start = "sudo tune -f " + str(tx_doppler_freq_hz) + " &" # + " & > /dev/null 2>&1" # 434.9e6 - stop = "sudo killall -9 tune" + stop = "sudo rpitx -f 434.9e6 &" output(txLed, 1) system(start) sleep(duration) From bd14beb9d1fa125d61ad83ac51f3c9085cf406cf Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 11:38:16 -0400 Subject: [PATCH 146/287] Update transmit.py change to 3.0 --- transmit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index 59c8ef6d..2828cd06 100644 --- a/transmit.py +++ b/transmit.py @@ -612,10 +612,10 @@ def cw_transmit_char(character): print(duration) while (duration != 0): transmit_carrier(duration) - sleep(morse_timing * 1.0) + sleep(morse_timing) i=i+1 duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] * morse_timing - sleep(morse_timing * 0.3) # 1.5); + sleep(morse_timing * 3.0) # 1.5); def transmit_carrier(duration): global tx_doppler_freq_hz From 3e4ae050fdbc98784b6b5f2517ababef6fa6d28e Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 5 Jul 2026 11:41:58 -0400 Subject: [PATCH 147/287] Update transmit.py add kills --- transmit.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/transmit.py b/transmit.py index 2828cd06..48330c83 100644 --- a/transmit.py +++ b/transmit.py @@ -623,11 +623,15 @@ def transmit_carrier(duration): # command = "timeout " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 start = "sudo tune -f " + str(tx_doppler_freq_hz) + " &" # + " & > /dev/null 2>&1" # 434.9e6 stop = "sudo rpitx -f 434.9e6 &" + killrpitx = "sudo killall -9 rpitx &" + killtune = "sudo killall -9 tune &" output(txLed, 1) system(start) sleep(duration) system(stop) output(txLed, 0) + system(killrpitx) + system(killtune) print("CubeSatSim v2.2 transmit.py starting...") From b57d9442d487364eef238b6affb9ee083db0deca Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 6 Jul 2026 11:20:33 -0400 Subject: [PATCH 148/287] Update frequency.py update table for 88 target pass --- frequency.py | 903 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 666 insertions(+), 237 deletions(-) diff --git a/frequency.py b/frequency.py index fdb96b88..68635640 100644 --- a/frequency.py +++ b/frequency.py @@ -9,239 +9,668 @@ from os import system iss_doppler_passes = { - 5: [ - {"time_sec": -180, "velocity_kms": -4.00, "doppler_434_khz": 5.79, "obs_434_mhz": 434.9058, "doppler_144_khz": 1.93, "obs_144_mhz": 144.9019}, - {"time_sec": -170, "velocity_kms": -3.89, "doppler_434_khz": 5.64, "obs_434_mhz": 434.9056, "doppler_144_khz": 1.88, "obs_144_mhz": 144.9019}, - {"time_sec": -160, "velocity_kms": -3.78, "doppler_434_khz": 5.48, "obs_434_mhz": 434.9055, "doppler_144_khz": 1.83, "obs_144_mhz": 144.9018}, - {"time_sec": -150, "velocity_kms": -3.67, "doppler_434_khz": 5.32, "obs_434_mhz": 434.9053, "doppler_144_khz": 1.77, "obs_144_mhz": 144.9018}, - {"time_sec": -140, "velocity_kms": -3.54, "doppler_434_khz": 5.14, "obs_434_mhz": 434.9051, "doppler_144_khz": 1.71, "obs_144_mhz": 144.9017}, - {"time_sec": -130, "velocity_kms": -3.42, "doppler_434_khz": 4.96, "obs_434_mhz": 434.9050, "doppler_144_khz": 1.65, "obs_144_mhz": 144.9017}, - {"time_sec": -120, "velocity_kms": -3.28, "doppler_434_khz": 4.76, "obs_434_mhz": 434.9048, "doppler_144_khz": 1.59, "obs_144_mhz": 144.9016}, - {"time_sec": -110, "velocity_kms": -3.14, "doppler_434_khz": 4.55, "obs_434_mhz": 434.9046, "doppler_144_khz": 1.52, "obs_144_mhz": 144.9015}, - {"time_sec": -100, "velocity_kms": -2.99, "doppler_434_khz": 4.33, "obs_434_mhz": 434.9043, "doppler_144_khz": 1.44, "obs_144_mhz": 144.9014}, - {"time_sec": -90, "velocity_kms": -2.83, "doppler_434_khz": 4.10, "obs_434_mhz": 434.9041, "doppler_144_khz": 1.37, "obs_144_mhz": 144.9014}, - {"time_sec": -80, "velocity_kms": -2.66, "doppler_434_khz": 3.86, "obs_434_mhz": 434.9039, "doppler_144_khz": 1.29, "obs_144_mhz": 144.9013}, - {"time_sec": -70, "velocity_kms": -2.48, "doppler_434_khz": 3.60, "obs_434_mhz": 434.9036, "doppler_144_khz": 1.20, "obs_144_mhz": 144.9012}, - {"time_sec": -60, "velocity_kms": -2.29, "doppler_434_khz": 3.32, "obs_434_mhz": 434.9033, "doppler_144_khz": 1.11, "obs_144_mhz": 144.9011}, - {"time_sec": -50, "velocity_kms": -2.09, "doppler_434_khz": 3.03, "obs_434_mhz": 434.9030, "doppler_144_khz": 1.01, "obs_144_mhz": 144.9010}, - {"time_sec": -40, "velocity_kms": -1.87, "doppler_434_khz": 2.71, "obs_434_mhz": 434.9027, "doppler_144_khz": 0.90, "obs_144_mhz": 144.9009}, - {"time_sec": -30, "velocity_kms": -1.63, "doppler_434_khz": 2.37, "obs_434_mhz": 434.9024, "doppler_144_khz": 0.79, "obs_144_mhz": 144.9008}, - {"time_sec": -20, "velocity_kms": -1.33, "doppler_434_khz": 1.93, "obs_434_mhz": 434.9019, "doppler_144_khz": 0.64, "obs_144_mhz": 144.9006}, - {"time_sec": -10, "velocity_kms": -0.84, "doppler_434_khz": 1.22, "obs_434_mhz": 434.9012, "doppler_144_khz": 0.41, "obs_144_mhz": 144.9004}, - {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": 0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": 0.00, "obs_144_mhz": 144.9000}, - {"time_sec": 10, "velocity_kms": 0.84, "doppler_434_khz": -1.22, "obs_434_mhz": 434.8988, "doppler_144_khz": -0.41, "obs_144_mhz": 144.8996}, - {"time_sec": 20, "velocity_kms": 1.33, "doppler_434_khz": -1.93, "obs_434_mhz": 434.8981, "doppler_144_khz": -0.64, "obs_144_mhz": 144.8994}, - {"time_sec": 30, "velocity_kms": 1.63, "doppler_434_khz": -2.37, "obs_434_mhz": 434.8976, "doppler_144_khz": -0.79, "obs_144_mhz": 144.8992}, - {"time_sec": 40, "velocity_kms": 1.87, "doppler_434_khz": -2.71, "obs_434_mhz": 434.8973, "doppler_144_khz": -0.90, "obs_144_mhz": 144.8991}, - {"time_sec": 50, "velocity_kms": 2.09, "doppler_434_khz": -3.03, "obs_434_mhz": 434.8970, "doppler_144_khz": -1.01, "obs_144_mhz": 144.8990}, - {"time_sec": 60, "velocity_kms": 2.29, "doppler_434_khz": -3.32, "obs_434_mhz": 434.8967, "doppler_144_khz": -1.11, "obs_144_mhz": 144.8989}, - {"time_sec": 70, "velocity_kms": 2.48, "doppler_434_khz": -3.60, "obs_434_mhz": 434.8964, "doppler_144_khz": -1.20, "obs_144_mhz": 144.8988}, - {"time_sec": 80, "velocity_kms": 2.66, "doppler_434_khz": -3.86, "obs_434_mhz": 434.8961, "doppler_144_khz": -1.29, "obs_144_mhz": 144.8987}, - {"time_sec": 90, "velocity_kms": 2.83, "doppler_434_khz": -4.10, "obs_434_mhz": 434.8959, "doppler_144_khz": -1.37, "obs_144_mhz": 144.8986}, - {"time_sec": 100, "velocity_kms": 2.99, "doppler_434_khz": -4.33, "obs_434_mhz": 434.8957, "doppler_144_khz": -1.44, "obs_144_mhz": 144.8986}, - {"time_sec": 110, "velocity_kms": 3.14, "doppler_434_khz": -4.55, "obs_434_mhz": 434.8954, "doppler_144_khz": -1.52, "obs_144_mhz": 144.8985}, - {"time_sec": 120, "velocity_kms": 3.28, "doppler_434_khz": -4.76, "obs_434_mhz": 434.8952, "doppler_144_khz": -1.59, "obs_144_mhz": 144.8984}, - {"time_sec": 130, "velocity_kms": 3.42, "doppler_434_khz": -4.96, "obs_434_mhz": 434.8950, "doppler_144_khz": -1.65, "obs_144_mhz": 144.8983}, - {"time_sec": 140, "velocity_kms": 3.54, "doppler_434_khz": -5.14, "obs_434_mhz": 434.8949, "doppler_144_khz": -1.71, "obs_144_mhz": 144.8983}, - {"time_sec": 150, "velocity_kms": 3.67, "doppler_434_khz": -5.32, "obs_434_mhz": 434.8947, "doppler_144_khz": -1.77, "obs_144_mhz": 144.8982}, - {"time_sec": 160, "velocity_kms": 3.78, "doppler_434_khz": -5.48, "obs_434_mhz": 434.8945, "doppler_144_khz": -1.83, "obs_144_mhz": 144.8982}, - {"time_sec": 170, "velocity_kms": 3.89, "doppler_434_khz": -5.64, "obs_434_mhz": 434.8944, "doppler_144_khz": -1.88, "obs_144_mhz": 144.8981}, - {"time_sec": 180, "velocity_kms": 4.00, "doppler_434_khz": -5.79, "obs_434_mhz": 434.8942, "doppler_144_khz": -1.93, "obs_144_mhz": 144.8981} - ], - 20: [ - {"time_sec": -180, "velocity_kms": -5.81, "doppler_434_khz": 8.43, "obs_434_mhz": 434.9084, "doppler_144_khz": 2.81, "obs_144_mhz": 144.9028}, - {"time_sec": -170, "velocity_kms": -5.68, "doppler_434_khz": 8.24, "obs_434_mhz": 434.9082, "doppler_144_khz": 2.75, "obs_144_mhz": 144.9027}, - {"time_sec": -160, "velocity_kms": -5.55, "doppler_434_khz": 8.05, "obs_434_mhz": 434.9081, "doppler_144_khz": 2.68, "obs_144_mhz": 144.9027}, - {"time_sec": -150, "velocity_kms": -5.39, "doppler_434_khz": 7.82, "obs_434_mhz": 434.9078, "doppler_144_khz": 2.61, "obs_144_mhz": 144.9026}, - {"time_sec": -140, "velocity_kms": -5.22, "doppler_434_khz": 7.57, "obs_434_mhz": 434.9076, "doppler_144_khz": 2.52, "obs_144_mhz": 144.9025}, - {"time_sec": -130, "velocity_kms": -5.02, "doppler_434_khz": 7.28, "obs_434_mhz": 434.9073, "doppler_144_khz": 2.43, "obs_144_mhz": 144.9024}, - {"time_sec": -120, "velocity_kms": -4.81, "doppler_434_khz": 6.98, "obs_434_mhz": 434.9070, "doppler_144_khz": 2.32, "obs_144_mhz": 144.9023}, - {"time_sec": -110, "velocity_kms": -4.57, "doppler_434_khz": 6.63, "obs_434_mhz": 434.9066, "doppler_144_khz": 2.21, "obs_144_mhz": 144.9022}, - {"time_sec": -100, "velocity_kms": -4.30, "doppler_434_khz": 6.24, "obs_434_mhz": 434.9062, "doppler_144_khz": 2.08, "obs_144_mhz": 144.9021}, - {"time_sec": -90, "velocity_kms": -4.00, "doppler_434_khz": 5.80, "obs_434_mhz": 434.9058, "doppler_144_khz": 1.93, "obs_144_mhz": 144.9019}, - {"time_sec": -80, "velocity_kms": -3.68, "doppler_434_khz": 5.34, "obs_434_mhz": 434.9053, "doppler_144_khz": 1.78, "obs_144_mhz": 144.9018}, - {"time_sec": -70, "velocity_kms": -3.32, "doppler_434_khz": 4.82, "obs_434_mhz": 434.9048, "doppler_144_khz": 1.60, "obs_144_mhz": 144.9016}, - {"time_sec": -60, "velocity_kms": -2.92, "doppler_434_khz": 4.24, "obs_434_mhz": 434.9042, "doppler_144_khz": 1.41, "obs_144_mhz": 144.9014}, - {"time_sec": -50, "velocity_kms": -2.50, "doppler_434_khz": 3.63, "obs_434_mhz": 434.9036, "doppler_144_khz": 1.21, "obs_144_mhz": 144.9012}, - {"time_sec": -40, "velocity_kms": -2.04, "doppler_434_khz": 2.96, "obs_434_mhz": 434.9030, "doppler_144_khz": 0.99, "obs_144_mhz": 144.9010}, - {"time_sec": -30, "velocity_kms": -1.56, "doppler_434_khz": 2.26, "obs_434_mhz": 434.9023, "doppler_144_khz": 0.75, "obs_144_mhz": 144.9008}, - {"time_sec": -20, "velocity_kms": -1.05, "doppler_434_khz": 1.52, "obs_434_mhz": 434.9015, "doppler_144_khz": 0.51, "obs_144_mhz": 144.9005}, - {"time_sec": -10, "velocity_kms": -0.53, "doppler_434_khz": 0.77, "obs_434_mhz": 434.9008, "doppler_144_khz": 0.26, "obs_144_mhz": 144.9003}, - {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, - {"time_sec": 10, "velocity_kms": 0.53, "doppler_434_khz": -0.77, "obs_434_mhz": 434.8992, "doppler_144_khz": -0.26, "obs_144_mhz": 144.8997}, - {"time_sec": 20, "velocity_kms": 1.05, "doppler_434_khz": -1.52, "obs_434_mhz": 434.8985, "doppler_144_khz": -0.51, "obs_144_mhz": 144.8995}, - {"time_sec": 30, "velocity_kms": 1.56, "doppler_434_khz": -2.26, "obs_434_mhz": 434.8977, "doppler_144_khz": -0.75, "obs_144_mhz": 144.8992}, - {"time_sec": 40, "velocity_kms": 2.04, "doppler_434_khz": -2.96, "obs_434_mhz": 434.8970, "doppler_144_khz": -0.99, "obs_144_mhz": 144.8990}, - {"time_sec": 50, "velocity_kms": 2.50, "doppler_434_khz": -3.63, "obs_434_mhz": 434.8964, "doppler_144_khz": -1.21, "obs_144_mhz": 144.8988}, - {"time_sec": 60, "velocity_kms": 2.92, "doppler_434_khz": -4.24, "obs_434_mhz": 434.8958, "doppler_144_khz": -1.41, "obs_144_mhz": 144.8986}, - {"time_sec": 70, "velocity_kms": 3.32, "doppler_434_khz": -4.82, "obs_434_mhz": 434.8952, "doppler_144_khz": -1.60, "obs_144_mhz": 144.8984}, - {"time_sec": 80, "velocity_kms": 3.68, "doppler_434_khz": -5.34, "obs_434_mhz": 434.8947, "doppler_144_khz": -1.78, "obs_144_mhz": 144.8982}, - {"time_sec": 90, "velocity_kms": 4.00, "doppler_434_khz": -5.80, "obs_434_mhz": 434.8942, "doppler_144_khz": -1.93, "obs_144_mhz": 144.8981}, - {"time_sec": 100, "velocity_kms": 4.30, "doppler_434_khz": -6.24, "obs_434_mhz": 434.8938, "doppler_144_khz": -2.08, "obs_144_mhz": 144.8979}, - {"time_sec": 110, "velocity_kms": 4.57, "doppler_434_khz": -6.63, "obs_434_mhz": 434.8934, "doppler_144_khz": -2.21, "obs_144_mhz": 144.8978}, - {"time_sec": 120, "velocity_kms": 4.81, "doppler_434_khz": -6.98, "obs_434_mhz": 434.8930, "doppler_144_khz": -2.32, "obs_144_mhz": 144.8977}, - {"time_sec": 130, "velocity_kms": 5.02, "doppler_434_khz": -7.28, "obs_434_mhz": 434.8927, "doppler_144_khz": -2.43, "obs_144_mhz": 144.8976}, - {"time_sec": 140, "velocity_kms": 5.22, "doppler_434_khz": -7.57, "obs_434_mhz": 434.8924, "doppler_144_khz": -2.52, "obs_144_mhz": 144.8975}, - {"time_sec": 150, "velocity_kms": 5.39, "doppler_434_khz": -7.82, "obs_434_mhz": 434.8922, "doppler_144_khz": -2.61, "obs_144_mhz": 144.8974}, - {"time_sec": 160, "velocity_kms": 5.55, "doppler_434_khz": -8.05, "obs_434_mhz": 434.8919, "doppler_144_khz": -2.68, "obs_144_mhz": 144.8973}, - {"time_sec": 170, "velocity_kms": 5.68, "doppler_434_khz": -8.24, "obs_434_mhz": 434.8918, "doppler_144_khz": -2.75, "obs_144_mhz": 144.8973}, - {"time_sec": 180, "velocity_kms": 5.81, "doppler_434_khz": -8.43, "obs_434_mhz": 434.8916, "doppler_144_khz": -2.81, "obs_144_mhz": 144.8972} - ], - 40: [ - {"time_sec": -180, "velocity_kms": -6.67, "doppler_434_khz": 9.68, "obs_434_mhz": 434.9097, "doppler_144_khz": 3.22, "obs_144_mhz": 144.9032}, - {"time_sec": -170, "velocity_kms": -6.60, "doppler_434_khz": 9.57, "obs_434_mhz": 434.9096, "doppler_144_khz": 3.19, "obs_144_mhz": 144.9032}, - {"time_sec": -160, "velocity_kms": -6.52, "doppler_434_khz": 9.46, "obs_434_mhz": 434.9095, "doppler_144_khz": 3.15, "obs_144_mhz": 144.9032}, - {"time_sec": -150, "velocity_kms": -6.43, "doppler_434_khz": 9.33, "obs_434_mhz": 434.9093, "doppler_144_khz": 3.11, "obs_144_mhz": 144.9031}, - {"time_sec": -140, "velocity_kms": -6.32, "doppler_434_khz": 9.17, "obs_434_mhz": 434.9092, "doppler_144_khz": 3.05, "obs_144_mhz": 144.9031}, - {"time_sec": -130, "velocity_kms": -6.19, "doppler_434_khz": 8.98, "obs_434_mhz": 434.9090, "doppler_144_khz": 2.99, "obs_144_mhz": 144.9030}, - {"time_sec": -120, "velocity_kms": -6.04, "doppler_434_khz": 8.76, "obs_434_mhz": 434.9088, "doppler_144_khz": 2.92, "obs_144_mhz": 144.9029}, - {"time_sec": -110, "velocity_kms": -5.86, "doppler_434_khz": 8.50, "obs_434_mhz": 434.9085, "doppler_144_khz": 2.83, "obs_144_mhz": 144.9028}, - {"time_sec": -100, "velocity_kms": -5.65, "doppler_434_khz": 8.20, "obs_434_mhz": 434.9082, "doppler_144_khz": 2.73, "obs_144_mhz": 144.9027}, - {"time_sec": -90, "velocity_kms": -5.39, "doppler_434_khz": 7.82, "obs_434_mhz": 434.9078, "doppler_144_khz": 2.61, "obs_144_mhz": 144.9026}, - {"time_sec": -80, "velocity_kms": -5.08, "doppler_434_khz": 7.37, "obs_434_mhz": 434.9074, "doppler_144_khz": 2.46, "obs_144_mhz": 144.9025}, - {"time_sec": -70, "velocity_kms": -4.72, "doppler_434_khz": 6.85, "obs_434_mhz": 434.9068, "doppler_144_khz": 2.28, "obs_144_mhz": 144.9023}, - {"time_sec": -60, "velocity_kms": -4.28, "doppler_434_khz": 6.21, "obs_434_mhz": 434.9062, "doppler_144_khz": 2.07, "obs_144_mhz": 144.9021}, - {"time_sec": -50, "velocity_kms": -3.77, "doppler_434_khz": 5.47, "obs_434_mhz": 434.9055, "doppler_144_khz": 1.82, "obs_144_mhz": 144.8993}, # manual note context adjustments active - {"time_sec": -40, "velocity_kms": -3.17, "doppler_434_khz": 4.60, "obs_434_mhz": 434.9046, "doppler_144_khz": 1.53, "obs_144_mhz": 144.9015}, - {"time_sec": -30, "velocity_kms": -2.48, "doppler_434_khz": 3.60, "obs_434_mhz": 434.9036, "doppler_144_khz": 1.20, "obs_144_mhz": 144.9012}, - {"time_sec": -20, "velocity_kms": -1.70, "doppler_434_khz": 2.47, "obs_434_mhz": 434.9025, "doppler_144_khz": 0.82, "obs_144_mhz": 144.9008}, - {"time_sec": -10, "velocity_kms": -0.87, "doppler_434_khz": 1.26, "obs_434_mhz": 434.9013, "doppler_144_khz": 0.42, "obs_144_mhz": 144.9004}, - {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, - {"time_sec": 10, "velocity_kms": 0.87, "doppler_434_khz": -1.26, "obs_434_mhz": 434.8987, "doppler_144_khz": -0.42, "obs_144_mhz": 144.8996}, - {"time_sec": 20, "velocity_kms": 1.70, "doppler_434_khz": -2.47, "obs_434_mhz": 434.8975, "doppler_144_khz": -0.82, "obs_144_mhz": 144.8992}, - {"time_sec": 30, "velocity_kms": 2.48, "doppler_434_khz": -3.60, "obs_434_mhz": 434.8964, "doppler_144_khz": -1.20, "obs_144_mhz": 144.8988}, - {"time_sec": 40, "velocity_kms": 3.17, "doppler_434_khz": -4.60, "obs_434_mhz": 434.8954, "doppler_144_khz": -1.53, "obs_144_mhz": 144.8985}, - {"time_sec": 50, "velocity_kms": 3.77, "doppler_434_khz": -5.47, "obs_434_mhz": 434.8945, "doppler_144_khz": -1.82, "obs_144_mhz": 144.8982}, - {"time_sec": 60, "velocity_kms": 4.28, "doppler_434_khz": -6.21, "obs_434_mhz": 434.8938, "doppler_144_khz": -2.07, "obs_144_mhz": 144.8979}, - {"time_sec": 70, "velocity_kms": 4.72, "doppler_434_khz": -6.85, "obs_434_mhz": 434.8932, "doppler_144_khz": -2.28, "obs_144_mhz": 144.8977}, - {"time_sec": 80, "velocity_kms": 5.08, "doppler_434_khz": -7.37, "obs_434_mhz": 434.8926, "doppler_144_khz": -2.46, "obs_144_mhz": 144.8975}, - {"time_sec": 90, "velocity_kms": 5.39, "doppler_434_khz": -7.82, "obs_434_mhz": 434.8922, "doppler_144_khz": -2.61, "obs_144_mhz": 144.8974}, - {"time_sec": 100, "velocity_kms": 0.87, "doppler_434_khz": -8.19, "obs_434_mhz": 434.8918, "doppler_144_khz": -2.73, "obs_144_mhz": 144.8973}, - {"time_sec": 110, "velocity_kms": 1.70, "doppler_434_khz": -8.50, "obs_434_mhz": 434.8915, "doppler_144_khz": -2.83, "obs_144_mhz": 144.8972}, - {"time_sec": 120, "velocity_kms": 2.48, "doppler_434_khz": -8.76, "obs_434_mhz": 434.8912, "doppler_144_khz": -2.92, "obs_144_mhz": 144.8971}, - {"time_sec": 130, "velocity_kms": 3.17, "doppler_434_khz": -8.98, "obs_434_mhz": 434.8910, "doppler_144_khz": -2.99, "obs_144_mhz": 144.8970}, - {"time_sec": 140, "velocity_kms": 3.77, "doppler_434_khz": -9.17, "obs_434_mhz": 434.8908, "doppler_144_khz": -3.05, "obs_144_mhz": 144.8969}, - {"time_sec": 150, "velocity_kms": 4.28, "doppler_434_khz": -9.33, "obs_434_mhz": 434.8907, "doppler_144_khz": -3.11, "obs_144_mhz": 144.8969}, - {"time_sec": 160, "velocity_kms": 4.72, "doppler_434_khz": -9.46, "obs_434_mhz": 434.8905, "doppler_144_khz": -3.15, "obs_144_mhz": 144.8968}, - {"time_sec": 170, "velocity_kms": 5.08, "doppler_434_khz": -9.58, "obs_434_mhz": 434.8904, "doppler_144_khz": -3.19, "obs_144_mhz": 144.8968}, - {"time_sec": 180, "velocity_kms": 5.39, "doppler_434_khz": -9.68, "obs_434_mhz": 434.8903, "doppler_144_khz": -3.22, "obs_144_mhz": 144.8968} - ], - 70: [ - {"time_sec": -180, "velocity_kms": -7.00, "doppler_434_khz": 10.15, "obs_434_mhz": 434.9102, "doppler_144_khz": 3.38, "obs_144_mhz": 144.9034}, - {"time_sec": -170, "velocity_kms": -6.95, "doppler_434_khz": 10.09, "obs_434_mhz": 434.9101, "doppler_144_khz": 3.36, "obs_144_mhz": 144.9034}, - {"time_sec": -160, "velocity_kms": -6.91, "doppler_434_khz": 10.02, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.34, "obs_144_mhz": 144.9033}, - {"time_sec": -150, "velocity_kms": -6.86, "doppler_434_khz": 9.95, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.32, "obs_144_mhz": 144.9033}, - {"time_sec": -140, "velocity_kms": -6.78, "doppler_434_khz": 9.84, "obs_434_mhz": 434.9098, "doppler_144_khz": 3.28, "obs_144_mhz": 144.9033}, - {"time_sec": -130, "velocity_kms": -6.70, "doppler_434_khz": 9.72, "obs_434_mhz": 434.9097, "doppler_144_khz": 3.24, "obs_144_mhz": 144.9032}, - {"time_sec": -120, "velocity_kms": -6.62, "doppler_434_khz": 9.60, "obs_434_mhz": 434.9096, "doppler_144_khz": 3.20, "obs_144_mhz": 144.9032}, - {"time_sec": -110, "velocity_kms": -6.47, "doppler_434_khz": 9.39, "obs_434_mhz": 434.9094, "doppler_144_khz": 3.13, "obs_144_mhz": 144.9031}, - {"time_sec": -100, "velocity_kms": -6.32, "doppler_434_khz": 9.17, "obs_434_mhz": 434.9092, "doppler_144_khz": 3.05, "obs_144_mhz": 144.9031}, - {"time_sec": -90, "velocity_kms": -6.17, "doppler_434_khz": 8.95, "obs_434_mhz": 434.9090, "doppler_144_khz": 2.98, "obs_144_mhz": 144.9030}, - {"time_sec": -80, "velocity_kms": -5.86, "doppler_434_khz": 8.50, "obs_434_mhz": 434.9085, "doppler_144_khz": 2.83, "obs_144_mhz": 144.9028}, - {"time_sec": -70, "velocity_kms": -5.55, "doppler_434_khz": 8.05, "obs_434_mhz": 434.9081, "doppler_144_khz": 2.68, "obs_144_mhz": 144.9027}, - {"time_sec": -60, "velocity_kms": -5.24, "doppler_434_khz": 7.60, "obs_434_mhz": 434.9076, "doppler_144_khz": 2.53, "obs_144_mhz": 144.9025}, - {"time_sec": -50, "velocity_kms": -4.60, "doppler_434_khz": 6.67, "obs_434_mhz": 434.9067, "doppler_144_khz": 2.22, "obs_144_mhz": 144.9022}, - {"time_sec": -40, "velocity_kms": -3.96, "doppler_434_khz": 5.74, "obs_434_mhz": 434.9057, "doppler_144_khz": 1.91, "obs_144_mhz": 144.9019}, - {"time_sec": -30, "velocity_kms": -3.32, "doppler_434_khz": 4.82, "obs_434_mhz": 434.9048, "doppler_144_khz": 1.60, "obs_144_mhz": 144.9016}, - {"time_sec": -20, "velocity_kms": -2.21, "doppler_434_khz": 3.21, "obs_434_mhz": 434.9032, "doppler_144_khz": 1.07, "obs_144_mhz": 144.9011}, - {"time_sec": -10, "velocity_kms": -1.11, "doppler_434_khz": 1.61, "obs_434_mhz": 434.9016, "doppler_144_khz": 0.53, "obs_144_mhz": 144.9005}, - {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, - {"time_sec": 10, "velocity_kms": 1.11, "doppler_434_khz": -1.61, "obs_434_mhz": 434.8984, "doppler_144_khz": -0.53, "obs_144_mhz": 144.8995}, - {"time_sec": 20, "velocity_kms": 2.21, "doppler_434_khz": -3.21, "obs_434_mhz": 434.8968, "doppler_144_khz": -1.07, "obs_144_mhz": 144.8989}, - {"time_sec": 30, "velocity_kms": 3.32, "doppler_434_khz": -4.82, "obs_434_mhz": 434.8952, "doppler_144_khz": -1.60, "obs_144_mhz": 144.8984}, - {"time_sec": 40, "velocity_kms": 3.96, "doppler_434_khz": -5.74, "obs_434_mhz": 434.8943, "doppler_144_khz": -1.91, "obs_144_mhz": 144.8981}, - {"time_sec": 50, "velocity_kms": 4.60, "doppler_434_khz": -6.67, "obs_434_mhz": 434.8933, "doppler_144_khz": -2.22, "obs_144_mhz": 144.8978}, - {"time_sec": 60, "velocity_kms": 5.24, "doppler_434_khz": -7.60, "obs_434_mhz": 434.8924, "doppler_144_khz": -2.53, "obs_144_mhz": 144.8975}, - {"time_sec": 70, "velocity_kms": 5.55, "doppler_434_khz": -8.05, "obs_434_mhz": 434.8919, "doppler_144_khz": -2.68, "obs_144_mhz": 144.8973}, - {"time_sec": 80, "velocity_kms": 5.86, "doppler_434_khz": -8.50, "obs_434_mhz": 434.8915, "doppler_144_khz": -2.83, "obs_144_mhz": 144.8972}, - {"time_sec": 90, "velocity_kms": 6.17, "doppler_434_khz": -8.95, "obs_434_mhz": 434.8910, "doppler_144_khz": -2.98, "obs_144_mhz": 144.8970}, - {"time_sec": 100, "velocity_kms": 6.32, "doppler_434_khz": -9.17, "obs_434_mhz": 434.8908, "doppler_144_khz": -3.05, "obs_144_mhz": 144.8969}, - {"time_sec": 110, "velocity_kms": 6.47, "doppler_434_khz": -9.39, "obs_434_mhz": 434.8906, "doppler_144_khz": -3.13, "obs_144_mhz": 144.8969}, - {"time_sec": 120, "velocity_kms": 6.62, "doppler_434_khz": -9.60, "obs_434_mhz": 434.8904, "doppler_144_khz": -3.20, "obs_144_mhz": 144.8968}, - {"time_sec": 130, "velocity_kms": 6.70, "doppler_434_khz": -9.72, "obs_434_mhz": 434.8903, "doppler_144_khz": -3.24, "obs_144_mhz": 144.8968}, - {"time_sec": 140, "velocity_kms": 6.78, "doppler_434_khz": -9.84, "obs_434_mhz": 434.8902, "doppler_144_khz": -3.28, "obs_144_mhz": 144.8967}, - {"time_sec": 150, "velocity_kms": 6.86, "doppler_434_khz": -9.95, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.32, "obs_144_mhz": 144.8967}, - {"time_sec": 160, "velocity_kms": 6.91, "doppler_434_khz": -10.02, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.34, "obs_144_mhz": 144.8967}, - {"time_sec": 170, "velocity_kms": 6.95, "doppler_434_khz": -10.09, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.36, "obs_144_mhz": 144.8966}, - {"time_sec": 180, "velocity_kms": 7.00, "doppler_434_khz": -10.15, "obs_434_mhz": 434.8898, "doppler_144_khz": -3.38, "obs_144_mhz": 144.8966} - ], - 85: [ - {"time_sec": -180, "velocity_kms": -7.15, "doppler_434_khz": 10.37, "obs_434_mhz": 434.9104, "doppler_144_khz": 3.46, "obs_144_mhz": 144.9035}, - {"time_sec": -170, "velocity_kms": -7.12, "doppler_434_khz": 10.32, "obs_434_mhz": 434.9103, "doppler_144_khz": 3.44, "obs_144_mhz": 144.9034}, - {"time_sec": -160, "velocity_kms": -7.08, "doppler_434_khz": 10.28, "obs_434_mhz": 434.9103, "doppler_144_khz": 3.42, "obs_144_mhz": 144.9034}, - {"time_sec": -150, "velocity_kms": -7.05, "doppler_434_khz": 10.23, "obs_434_mhz": 434.9102, "doppler_144_khz": 3.41, "obs_144_mhz": 144.9034}, - {"time_sec": -140, "velocity_kms": -6.99, "doppler_434_khz": 10.15, "obs_434_mhz": 434.9101, "doppler_144_khz": 3.38, "obs_144_mhz": 144.9034}, - {"time_sec": -130, "velocity_kms": -6.94, "doppler_434_khz": 10.06, "obs_434_mhz": 434.9101, "doppler_144_khz": 3.35, "obs_144_mhz": 144.9034}, - {"time_sec": -120, "velocity_kms": -6.88, "doppler_434_khz": 9.98, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.33, "obs_144_mhz": 144.9033}, - {"time_sec": -110, "velocity_kms": -6.75, "doppler_434_khz": 9.80, "obs_434_mhz": 434.9098, "doppler_144_khz": 3.26, "obs_144_mhz": 144.9033}, - {"time_sec": -100, "velocity_kms": -6.63, "doppler_434_khz": 9.61, "obs_434_mhz": 434.9096, "doppler_144_khz": 3.20, "obs_144_mhz": 144.9032}, - {"time_sec": -90, "velocity_kms": -6.50, "doppler_434_khz": 9.43, "obs_434_mhz": 434.9094, "doppler_144_khz": 3.14, "obs_144_mhz": 144.9031}, - {"time_sec": -80, "velocity_kms": -6.23, "doppler_434_khz": 9.04, "obs_434_mhz": 434.9090, "doppler_144_khz": 3.01, "obs_144_mhz": 144.9030}, - {"time_sec": -70, "velocity_kms": -5.97, "doppler_434_khz": 8.66, "obs_434_mhz": 434.9087, "doppler_144_khz": 2.88, "obs_144_mhz": 144.9029}, - {"time_sec": -60, "velocity_kms": -5.70, "doppler_434_khz": 8.27, "obs_434_mhz": 434.9083, "doppler_144_khz": 2.76, "obs_144_mhz": 144.9028}, - {"time_sec": -50, "velocity_kms": -5.10, "doppler_434_khz": 7.40, "obs_434_mhz": 434.9074, "doppler_144_khz": 2.47, "obs_144_mhz": 144.9025}, - {"time_sec": -40, "velocity_kms": -4.50, "doppler_434_khz": 6.53, "obs_434_mhz": 434.9065, "doppler_144_khz": 2.18, "obs_144_mhz": 144.9022}, - {"time_sec": -30, "velocity_kms": -3.90, "doppler_434_khz": 5.66, "obs_434_mhz": 434.9057, "doppler_144_khz": 1.89, "obs_144_mhz": 144.9019}, - {"time_sec": -20 ,"velocity_kms": -2.60, "doppler_434_khz": 3.77, "obs_434_mhz": 434.9038, "doppler_144_khz": 1.26, "obs_144_mhz": 144.9013}, - {"time_sec": -10 ,"velocity_kms": -1.30, "doppler_434_khz": 1.89, "obs_434_mhz": 434.9019, "doppler_144_khz": 0.63, "obs_144_mhz": 144.9006}, - {"time_sec": 0 ,"velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, - {"time_sec": 10 ,"velocity_kms": 1.30, "doppler_434_khz": -1.89, "obs_434_mhz": 434.8981, "doppler_144_khz": -0.63, "obs_144_mhz": 144.8994}, - {"time_sec": 20 ,"velocity_kms": 2.60, "doppler_434_khz": -3.77, "obs_434_mhz": 434.8962, "doppler_144_khz": -1.26, "obs_144_mhz": 144.8987}, - {"time_sec": 30 ,"velocity_kms": 3.90, "doppler_434_khz": -5.66, "obs_434_mhz": 434.8943, "doppler_144_khz": -1.89, "obs_144_mhz": 144.8981}, - {"time_sec": 40 ,"velocity_kms": 4.50, "doppler_434_khz": -6.53, "obs_434_mhz": 434.8935, "doppler_144_khz": -2.18, "obs_144_mhz": 144.8978}, - {"time_sec": 50 ,"velocity_kms": 5.10, "doppler_434_khz": -7.40, "obs_434_mhz": 434.8926, "doppler_144_khz": -2.47, "obs_144_mhz": 144.8975}, - {"time_sec": 60 ,"velocity_kms": 5.70, "doppler_434_khz": -8.27, "obs_434_mhz": 434.8917, "doppler_144_khz": -2.76, "obs_144_mhz": 144.8972}, - {"time_sec": 70 ,"velocity_kms": 5.97, "doppler_434_khz": -8.66, "obs_434_mhz": 434.8913, "doppler_144_khz": -2.88, "obs_144_mhz": 144.8971}, - {"time_sec": 80 ,"velocity_kms": 6.23, "doppler_434_khz": -9.04, "obs_434_mhz": 434.8910, "doppler_144_khz": -3.01, "obs_144_mhz": 144.8970}, - {"time_sec": 90 ,"velocity_kms": 6.50, "doppler_434_khz": -9.43, "obs_434_mhz": 434.8906, "doppler_144_khz": -3.14, "obs_144_mhz": 144.8969}, - {"time_sec": 100 ,"velocity_kms": 6.63, "doppler_434_khz": -9.61, "obs_434_mhz": 434.8904, "doppler_144_khz": -3.20, "obs_144_mhz": 144.8968}, - {"time_sec": 110 ,"velocity_kms": 6.75, "doppler_434_khz": -9.80, "obs_434_mhz": 434.8902, "doppler_144_khz": -3.26, "obs_144_mhz": 144.8967}, - {"time_sec": 120 ,"velocity_kms": 6.88, "doppler_434_khz": -9.98, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.33, "obs_144_mhz": 144.8967}, - {"time_sec": 130 ,"velocity_kms": 6.94, "doppler_434_khz": -10.06, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.35, "obs_144_mhz": 144.8966}, - {"time_sec": 140 ,"velocity_kms": 6.99, "doppler_434_khz": -10.15, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.38, "obs_144_mhz": 144.8966}, - {"time_sec": 150 ,"velocity_kms": 7.05, "doppler_434_khz": -10.23, "obs_434_mhz": 434.8898, "doppler_144_khz": -3.41, "obs_144_mhz": 144.8966}, - {"time_sec": 160 ,"velocity_kms": 7.08, "doppler_434_khz": -10.28, "obs_434_mhz": 434.8917, "doppler_144_khz": -3.42, "obs_144_mhz": 144.8966}, - {"time_sec": 170 ,"velocity_kms": 7.12, "doppler_434_khz": -10.32, "obs_434_mhz": 434.8897, "doppler_144_khz": -3.44, "obs_144_mhz": 144.8966}, - {"time_sec": 180 ,"velocity_kms": 7.15, "doppler_434_khz": -10.37, "obs_434_mhz": 434.8896, "doppler_144_khz": -3.46, "obs_144_mhz": 144.8965} - ], - 89: [ - {"time_sec": -180, "velocity_kms": -7.17, "doppler_434_khz": 10.40, "obs_434_mhz": 434.9104, "doppler_144_khz": 3.47, "obs_144_mhz": 144.9035}, - {"time_sec": -170, "velocity_kms": -7.13, "doppler_434_khz": 10.35, "obs_434_mhz": 434.9103, "doppler_144_khz": 3.45, "obs_144_mhz": 144.9034}, - {"time_sec": -160, "velocity_kms": -7.09, "doppler_434_khz": 10.28, "obs_434_mhz": 434.9103, "doppler_144_khz": 3.43, "obs_144_mhz": 144.9034}, - {"time_sec": -150, "velocity_kms": -7.04, "doppler_434_khz": 10.21, "obs_434_mhz": 434.9102, "doppler_144_khz": 3.40, "obs_144_mhz": 144.9034}, - {"time_sec": -140, "velocity_kms": -6.97, "doppler_434_khz": 10.12, "obs_434_mhz": 434.9101, "doppler_144_khz": 3.37, "obs_144_mhz": 144.9034}, - {"time_sec": -130, "velocity_kms": -6.90, "doppler_434_khz": 10.01, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.33, "obs_144_mhz": 144.9033}, - {"time_sec": -120, "velocity_kms": -6.81, "doppler_434_khz": 9.87, "obs_434_mhz": 434.9099, "doppler_144_khz": 3.29, "obs_144_mhz": 144.9033}, - {"time_sec": -110, "velocity_kms": -6.69, "doppler_434_khz": 9.71, "obs_434_mhz": 434.9097, "doppler_144_khz": 3.24, "obs_144_mhz": 144.9032}, - {"time_sec": -100, "velocity_kms": -6.55, "doppler_434_khz": 9.51, "obs_434_mhz": 434.9095, "doppler_144_khz": 3.17, "obs_144_mhz": 144.9032}, - {"time_sec": -90, "velocity_kms": -6.38, "doppler_434_khz": 9.25, "obs_434_mhz": 434.9093, "doppler_144_khz": 3.08, "obs_144_mhz": 144.9031}, - {"time_sec": -80, "velocity_kms": -6.15, "doppler_434_khz": 8.93, "obs_434_mhz": 434.9089, "doppler_144_khz": 2.97, "obs_144_mhz": 144.9030}, - {"time_sec": -70, "velocity_kms": -5.87, "doppler_434_khz": 8.51, "obs_434_mhz": 434.9085, "doppler_144_khz": 2.84, "obs_144_mhz": 144.9028}, - {"time_sec": -60, "velocity_kms": -5.49, "doppler_434_khz": 7.97, "obs_434_mhz": 434.9080, "doppler_144_khz": 2.66, "obs_144_mhz": 144.9027}, - {"time_sec": -50, "velocity_kms": -5.01, "doppler_434_khz": 7.26, "obs_434_mhz": 434.9073, "doppler_144_khz": 2.42, "obs_144_mhz": 144.9024}, - {"time_sec": -40, "velocity_kms": -4.37, "doppler_434_khz": 6.34, "obs_434_mhz": 434.9063, "doppler_144_khz": 2.11, "obs_144_mhz": 144.9021}, - {"time_sec": -30, "velocity_kms": -3.55, "doppler_434_khz": 5.15, "obs_434_mhz": 434.9051, "doppler_144_khz": 1.72, "obs_144_mhz": 144.9017}, - {"time_sec": -20, "velocity_kms": -2.53, "doppler_434_khz": 3.67, "obs_434_mhz": 434.9037, "doppler_144_khz": 1.22, "obs_144_mhz": 144.9012}, - {"time_sec": -10, "velocity_kms": -1.32, "doppler_434_khz": 1.92, "obs_434_mhz": 434.9019, "doppler_144_khz": 0.64, "obs_144_mhz": 144.9006}, - {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": 0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": 0.00, "obs_144_mhz": 144.9000}, - {"time_sec": 10, "velocity_kms": 1.32, "doppler_434_khz": -1.92, "obs_434_mhz": 434.8981, "doppler_144_khz": -0.64, "obs_144_mhz": 144.8994}, - {"time_sec": 20, "velocity_kms": 2.53, "doppler_434_khz": -3.67, "obs_434_mhz": 434.8963, "doppler_144_khz": -1.22, "obs_144_mhz": 144.8988}, - {"time_sec": 30, "velocity_kms": 3.55, "doppler_434_khz": -5.15, "obs_434_mhz": 434.8949, "doppler_144_khz": -1.72, "obs_144_mhz": 144.8983}, - {"time_sec": 40, "velocity_kms": 4.37, "doppler_434_khz": -6.34, "obs_434_mhz": 434.8937, "doppler_144_khz": -2.11, "obs_144_mhz": 144.8979}, - {"time_sec": 50, "velocity_kms": 5.01, "doppler_434_khz": -7.26, "obs_434_mhz": 434.8927, "doppler_144_khz": -2.42, "obs_144_mhz": 144.8976}, - {"time_sec": 60, "velocity_kms": 5.49, "doppler_434_khz": -7.97, "obs_434_mhz": 434.8920, "doppler_144_khz": -2.66, "obs_144_mhz": 144.8973}, - {"time_sec": 70, "velocity_kms": 5.87, "doppler_434_khz": -8.51, "obs_434_mhz": 434.8915, "doppler_144_khz": -2.84, "obs_144_mhz": 144.8972}, - {"time_sec": 80, "velocity_kms": 6.15, "doppler_434_khz": -8.93, "obs_434_mhz": 434.8911, "doppler_144_khz": -2.97, "obs_144_mhz": 144.8970}, - {"time_sec": 90, "velocity_kms": 6.38, "doppler_434_khz": -9.25, "obs_434_mhz": 434.8907, "doppler_144_khz": -3.08, "obs_144_mhz": 144.8969}, - {"time_sec": 100, "velocity_kms": 6.55, "doppler_434_khz": -9.51, "obs_434_mhz": 434.8905, "doppler_144_khz": -3.17, "obs_144_mhz": 144.8968}, - {"time_sec": 110, "velocity_kms": 6.69, "doppler_434_khz": -9.71, "obs_434_mhz": 434.8903, "doppler_144_khz": -3.24, "obs_144_mhz": 144.8968}, - {"time_sec": 120, "velocity_kms": 6.81, "doppler_434_khz": -9.87, "obs_434_mhz": 434.8901, "doppler_144_khz": -3.29, "obs_144_mhz": 144.8967}, - {"time_sec": 130, "velocity_kms": 6.90, "doppler_434_khz": -10.01, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.33, "obs_144_mhz": 144.8967}, - {"time_sec": 140, "velocity_kms": 6.97, "doppler_434_khz": -10.12, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.37, "obs_144_mhz": 144.8966}, - {"time_sec": 150, "velocity_kms": 7.04, "doppler_434_khz": -10.21, "obs_434_mhz": 434.8898, "doppler_144_khz": -3.40, "obs_144_mhz": 144.8966}, - {"time_sec": 160, "velocity_kms": 7.09, "doppler_434_khz": -10.28, "obs_434_mhz": 434.8897, "doppler_144_khz": -3.43, "obs_144_mhz": 144.8966}, - {"time_sec": 170, "velocity_kms": 7.13, "doppler_434_khz": -10.35, "obs_434_mhz": 434.8897, "doppler_144_khz": -3.45, "obs_144_mhz": 144.8966}, - {"time_sec": 180, "velocity_kms": 7.17, "doppler_434_khz": -10.40, "obs_434_mhz": 434.8896, "doppler_144_khz": -3.47, "obs_144_mhz": 144.8965} + 88: [ + {"time_sec": 1, "doppler_434_khz": 9987, "doppler_144_khz": 3329}, + {"time_sec": 2, "doppler_434_khz": 9987, "doppler_144_khz": 3329}, + {"time_sec": 3, "doppler_434_khz": 9987, "doppler_144_khz": 3329}, + {"time_sec": 4, "doppler_434_khz": 9987, "doppler_144_khz": 3329}, + {"time_sec": 5, "doppler_434_khz": 9987, "doppler_144_khz": 3329}, + {"time_sec": 6, "doppler_434_khz": 9987, "doppler_144_khz": 3329}, + {"time_sec": 7, "doppler_434_khz": 9987, "doppler_144_khz": 3329}, + {"time_sec": 8, "doppler_434_khz": 9987, "doppler_144_khz": 3329}, + {"time_sec": 9, "doppler_434_khz": 9987, "doppler_144_khz": 3329}, + {"time_sec": 10, "doppler_434_khz": 9987, "doppler_144_khz": 3329}, + {"time_sec": 11, "doppler_434_khz": 9987, "doppler_144_khz": 3329}, + {"time_sec": 12, "doppler_434_khz": 9986, "doppler_144_khz": 3329}, + {"time_sec": 13, "doppler_434_khz": 9986, "doppler_144_khz": 3329}, + {"time_sec": 14, "doppler_434_khz": 9986, "doppler_144_khz": 3329}, + {"time_sec": 15, "doppler_434_khz": 9986, "doppler_144_khz": 3329}, + {"time_sec": 16, "doppler_434_khz": 9986, "doppler_144_khz": 3329}, + {"time_sec": 17, "doppler_434_khz": 9985, "doppler_144_khz": 3328}, + {"time_sec": 18, "doppler_434_khz": 9985, "doppler_144_khz": 3328}, + {"time_sec": 19, "doppler_434_khz": 9985, "doppler_144_khz": 3328}, + {"time_sec": 20, "doppler_434_khz": 9985, "doppler_144_khz": 3328}, + {"time_sec": 21, "doppler_434_khz": 9984, "doppler_144_khz": 3328}, + {"time_sec": 22, "doppler_434_khz": 9984, "doppler_144_khz": 3328}, + {"time_sec": 23, "doppler_434_khz": 9984, "doppler_144_khz": 3328}, + {"time_sec": 24, "doppler_434_khz": 9984, "doppler_144_khz": 3328}, + {"time_sec": 25, "doppler_434_khz": 9983, "doppler_144_khz": 3328}, + {"time_sec": 26, "doppler_434_khz": 9983, "doppler_144_khz": 3328}, + {"time_sec": 27, "doppler_434_khz": 9983, "doppler_144_khz": 3328}, + {"time_sec": 28, "doppler_434_khz": 9982, "doppler_144_khz": 3327}, + {"time_sec": 29, "doppler_434_khz": 9982, "doppler_144_khz": 3327}, + {"time_sec": 30, "doppler_434_khz": 9982, "doppler_144_khz": 3327}, + {"time_sec": 31, "doppler_434_khz": 9981, "doppler_144_khz": 3327}, + {"time_sec": 32, "doppler_434_khz": 9981, "doppler_144_khz": 3327}, + {"time_sec": 33, "doppler_434_khz": 9980, "doppler_144_khz": 3327}, + {"time_sec": 34, "doppler_434_khz": 9980, "doppler_144_khz": 3327}, + {"time_sec": 35, "doppler_434_khz": 9979, "doppler_144_khz": 3326}, + {"time_sec": 36, "doppler_434_khz": 9979, "doppler_144_khz": 3326}, + {"time_sec": 37, "doppler_434_khz": 9978, "doppler_144_khz": 3326}, + {"time_sec": 38, "doppler_434_khz": 9978, "doppler_144_khz": 3326}, + {"time_sec": 39, "doppler_434_khz": 9977, "doppler_144_khz": 3326}, + {"time_sec": 40, "doppler_434_khz": 9977, "doppler_144_khz": 3326}, + {"time_sec": 41, "doppler_434_khz": 9976, "doppler_144_khz": 3325}, + {"time_sec": 42, "doppler_434_khz": 9975, "doppler_144_khz": 3325}, + {"time_sec": 43, "doppler_434_khz": 9975, "doppler_144_khz": 3325}, + {"time_sec": 44, "doppler_434_khz": 9974, "doppler_144_khz": 3325}, + {"time_sec": 45, "doppler_434_khz": 9973, "doppler_144_khz": 3324}, + {"time_sec": 46, "doppler_434_khz": 9973, "doppler_144_khz": 3324}, + {"time_sec": 47, "doppler_434_khz": 9972, "doppler_144_khz": 3324}, + {"time_sec": 48, "doppler_434_khz": 9972, "doppler_144_khz": 3324}, + {"time_sec": 49, "doppler_434_khz": 9971, "doppler_144_khz": 3324}, + {"time_sec": 50, "doppler_434_khz": 9970, "doppler_144_khz": 3323}, + {"time_sec": 51, "doppler_434_khz": 9969, "doppler_144_khz": 3323}, + {"time_sec": 52, "doppler_434_khz": 9969, "doppler_144_khz": 3323}, + {"time_sec": 53, "doppler_434_khz": 9968, "doppler_144_khz": 3323}, + {"time_sec": 54, "doppler_434_khz": 9967, "doppler_144_khz": 3322}, + {"time_sec": 55, "doppler_434_khz": 9966, "doppler_144_khz": 3322}, + {"time_sec": 56, "doppler_434_khz": 9966, "doppler_144_khz": 3322}, + {"time_sec": 57, "doppler_434_khz": 9964, "doppler_144_khz": 3321}, + {"time_sec": 58, "doppler_434_khz": 9963, "doppler_144_khz": 3321}, + {"time_sec": 59, "doppler_434_khz": 9963, "doppler_144_khz": 3321}, + {"time_sec": 60, "doppler_434_khz": 9962, "doppler_144_khz": 3321}, + {"time_sec": 61, "doppler_434_khz": 9961, "doppler_144_khz": 3320}, + {"time_sec": 62, "doppler_434_khz": 9959, "doppler_144_khz": 3320}, + {"time_sec": 63, "doppler_434_khz": 9959, "doppler_144_khz": 3320}, + {"time_sec": 64, "doppler_434_khz": 9958, "doppler_144_khz": 3319}, + {"time_sec": 65, "doppler_434_khz": 9957, "doppler_144_khz": 3319}, + {"time_sec": 66, "doppler_434_khz": 9955, "doppler_144_khz": 3318}, + {"time_sec": 67, "doppler_434_khz": 9954, "doppler_144_khz": 3318}, + {"time_sec": 68, "doppler_434_khz": 9953, "doppler_144_khz": 3318}, + {"time_sec": 69, "doppler_434_khz": 9952, "doppler_144_khz": 3317}, + {"time_sec": 70, "doppler_434_khz": 9951, "doppler_144_khz": 3317}, + {"time_sec": 71, "doppler_434_khz": 9950, "doppler_144_khz": 3317}, + {"time_sec": 72, "doppler_434_khz": 9949, "doppler_144_khz": 3316}, + {"time_sec": 73, "doppler_434_khz": 9948, "doppler_144_khz": 3316}, + {"time_sec": 74, "doppler_434_khz": 9946, "doppler_144_khz": 3315}, + {"time_sec": 75, "doppler_434_khz": 9945, "doppler_144_khz": 3315}, + {"time_sec": 76, "doppler_434_khz": 9943, "doppler_144_khz": 3314}, + {"time_sec": 77, "doppler_434_khz": 9942, "doppler_144_khz": 3314}, + {"time_sec": 78, "doppler_434_khz": 9941, "doppler_144_khz": 3314}, + {"time_sec": 79, "doppler_434_khz": 9939, "doppler_144_khz": 3313}, + {"time_sec": 80, "doppler_434_khz": 9938, "doppler_144_khz": 3313}, + {"time_sec": 81, "doppler_434_khz": 9937, "doppler_144_khz": 3312}, + {"time_sec": 82, "doppler_434_khz": 9936, "doppler_144_khz": 3312}, + {"time_sec": 83, "doppler_434_khz": 9933, "doppler_144_khz": 3311}, + {"time_sec": 84, "doppler_434_khz": 9932, "doppler_144_khz": 3311}, + {"time_sec": 85, "doppler_434_khz": 9931, "doppler_144_khz": 3310}, + {"time_sec": 86, "doppler_434_khz": 9929, "doppler_144_khz": 3310}, + {"time_sec": 87, "doppler_434_khz": 9927, "doppler_144_khz": 3309}, + {"time_sec": 88, "doppler_434_khz": 9925, "doppler_144_khz": 3308}, + {"time_sec": 89, "doppler_434_khz": 9924, "doppler_144_khz": 3308}, + {"time_sec": 90, "doppler_434_khz": 9923, "doppler_144_khz": 3308}, + {"time_sec": 91, "doppler_434_khz": 9920, "doppler_144_khz": 3307}, + {"time_sec": 92, "doppler_434_khz": 9918, "doppler_144_khz": 3306}, + {"time_sec": 93, "doppler_434_khz": 9917, "doppler_144_khz": 3306}, + {"time_sec": 94, "doppler_434_khz": 9915, "doppler_144_khz": 3305}, + {"time_sec": 95, "doppler_434_khz": 9912, "doppler_144_khz": 3304}, + {"time_sec": 96, "doppler_434_khz": 9911, "doppler_144_khz": 3304}, + {"time_sec": 97, "doppler_434_khz": 9909, "doppler_144_khz": 3303}, + {"time_sec": 98, "doppler_434_khz": 9907, "doppler_144_khz": 3302}, + {"time_sec": 99, "doppler_434_khz": 9906, "doppler_144_khz": 3302}, + {"time_sec": 100, "doppler_434_khz": 9903, "doppler_144_khz": 3301}, + {"time_sec": 101, "doppler_434_khz": 9901, "doppler_144_khz": 3300}, + {"time_sec": 102, "doppler_434_khz": 9899, "doppler_144_khz": 3300}, + {"time_sec": 103, "doppler_434_khz": 9897, "doppler_144_khz": 3299}, + {"time_sec": 104, "doppler_434_khz": 9894, "doppler_144_khz": 3298}, + {"time_sec": 105, "doppler_434_khz": 9892, "doppler_144_khz": 3297}, + {"time_sec": 106, "doppler_434_khz": 9890, "doppler_144_khz": 3297}, + {"time_sec": 107, "doppler_434_khz": 9888, "doppler_144_khz": 3296}, + {"time_sec": 108, "doppler_434_khz": 9884, "doppler_144_khz": 3295}, + {"time_sec": 109, "doppler_434_khz": 9882, "doppler_144_khz": 3294}, + {"time_sec": 110, "doppler_434_khz": 9880, "doppler_144_khz": 3293}, + {"time_sec": 111, "doppler_434_khz": 9878, "doppler_144_khz": 3293}, + {"time_sec": 112, "doppler_434_khz": 9874, "doppler_144_khz": 3291}, + {"time_sec": 113, "doppler_434_khz": 9872, "doppler_144_khz": 3291}, + {"time_sec": 114, "doppler_434_khz": 9870, "doppler_144_khz": 3290}, + {"time_sec": 115, "doppler_434_khz": 9868, "doppler_144_khz": 3289}, + {"time_sec": 116, "doppler_434_khz": 9864, "doppler_144_khz": 3288}, + {"time_sec": 117, "doppler_434_khz": 9861, "doppler_144_khz": 3287}, + {"time_sec": 118, "doppler_434_khz": 9859, "doppler_144_khz": 3286}, + {"time_sec": 119, "doppler_434_khz": 9857, "doppler_144_khz": 3286}, + {"time_sec": 120, "doppler_434_khz": 9852, "doppler_144_khz": 3284}, + {"time_sec": 121, "doppler_434_khz": 9850, "doppler_144_khz": 3283}, + {"time_sec": 122, "doppler_434_khz": 9847, "doppler_144_khz": 3282}, + {"time_sec": 123, "doppler_434_khz": 9845, "doppler_144_khz": 3282}, + {"time_sec": 124, "doppler_434_khz": 9842, "doppler_144_khz": 3281}, + {"time_sec": 125, "doppler_434_khz": 9837, "doppler_144_khz": 3279}, + {"time_sec": 126, "doppler_434_khz": 9834, "doppler_144_khz": 3278}, + {"time_sec": 127, "doppler_434_khz": 9832, "doppler_144_khz": 3277}, + {"time_sec": 128, "doppler_434_khz": 9829, "doppler_144_khz": 3276}, + {"time_sec": 129, "doppler_434_khz": 9823, "doppler_144_khz": 3274}, + {"time_sec": 130, "doppler_434_khz": 9821, "doppler_144_khz": 3274}, + {"time_sec": 131, "doppler_434_khz": 9818, "doppler_144_khz": 3273}, + {"time_sec": 132, "doppler_434_khz": 9815, "doppler_144_khz": 3272}, + {"time_sec": 133, "doppler_434_khz": 9812, "doppler_144_khz": 3271}, + {"time_sec": 134, "doppler_434_khz": 9806, "doppler_144_khz": 3269}, + {"time_sec": 135, "doppler_434_khz": 9803, "doppler_144_khz": 3268}, + {"time_sec": 136, "doppler_434_khz": 9800, "doppler_144_khz": 3267}, + {"time_sec": 137, "doppler_434_khz": 9796, "doppler_144_khz": 3265}, + {"time_sec": 138, "doppler_434_khz": 9790, "doppler_144_khz": 3263}, + {"time_sec": 139, "doppler_434_khz": 9787, "doppler_144_khz": 3262}, + {"time_sec": 140, "doppler_434_khz": 9783, "doppler_144_khz": 3261}, + {"time_sec": 141, "doppler_434_khz": 9780, "doppler_144_khz": 3260}, + {"time_sec": 142, "doppler_434_khz": 9773, "doppler_144_khz": 3258}, + {"time_sec": 143, "doppler_434_khz": 9769, "doppler_144_khz": 3256}, + {"time_sec": 144, "doppler_434_khz": 9766, "doppler_144_khz": 3255}, + {"time_sec": 145, "doppler_434_khz": 9762, "doppler_144_khz": 3254}, + {"time_sec": 146, "doppler_434_khz": 9759, "doppler_144_khz": 3253}, + {"time_sec": 147, "doppler_434_khz": 9751, "doppler_144_khz": 3250}, + {"time_sec": 148, "doppler_434_khz": 9747, "doppler_144_khz": 3249}, + {"time_sec": 149, "doppler_434_khz": 9743, "doppler_144_khz": 3248}, + {"time_sec": 150, "doppler_434_khz": 9739, "doppler_144_khz": 3246}, + {"time_sec": 151, "doppler_434_khz": 9731, "doppler_144_khz": 3244}, + {"time_sec": 152, "doppler_434_khz": 9727, "doppler_144_khz": 3242}, + {"time_sec": 153, "doppler_434_khz": 9723, "doppler_144_khz": 3241}, + {"time_sec": 154, "doppler_434_khz": 9719, "doppler_144_khz": 3240}, + {"time_sec": 155, "doppler_434_khz": 9715, "doppler_144_khz": 3238}, + {"time_sec": 156, "doppler_434_khz": 9706, "doppler_144_khz": 3235}, + {"time_sec": 157, "doppler_434_khz": 9701, "doppler_144_khz": 3234}, + {"time_sec": 158, "doppler_434_khz": 9697, "doppler_144_khz": 3232}, + {"time_sec": 159, "doppler_434_khz": 9692, "doppler_144_khz": 3231}, + {"time_sec": 160, "doppler_434_khz": 9683, "doppler_144_khz": 3228}, + {"time_sec": 161, "doppler_434_khz": 9678, "doppler_144_khz": 3226}, + {"time_sec": 162, "doppler_434_khz": 9673, "doppler_144_khz": 3224}, + {"time_sec": 163, "doppler_434_khz": 9668, "doppler_144_khz": 3223}, + {"time_sec": 164, "doppler_434_khz": 9658, "doppler_144_khz": 3219}, + {"time_sec": 165, "doppler_434_khz": 9653, "doppler_144_khz": 3218}, + {"time_sec": 166, "doppler_434_khz": 9647, "doppler_144_khz": 3216}, + {"time_sec": 167, "doppler_434_khz": 9642, "doppler_144_khz": 3214}, + {"time_sec": 168, "doppler_434_khz": 9637, "doppler_144_khz": 3212}, + {"time_sec": 169, "doppler_434_khz": 9626, "doppler_144_khz": 3209}, + {"time_sec": 170, "doppler_434_khz": 9620, "doppler_144_khz": 3207}, + {"time_sec": 171, "doppler_434_khz": 9614, "doppler_144_khz": 3205}, + {"time_sec": 172, "doppler_434_khz": 9608, "doppler_144_khz": 3203}, + {"time_sec": 173, "doppler_434_khz": 9597, "doppler_144_khz": 3199}, + {"time_sec": 174, "doppler_434_khz": 9590, "doppler_144_khz": 3197}, + {"time_sec": 175, "doppler_434_khz": 9584, "doppler_144_khz": 3195}, + {"time_sec": 176, "doppler_434_khz": 9578, "doppler_144_khz": 3193}, + {"time_sec": 177, "doppler_434_khz": 9572, "doppler_144_khz": 3191}, + {"time_sec": 178, "doppler_434_khz": 9559, "doppler_144_khz": 3186}, + {"time_sec": 179, "doppler_434_khz": 9552, "doppler_144_khz": 3184}, + {"time_sec": 180, "doppler_434_khz": 9545, "doppler_144_khz": 3182}, + {"time_sec": 181, "doppler_434_khz": 9539, "doppler_144_khz": 3180}, + {"time_sec": 182, "doppler_434_khz": 9525, "doppler_144_khz": 3175}, + {"time_sec": 183, "doppler_434_khz": 9518, "doppler_144_khz": 3173}, + {"time_sec": 184, "doppler_434_khz": 9510, "doppler_144_khz": 3170}, + {"time_sec": 185, "doppler_434_khz": 9503, "doppler_144_khz": 3168}, + {"time_sec": 186, "doppler_434_khz": 9488, "doppler_144_khz": 3163}, + {"time_sec": 187, "doppler_434_khz": 9480, "doppler_144_khz": 3160}, + {"time_sec": 188, "doppler_434_khz": 9472, "doppler_144_khz": 3157}, + {"time_sec": 189, "doppler_434_khz": 9464, "doppler_144_khz": 3155}, + {"time_sec": 190, "doppler_434_khz": 9456, "doppler_144_khz": 3152}, + {"time_sec": 191, "doppler_434_khz": 9440, "doppler_144_khz": 3147}, + {"time_sec": 192, "doppler_434_khz": 9432, "doppler_144_khz": 3144}, + {"time_sec": 193, "doppler_434_khz": 9423, "doppler_144_khz": 3141}, + {"time_sec": 194, "doppler_434_khz": 9414, "doppler_144_khz": 3138}, + {"time_sec": 195, "doppler_434_khz": 9396, "doppler_144_khz": 3132}, + {"time_sec": 196, "doppler_434_khz": 9387, "doppler_144_khz": 3129}, + {"time_sec": 197, "doppler_434_khz": 9378, "doppler_144_khz": 3126}, + {"time_sec": 198, "doppler_434_khz": 9369, "doppler_144_khz": 3123}, + {"time_sec": 199, "doppler_434_khz": 9349, "doppler_144_khz": 3116}, + {"time_sec": 200, "doppler_434_khz": 9339, "doppler_144_khz": 3113}, + {"time_sec": 201, "doppler_434_khz": 9329, "doppler_144_khz": 3110}, + {"time_sec": 202, "doppler_434_khz": 9318, "doppler_144_khz": 3106}, + {"time_sec": 203, "doppler_434_khz": 9308, "doppler_144_khz": 3103}, + {"time_sec": 204, "doppler_434_khz": 9287, "doppler_144_khz": 3096}, + {"time_sec": 205, "doppler_434_khz": 9276, "doppler_144_khz": 3092}, + {"time_sec": 206, "doppler_434_khz": 9265, "doppler_144_khz": 3088}, + {"time_sec": 207, "doppler_434_khz": 9254, "doppler_144_khz": 3085}, + {"time_sec": 208, "doppler_434_khz": 9230, "doppler_144_khz": 3077}, + {"time_sec": 209, "doppler_434_khz": 9218, "doppler_144_khz": 3073}, + {"time_sec": 210, "doppler_434_khz": 9206, "doppler_144_khz": 3069}, + {"time_sec": 211, "doppler_434_khz": 9194, "doppler_144_khz": 3065}, + {"time_sec": 212, "doppler_434_khz": 9182, "doppler_144_khz": 3061}, + {"time_sec": 213, "doppler_434_khz": 9156, "doppler_144_khz": 3052}, + {"time_sec": 214, "doppler_434_khz": 9143, "doppler_144_khz": 3048}, + {"time_sec": 215, "doppler_434_khz": 9130, "doppler_144_khz": 3043}, + {"time_sec": 216, "doppler_434_khz": 9116, "doppler_144_khz": 3039}, + {"time_sec": 217, "doppler_434_khz": 9088, "doppler_144_khz": 3029}, + {"time_sec": 218, "doppler_434_khz": 9074, "doppler_144_khz": 3025}, + {"time_sec": 219, "doppler_434_khz": 9060, "doppler_144_khz": 3020}, + {"time_sec": 220, "doppler_434_khz": 9045, "doppler_144_khz": 3015}, + {"time_sec": 221, "doppler_434_khz": 9015, "doppler_144_khz": 3005}, + {"time_sec": 222, "doppler_434_khz": 8999, "doppler_144_khz": 3000}, + {"time_sec": 223, "doppler_434_khz": 8983, "doppler_144_khz": 2994}, + {"time_sec": 224, "doppler_434_khz": 8967, "doppler_144_khz": 2989}, + {"time_sec": 225, "doppler_434_khz": 8951, "doppler_144_khz": 2984}, + {"time_sec": 226, "doppler_434_khz": 8917, "doppler_144_khz": 2972}, + {"time_sec": 227, "doppler_434_khz": 8900, "doppler_144_khz": 2967}, + {"time_sec": 228, "doppler_434_khz": 8882, "doppler_144_khz": 2961}, + {"time_sec": 229, "doppler_434_khz": 8865, "doppler_144_khz": 2955}, + {"time_sec": 230, "doppler_434_khz": 8828, "doppler_144_khz": 2943}, + {"time_sec": 231, "doppler_434_khz": 8809, "doppler_144_khz": 2936}, + {"time_sec": 232, "doppler_434_khz": 8790, "doppler_144_khz": 2930}, + {"time_sec": 233, "doppler_434_khz": 8770, "doppler_144_khz": 2923}, + {"time_sec": 234, "doppler_434_khz": 8730, "doppler_144_khz": 2910}, + {"time_sec": 235, "doppler_434_khz": 8709, "doppler_144_khz": 2903}, + {"time_sec": 236, "doppler_434_khz": 8688, "doppler_144_khz": 2896}, + {"time_sec": 237, "doppler_434_khz": 8665, "doppler_144_khz": 2888}, + {"time_sec": 238, "doppler_434_khz": 8643, "doppler_144_khz": 2881}, + {"time_sec": 239, "doppler_434_khz": 8597, "doppler_144_khz": 2866}, + {"time_sec": 240, "doppler_434_khz": 8574, "doppler_144_khz": 2858}, + {"time_sec": 241, "doppler_434_khz": 8550, "doppler_144_khz": 2850}, + {"time_sec": 242, "doppler_434_khz": 8526, "doppler_144_khz": 2842}, + {"time_sec": 243, "doppler_434_khz": 8476, "doppler_144_khz": 2825}, + {"time_sec": 244, "doppler_434_khz": 8450, "doppler_144_khz": 2817}, + {"time_sec": 245, "doppler_434_khz": 8423, "doppler_144_khz": 2808}, + {"time_sec": 246, "doppler_434_khz": 8397, "doppler_144_khz": 2799}, + {"time_sec": 247, "doppler_434_khz": 8370, "doppler_144_khz": 2790}, + {"time_sec": 248, "doppler_434_khz": 8314, "doppler_144_khz": 2771}, + {"time_sec": 249, "doppler_434_khz": 8286, "doppler_144_khz": 2762}, + {"time_sec": 250, "doppler_434_khz": 8256, "doppler_144_khz": 2752}, + {"time_sec": 251, "doppler_434_khz": 8226, "doppler_144_khz": 2742}, + {"time_sec": 252, "doppler_434_khz": 8164, "doppler_144_khz": 2721}, + {"time_sec": 253, "doppler_434_khz": 8133, "doppler_144_khz": 2711}, + {"time_sec": 254, "doppler_434_khz": 8101, "doppler_144_khz": 2700}, + {"time_sec": 255, "doppler_434_khz": 8068, "doppler_144_khz": 2689}, + {"time_sec": 256, "doppler_434_khz": 8034, "doppler_144_khz": 2678}, + {"time_sec": 257, "doppler_434_khz": 7965, "doppler_144_khz": 2655}, + {"time_sec": 258, "doppler_434_khz": 7929, "doppler_144_khz": 2643}, + {"time_sec": 259, "doppler_434_khz": 7893, "doppler_144_khz": 2631}, + {"time_sec": 260, "doppler_434_khz": 7856, "doppler_144_khz": 2619}, + {"time_sec": 261, "doppler_434_khz": 7779, "doppler_144_khz": 2593}, + {"time_sec": 262, "doppler_434_khz": 7740, "doppler_144_khz": 2580}, + {"time_sec": 263, "doppler_434_khz": 7699, "doppler_144_khz": 2566}, + {"time_sec": 264, "doppler_434_khz": 7658, "doppler_144_khz": 2553}, + {"time_sec": 265, "doppler_434_khz": 7574, "doppler_144_khz": 2525}, + {"time_sec": 266, "doppler_434_khz": 7530, "doppler_144_khz": 2510}, + {"time_sec": 267, "doppler_434_khz": 7485, "doppler_144_khz": 2495}, + {"time_sec": 268, "doppler_434_khz": 7440, "doppler_144_khz": 2480}, + {"time_sec": 269, "doppler_434_khz": 7394, "doppler_144_khz": 2465}, + {"time_sec": 270, "doppler_434_khz": 7298, "doppler_144_khz": 2433}, + {"time_sec": 271, "doppler_434_khz": 7248, "doppler_144_khz": 2416}, + {"time_sec": 272, "doppler_434_khz": 7198, "doppler_144_khz": 2399}, + {"time_sec": 273, "doppler_434_khz": 7143, "doppler_144_khz": 2381}, + {"time_sec": 274, "doppler_434_khz": 7037, "doppler_144_khz": 2346}, + {"time_sec": 275, "doppler_434_khz": 6982, "doppler_144_khz": 2327}, + {"time_sec": 276, "doppler_434_khz": 6927, "doppler_144_khz": 2309}, + {"time_sec": 277, "doppler_434_khz": 6870, "doppler_144_khz": 2290}, + {"time_sec": 278, "doppler_434_khz": 6812, "doppler_144_khz": 2271}, + {"time_sec": 279, "doppler_434_khz": 6693, "doppler_144_khz": 2231}, + {"time_sec": 280, "doppler_434_khz": 6631, "doppler_144_khz": 2210}, + {"time_sec": 281, "doppler_434_khz": 6568, "doppler_144_khz": 2189}, + {"time_sec": 282, "doppler_434_khz": 6504, "doppler_144_khz": 2168}, + {"time_sec": 283, "doppler_434_khz": 6373, "doppler_144_khz": 2124}, + {"time_sec": 284, "doppler_434_khz": 6305, "doppler_144_khz": 2102}, + {"time_sec": 285, "doppler_434_khz": 6235, "doppler_144_khz": 2078}, + {"time_sec": 286, "doppler_434_khz": 6165, "doppler_144_khz": 2055}, + {"time_sec": 287, "doppler_434_khz": 6020, "doppler_144_khz": 2007}, + {"time_sec": 288, "doppler_434_khz": 5945, "doppler_144_khz": 1982}, + {"time_sec": 289, "doppler_434_khz": 5868, "doppler_144_khz": 1956}, + {"time_sec": 290, "doppler_434_khz": 5791, "doppler_144_khz": 1930}, + {"time_sec": 291, "doppler_434_khz": 5711, "doppler_144_khz": 1904}, + {"time_sec": 292, "doppler_434_khz": 5548, "doppler_144_khz": 1849}, + {"time_sec": 293, "doppler_434_khz": 5464, "doppler_144_khz": 1821}, + {"time_sec": 294, "doppler_434_khz": 5379, "doppler_144_khz": 1793}, + {"time_sec": 295, "doppler_434_khz": 5292, "doppler_144_khz": 1764}, + {"time_sec": 296, "doppler_434_khz": 5113, "doppler_144_khz": 1704}, + {"time_sec": 297, "doppler_434_khz": 5022, "doppler_144_khz": 1674}, + {"time_sec": 298, "doppler_434_khz": 4928, "doppler_144_khz": 1643}, + {"time_sec": 299, "doppler_434_khz": 4834, "doppler_144_khz": 1611}, + {"time_sec": 300, "doppler_434_khz": 4640, "doppler_144_khz": 1547}, + {"time_sec": 301, "doppler_434_khz": 4540, "doppler_144_khz": 1513}, + {"time_sec": 302, "doppler_434_khz": 4438, "doppler_144_khz": 1479}, + {"time_sec": 303, "doppler_434_khz": 4334, "doppler_144_khz": 1445}, + {"time_sec": 304, "doppler_434_khz": 4229, "doppler_144_khz": 1410}, + {"time_sec": 305, "doppler_434_khz": 4016, "doppler_144_khz": 1339}, + {"time_sec": 306, "doppler_434_khz": 3907, "doppler_144_khz": 1302}, + {"time_sec": 307, "doppler_434_khz": 3796, "doppler_144_khz": 1265}, + {"time_sec": 308, "doppler_434_khz": 3684, "doppler_144_khz": 1228}, + {"time_sec": 309, "doppler_434_khz": 3448, "doppler_144_khz": 1149}, + {"time_sec": 310, "doppler_434_khz": 3330, "doppler_144_khz": 1110}, + {"time_sec": 311, "doppler_434_khz": 3212, "doppler_144_khz": 1071}, + {"time_sec": 312, "doppler_434_khz": 3091, "doppler_144_khz": 1030}, + {"time_sec": 313, "doppler_434_khz": 2969, "doppler_144_khz": 990}, + {"time_sec": 314, "doppler_434_khz": 2722, "doppler_144_khz": 907}, + {"time_sec": 315, "doppler_434_khz": 2595, "doppler_144_khz": 865}, + {"time_sec": 316, "doppler_434_khz": 2466, "doppler_144_khz": 822}, + {"time_sec": 317, "doppler_434_khz": 2337, "doppler_144_khz": 779}, + {"time_sec": 318, "doppler_434_khz": 2206, "doppler_144_khz": 735}, + {"time_sec": 319, "doppler_434_khz": 1941, "doppler_144_khz": 647}, + {"time_sec": 320, "doppler_434_khz": 1807, "doppler_144_khz": 602}, + {"time_sec": 321, "doppler_434_khz": 1672, "doppler_144_khz": 557}, + {"time_sec": 322, "doppler_434_khz": 1536, "doppler_144_khz": 512}, + {"time_sec": 323, "doppler_434_khz": 1395, "doppler_144_khz": 465}, + {"time_sec": 324, "doppler_434_khz": 1119, "doppler_144_khz": 373}, + {"time_sec": 325, "doppler_434_khz": 979, "doppler_144_khz": 326}, + {"time_sec": 326, "doppler_434_khz": 839, "doppler_144_khz": 280}, + {"time_sec": 327, "doppler_434_khz": 699, "doppler_144_khz": 233}, + {"time_sec": 328, "doppler_434_khz": 418, "doppler_144_khz": 139}, + {"time_sec": 329, "doppler_434_khz": 277, "doppler_144_khz": 92}, + {"time_sec": 330, "doppler_434_khz": 137, "doppler_144_khz": 46}, + {"time_sec": 331, "doppler_434_khz": -2, "doppler_144_khz": 0}, + {"time_sec": 332, "doppler_434_khz": -143, "doppler_144_khz": -47}, + {"time_sec": 333, "doppler_434_khz": -427, "doppler_144_khz": -142}, + {"time_sec": 334, "doppler_434_khz": -569, "doppler_144_khz": -189}, + {"time_sec": 335, "doppler_434_khz": -709, "doppler_144_khz": -236}, + {"time_sec": 336, "doppler_434_khz": -848, "doppler_144_khz": -282}, + {"time_sec": 337, "doppler_434_khz": -987, "doppler_144_khz": -328}, + {"time_sec": 338, "doppler_434_khz": -1263, "doppler_144_khz": -420}, + {"time_sec": 339, "doppler_434_khz": -1400, "doppler_144_khz": -466}, + {"time_sec": 340, "doppler_434_khz": -1537, "doppler_144_khz": -512}, + {"time_sec": 341, "doppler_434_khz": -1672, "doppler_144_khz": -557}, + {"time_sec": 342, "doppler_434_khz": -1806, "doppler_144_khz": -601}, + {"time_sec": 343, "doppler_434_khz": -2072, "doppler_144_khz": -690}, + {"time_sec": 344, "doppler_434_khz": -2204, "doppler_144_khz": -734}, + {"time_sec": 345, "doppler_434_khz": -2335, "doppler_144_khz": -778}, + {"time_sec": 346, "doppler_434_khz": -2471, "doppler_144_khz": -823}, + {"time_sec": 347, "doppler_434_khz": -2599, "doppler_144_khz": -866}, + {"time_sec": 348, "doppler_434_khz": -2851, "doppler_144_khz": -950}, + {"time_sec": 349, "doppler_434_khz": -2975, "doppler_144_khz": -991}, + {"time_sec": 350, "doppler_434_khz": -3098, "doppler_144_khz": -1032}, + {"time_sec": 351, "doppler_434_khz": -3220, "doppler_144_khz": -1073}, + {"time_sec": 352, "doppler_434_khz": -3458, "doppler_144_khz": -1152}, + {"time_sec": 353, "doppler_434_khz": -3574, "doppler_144_khz": -1191}, + {"time_sec": 354, "doppler_434_khz": -3693, "doppler_144_khz": -1230}, + {"time_sec": 355, "doppler_434_khz": -3807, "doppler_144_khz": -1268}, + {"time_sec": 356, "doppler_434_khz": -3921, "doppler_144_khz": -1306}, + {"time_sec": 357, "doppler_434_khz": -4141, "doppler_144_khz": -1380}, + {"time_sec": 358, "doppler_434_khz": -4249, "doppler_144_khz": -1416}, + {"time_sec": 359, "doppler_434_khz": -4356, "doppler_144_khz": -1451}, + {"time_sec": 360, "doppler_434_khz": -4460, "doppler_144_khz": -1486}, + {"time_sec": 361, "doppler_434_khz": -4563, "doppler_144_khz": -1520}, + {"time_sec": 362, "doppler_434_khz": -4763, "doppler_144_khz": -1587}, + {"time_sec": 363, "doppler_434_khz": -4861, "doppler_144_khz": -1620}, + {"time_sec": 364, "doppler_434_khz": -4956, "doppler_144_khz": -1651}, + {"time_sec": 365, "doppler_434_khz": -5050, "doppler_144_khz": -1683}, + {"time_sec": 366, "doppler_434_khz": -5142, "doppler_144_khz": -1713}, + {"time_sec": 367, "doppler_434_khz": -5323, "doppler_144_khz": -1774}, + {"time_sec": 368, "doppler_434_khz": -5410, "doppler_144_khz": -1803}, + {"time_sec": 369, "doppler_434_khz": -5497, "doppler_144_khz": -1832}, + {"time_sec": 370, "doppler_434_khz": -5582, "doppler_144_khz": -1860}, + {"time_sec": 371, "doppler_434_khz": -5665, "doppler_144_khz": -1888}, + {"time_sec": 372, "doppler_434_khz": -5825, "doppler_144_khz": -1941}, + {"time_sec": 373, "doppler_434_khz": -5904, "doppler_144_khz": -1967}, + {"time_sec": 374, "doppler_434_khz": -5981, "doppler_144_khz": -1993}, + {"time_sec": 375, "doppler_434_khz": -6056, "doppler_144_khz": -2018}, + {"time_sec": 376, "doppler_434_khz": -6203, "doppler_144_khz": -2067}, + {"time_sec": 377, "doppler_434_khz": -6275, "doppler_144_khz": -2091}, + {"time_sec": 378, "doppler_434_khz": -6344, "doppler_144_khz": -2114}, + {"time_sec": 379, "doppler_434_khz": -6413, "doppler_144_khz": -2137}, + {"time_sec": 380, "doppler_434_khz": -6479, "doppler_144_khz": -2159}, + {"time_sec": 381, "doppler_434_khz": -6609, "doppler_144_khz": -2202}, + {"time_sec": 382, "doppler_434_khz": -6676, "doppler_144_khz": -2225}, + {"time_sec": 383, "doppler_434_khz": -6738, "doppler_144_khz": -2245}, + {"time_sec": 384, "doppler_434_khz": -6798, "doppler_144_khz": -2265}, + {"time_sec": 385, "doppler_434_khz": -6858, "doppler_144_khz": -2285}, + {"time_sec": 386, "doppler_434_khz": -6974, "doppler_144_khz": -2324}, + {"time_sec": 387, "doppler_434_khz": -7031, "doppler_144_khz": -2343}, + {"time_sec": 388, "doppler_434_khz": -7086, "doppler_144_khz": -2361}, + {"time_sec": 389, "doppler_434_khz": -7139, "doppler_144_khz": -2379}, + {"time_sec": 390, "doppler_434_khz": -7191, "doppler_144_khz": -2396}, + {"time_sec": 391, "doppler_434_khz": -7292, "doppler_144_khz": -2430}, + {"time_sec": 392, "doppler_434_khz": -7342, "doppler_144_khz": -2447}, + {"time_sec": 393, "doppler_434_khz": -7390, "doppler_144_khz": -2463}, + {"time_sec": 394, "doppler_434_khz": -7437, "doppler_144_khz": -2478}, + {"time_sec": 395, "doppler_434_khz": -7483, "doppler_144_khz": -2494}, + {"time_sec": 396, "doppler_434_khz": -7573, "doppler_144_khz": -2524}, + {"time_sec": 397, "doppler_434_khz": -7617, "doppler_144_khz": -2538}, + {"time_sec": 398, "doppler_434_khz": -7659, "doppler_144_khz": -2552}, + {"time_sec": 399, "doppler_434_khz": -7701, "doppler_144_khz": -2566}, + {"time_sec": 400, "doppler_434_khz": -7742, "doppler_144_khz": -2580}, + {"time_sec": 401, "doppler_434_khz": -7821, "doppler_144_khz": -2606}, + {"time_sec": 402, "doppler_434_khz": -7860, "doppler_144_khz": -2619}, + {"time_sec": 403, "doppler_434_khz": -7898, "doppler_144_khz": -2632}, + {"time_sec": 404, "doppler_434_khz": -7935, "doppler_144_khz": -2644}, + {"time_sec": 405, "doppler_434_khz": -7971, "doppler_144_khz": -2656}, + {"time_sec": 406, "doppler_434_khz": -8041, "doppler_144_khz": -2680}, + {"time_sec": 407, "doppler_434_khz": -8076, "doppler_144_khz": -2691}, + {"time_sec": 408, "doppler_434_khz": -8109, "doppler_144_khz": -2702}, + {"time_sec": 409, "doppler_434_khz": -8142, "doppler_144_khz": -2713}, + {"time_sec": 410, "doppler_434_khz": -8205, "doppler_144_khz": -2734}, + {"time_sec": 411, "doppler_434_khz": -8236, "doppler_144_khz": -2745}, + {"time_sec": 412, "doppler_434_khz": -8266, "doppler_144_khz": -2755}, + {"time_sec": 413, "doppler_434_khz": -8296, "doppler_144_khz": -2765}, + {"time_sec": 414, "doppler_434_khz": -8325, "doppler_144_khz": -2774}, + {"time_sec": 415, "doppler_434_khz": -8381, "doppler_144_khz": -2793}, + {"time_sec": 416, "doppler_434_khz": -8408, "doppler_144_khz": -2802}, + {"time_sec": 417, "doppler_434_khz": -8435, "doppler_144_khz": -2811}, + {"time_sec": 418, "doppler_434_khz": -8462, "doppler_144_khz": -2820}, + {"time_sec": 419, "doppler_434_khz": -8487, "doppler_144_khz": -2828}, + {"time_sec": 420, "doppler_434_khz": -8539, "doppler_144_khz": -2846}, + {"time_sec": 421, "doppler_434_khz": -8563, "doppler_144_khz": -2854}, + {"time_sec": 422, "doppler_434_khz": -8587, "doppler_144_khz": -2862}, + {"time_sec": 423, "doppler_434_khz": -8610, "doppler_144_khz": -2869}, + {"time_sec": 424, "doppler_434_khz": -8633, "doppler_144_khz": -2877}, + {"time_sec": 425, "doppler_434_khz": -8678, "doppler_144_khz": -2892}, + {"time_sec": 426, "doppler_434_khz": -8700, "doppler_144_khz": -2899}, + {"time_sec": 427, "doppler_434_khz": -8721, "doppler_144_khz": -2906}, + {"time_sec": 428, "doppler_434_khz": -8742, "doppler_144_khz": -2913}, + {"time_sec": 429, "doppler_434_khz": -8762, "doppler_144_khz": -2920}, + {"time_sec": 430, "doppler_434_khz": -8802, "doppler_144_khz": -2933}, + {"time_sec": 431, "doppler_434_khz": -8822, "doppler_144_khz": -2940}, + {"time_sec": 432, "doppler_434_khz": -8841, "doppler_144_khz": -2946}, + {"time_sec": 433, "doppler_434_khz": -8860, "doppler_144_khz": -2953}, + {"time_sec": 434, "doppler_434_khz": -8878, "doppler_144_khz": -2959}, + {"time_sec": 435, "doppler_434_khz": -8915, "doppler_144_khz": -2971}, + {"time_sec": 436, "doppler_434_khz": -8932, "doppler_144_khz": -2977}, + {"time_sec": 437, "doppler_434_khz": -8949, "doppler_144_khz": -2982}, + {"time_sec": 438, "doppler_434_khz": -8966, "doppler_144_khz": -2988}, + {"time_sec": 439, "doppler_434_khz": -8982, "doppler_144_khz": -2993}, + {"time_sec": 440, "doppler_434_khz": -9015, "doppler_144_khz": -3004}, + {"time_sec": 441, "doppler_434_khz": -9030, "doppler_144_khz": -3009}, + {"time_sec": 442, "doppler_434_khz": -9045, "doppler_144_khz": -3014}, + {"time_sec": 443, "doppler_434_khz": -9061, "doppler_144_khz": -3020}, + {"time_sec": 444, "doppler_434_khz": -9075, "doppler_144_khz": -3024}, + {"time_sec": 445, "doppler_434_khz": -9104, "doppler_144_khz": -3034}, + {"time_sec": 446, "doppler_434_khz": -9118, "doppler_144_khz": -3039}, + {"time_sec": 447, "doppler_434_khz": -9132, "doppler_144_khz": -3043}, + {"time_sec": 448, "doppler_434_khz": -9146, "doppler_144_khz": -3048}, + {"time_sec": 449, "doppler_434_khz": -9172, "doppler_144_khz": -3057}, + {"time_sec": 450, "doppler_434_khz": -9185, "doppler_144_khz": -3061}, + {"time_sec": 451, "doppler_434_khz": -9197, "doppler_144_khz": -3065}, + {"time_sec": 452, "doppler_434_khz": -9210, "doppler_144_khz": -3069}, + {"time_sec": 453, "doppler_434_khz": -9222, "doppler_144_khz": -3073}, + {"time_sec": 454, "doppler_434_khz": -9246, "doppler_144_khz": -3081}, + {"time_sec": 455, "doppler_434_khz": -9258, "doppler_144_khz": -3085}, + {"time_sec": 456, "doppler_434_khz": -9270, "doppler_144_khz": -3089}, + {"time_sec": 457, "doppler_434_khz": -9281, "doppler_144_khz": -3093}, + {"time_sec": 458, "doppler_434_khz": -9292, "doppler_144_khz": -3097}, + {"time_sec": 459, "doppler_434_khz": -9313, "doppler_144_khz": -3104}, + {"time_sec": 460, "doppler_434_khz": -9324, "doppler_144_khz": -3107}, + {"time_sec": 461, "doppler_434_khz": -9334, "doppler_144_khz": -3111}, + {"time_sec": 462, "doppler_434_khz": -9344, "doppler_144_khz": -3114}, + {"time_sec": 463, "doppler_434_khz": -9354, "doppler_144_khz": -3117}, + {"time_sec": 464, "doppler_434_khz": -9374, "doppler_144_khz": -3124}, + {"time_sec": 465, "doppler_434_khz": -9383, "doppler_144_khz": -3127}, + {"time_sec": 466, "doppler_434_khz": -9393, "doppler_144_khz": -3130}, + {"time_sec": 467, "doppler_434_khz": -9402, "doppler_144_khz": -3133}, + {"time_sec": 468, "doppler_434_khz": -9411, "doppler_144_khz": -3136}, + {"time_sec": 469, "doppler_434_khz": -9429, "doppler_144_khz": -3142}, + {"time_sec": 470, "doppler_434_khz": -9438, "doppler_144_khz": -3145}, + {"time_sec": 471, "doppler_434_khz": -9446, "doppler_144_khz": -3148}, + {"time_sec": 472, "doppler_434_khz": -9454, "doppler_144_khz": -3151}, + {"time_sec": 473, "doppler_434_khz": -9470, "doppler_144_khz": -3156}, + {"time_sec": 474, "doppler_434_khz": -9478, "doppler_144_khz": -3159}, + {"time_sec": 475, "doppler_434_khz": -9486, "doppler_144_khz": -3161}, + {"time_sec": 476, "doppler_434_khz": -9494, "doppler_144_khz": -3164}, + {"time_sec": 477, "doppler_434_khz": -9501, "doppler_144_khz": -3166}, + {"time_sec": 478, "doppler_434_khz": -9516, "doppler_144_khz": -3171}, + {"time_sec": 479, "doppler_434_khz": -9523, "doppler_144_khz": -3174}, + {"time_sec": 480, "doppler_434_khz": -9530, "doppler_144_khz": -3176}, + {"time_sec": 481, "doppler_434_khz": -9537, "doppler_144_khz": -3178}, + {"time_sec": 482, "doppler_434_khz": -9551, "doppler_144_khz": -3183}, + {"time_sec": 483, "doppler_434_khz": -9557, "doppler_144_khz": -3185}, + {"time_sec": 484, "doppler_434_khz": -9564, "doppler_144_khz": -3187}, + {"time_sec": 485, "doppler_434_khz": -9570, "doppler_144_khz": -3189}, + {"time_sec": 486, "doppler_434_khz": -9583, "doppler_144_khz": -3194}, + {"time_sec": 487, "doppler_434_khz": -9589, "doppler_144_khz": -3196}, + {"time_sec": 488, "doppler_434_khz": -9595, "doppler_144_khz": -3198}, + {"time_sec": 489, "doppler_434_khz": -9601, "doppler_144_khz": -3200}, + {"time_sec": 490, "doppler_434_khz": -9607, "doppler_144_khz": -3202}, + {"time_sec": 491, "doppler_434_khz": -9619, "doppler_144_khz": -3206}, + {"time_sec": 492, "doppler_434_khz": -9625, "doppler_144_khz": -3208}, + {"time_sec": 493, "doppler_434_khz": -9630, "doppler_144_khz": -3209}, + {"time_sec": 494, "doppler_434_khz": -9636, "doppler_144_khz": -3211}, + {"time_sec": 495, "doppler_434_khz": -9642, "doppler_144_khz": -3213}, + {"time_sec": 496, "doppler_434_khz": -9652, "doppler_144_khz": -3217}, + {"time_sec": 497, "doppler_434_khz": -9658, "doppler_144_khz": -3219}, + {"time_sec": 498, "doppler_434_khz": -9663, "doppler_144_khz": -3220}, + {"time_sec": 499, "doppler_434_khz": -9668, "doppler_144_khz": -3222}, + {"time_sec": 500, "doppler_434_khz": -9678, "doppler_144_khz": -3225}, + {"time_sec": 501, "doppler_434_khz": -9683, "doppler_144_khz": -3227}, + {"time_sec": 502, "doppler_434_khz": -9687, "doppler_144_khz": -3228}, + {"time_sec": 503, "doppler_434_khz": -9692, "doppler_144_khz": -3230}, + {"time_sec": 504, "doppler_434_khz": -9697, "doppler_144_khz": -3232}, + {"time_sec": 505, "doppler_434_khz": -9706, "doppler_144_khz": -3235}, + {"time_sec": 506, "doppler_434_khz": -9710, "doppler_144_khz": -3236}, + {"time_sec": 507, "doppler_434_khz": -9715, "doppler_144_khz": -3238}, + {"time_sec": 508, "doppler_434_khz": -9719, "doppler_144_khz": -3239}, + {"time_sec": 509, "doppler_434_khz": -9727, "doppler_144_khz": -3242}, + {"time_sec": 510, "doppler_434_khz": -9732, "doppler_144_khz": -3243}, + {"time_sec": 511, "doppler_434_khz": -9736, "doppler_144_khz": -3245}, + {"time_sec": 512, "doppler_434_khz": -9740, "doppler_144_khz": -3246}, + {"time_sec": 513, "doppler_434_khz": -9747, "doppler_144_khz": -3248}, + {"time_sec": 514, "doppler_434_khz": -9751, "doppler_144_khz": -3250}, + {"time_sec": 515, "doppler_434_khz": -9755, "doppler_144_khz": -3251}, + {"time_sec": 516, "doppler_434_khz": -9759, "doppler_144_khz": -3252}, + {"time_sec": 517, "doppler_434_khz": -9763, "doppler_144_khz": -3254}, + {"time_sec": 518, "doppler_434_khz": -9770, "doppler_144_khz": -3256}, + {"time_sec": 519, "doppler_434_khz": -9773, "doppler_144_khz": -3257}, + {"time_sec": 520, "doppler_434_khz": -9777, "doppler_144_khz": -3258}, + {"time_sec": 521, "doppler_434_khz": -9780, "doppler_144_khz": -3259}, + {"time_sec": 522, "doppler_434_khz": -9787, "doppler_144_khz": -3262}, + {"time_sec": 523, "doppler_434_khz": -9791, "doppler_144_khz": -3263}, + {"time_sec": 524, "doppler_434_khz": -9794, "doppler_144_khz": -3264}, + {"time_sec": 525, "doppler_434_khz": -9797, "doppler_144_khz": -3265}, + {"time_sec": 526, "doppler_434_khz": -9800, "doppler_144_khz": -3266}, + {"time_sec": 527, "doppler_434_khz": -9807, "doppler_144_khz": -3268}, + {"time_sec": 528, "doppler_434_khz": -9810, "doppler_144_khz": -3269}, + {"time_sec": 529, "doppler_434_khz": -9813, "doppler_144_khz": -3270}, + {"time_sec": 530, "doppler_434_khz": -9816, "doppler_144_khz": -3271}, + {"time_sec": 531, "doppler_434_khz": -9822, "doppler_144_khz": -3273}, + {"time_sec": 532, "doppler_434_khz": -9825, "doppler_144_khz": -3274}, + {"time_sec": 533, "doppler_434_khz": -9827, "doppler_144_khz": -3275}, + {"time_sec": 534, "doppler_434_khz": -9830, "doppler_144_khz": -3276}, + {"time_sec": 535, "doppler_434_khz": -9833, "doppler_144_khz": -3277}, + {"time_sec": 536, "doppler_434_khz": -9838, "doppler_144_khz": -3279}, + {"time_sec": 537, "doppler_434_khz": -9841, "doppler_144_khz": -3280}, + {"time_sec": 538, "doppler_434_khz": -9843, "doppler_144_khz": -3280}, + {"time_sec": 539, "doppler_434_khz": -9846, "doppler_144_khz": -3281}, + {"time_sec": 540, "doppler_434_khz": -9851, "doppler_144_khz": -3283}, + {"time_sec": 541, "doppler_434_khz": -9853, "doppler_144_khz": -3284}, + {"time_sec": 542, "doppler_434_khz": -9856, "doppler_144_khz": -3285}, + {"time_sec": 543, "doppler_434_khz": -9858, "doppler_144_khz": -3285}, + {"time_sec": 544, "doppler_434_khz": -9861, "doppler_144_khz": -3286}, + {"time_sec": 545, "doppler_434_khz": -9865, "doppler_144_khz": -3288}, + {"time_sec": 546, "doppler_434_khz": -9867, "doppler_144_khz": -3288}, + {"time_sec": 547, "doppler_434_khz": -9870, "doppler_144_khz": -3289}, + {"time_sec": 548, "doppler_434_khz": -9872, "doppler_144_khz": -3290}, + {"time_sec": 549, "doppler_434_khz": -9876, "doppler_144_khz": -3291}, + {"time_sec": 550, "doppler_434_khz": -9878, "doppler_144_khz": -3292}, + {"time_sec": 551, "doppler_434_khz": -9880, "doppler_144_khz": -3293}, + {"time_sec": 552, "doppler_434_khz": -9882, "doppler_144_khz": -3293}, + {"time_sec": 553, "doppler_434_khz": -9886, "doppler_144_khz": -3295}, + {"time_sec": 554, "doppler_434_khz": -9888, "doppler_144_khz": -3295}, + {"time_sec": 555, "doppler_434_khz": -9890, "doppler_144_khz": -3296}, + {"time_sec": 556, "doppler_434_khz": -9892, "doppler_144_khz": -3297}, + {"time_sec": 557, "doppler_434_khz": -9894, "doppler_144_khz": -3297}, + {"time_sec": 558, "doppler_434_khz": -9898, "doppler_144_khz": -3299}, + {"time_sec": 559, "doppler_434_khz": -9899, "doppler_144_khz": -3299}, + {"time_sec": 560, "doppler_434_khz": -9901, "doppler_144_khz": -3300}, + {"time_sec": 561, "doppler_434_khz": -9903, "doppler_144_khz": -3300}, + {"time_sec": 562, "doppler_434_khz": -9906, "doppler_144_khz": -3301}, + {"time_sec": 563, "doppler_434_khz": -9908, "doppler_144_khz": -3302}, + {"time_sec": 564, "doppler_434_khz": -9910, "doppler_144_khz": -3303}, + {"time_sec": 565, "doppler_434_khz": -9911, "doppler_144_khz": -3303}, + {"time_sec": 566, "doppler_434_khz": -9913, "doppler_144_khz": -3304}, + {"time_sec": 567, "doppler_434_khz": -9916, "doppler_144_khz": -3305}, + {"time_sec": 568, "doppler_434_khz": -9918, "doppler_144_khz": -3305}, + {"time_sec": 569, "doppler_434_khz": -9919, "doppler_144_khz": -3306}, + {"time_sec": 570, "doppler_434_khz": -9921, "doppler_144_khz": -3306}, + {"time_sec": 571, "doppler_434_khz": -9923, "doppler_144_khz": -3307}, + {"time_sec": 572, "doppler_434_khz": -9925, "doppler_144_khz": -3308}, + {"time_sec": 573, "doppler_434_khz": -9926, "doppler_144_khz": -3308}, + {"time_sec": 574, "doppler_434_khz": -9928, "doppler_144_khz": -3309}, + {"time_sec": 575, "doppler_434_khz": -9930, "doppler_144_khz": -3309}, + {"time_sec": 576, "doppler_434_khz": -9932, "doppler_144_khz": -3310}, + {"time_sec": 577, "doppler_434_khz": -9933, "doppler_144_khz": -3310}, + {"time_sec": 578, "doppler_434_khz": -9934, "doppler_144_khz": -3311}, + {"time_sec": 579, "doppler_434_khz": -9936, "doppler_144_khz": -3311}, + {"time_sec": 580, "doppler_434_khz": -9938, "doppler_144_khz": -3312}, + {"time_sec": 581, "doppler_434_khz": -9939, "doppler_144_khz": -3312}, + {"time_sec": 582, "doppler_434_khz": -9940, "doppler_144_khz": -3313}, + {"time_sec": 583, "doppler_434_khz": -9942, "doppler_144_khz": -3313}, + {"time_sec": 584, "doppler_434_khz": -9944, "doppler_144_khz": -3314}, + {"time_sec": 585, "doppler_434_khz": -9945, "doppler_144_khz": -3314}, + {"time_sec": 586, "doppler_434_khz": -9946, "doppler_144_khz": -3315}, + {"time_sec": 587, "doppler_434_khz": -9947, "doppler_144_khz": -3315}, + {"time_sec": 588, "doppler_434_khz": -9949, "doppler_144_khz": -3316}, + {"time_sec": 589, "doppler_434_khz": -9950, "doppler_144_khz": -3316}, + {"time_sec": 590, "doppler_434_khz": -9951, "doppler_144_khz": -3316}, + {"time_sec": 591, "doppler_434_khz": -9952, "doppler_144_khz": -3317}, + {"time_sec": 592, "doppler_434_khz": -9953, "doppler_144_khz": -3317}, + {"time_sec": 593, "doppler_434_khz": -9955, "doppler_144_khz": -3318}, + {"time_sec": 594, "doppler_434_khz": -9956, "doppler_144_khz": -3318}, + {"time_sec": 595, "doppler_434_khz": -9957, "doppler_144_khz": -3318}, + {"time_sec": 596, "doppler_434_khz": -9958, "doppler_144_khz": -3319}, + {"time_sec": 597, "doppler_434_khz": -9960, "doppler_144_khz": -3319}, + {"time_sec": 598, "doppler_434_khz": -9961, "doppler_144_khz": -3320}, + {"time_sec": 599, "doppler_434_khz": -9961, "doppler_144_khz": -3320}, + {"time_sec": 600, "doppler_434_khz": -9962, "doppler_144_khz": -3320}, + {"time_sec": 601, "doppler_434_khz": -9963, "doppler_144_khz": -3320}, + {"time_sec": 602, "doppler_434_khz": -9965, "doppler_144_khz": -3321}, + {"time_sec": 603, "doppler_434_khz": -9965, "doppler_144_khz": -3321}, + {"time_sec": 604, "doppler_434_khz": -9966, "doppler_144_khz": -3321}, + {"time_sec": 605, "doppler_434_khz": -9967, "doppler_144_khz": -3322}, + {"time_sec": 606, "doppler_434_khz": -9968, "doppler_144_khz": -3322}, + {"time_sec": 607, "doppler_434_khz": -9969, "doppler_144_khz": -3322}, + {"time_sec": 608, "doppler_434_khz": -9970, "doppler_144_khz": -3323}, + {"time_sec": 609, "doppler_434_khz": -9970, "doppler_144_khz": -3323}, + {"time_sec": 610, "doppler_434_khz": -9972, "doppler_144_khz": -3323}, + {"time_sec": 611, "doppler_434_khz": -9972, "doppler_144_khz": -3323}, + {"time_sec": 612, "doppler_434_khz": -9973, "doppler_144_khz": -3324}, + {"time_sec": 613, "doppler_434_khz": -9974, "doppler_144_khz": -3324}, + {"time_sec": 614, "doppler_434_khz": -9974, "doppler_144_khz": -3324}, + {"time_sec": 615, "doppler_434_khz": -9975, "doppler_144_khz": -3324}, + {"time_sec": 616, "doppler_434_khz": -9976, "doppler_144_khz": -3325}, + {"time_sec": 617, "doppler_434_khz": -9976, "doppler_144_khz": -3325}, + {"time_sec": 618, "doppler_434_khz": -9977, "doppler_144_khz": -3325}, + {"time_sec": 619, "doppler_434_khz": -9978, "doppler_144_khz": -3325}, + {"time_sec": 620, "doppler_434_khz": -9978, "doppler_144_khz": -3325}, + {"time_sec": 621, "doppler_434_khz": -9979, "doppler_144_khz": -3326}, + {"time_sec": 622, "doppler_434_khz": -9979, "doppler_144_khz": -3326}, + {"time_sec": 623, "doppler_434_khz": -9980, "doppler_144_khz": -3326}, + {"time_sec": 624, "doppler_434_khz": -9981, "doppler_144_khz": -3326}, + {"time_sec": 625, "doppler_434_khz": -9981, "doppler_144_khz": -3326}, + {"time_sec": 626, "doppler_434_khz": -9982, "doppler_144_khz": -3327}, + {"time_sec": 627, "doppler_434_khz": -9982, "doppler_144_khz": -3327}, + {"time_sec": 628, "doppler_434_khz": -9983, "doppler_144_khz": -3327}, + {"time_sec": 629, "doppler_434_khz": -9983, "doppler_144_khz": -3327}, + {"time_sec": 630, "doppler_434_khz": -9984, "doppler_144_khz": -3327}, + {"time_sec": 631, "doppler_434_khz": -9984, "doppler_144_khz": -3327}, + {"time_sec": 632, "doppler_434_khz": -9985, "doppler_144_khz": -3328}, + {"time_sec": 633, "doppler_434_khz": -9985, "doppler_144_khz": -3328}, + {"time_sec": 634, "doppler_434_khz": -9985, "doppler_144_khz": -3328}, + {"time_sec": 635, "doppler_434_khz": -9986, "doppler_144_khz": -3328}, + {"time_sec": 636, "doppler_434_khz": -9986, "doppler_144_khz": -3328}, + {"time_sec": 637, "doppler_434_khz": -9986, "doppler_144_khz": -3328}, + {"time_sec": 638, "doppler_434_khz": -9987, "doppler_144_khz": -3328}, + {"time_sec": 639, "doppler_434_khz": -9987, "doppler_144_khz": -3328}, + {"time_sec": 640, "doppler_434_khz": -9987, "doppler_144_khz": -3328}, + {"time_sec": 641, "doppler_434_khz": -9988, "doppler_144_khz": -3329}, + {"time_sec": 642, "doppler_434_khz": -9988, "doppler_144_khz": -3329}, + {"time_sec": 643, "doppler_434_khz": -9988, "doppler_144_khz": -3329}, + {"time_sec": 644, "doppler_434_khz": -9988, "doppler_144_khz": -3329}, + {"time_sec": 645, "doppler_434_khz": -9988, "doppler_144_khz": -3329}, + {"time_sec": 646, "doppler_434_khz": -9989, "doppler_144_khz": -3329}, + {"time_sec": 647, "doppler_434_khz": -9989, "doppler_144_khz": -3329}, + {"time_sec": 648, "doppler_434_khz": -9989, "doppler_144_khz": -3329}, + {"time_sec": 649, "doppler_434_khz": -9989, "doppler_144_khz": -3329}, + {"time_sec": 650, "doppler_434_khz": -9990, "doppler_144_khz": -3329}, + {"time_sec": 651, "doppler_434_khz": -9990, "doppler_144_khz": -3329}, + {"time_sec": 652, "doppler_434_khz": -9990, "doppler_144_khz": -3329}, + {"time_sec": 653, "doppler_434_khz": -9990, "doppler_144_khz": -3329}, + {"time_sec": 654, "doppler_434_khz": -9990, "doppler_144_khz": -3329}, + {"time_sec": 655, "doppler_434_khz": -9990, "doppler_144_khz": -3329}, + {"time_sec": 656, "doppler_434_khz": -9990, "doppler_144_khz": -3329}, + {"time_sec": 657, "doppler_434_khz": -9990, "doppler_144_khz": -3329}, + {"time_sec": 658, "doppler_434_khz": -9990, "doppler_144_khz": -3329}, + {"time_sec": 659, "doppler_434_khz": -9990, "doppler_144_khz": -3329}, + {"time_sec": 660, "doppler_434_khz": -9990, "doppler_144_khz": -3329}, + {"time_sec": 661, "doppler_434_khz": -9990, "doppler_144_khz": -3329} ] } @@ -259,10 +688,10 @@ def update_doppler(): global tx print("update_doppler") try: - relative_time = (time.perf_counter() - start_time) % 370 + relative_time = (time.perf_counter() - start_time) % 661 except: start_time = time.perf_counter() - relative_time = (time.perf_counter() - start_time) % 370 + relative_time = (time.perf_counter() - start_time) % 661 index = int(relative_time/10) print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") table_row = doppler_table[index] @@ -384,14 +813,14 @@ if (doppler_mode == 'sim'): rx_doppler_shift_hz = 0 print(f"Rx center frequency: {rx_doppler_start_hz}") - TARGET_PASS = 85 # Maximum elevation profile + TARGET_PASS = 88 # Maximum elevation profile doppler_table = iss_doppler_passes[TARGET_PASS] print(f"Pass Max Elevation: {TARGET_PASS}°") start_time = time.perf_counter() current_index = 0; while True: - relative_time = (time.perf_counter() - start_time) % 370 + relative_time = (time.perf_counter() - start_time) % 661 index = int(relative_time/10) % 37 if (index > current_index): current_index = index From b7edaabe94b444abb25dce235d97a4b4b7f87df8 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 6 Jul 2026 11:24:37 -0400 Subject: [PATCH 149/287] Update frequency.py not kHz anymore --- frequency.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frequency.py b/frequency.py index 68635640..5b035e55 100644 --- a/frequency.py +++ b/frequency.py @@ -826,9 +826,9 @@ if (doppler_mode == 'sim'): current_index = index print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") table_row = doppler_table[index] - rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 + rx_doppler_shift_hz = table_row["doppler_434_khz"] # * 1000 if (mode == 'e'): - tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 + tx_doppler_shift_hz = table_row["doppler_144_khz"] # * 1000 else: tx_doppler_shift_hz = rx_doppler_shift_hz tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz From 7cfe468966a12aa8abb21770f943c1c147c47db5 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 6 Jul 2026 16:04:34 -0400 Subject: [PATCH 150/287] Update transmit.py switch back to timeout --- transmit.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/transmit.py b/transmit.py index 48330c83..c770e391 100644 --- a/transmit.py +++ b/transmit.py @@ -620,18 +620,19 @@ def cw_transmit_char(character): def transmit_carrier(duration): global tx_doppler_freq_hz global txLed -# command = "timeout " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 + command = "timeout " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 start = "sudo tune -f " + str(tx_doppler_freq_hz) + " &" # + " & > /dev/null 2>&1" # 434.9e6 stop = "sudo rpitx -f 434.9e6 &" killrpitx = "sudo killall -9 rpitx &" killtune = "sudo killall -9 tune &" output(txLed, 1) - system(start) - sleep(duration) - system(stop) +# system(start) + system(command) +# sleep(duration) +# system(stop) output(txLed, 0) - system(killrpitx) - system(killtune) +# system(killrpitx) +# system(killtune) print("CubeSatSim v2.2 transmit.py starting...") From 0a6d518be0ad01a8572e38034a1c3d79106260b3 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 6 Jul 2026 16:08:53 -0400 Subject: [PATCH 151/287] Update frequency.py fix index --- frequency.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frequency.py b/frequency.py index 5b035e55..53013e66 100644 --- a/frequency.py +++ b/frequency.py @@ -692,7 +692,8 @@ def update_doppler(): except: start_time = time.perf_counter() relative_time = (time.perf_counter() - start_time) % 661 - index = int(relative_time/10) +# index = int(relative_time/10) + index = int(relative_time) print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") table_row = doppler_table[index] rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 From f991f3c44d0273bcb0e7e349c2e7c532218ac906 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 6 Jul 2026 16:18:43 -0400 Subject: [PATCH 152/287] Update frequency.py fix index and kHz --- frequency.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/frequency.py b/frequency.py index 53013e66..ccf2793d 100644 --- a/frequency.py +++ b/frequency.py @@ -696,9 +696,9 @@ def update_doppler(): index = int(relative_time) print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") table_row = doppler_table[index] - rx_doppler_shift_hz = table_row["doppler_434_khz"] * 1000 + rx_doppler_shift_hz = table_row["doppler_434_khz"] # * 1000 if (mode == 'e'): - tx_doppler_shift_hz = table_row["doppler_144_khz"] * 1000 + tx_doppler_shift_hz = table_row["doppler_144_khz"] # * 1000 else: tx_doppler_shift_hz = rx_doppler_shift_hz tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz @@ -822,7 +822,8 @@ if (doppler_mode == 'sim'): current_index = 0; while True: relative_time = (time.perf_counter() - start_time) % 661 - index = int(relative_time/10) % 37 +# index = int(relative_time/10) % 37 + index = int(relative_time) % 661 if (index > current_index): current_index = index print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") From 1433bd09ceeb8cbc7cd7955a6f1f0d6229c89615 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 6 Jul 2026 16:25:05 -0400 Subject: [PATCH 153/287] Update transmit.py update_doppler every dit --- transmit.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index c770e391..674ec094 100644 --- a/transmit.py +++ b/transmit.py @@ -606,7 +606,7 @@ def cw_transmit_string(string): def cw_transmit_char(character): global morse_timing - update_doppler("no") +# update_doppler("no") i = 0 duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] * morse_timing print(duration) @@ -620,6 +620,7 @@ def cw_transmit_char(character): def transmit_carrier(duration): global tx_doppler_freq_hz global txLed + update_doppler("no") command = "timeout " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 start = "sudo tune -f " + str(tx_doppler_freq_hz) + " &" # + " & > /dev/null 2>&1" # 434.9e6 stop = "sudo rpitx -f 434.9e6 &" From ef3460534674a953b454d47f7bb814edf5aaf601 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 6 Jul 2026 16:37:42 -0400 Subject: [PATCH 154/287] Update transmit.py faster CW --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 674ec094..d864fe3c 100644 --- a/transmit.py +++ b/transmit.py @@ -645,7 +645,7 @@ txc_pin = 7 squelch = 6 green = 16 powerPin = 16 -morse_timing = 0.1 +morse_timing = 0.05 # 0.1 command_tx = True From 449ba2fc32710793b19b9f50fb194470777cc392 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 6 Jul 2026 16:44:13 -0400 Subject: [PATCH 155/287] Update frequency.py fix % 661 --- frequency.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/frequency.py b/frequency.py index ccf2793d..e87411d4 100644 --- a/frequency.py +++ b/frequency.py @@ -821,12 +821,13 @@ if (doppler_mode == 'sim'): start_time = time.perf_counter() current_index = 0; while True: - relative_time = (time.perf_counter() - start_time) % 661 + relative_time = (time.perf_counter() - start_time) # index = int(relative_time/10) % 37 - index = int(relative_time) % 661 + index = int(relative_time) if (index > current_index): current_index = index - print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") + index = index % 661 + print(f"relative time: {relative_time:.1f} seconds after start is AOS index: {index}") table_row = doppler_table[index] rx_doppler_shift_hz = table_row["doppler_434_khz"] # * 1000 if (mode == 'e'): From e3fc9c5e5b722950001dd8f694e2fd011a787ca8 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 6 Jul 2026 16:45:07 -0400 Subject: [PATCH 156/287] Update transmit.py try 0.8 --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index d864fe3c..b27e1746 100644 --- a/transmit.py +++ b/transmit.py @@ -645,7 +645,7 @@ txc_pin = 7 squelch = 6 green = 16 powerPin = 16 -morse_timing = 0.05 # 0.1 +morse_timing = 0.08 # 0.1 command_tx = True From f510cd7802e9e5a81cf794907e24064852884ace Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 6 Jul 2026 16:49:01 -0400 Subject: [PATCH 157/287] Update transmit.py add 1.25 scale --- transmit.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/transmit.py b/transmit.py index b27e1746..ec7cb4aa 100644 --- a/transmit.py +++ b/transmit.py @@ -608,14 +608,18 @@ def cw_transmit_char(character): global morse_timing # update_doppler("no") i = 0 - duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] * morse_timing + duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] + if duration == 1: + duration = 1.25 print(duration) while (duration != 0): - transmit_carrier(duration) + transmit_carrier(duration * morse_timing) sleep(morse_timing) i=i+1 - duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] * morse_timing - sleep(morse_timing * 3.0) # 1.5); + duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] + if duration == 1: + duration = 1.25 + sleep(morse_timing * 3) # 1.5); def transmit_carrier(duration): global tx_doppler_freq_hz From 0ef51abb1db09b9dc1c297aec2e208abce8c6b39 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 6 Jul 2026 16:58:45 -0400 Subject: [PATCH 158/287] Update transmit.py modify timing --- transmit.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/transmit.py b/transmit.py index ec7cb4aa..31c29ec8 100644 --- a/transmit.py +++ b/transmit.py @@ -610,15 +610,15 @@ def cw_transmit_char(character): i = 0 duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] if duration == 1: - duration = 1.25 + duration = 1.2 print(duration) while (duration != 0): transmit_carrier(duration * morse_timing) - sleep(morse_timing) + sleep(morse_timing * 0.9) i=i+1 duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] if duration == 1: - duration = 1.25 + duration = 1.2 sleep(morse_timing * 3) # 1.5); def transmit_carrier(duration): From 0bc345c2aa7577810a14fd345bd079a890194667 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 6 Jul 2026 17:02:58 -0400 Subject: [PATCH 159/287] Update transmit.py reduce inter dit timing --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 31c29ec8..d6951d81 100644 --- a/transmit.py +++ b/transmit.py @@ -614,7 +614,7 @@ def cw_transmit_char(character): print(duration) while (duration != 0): transmit_carrier(duration * morse_timing) - sleep(morse_timing * 0.9) + sleep(morse_timing * 0.7) i=i+1 duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] if duration == 1: From ec9f50fd7551fe14d979d783d09fa25b4b17f3d5 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 6 Jul 2026 17:05:01 -0400 Subject: [PATCH 160/287] Update transmit.py slow CW and shorter inter dit timing --- transmit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index d6951d81..933518cd 100644 --- a/transmit.py +++ b/transmit.py @@ -614,7 +614,7 @@ def cw_transmit_char(character): print(duration) while (duration != 0): transmit_carrier(duration * morse_timing) - sleep(morse_timing * 0.7) + sleep(morse_timing * 0.6) i=i+1 duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] if duration == 1: @@ -649,7 +649,7 @@ txc_pin = 7 squelch = 6 green = 16 powerPin = 16 -morse_timing = 0.08 # 0.1 +morse_timing = 0.09 # 0.1 command_tx = True From acb2f1055cbe3eeec15b4bfe8a04b849e5031ed2 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 8 Jul 2026 17:28:33 -0400 Subject: [PATCH 161/287] Update frequency.py add --vfo to rigctl --- frequency.py | 59 ++++++++++++++++++++-------------------------------- 1 file changed, 22 insertions(+), 37 deletions(-) diff --git a/frequency.py b/frequency.py index e87411d4..1784ffe9 100644 --- a/frequency.py +++ b/frequency.py @@ -7,6 +7,24 @@ from time import sleep import sys from os import system +def check_frequency(): + + global tx_doppler_freq_hz + global rx_doppler_freq_hz + + if tx_doppler_freq_hz > 450000000: + tx_doppler_freq_hz = 435200000 + elif (tx_doppler_freq_hz < 420000000) and (tx_doppler_freq_hz > 148000000): + tx_doppler_freq_hz = 434700000 + if (tx_doppler_freq_hz < 144000000): + tx_doppler_freq_hz = 434600000 + + if rx_doppler_freq_hz > 450000000: + rx_doppler_freq_hz = 435200000 + elif (rx_doppler_freq_hz < 420000000) and (rx_doppler_freq_hz > 148000000): + rx_doppler_freq_hz = 434700000 + if (rx_doppler_freq_hz < 144000000): + rx_doppler_freq_hz = 434600000 iss_doppler_passes = { 88: [ @@ -674,41 +692,6 @@ iss_doppler_passes = { ] } -def update_doppler(): - - try: - global start_time - global tx_doppler_freq_hz - global rx_doppler_freq_hz - global rxpl_value - global txpl_value - global sq - global doppler_table - global mode - global tx - print("update_doppler") - try: - relative_time = (time.perf_counter() - start_time) % 661 - except: - start_time = time.perf_counter() - relative_time = (time.perf_counter() - start_time) % 661 -# index = int(relative_time/10) - index = int(relative_time) - print(f"relative time: {relative_time:.1f} seconds after AOS is index: {index}") - table_row = doppler_table[index] - rx_doppler_shift_hz = table_row["doppler_434_khz"] # * 1000 - if (mode == 'e'): - tx_doppler_shift_hz = table_row["doppler_144_khz"] # * 1000 - else: - tx_doppler_shift_hz = rx_doppler_shift_hz - tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz - print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") - rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz - print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") - - except: - print("update_doppler failed") - try: tx_value = '0' rx_value = '0' @@ -795,6 +778,7 @@ except Exception as e: if (doppler_mode == 'off'): tx_freq_hz = txf * 1e6 rx_freq_hz = rxf * 1e6 + check_frequency() print("writing sim.cfg frequency to frequency.txt") with open("/home/pi/CubeSatSim/frequency.txt", "w") as file: file.write(f"{tx_freq_hz:.0f} {rx_freq_hz:.0f}") @@ -835,8 +819,9 @@ if (doppler_mode == 'sim'): else: tx_doppler_shift_hz = rx_doppler_shift_hz tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz - print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz + check_freuquency() + print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") with open("/home/pi/CubeSatSim/frequency.txt", "w") as file: @@ -863,7 +848,7 @@ if (doppler_mode == 'rig'): sleep(1.0) print("Starting rigctl emulating FT857 rig using virtual serial port /tmp/vttyB") - system("rigctld -m 1022 -r /tmp/vttyB -t 4532 -vv") + system("rigctld -m 1022 -r /tmp/vttyB -t 4532 -vv --vfo") print("rigctld ended") From caece4bce030f8d2330c34b8c7957b790c2a2cad Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 8 Jul 2026 17:32:06 -0400 Subject: [PATCH 162/287] Update install fix FT857d update --- install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install b/install index d3b7a837..d6af501f 100755 --- a/install +++ b/install @@ -850,7 +850,7 @@ if [ ! -f "/home/pi/ssdv/ssdv" ]; then make fi -if [ ! -f "/home/pi/FT857d" ]; then +if [ ! -f "/home/pi/FT857d/examples/FT857d/ft857d" ]; then cd echo "Installing FT857d for Doppler rigctld control mode" git clone https://github.com/alanbjohnston/FT857d.git From b7ac72c715ed15f613105d7eb7fc236f091d60d6 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 8 Jul 2026 17:32:37 -0400 Subject: [PATCH 163/287] Update frequency.py frequency typo --- frequency.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frequency.py b/frequency.py index 1784ffe9..460220fc 100644 --- a/frequency.py +++ b/frequency.py @@ -820,7 +820,7 @@ if (doppler_mode == 'sim'): tx_doppler_shift_hz = rx_doppler_shift_hz tx_doppler_freq_hz = tx_doppler_start_hz + tx_doppler_shift_hz rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz - check_freuquency() + check_frequency() print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") From 0d8c05d0fddd8a8653049dd834d2816b6c7fb139 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 8 Jul 2026 17:41:45 -0400 Subject: [PATCH 164/287] Update frequency.py add print if frequency out of range --- frequency.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/frequency.py b/frequency.py index 460220fc..efef4ca0 100644 --- a/frequency.py +++ b/frequency.py @@ -11,20 +11,29 @@ def check_frequency(): global tx_doppler_freq_hz global rx_doppler_freq_hz + tx_OK = False + rx_OK = False if tx_doppler_freq_hz > 450000000: tx_doppler_freq_hz = 435200000 elif (tx_doppler_freq_hz < 420000000) and (tx_doppler_freq_hz > 148000000): tx_doppler_freq_hz = 434700000 - if (tx_doppler_freq_hz < 144000000): + elif (tx_doppler_freq_hz < 144000000): tx_doppler_freq_hz = 434600000 + else: + tx_OK = True if rx_doppler_freq_hz > 450000000: rx_doppler_freq_hz = 435200000 elif (rx_doppler_freq_hz < 420000000) and (rx_doppler_freq_hz > 148000000): rx_doppler_freq_hz = 434700000 - if (rx_doppler_freq_hz < 144000000): + elif (rx_doppler_freq_hz < 144000000): rx_doppler_freq_hz = 434600000 + else: + rx_OK == True + + if (tx_OK != True) or (rx_OK != True): + print("Error - frequency out of range!") iss_doppler_passes = { 88: [ From 7dbfb005170e2d4c25fcd8f536285ab97826db23 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 8 Jul 2026 17:42:44 -0400 Subject: [PATCH 165/287] Update frequency.py fix indent --- frequency.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frequency.py b/frequency.py index efef4ca0..1f6960f3 100644 --- a/frequency.py +++ b/frequency.py @@ -32,7 +32,7 @@ def check_frequency(): else: rx_OK == True - if (tx_OK != True) or (rx_OK != True): + if (tx_OK != True) or (rx_OK != True): print("Error - frequency out of range!") iss_doppler_passes = { From 9a76ea51eee76a3bb82fa05f3d48ed2ad0888769 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 8 Jul 2026 18:11:28 -0400 Subject: [PATCH 166/287] Update frequency.py fix rx_OK test --- frequency.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frequency.py b/frequency.py index 1f6960f3..c38034a4 100644 --- a/frequency.py +++ b/frequency.py @@ -30,7 +30,7 @@ def check_frequency(): elif (rx_doppler_freq_hz < 144000000): rx_doppler_freq_hz = 434600000 else: - rx_OK == True + rx_OK = True if (tx_OK != True) or (rx_OK != True): print("Error - frequency out of range!") From 6af4e0aeaaaf5fd61b7fd9b8e2fa8ba485d19f11 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 8 Jul 2026 18:12:06 -0400 Subject: [PATCH 167/287] Update log with sleep 1 --- log | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/log b/log index 472c8421..c4017153 100755 --- a/log +++ b/log @@ -45,7 +45,7 @@ if [ "$REALTIME" = "1" ] ; then while true; do cat /home/pi/CubeSatSim/frequency.txt | tr -d '\n' # echo - sleep 5 + sleep 1 printf "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b" done else From 9411c1ec29a0fe87330f128d3f38f39bc3bd1622 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 10 Jul 2026 12:39:10 -0400 Subject: [PATCH 168/287] Update config write to frequency.txt --- config | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config b/config index 2811fdcd..a80ae4f2 100755 --- a/config +++ b/config @@ -1168,6 +1168,8 @@ elif [ "$1" = "-F" ]; then echo $1 $2 $3 $4 $5 $6 $tx $rx $9 ${10} ${11} ${12} ${13} ${14} echo $1 $2 $3 $4 $5 $6 $tx $rx $9 ${10} ${11} ${12} ${13} ${14} > /home/pi/CubeSatSim/sim.cfg + echo ${7} ${8} > /home/pi/CubeSatSim/frequency.txt + echo echo "Restarting CubeSatSim with new configuration file" From 07dccfc9195084c9dd67bc07b1098200c08ce677 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 10 Jul 2026 12:41:17 -0400 Subject: [PATCH 169/287] Update config print rxf txf --- config | 3 +++ 1 file changed, 3 insertions(+) diff --git a/config b/config index a80ae4f2..5069e17c 100755 --- a/config +++ b/config @@ -1168,6 +1168,9 @@ elif [ "$1" = "-F" ]; then echo $1 $2 $3 $4 $5 $6 $tx $rx $9 ${10} ${11} ${12} ${13} ${14} echo $1 $2 $3 $4 $5 $6 $tx $rx $9 ${10} ${11} ${12} ${13} ${14} > /home/pi/CubeSatSim/sim.cfg + txf = ${7} * 1e6 + rxf = ${8} * 1e6 + echo $txf $rxf echo ${7} ${8} > /home/pi/CubeSatSim/frequency.txt echo From fefeb33b940b55a5705e8f02a2959d00bb1ddcfc Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 10 Jul 2026 12:46:32 -0400 Subject: [PATCH 170/287] Update config fix txf --- config | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config b/config index 5069e17c..b6e1398b 100755 --- a/config +++ b/config @@ -1168,10 +1168,10 @@ elif [ "$1" = "-F" ]; then echo $1 $2 $3 $4 $5 $6 $tx $rx $9 ${10} ${11} ${12} ${13} ${14} echo $1 $2 $3 $4 $5 $6 $tx $rx $9 ${10} ${11} ${12} ${13} ${14} > /home/pi/CubeSatSim/sim.cfg - txf = ${7} * 1e6 - rxf = ${8} * 1e6 + rxf=$(echo "$8 * 1000000" | bc) + txf=$(echo "$7 * 1000000" | bc) echo $txf $rxf - echo ${7} ${8} > /home/pi/CubeSatSim/frequency.txt + echo $txf $rxf > /home/pi/CubeSatSim/frequency.txt echo echo "Restarting CubeSatSim with new configuration file" From ffc5f3af505ddfd56a052c29ff8192f3cc4eba6b Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 11 Jul 2026 15:49:11 -0400 Subject: [PATCH 171/287] Update transmit.py print mode m error --- transmit.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 933518cd..84d1124a 100644 --- a/transmit.py +++ b/transmit.py @@ -1084,7 +1084,8 @@ if __name__ == "__main__": sleep(0.5) - except: + except Exception as e: + print(f"An error occurred: {e}") # command_control_check() sleep(1) elif (mode == 'm'): From 6f7453ed83b02065202b7827a9e394a0aa622b71 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 11 Jul 2026 15:52:00 -0400 Subject: [PATCH 172/287] Update transmit.py make update_doppler fm parameter optional --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 84d1124a..d4d6163f 100644 --- a/transmit.py +++ b/transmit.py @@ -510,7 +510,7 @@ iss_doppler_passes = { ] } -def update_doppler(fm): +def update_doppler(fm="yes"): try: global start_time From 26e735a4534256ba4f7939afd915f9ba91ac96ea Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 11 Jul 2026 15:53:24 -0400 Subject: [PATCH 173/287] Update transmit.py --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index d4d6163f..213b542e 100644 --- a/transmit.py +++ b/transmit.py @@ -1085,7 +1085,7 @@ if __name__ == "__main__": sleep(0.5) except Exception as e: - print(f"An error occurred: {e}") +# print(f"An error occurred: {e}") # command_control_check() sleep(1) elif (mode == 'm'): From c1697c344054b0751d3897dfc69f934decc329dc Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 12 Jul 2026 13:22:55 -0400 Subject: [PATCH 174/287] Update transmit.py shorten inter dit spacing --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 213b542e..ca10a2f6 100644 --- a/transmit.py +++ b/transmit.py @@ -614,7 +614,7 @@ def cw_transmit_char(character): print(duration) while (duration != 0): transmit_carrier(duration * morse_timing) - sleep(morse_timing * 0.6) + sleep(morse_timing * 0.4) # 6) i=i+1 duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] if duration == 1: From d992f21186fa51eca68910861cd046be86f280dc Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 12 Jul 2026 13:26:38 -0400 Subject: [PATCH 175/287] Update transmit.py change spacing --- transmit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index ca10a2f6..61f28734 100644 --- a/transmit.py +++ b/transmit.py @@ -602,7 +602,7 @@ def cw_transmit_string(string): if (character != ' '): cw_transmit_char(character); else: - sleep(6.0 * morse_timing); + sleep(7.0 * morse_timing); def cw_transmit_char(character): global morse_timing @@ -619,7 +619,7 @@ def cw_transmit_char(character): duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] if duration == 1: duration = 1.2 - sleep(morse_timing * 3) # 1.5); + sleep(morse_timing * 2.5) # 3) # 1.5); def transmit_carrier(duration): global tx_doppler_freq_hz From b4bc336165d81dcdd5449af313ba2b545a0e6fef Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 12 Jul 2026 13:33:19 -0400 Subject: [PATCH 176/287] Update transmit.py shorten inter char spacing --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 61f28734..6c7dd890 100644 --- a/transmit.py +++ b/transmit.py @@ -619,7 +619,7 @@ def cw_transmit_char(character): duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] if duration == 1: duration = 1.2 - sleep(morse_timing * 2.5) # 3) # 1.5); + sleep(morse_timing * 1.5) # 3) # 1.5); def transmit_carrier(duration): global tx_doppler_freq_hz From e3bc0048d4ac1bf3cc96ea4f449fa18a4bc5f251 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 12 Jul 2026 13:41:28 -0400 Subject: [PATCH 177/287] Update transmit.py middle --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 6c7dd890..28ed2909 100644 --- a/transmit.py +++ b/transmit.py @@ -619,7 +619,7 @@ def cw_transmit_char(character): duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] if duration == 1: duration = 1.2 - sleep(morse_timing * 1.5) # 3) # 1.5); + sleep(morse_timing * 2.0) # 3) # 1.5); def transmit_carrier(duration): global tx_doppler_freq_hz From 7ce89e04c7615934cf3cded7d708b1132c0a99a5 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 13 Jul 2026 12:16:26 -0400 Subject: [PATCH 178/287] Update transmit.py add -k 0.5 to timeout for tune --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 28ed2909..f9b2fc2b 100644 --- a/transmit.py +++ b/transmit.py @@ -625,7 +625,7 @@ def transmit_carrier(duration): global tx_doppler_freq_hz global txLed update_doppler("no") - command = "timeout " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 + command = "timeout -k 0.5 " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 start = "sudo tune -f " + str(tx_doppler_freq_hz) + " &" # + " & > /dev/null 2>&1" # 434.9e6 stop = "sudo rpitx -f 434.9e6 &" killrpitx = "sudo killall -9 rpitx &" From 80e97a6bd5270a068700ba8ec3094a330c254dab Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 13 Jul 2026 13:25:54 -0400 Subject: [PATCH 179/287] Update .gitignore add frequency.txt --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 041e454e..a63f7b2e 100644 --- a/.gitignore +++ b/.gitignore @@ -50,4 +50,4 @@ sim_mode_auto direwolf-pacsatsim-tmp.conf groundstation/direwolf-pacsat-tmp.conf tlm.bin -doppler.txt +frequency.txt From 28357f2c5a08cd4a2282a7f3a600efcba5343f8a Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 13 Jul 2026 13:27:37 -0400 Subject: [PATCH 180/287] Update transmit.py add 10 seconds sleep for doppler_mode --- transmit.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/transmit.py b/transmit.py index f9b2fc2b..460457f6 100644 --- a/transmit.py +++ b/transmit.py @@ -947,6 +947,9 @@ if __name__ == "__main__": doppler_table = iss_doppler_passes[TARGET_PASS] print(f"Pass Max Elevation: {TARGET_PASS}°") + + print("Sleeping 10 seconds") + sleep(10) # avoid jumping around at start sim_failure_check() if (hab_mode == True) and (mode == 'a'): From 685a996406bccf0e644b6fa4b1d37e78f68f076a Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 13 Jul 2026 13:29:40 -0400 Subject: [PATCH 181/287] Update transmit.py sleep 15 --- transmit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index 460457f6..6f7fbb4b 100644 --- a/transmit.py +++ b/transmit.py @@ -948,8 +948,8 @@ if __name__ == "__main__": doppler_table = iss_doppler_passes[TARGET_PASS] print(f"Pass Max Elevation: {TARGET_PASS}°") - print("Sleeping 10 seconds") - sleep(10) # avoid jumping around at start + print("Sleeping 15 seconds") + sleep(15) # avoid jumping around at start sim_failure_check() if (hab_mode == True) and (mode == 'a'): From 313ffd6575307231f593beef7e995fb0307f2b8b Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 13 Jul 2026 13:46:44 -0400 Subject: [PATCH 182/287] Update install remove packagekit --- install | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/install b/install index d6af501f..c0da5400 100755 --- a/install +++ b/install @@ -672,6 +672,14 @@ if [ -f "$FILE" ]; then sudo rm /etc/systemd/system/rpitx.service fi +FILE=/etc/systemd/system/packagekit.service +if [ -f "$FILE" ]; then + echo "Removing packagekit so won't auto check for updates on boot" + sudo systemctl stop packagekit + sudo systemctl disable packagekit + sudo apt-get remove -y packagekit +fi + FILE=/etc/systemd/system/transmit.service if [ -f "$FILE" ]; then if [[ $(diff /home/pi/CubeSatSim/systemd/transmit.service /etc/systemd/system/transmit.service) ]]; then From f00a226d76e37380ceb2c6641d4bf45af3035366 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 13 Jul 2026 14:00:09 -0400 Subject: [PATCH 183/287] Update install fix remove packagekit --- install | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/install b/install index c0da5400..c2110176 100755 --- a/install +++ b/install @@ -672,8 +672,7 @@ if [ -f "$FILE" ]; then sudo rm /etc/systemd/system/rpitx.service fi -FILE=/etc/systemd/system/packagekit.service -if [ -f "$FILE" ]; then +if [[ -z $(sudo systemctl is-active packagekit | grep inactive) ]]; then echo "Removing packagekit so won't auto check for updates on boot" sudo systemctl stop packagekit sudo systemctl disable packagekit From 9d9e85cc9b865231aa2fb89060b2dced42a1c2a9 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 14 Jul 2026 12:19:02 -0400 Subject: [PATCH 184/287] Update transmit.py doppler shift first sstv image --- transmit.py | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/transmit.py b/transmit.py index 6f7fbb4b..96e99557 100644 --- a/transmit.py +++ b/transmit.py @@ -546,8 +546,8 @@ def update_doppler(fm="yes"): program_fm(rx,tx,rxpl_value,sq,txpl_value) else: print("No frequency changes!") - - except: + except Exception as e: + print(f"An error occurred: {e}") print("update_doppler failed") morse_table = [ # 0-9, A-Z only by (ASCII - 48) @@ -606,7 +606,7 @@ def cw_transmit_string(string): def cw_transmit_char(character): global morse_timing -# update_doppler("no") +# ("no") i = 0 duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] if duration == 1: @@ -624,7 +624,7 @@ def cw_transmit_char(character): def transmit_carrier(duration): global tx_doppler_freq_hz global txLed - update_doppler("no") + ("no") command = "timeout -k 0.5 " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 start = "sudo tune -f " + str(tx_doppler_freq_hz) + " &" # + " & > /dev/null 2>&1" # 434.9e6 stop = "sudo rpitx -f 434.9e6 &" @@ -1188,6 +1188,10 @@ if __name__ == "__main__": if (command_tx == True): print ("Sending SSTV image") + if (doppler_mode): + update_doppler() + txf = tx_doppler_freq_hz / 1000 + tx = "{:.4f}".format(txf) output(txLed, 1) # battery_saver_check() @@ -1217,7 +1221,7 @@ if __name__ == "__main__": if (command_tx == True): print ("Sending SSTV image") - if (doppler_mode == True): + if (doppler_mode): update_doppler() txf = tx_doppler_freq_hz / 1000 tx = "{:.4f}".format(txf) @@ -1258,6 +1262,10 @@ if __name__ == "__main__": if (command_tx == True): print ("Sending SSTV image") + if (doppler_mode): + update_doppler() + txf = tx_doppler_freq_hz / 1000 + tx = "{:.4f}".format(txf) output(txLed, 1) # battery_saver_check() @@ -1291,7 +1299,7 @@ if __name__ == "__main__": while 1: if (command_tx == True): print ("Sending SSTV image") - if (doppler_mode == True): + if (doppler_mode): update_doppler() txf = tx_doppler_freq_hz / 1000 tx = "{:.4f}".format(txf) @@ -1323,7 +1331,7 @@ if __name__ == "__main__": system("(while true; do (sleep 10 && cat /home/pi/CubeSatSim/wav/sstv.wav); done) | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + tx + "e3 &") while 1: if (command_tx == True): - if (doppler_mode == True): + if (doppler_mode): update_doppler() txf = tx_doppler_freq_hz / 1000 tx = "{:.4f}".format(txf) @@ -1347,9 +1355,11 @@ if __name__ == "__main__": elif (mode == 'b') or (mode == 'j'): # command_control_check() if (mode == 'b'): - print("BPSK") + print("BPSK") else: print("FUNcube") + if (doppler_mode): + print("No doppler shift in this mode") print("turn on FM rx") output(pd, 1) output(ptt, 1) @@ -1419,7 +1429,7 @@ if __name__ == "__main__": while True: if (input(squelch) == False) and (command_tx == True): print("Carrier detected") - if (doppler_mode == True): + if (doppler_mode): update_doppler() start_repeater(tx_doppler_freq_hz) else: @@ -1430,6 +1440,8 @@ if __name__ == "__main__": stop_repeater() else: print("FSK") + if (doppler_mode): + print("No doppler shift in this mode") print("turn on FM rx") output(pd, 1) output(ptt, 1) From 2ca2993cec1f08d704ab14acdc62a10521a00bae Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 14 Jul 2026 18:06:35 -0400 Subject: [PATCH 185/287] Update transmit.py missing update_doppler --- transmit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index 96e99557..b673e446 100644 --- a/transmit.py +++ b/transmit.py @@ -606,7 +606,7 @@ def cw_transmit_string(string): def cw_transmit_char(character): global morse_timing -# ("no") +# update_doppler("no") i = 0 duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] if duration == 1: @@ -624,7 +624,7 @@ def cw_transmit_char(character): def transmit_carrier(duration): global tx_doppler_freq_hz global txLed - ("no") + update_doppler("no") command = "timeout -k 0.5 " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 start = "sudo tune -f " + str(tx_doppler_freq_hz) + " &" # + " & > /dev/null 2>&1" # 434.9e6 stop = "sudo rpitx -f 434.9e6 &" From a974c91746250b5741e642fe36e9e7fef801ca88 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 15 Jul 2026 01:35:38 -0400 Subject: [PATCH 186/287] Update transmit.py add doppler to pacsatsim --- transmit.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/transmit.py b/transmit.py index b673e446..7b0571ce 100644 --- a/transmit.py +++ b/transmit.py @@ -1020,6 +1020,8 @@ if __name__ == "__main__": while (input(ptt) != 1): sleep(0.2) output(txLed, 0) + if (mode == 'p') and (doppler_mode): + update_doppler() # print("0") else: # sleep(0.1) @@ -1032,6 +1034,8 @@ if __name__ == "__main__": sleep(0.05) ## system(stop_rpitx) output(txLed, 0) + if (mode == 'p') and (doppler_mode): + update_doppler("no") # print("0") # sleep(10) From d7967603d11aa1678af018cd5d049501cc36587e Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 15 Jul 2026 01:54:45 -0400 Subject: [PATCH 187/287] Update transmit.py pacsatsim no doppler in safe mode --- transmit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index 7b0571ce..c3a55910 100644 --- a/transmit.py +++ b/transmit.py @@ -1034,8 +1034,8 @@ if __name__ == "__main__": sleep(0.05) ## system(stop_rpitx) output(txLed, 0) - if (mode == 'p') and (doppler_mode): - update_doppler("no") +# if (mode == 'p') and (doppler_mode): +# update_doppler("no") # print("0") # sleep(10) From fe2bc2d797104e148545a0b3b0a30ba1246c0977 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 15 Jul 2026 11:37:45 -0400 Subject: [PATCH 188/287] Update config add doppler frequency print --- config | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/config b/config index b6e1398b..c0003e15 100755 --- a/config +++ b/config @@ -260,22 +260,33 @@ if [ "$1" = "" ]; then echo "Random Failure Mode is OFF" fi +HAB=$9 +SQUELCH=$6 +RXPL=${10} +TXPL=${11} + # echo ${14} if [ "${14}" = "sim" ] ; then echo "Simulated Doppler frequency shift enabled" + echo -n "Current TX and RX Frequency (Hz) is: " + cat /home/pi/CubeSatSim/frequency.txt +# echo -n ${7} +# echo -n " MHz, RX Frequency is: " +# echo -n ${8} +# echo " MHz" elif [ "${14}" = "rig" ] ; then echo "rigctld Doppler frequency shift enabled" else echo "Doppler frequency shift is OFF" - fi + echo -n "TX Frequency is: " + echo -n ${7} + echo -n " MHz, RX Frequency is: " + echo -n ${8} + echo " MHz" - echo -n "TX Frequency is: " - echo -n ${7} - echo -n " MHz, RX Frequency is: " - echo -n ${8} - echo " MHz" + fi - if [ "$9" = "yes" ] || [ "$9" = "y" ]; then + if [ "$HAB" = "yes" ] || [ "$HAB" = "y" ]; then echo "Balloon mode is ON" else echo "Balloon mode is OFF" @@ -295,7 +306,7 @@ if [ "$1" = "" ]; then echo "Squelch is off since PacSat or PacSat Ground Station mode" else echo -n "Squelch level is: " - echo $6 + echo $SQUELCH fi # echo @@ -327,10 +338,10 @@ if [ "$1" = "" ]; then # echo echo -n "RX PL code is: " - echo -n ${10} + echo -n $RXPL # echo echo -n " TX PL code is: " - echo ${11} + echo $TXPL # echo FILE=/home/pi/CubeSatSim/battery_saver @@ -377,7 +388,8 @@ if [ "$1" = "" ]; then echo -e "Current sim.cfg configuration file:" # echo - echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} +# echo $1 $2 $3 $4 $5 $SQUELCH $7 $8 $HAB $RXPL $TXPL ${12} ${13} ${14} + cat /home/pi/CubeSatSim/sim.cfg echo echo "To change, include an OPTION" From 4c0bcec947fb49d9510800e2b23db6fcea924f0e Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 15 Jul 2026 11:38:51 -0400 Subject: [PATCH 189/287] Update config add newline after frequency --- config | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config b/config index c0003e15..717addf6 100755 --- a/config +++ b/config @@ -270,12 +270,16 @@ TXPL=${11} echo "Simulated Doppler frequency shift enabled" echo -n "Current TX and RX Frequency (Hz) is: " cat /home/pi/CubeSatSim/frequency.txt + echo # echo -n ${7} # echo -n " MHz, RX Frequency is: " # echo -n ${8} # echo " MHz" elif [ "${14}" = "rig" ] ; then echo "rigctld Doppler frequency shift enabled" + echo -n "Current TX and RX Frequency (Hz) is: " + cat /home/pi/CubeSatSim/frequency.txt + echo else echo "Doppler frequency shift is OFF" echo -n "TX Frequency is: " From 0d9472c0f762bf4e2b563c9509fbf9e183f5dbd8 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 15 Jul 2026 11:52:35 -0400 Subject: [PATCH 190/287] Update config to reboot if mode m and Doppler --- config | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/config b/config index 717addf6..ca47ed23 100755 --- a/config +++ b/config @@ -94,11 +94,21 @@ function check_restart { value=`cat /home/pi/CubeSatSim/.mode` echo "$value" > /dev/null set -- $value + MODE=$1 -# if [ "$1" = "p" ] || [ "$1" = "P" ] ; then + value=`cat /home/pi/CubeSatSim/sim.cfg` + echo "$value" > /dev/null + set -- $value + if [ "${14}" = "sim" ] || [ "${14}" = "rig" ] ; then + DOPPLER=1 + else + DOPPLER=0 + fi + +# if [ "$MODE" = "p" ] || [ "$MODE" = "P" ] ; then # reboot=1 #el - if [ "$1" == "f" ] || [ "$1" == "b" ] || [ "$1" == "e" ] || [ "$1" == "j" ] ; then + if [ "$MODE" == "f" ] || [ "$MODE" == "b" ] || [ "$MODE" == "e" ] || [ "$MODE" == "j" ] ; then FILE=/home/pi/CubeSatSim/battery_saver if [ -f "$FILE" ]; then restart=1 @@ -107,6 +117,8 @@ function check_restart { reboot=1 # echo "Need to reboot" fi + elif [ "$MODE" == "m" ] || [ "$DOPPLER" == "1" ] ; then + reboot=1 else restart=1 # echo "Need to restart" @@ -122,11 +134,11 @@ echo sudo modprobe snd-aloop -# if [ "$2" = "n" ] ; then +# if [ "$2" = "-n" ] ; then if [ -z "$2" ] ; then noreboot=0 else - if [ "$2" = "n" ] ; then + if [ "$2" = "-n" ] ; then echo "Reboot disabled" noreboot=1 else @@ -1135,7 +1147,7 @@ elif [ "$1" = "-P" ]; then ## echo "Rebooting CubeSatSim with new configuration file" ## echo - reboot=1 + restart=1 ## sudo reboot now # sudo systemctl restart cubesatsim From ab50a56ad77a9cd9510273989dd019d3ca326f36 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 15 Jul 2026 12:02:42 -0400 Subject: [PATCH 191/287] Update config restart for mode m if Doppler mode --- config | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/config b/config index ca47ed23..7400c4a8 100755 --- a/config +++ b/config @@ -450,7 +450,21 @@ elif [ "$1" = "-m" ]; then else echo "changing CubeSatSim to CW mode" - check_restart + + value=`cat /home/pi/CubeSatSim/sim.cfg` + echo "$value" > /dev/null + set -- $value + if [ "${14}" = "sim" ] || [ "${14}" = "rig" ] ; then + DOPPLER=1 + else + DOPPLER=0 + + if [ "$DOPPLER" = "1" ] ; then + restart=1 + else + check_restart + fi + sudo echo "m" > /home/pi/CubeSatSim/.mode fi From 6e593581332e8d6e88f7165f173235edf2df9a6e Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 15 Jul 2026 12:03:36 -0400 Subject: [PATCH 192/287] Update config missing fi --- config | 1 + 1 file changed, 1 insertion(+) diff --git a/config b/config index 7400c4a8..f1acfefb 100755 --- a/config +++ b/config @@ -458,6 +458,7 @@ elif [ "$1" = "-m" ]; then DOPPLER=1 else DOPPLER=0 + fi if [ "$DOPPLER" = "1" ] ; then restart=1 From 3cd280dacddfee9e581254ae2ee26fed77331cd5 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 15 Jul 2026 13:27:52 -0400 Subject: [PATCH 193/287] Update transmit.py fix new frequency print --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index c3a55910..c3acd740 100644 --- a/transmit.py +++ b/transmit.py @@ -530,7 +530,7 @@ def update_doppler(fm="yes"): new_tx_frequency = int(frequencies[0]) new_rx_frequency = int(frequencies[1]) - print(f"New frequencies: {new_tx_frequency}, Second number: {new_tx_frequency}") + print(f"New frequencies: {new_tx_frequency}, Second number: {new_rx_frequency}") if (tx_doppler_freq_hz != new_tx_frequency) or (rx_doppler_freq_hz != new_rx_frequency): tx_doppler_freq_hz = new_tx_frequency From eac148dcf99d5409239c6212c6b46b4fe2d0232f Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 15 Jul 2026 13:30:59 -0400 Subject: [PATCH 194/287] Update transmit.py fix rx doppler shift --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index c3acd740..5d5c31f3 100644 --- a/transmit.py +++ b/transmit.py @@ -536,7 +536,7 @@ def update_doppler(fm="yes"): tx_doppler_freq_hz = new_tx_frequency rx_doppler_freq_hz = new_rx_frequency print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") - rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz +# rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") if (fm != "no"): rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) From 339ed5d186ebcd99c8c8bec7deb8505a1f56a895 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 16 Jul 2026 16:59:34 -0400 Subject: [PATCH 195/287] Update transmit.py fix sstv tx 1e6 --- transmit.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/transmit.py b/transmit.py index 5d5c31f3..05bf3623 100644 --- a/transmit.py +++ b/transmit.py @@ -541,7 +541,7 @@ def update_doppler(fm="yes"): if (fm != "no"): rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) if (mode != 'e'): - tx = "{:.4f}".format(tx_doppler_freq_hz/1e6) + "{:.4f}".format(tx_doppler_freq_hz/1e6) print(tx) program_fm(rx,tx,rxpl_value,sq,txpl_value) else: @@ -628,7 +628,7 @@ def transmit_carrier(duration): command = "timeout -k 0.5 " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 start = "sudo tune -f " + str(tx_doppler_freq_hz) + " &" # + " & > /dev/null 2>&1" # 434.9e6 stop = "sudo rpitx -f 434.9e6 &" - killrpitx = "sudo killall -9 rpitx &" + killrpi"sudo killall -9 rpitx &" killtune = "sudo killall -9 tune &" output(txLed, 1) # system(start) @@ -651,7 +651,7 @@ green = 16 powerPin = 16 morse_timing = 0.09 # 0.1 -command_tx = True +command_True setup(13, "up") setup(12, "up") @@ -756,9 +756,9 @@ if __name__ == "__main__": try: file = open("/home/pi/CubeSatSim/beacon_off") file.close() - command_tx = False + command_False except: - command_tx = True + command_True if (debug_mode == 1): print("Can't open beacon_off file, defaulting to False") print("Command_tx: ") @@ -785,7 +785,7 @@ if __name__ == "__main__": tx_value = '0' rx_value = '0' sq = '0' - tx = '434.9000' + '434.9000' rx = '435.0000' txr = '144.9000' sim_mode = False @@ -1060,7 +1060,7 @@ if __name__ == "__main__": output(txLed, 1) if (doppler_mode == True): update_doppler() - txf = tx_doppler_freq_hz / 1000 + txf = tx_doppler_freq_hz / 1e6 tx = "{:.4f}".format(txf) if (txc): sim_failure_check() @@ -1129,7 +1129,7 @@ if __name__ == "__main__": output(txLed, 1) if (doppler_mode == True): update_doppler() - txf = tx_doppler_freq_hz / 1000 + txf = tx_doppler_freq_hz / 1e6 tx = "{:.4f}".format(txf) if (txc): sim_failure_check() @@ -1194,7 +1194,7 @@ if __name__ == "__main__": print ("Sending SSTV image") if (doppler_mode): update_doppler() - txf = tx_doppler_freq_hz / 1000 + txf = tx_doppler_freq_hz / 1e6 tx = "{:.4f}".format(txf) output(txLed, 1) # battery_saver_check() @@ -1227,7 +1227,7 @@ if __name__ == "__main__": print ("Sending SSTV image") if (doppler_mode): update_doppler() - txf = tx_doppler_freq_hz / 1000 + txf = tx_doppler_freq_hz / 1e6 tx = "{:.4f}".format(txf) output(txLed, 1) @@ -1268,7 +1268,7 @@ if __name__ == "__main__": print ("Sending SSTV image") if (doppler_mode): update_doppler() - txf = tx_doppler_freq_hz / 1000 + txf = tx_doppler_freq_hz / 1e6 tx = "{:.4f}".format(txf) output(txLed, 1) @@ -1305,7 +1305,7 @@ if __name__ == "__main__": print ("Sending SSTV image") if (doppler_mode): update_doppler() - txf = tx_doppler_freq_hz / 1000 + txf = tx_doppler_freq_hz / 1e6 tx = "{:.4f}".format(txf) output(txLed, 1) @@ -1337,7 +1337,7 @@ if __name__ == "__main__": if (command_tx == True): if (doppler_mode): update_doppler() - txf = tx_doppler_freq_hz / 1000 + txf = tx_doppler_freq_hz / 1e6 tx = "{:.4f}".format(txf) output(txLed, 1) From b885791c599e7275e8593b309285ab274b63bc8b Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 16 Jul 2026 17:05:26 -0400 Subject: [PATCH 196/287] Update transmit.py fix tx mistake --- transmit.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/transmit.py b/transmit.py index 05bf3623..6177e89c 100644 --- a/transmit.py +++ b/transmit.py @@ -541,7 +541,7 @@ def update_doppler(fm="yes"): if (fm != "no"): rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) if (mode != 'e'): - "{:.4f}".format(tx_doppler_freq_hz/1e6) + tx = "{:.4f}".format(tx_doppler_freq_hz/1e6) print(tx) program_fm(rx,tx,rxpl_value,sq,txpl_value) else: @@ -628,7 +628,7 @@ def transmit_carrier(duration): command = "timeout -k 0.5 " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 start = "sudo tune -f " + str(tx_doppler_freq_hz) + " &" # + " & > /dev/null 2>&1" # 434.9e6 stop = "sudo rpitx -f 434.9e6 &" - killrpi"sudo killall -9 rpitx &" + killrpitx = "sudo killall -9 rpitx &" killtune = "sudo killall -9 tune &" output(txLed, 1) # system(start) @@ -651,7 +651,7 @@ green = 16 powerPin = 16 morse_timing = 0.09 # 0.1 -command_True +command_tx = True setup(13, "up") setup(12, "up") @@ -756,9 +756,9 @@ if __name__ == "__main__": try: file = open("/home/pi/CubeSatSim/beacon_off") file.close() - command_False + command_tx = False except: - command_True + command_tx = True if (debug_mode == 1): print("Can't open beacon_off file, defaulting to False") print("Command_tx: ") @@ -785,7 +785,7 @@ if __name__ == "__main__": tx_value = '0' rx_value = '0' sq = '0' - '434.9000' + tx = '434.9000' rx = '435.0000' txr = '144.9000' sim_mode = False From 8aec47fe7457e592a51c9170ede3dfe0e3d14d10 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 16 Jul 2026 17:06:33 -0400 Subject: [PATCH 197/287] Update transmit.py only sleep 15 if CW mode --- transmit.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index 6177e89c..ea401413 100644 --- a/transmit.py +++ b/transmit.py @@ -948,8 +948,9 @@ if __name__ == "__main__": doppler_table = iss_doppler_passes[TARGET_PASS] print(f"Pass Max Elevation: {TARGET_PASS}°") - print("Sleeping 15 seconds") - sleep(15) # avoid jumping around at start + if (mode == 'm'): + print("Sleeping 15 seconds") + sleep(15) # avoid CW jumping around at start sim_failure_check() if (hab_mode == True) and (mode == 'a'): From 11b364558046e771cbbcb4d9d2c4632748a95896 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 16 Jul 2026 17:11:01 -0400 Subject: [PATCH 198/287] Update transmit.py print mode --- transmit.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/transmit.py b/transmit.py index ea401413..b1e1dae2 100644 --- a/transmit.py +++ b/transmit.py @@ -948,6 +948,8 @@ if __name__ == "__main__": doppler_table = iss_doppler_passes[TARGET_PASS] print(f"Pass Max Elevation: {TARGET_PASS}°") + print("MODE: ") + print(mode) if (mode == 'm'): print("Sleeping 15 seconds") sleep(15) # avoid CW jumping around at start From 42683a9dbf443bbadcbb695fd146af4c59f1f1ea Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 16 Jul 2026 17:34:06 -0400 Subject: [PATCH 199/287] Update config add mode check to Doppler mode print --- config | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/config b/config index f1acfefb..fc7a1783 100755 --- a/config +++ b/config @@ -278,7 +278,14 @@ RXPL=${10} TXPL=${11} # echo ${14} - if [ "${14}" = "sim" ] ; then + if [ ( "${14}" = "sim" || "${14}" = "rig" ) && ( "$MODE" = "f" || "$MODE" = "b" || "$MODE" = "j") ] ; then + echo "Doppler frequency shift is ON but not active in this mode (only APRS, CW, SSTV, and Repeater modes)" + echo -n "TX Frequency is: " + echo -n ${7} + echo -n " MHz, RX Frequency is: " + echo -n ${8} + echo " MHz" + elif [ "${14}" = "sim" ] ; then echo "Simulated Doppler frequency shift enabled" echo -n "Current TX and RX Frequency (Hz) is: " cat /home/pi/CubeSatSim/frequency.txt From b036d4b8b0460cf02423f299c7979bd2689396ba Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 16 Jul 2026 17:35:51 -0400 Subject: [PATCH 200/287] Update config try == --- config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config b/config index fc7a1783..22cf6b0e 100755 --- a/config +++ b/config @@ -278,7 +278,7 @@ RXPL=${10} TXPL=${11} # echo ${14} - if [ ( "${14}" = "sim" || "${14}" = "rig" ) && ( "$MODE" = "f" || "$MODE" = "b" || "$MODE" = "j") ] ; then + if [ ( "${14}" == "sim" || "${14}" == "rig" ) && ( "$MODE" == "f" || "$MODE" == "b" || "$MODE" == "j") ] ; then echo "Doppler frequency shift is ON but not active in this mode (only APRS, CW, SSTV, and Repeater modes)" echo -n "TX Frequency is: " echo -n ${7} From 464f1500568188589505704dc2033ba6f0d191fd Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 16 Jul 2026 17:36:46 -0400 Subject: [PATCH 201/287] Update config try [[ --- config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config b/config index 22cf6b0e..e2e08d12 100755 --- a/config +++ b/config @@ -278,7 +278,7 @@ RXPL=${10} TXPL=${11} # echo ${14} - if [ ( "${14}" == "sim" || "${14}" == "rig" ) && ( "$MODE" == "f" || "$MODE" == "b" || "$MODE" == "j") ] ; then + if [[ ( "${14}" == "sim" || "${14}" == "rig" ) && ( "$MODE" == "f" || "$MODE" == "b" || "$MODE" == "j") ]] ; then echo "Doppler frequency shift is ON but not active in this mode (only APRS, CW, SSTV, and Repeater modes)" echo -n "TX Frequency is: " echo -n ${7} From 8a22c8788d05eb71b1b56e544c594d761a89b16f Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 16 Jul 2026 17:39:10 -0400 Subject: [PATCH 202/287] Update config add approximately for rpitx modes --- config | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/config b/config index e2e08d12..4d8c580f 100755 --- a/config +++ b/config @@ -280,7 +280,7 @@ TXPL=${11} # echo ${14} if [[ ( "${14}" == "sim" || "${14}" == "rig" ) && ( "$MODE" == "f" || "$MODE" == "b" || "$MODE" == "j") ]] ; then echo "Doppler frequency shift is ON but not active in this mode (only APRS, CW, SSTV, and Repeater modes)" - echo -n "TX Frequency is: " + echo -n "TX Frequency is approximately: " echo -n ${7} echo -n " MHz, RX Frequency is: " echo -n ${8} @@ -299,6 +299,13 @@ TXPL=${11} echo -n "Current TX and RX Frequency (Hz) is: " cat /home/pi/CubeSatSim/frequency.txt echo + elif [[ ( "$MODE" == "f" || "$MODE" == "b" || "$MODE" == "j") ]] ; then + echo "Doppler frequency shift is OFF" + echo -n "TX Frequency is approximately: " + echo -n ${7} + echo -n " MHz, RX Frequency is: " + echo -n ${8} + echo " MHz" else echo "Doppler frequency shift is OFF" echo -n "TX Frequency is: " From d5440172be5fcabfeba1a82e05e14bc6d3d94337 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 16 Jul 2026 17:49:39 -0400 Subject: [PATCH 203/287] Update config reboot if turning Doppler off in CW mode --- config | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/config b/config index 4d8c580f..4c9e188b 100755 --- a/config +++ b/config @@ -2011,7 +2011,15 @@ elif [ "$1" = "-K" ]; then echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} $doppler > /home/pi/CubeSatSim/sim.cfg echo - restart=1 + value=`cat /home/pi/CubeSatSim/.mode` + echo "$value" > /dev/null + set -- $value + + if [[ ( "$sim" == "y" || "$sim" == "yes" ) && ( "$1" == "m" ) && ( "$doppler" == "no" ) ]] ; then + reboot=1 + else + restart=1 + fi elif [ "$1" = "-h" ]; then From 5fd5ec7560a64d25219aae2a9cd48fffa539283f Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 16 Jul 2026 18:00:51 -0400 Subject: [PATCH 204/287] Update config always restart when changing Doppler mode --- config | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/config b/config index 4c9e188b..5ae66550 100755 --- a/config +++ b/config @@ -1969,6 +1969,7 @@ elif [ "$1" = "-K" ]; then value=`cat /home/pi/CubeSatSim/sim.cfg` echo "$value" > /dev/null set -- $value + doppler="${14}" if [ "${14}" = "sim" ] ; then echo "Simulated Doppler frequency shift mode enabled" @@ -2015,11 +2016,11 @@ elif [ "$1" = "-K" ]; then echo "$value" > /dev/null set -- $value - if [[ ( "$sim" == "y" || "$sim" == "yes" ) && ( "$1" == "m" ) && ( "$doppler" == "no" ) ]] ; then - reboot=1 - else +# if [[ ( "$doppler" == "y" || "$doppler" == "yes" ) && ( "$1" == "m" ) && ( "$doppler" == "no" ) ]] ; then +# reboot=1 +# else restart=1 - fi +# fi elif [ "$1" = "-h" ]; then From 70e9699d012858f778b2749ed9cded89ac329502 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 17 Jul 2026 00:19:42 -0400 Subject: [PATCH 205/287] Update transmit.py initialize tx_doppler_start for repeater --- transmit.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/transmit.py b/transmit.py index b1e1dae2..ce1d3529 100644 --- a/transmit.py +++ b/transmit.py @@ -932,17 +932,17 @@ if __name__ == "__main__": # if (mode != 'e'): program_fm(rx,tx,rxpl_value,sq,txpl_value) - if (doppler_mode == True): - if (mode == 'e'): - tx_doppler_start_hz = txrf * 1e6 - else: - tx_doppler_start_hz = txf * 1e6 - tx_doppler_shift_hz = 0 - print(f"Tx center frequency: {tx_doppler_start_hz}") - rx_doppler_start_hz = rxf * 1e6 - rx_doppler_shift_hz = 0 - print(f"Rx center frequency: {rx_doppler_start_hz}") - + if (mode == 'e'): + tx_doppler_start_hz = txrf * 1e6 + else: + tx_doppler_start_hz = txf * 1e6 + tx_doppler_shift_hz = 0 + print(f"Tx center frequency: {tx_doppler_start_hz}") + rx_doppler_start_hz = rxf * 1e6 + rx_doppler_shift_hz = 0 + print(f"Rx center frequency: {rx_doppler_start_hz}") + + if (doppler_mode == True): TARGET_PASS = 85 # Maximum elevation profile doppler_table = iss_doppler_passes[TARGET_PASS] From cd0f26621f7e0b9e272cd81fd3c37a1dbf3edd67 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 17 Jul 2026 00:24:46 -0400 Subject: [PATCH 206/287] Update transmit.py txrf instead of txr --- transmit.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/transmit.py b/transmit.py index ce1d3529..d03d130f 100644 --- a/transmit.py +++ b/transmit.py @@ -932,17 +932,18 @@ if __name__ == "__main__": # if (mode != 'e'): program_fm(rx,tx,rxpl_value,sq,txpl_value) - if (mode == 'e'): - tx_doppler_start_hz = txrf * 1e6 - else: - tx_doppler_start_hz = txf * 1e6 - tx_doppler_shift_hz = 0 - print(f"Tx center frequency: {tx_doppler_start_hz}") - rx_doppler_start_hz = rxf * 1e6 - rx_doppler_shift_hz = 0 - print(f"Rx center frequency: {rx_doppler_start_hz}") - if (doppler_mode == True): + + if (mode == 'e'): + tx_doppler_start_hz = txrf * 1e6 + else: + tx_doppler_start_hz = txf * 1e6 + tx_doppler_shift_hz = 0 + print(f"Tx center frequency: {tx_doppler_start_hz}") + rx_doppler_start_hz = rxf * 1e6 + rx_doppler_shift_hz = 0 + print(f"Rx center frequency: {rx_doppler_start_hz}") + TARGET_PASS = 85 # Maximum elevation profile doppler_table = iss_doppler_passes[TARGET_PASS] @@ -1440,7 +1441,7 @@ if __name__ == "__main__": update_doppler() start_repeater(tx_doppler_freq_hz) else: - start_repeater(txr) + start_repeater(txrf * 1e6) while (input(squelch) == False): sleep(1) print("No carrier detected") From e7b151f5aa2ec9ba0f0fe61f50c8fd83ea72aed0 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 18 Jul 2026 11:47:02 -0400 Subject: [PATCH 207/287] Update transmit.py PacSat battery saver carrier on/off --- transmit.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/transmit.py b/transmit.py index d03d130f..22a81b4b 100644 --- a/transmit.py +++ b/transmit.py @@ -1007,7 +1007,7 @@ if __name__ == "__main__": output(txLed, 0) print("0") rpitx = "arecord -D plughw:CARD=Loopback,DEV=1 -f S16_LE -r 48000 -c 1 | csdr convert_s16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1 &" - stop_rpitx = "sudo killall -9 rpitx && sudo killall -9 arecord && sudo rpitx -m RF -f 434.9e3 > /dev/null 2>&1" + stop_rpitx = "sudo killall -9 rpitx && sudo killall -9 arecord && sudo rpitx -m RF -f 434.9e3 > /dev/null 2>&1" if not txc: print("txc is:") print(txc) @@ -1026,20 +1026,21 @@ if __name__ == "__main__": output(txLed, 0) if (mode == 'p') and (doppler_mode): update_doppler() + rpitx = "arecord -D plughw:CARD=Loopback,DEV=1 -f S16_LE -r 48000 -c 1 | csdr convert_s16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1 &" # print("0") else: # sleep(0.1) while (input(17) == 0): sleep(0.05) -## system(rpitx) + system(rpitx) output(txLed, 1) # print("1") while (input(17) == 1): sleep(0.05) -## system(stop_rpitx) + system(stop_rpitx) output(txLed, 0) -# if (mode == 'p') and (doppler_mode): -# update_doppler("no") + if (mode == 'p') and (doppler_mode): + update_doppler("no") # print("0") # sleep(10) From 2185f9fcd6ee33070c7a1b429de984832cc5f7d9 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 18 Jul 2026 11:53:48 -0400 Subject: [PATCH 208/287] Update transmit.py change stop_rpitx --- transmit.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 22a81b4b..fc0f5303 100644 --- a/transmit.py +++ b/transmit.py @@ -1007,7 +1007,8 @@ if __name__ == "__main__": output(txLed, 0) print("0") rpitx = "arecord -D plughw:CARD=Loopback,DEV=1 -f S16_LE -r 48000 -c 1 | csdr convert_s16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1 &" - stop_rpitx = "sudo killall -9 rpitx && sudo killall -9 arecord && sudo rpitx -m RF -f 434.9e3 > /dev/null 2>&1" +# stop_rpitx = "sudo killall -9 rpitx && sudo killall -9 arecord && sudo rpitx -m RF -f 434.9e3 > /dev/null 2>&1" + stop_rpitx = "sudo killall -9 arecord && sudo rpitx -m RF -f 434.9e3 > /dev/null 2>&1" if not txc: print("txc is:") print(txc) From a3fe4c39e3a16fc2710f5272335ad322db7a915b Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 18 Jul 2026 12:12:35 -0400 Subject: [PATCH 209/287] Update transmit.py update fm in Pacsat battery saver --- transmit.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index fc0f5303..a37c0914 100644 --- a/transmit.py +++ b/transmit.py @@ -1027,7 +1027,6 @@ if __name__ == "__main__": output(txLed, 0) if (mode == 'p') and (doppler_mode): update_doppler() - rpitx = "arecord -D plughw:CARD=Loopback,DEV=1 -f S16_LE -r 48000 -c 1 | csdr convert_s16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1 &" # print("0") else: # sleep(0.1) @@ -1041,7 +1040,9 @@ if __name__ == "__main__": system(stop_rpitx) output(txLed, 0) if (mode == 'p') and (doppler_mode): - update_doppler("no") + update_doppler() # "no") + rpitx = "arecord -D plughw:CARD=Loopback,DEV=1 -f S16_LE -r 48000 -c 1 | csdr convert_s16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1 &" + # print("0") # sleep(10) From c5b968a427dab2374f84e7d5726b4b1c910b83d1 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 18 Jul 2026 14:48:24 -0400 Subject: [PATCH 210/287] Update transmit.py Pacsat safe mode don't start rpitx --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index a37c0914..7513cb7b 100644 --- a/transmit.py +++ b/transmit.py @@ -1013,7 +1013,7 @@ if __name__ == "__main__": print("txc is:") print(txc) system(stop_rpitx) - system(rpitx) +# system(rpitx) print("Safe Mode!!") while (True): if (txc): From 1dc32da88384696cb3aa201756f529814ff51a63 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 01:09:21 -0400 Subject: [PATCH 211/287] Update transmit.py for rigctl add offset to tx to get rx --- transmit.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 7513cb7b..6656cffc 100644 --- a/transmit.py +++ b/transmit.py @@ -522,6 +522,7 @@ def update_doppler(fm="yes"): global doppler_table global mode global tx + global rigctl print("update_doppler") with open("/home/pi/CubeSatSim/frequency.txt", "r") as file: @@ -529,9 +530,13 @@ def update_doppler(fm="yes"): new_tx_frequency = int(frequencies[0]) new_rx_frequency = int(frequencies[1]) - + print(f"New frequencies: {new_tx_frequency}, Second number: {new_rx_frequency}") + if rigctl: + new_rx_frequency = new_tx_frequency + 289169117 # AO-73 U/V cross band repeater offset + print("Calcualting RX frequency using offset from TX frequency" + if (tx_doppler_freq_hz != new_tx_frequency) or (rx_doppler_freq_hz != new_rx_frequency): tx_doppler_freq_hz = new_tx_frequency rx_doppler_freq_hz = new_rx_frequency @@ -792,6 +797,7 @@ if __name__ == "__main__": sim_config = False hab_mode = False doppler_mode = False + rigctl = False try: file = open("/home/pi/CubeSatSim/sim.cfg") @@ -852,6 +858,7 @@ if __name__ == "__main__": print("Simulated Doppler frequency shift is enabled.") elif config[13] == 'rig': doppler_mode = True + rigctl = True # system("sudo systemctl restart frequency") print("rigctl Doppler frequency shift is enabled.") # else: From b4758d6e7f8f94d09de75a2584565534513f9777 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 01:19:16 -0400 Subject: [PATCH 212/287] Update transmit.py missing ) --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 6656cffc..fa64c04c 100644 --- a/transmit.py +++ b/transmit.py @@ -535,7 +535,7 @@ def update_doppler(fm="yes"): if rigctl: new_rx_frequency = new_tx_frequency + 289169117 # AO-73 U/V cross band repeater offset - print("Calcualting RX frequency using offset from TX frequency" + print("Calculating RX frequency using offset from TX frequency") if (tx_doppler_freq_hz != new_tx_frequency) or (rx_doppler_freq_hz != new_rx_frequency): tx_doppler_freq_hz = new_tx_frequency From 6244ee4cbfef4c28eda1e1d456eda2cdfdb996c9 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 01:37:24 -0400 Subject: [PATCH 213/287] Update transmit.py change to vfo B --- transmit.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/transmit.py b/transmit.py index fa64c04c..4637bf50 100644 --- a/transmit.py +++ b/transmit.py @@ -528,13 +528,14 @@ def update_doppler(fm="yes"): with open("/home/pi/CubeSatSim/frequency.txt", "r") as file: frequencies = file.read().split() - new_tx_frequency = int(frequencies[0]) - new_rx_frequency = int(frequencies[1]) + vfoA_frequency = int(frequencies[0]) + vfoB_frequency = int(frequencies[1]) - print(f"New frequencies: {new_tx_frequency}, Second number: {new_rx_frequency}") + print(f"New vfoA: {new_tx_frequency}, new vfoB: {new_rx_frequency}") if rigctl: - new_rx_frequency = new_tx_frequency + 289169117 # AO-73 U/V cross band repeater offset + new_tx_frequency = vfoB_frequency + new_rx_frequency = vfoB_frequency + 289169117 # AO-73 U/V cross band repeater offset print("Calculating RX frequency using offset from TX frequency") if (tx_doppler_freq_hz != new_tx_frequency) or (rx_doppler_freq_hz != new_rx_frequency): From 75e0044eeae93c2117970d070bf8497c3047828b Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 01:43:30 -0400 Subject: [PATCH 214/287] Update transmit.py print tx and rx --- transmit.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 4637bf50..7b8c6e02 100644 --- a/transmit.py +++ b/transmit.py @@ -537,13 +537,15 @@ def update_doppler(fm="yes"): new_tx_frequency = vfoB_frequency new_rx_frequency = vfoB_frequency + 289169117 # AO-73 U/V cross band repeater offset print("Calculating RX frequency using offset from TX frequency") + print(f"Tx Frequency: {new_tx_frequency:.0f}") + print(f"Rx Frequency: {new_rx_frequency:.0f}") if (tx_doppler_freq_hz != new_tx_frequency) or (rx_doppler_freq_hz != new_rx_frequency): tx_doppler_freq_hz = new_tx_frequency rx_doppler_freq_hz = new_rx_frequency print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") # rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz - print(f"Rx Doppler shift: {rx_doppler_freq_hz:.0f}") + print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") if (fm != "no"): rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) if (mode != 'e'): From 4317d8af3dc0ccbecc059bd3ece9c7560baeb790 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 01:54:34 -0400 Subject: [PATCH 215/287] Update transmit.py add ! --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 7b8c6e02..f15a713c 100644 --- a/transmit.py +++ b/transmit.py @@ -536,7 +536,7 @@ def update_doppler(fm="yes"): if rigctl: new_tx_frequency = vfoB_frequency new_rx_frequency = vfoB_frequency + 289169117 # AO-73 U/V cross band repeater offset - print("Calculating RX frequency using offset from TX frequency") + print("Calculating RX frequency using offset from TX frequency!") print(f"Tx Frequency: {new_tx_frequency:.0f}") print(f"Rx Frequency: {new_rx_frequency:.0f}") From d4f0a69ae67a949687b030250bfc47f97f5af10f Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 01:57:55 -0400 Subject: [PATCH 216/287] Update transmit.py fix variable --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index f15a713c..0b12b5fb 100644 --- a/transmit.py +++ b/transmit.py @@ -531,7 +531,7 @@ def update_doppler(fm="yes"): vfoA_frequency = int(frequencies[0]) vfoB_frequency = int(frequencies[1]) - print(f"New vfoA: {new_tx_frequency}, new vfoB: {new_rx_frequency}") + print(f"New vfoA: {vfoA_frequency}, new vfoB: {vfoB_frequency}") if rigctl: new_tx_frequency = vfoB_frequency From 29aec6a3227ef1be49ce6348bc579e0202b8345f Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 09:01:27 -0400 Subject: [PATCH 217/287] Update transmit.py fix Doppler shift calc --- transmit.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/transmit.py b/transmit.py index 0b12b5fb..976828b2 100644 --- a/transmit.py +++ b/transmit.py @@ -534,11 +534,15 @@ def update_doppler(fm="yes"): print(f"New vfoA: {vfoA_frequency}, new vfoB: {vfoB_frequency}") if rigctl: + tx_center = 145960000 # AO-73 + rx_center = 435140000 + tx_doppler_shift = vfoB_frequency - tx_center + rx_doppler_shift = (rx_center/tx_center) * tx_doppler_shift new_tx_frequency = vfoB_frequency - new_rx_frequency = vfoB_frequency + 289169117 # AO-73 U/V cross band repeater offset + new_rx_frequency = tx_center + rx_doppler_shift print("Calculating RX frequency using offset from TX frequency!") - print(f"Tx Frequency: {new_tx_frequency:.0f}") - print(f"Rx Frequency: {new_rx_frequency:.0f}") + print(f"Tx Doppler Shift: {tx_doppler_shift :.0f}") + print(f"Rx Doppler Shift: {rx_doppler_shift :.0f}") if (tx_doppler_freq_hz != new_tx_frequency) or (rx_doppler_freq_hz != new_rx_frequency): tx_doppler_freq_hz = new_tx_frequency From 27ba9793a00222c1104b93e79b2050d408437739 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 09:15:14 -0400 Subject: [PATCH 218/287] Update transmit.py fix doppler calc --- transmit.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/transmit.py b/transmit.py index 976828b2..3fe57f08 100644 --- a/transmit.py +++ b/transmit.py @@ -539,25 +539,26 @@ def update_doppler(fm="yes"): tx_doppler_shift = vfoB_frequency - tx_center rx_doppler_shift = (rx_center/tx_center) * tx_doppler_shift new_tx_frequency = vfoB_frequency - new_rx_frequency = tx_center + rx_doppler_shift + new_rx_frequency = rx_center + rx_doppler_shift print("Calculating RX frequency using offset from TX frequency!") - print(f"Tx Doppler Shift: {tx_doppler_shift :.0f}") - print(f"Rx Doppler Shift: {rx_doppler_shift :.0f}") + print(f"Tx Doppler Shift: {tx_doppler_shift:.0f} Frequency: {new_tx_frequency:.0f}") + print(f"Rx Doppler Shift: {rx_doppler_shift:.0f} Frequency: {new_rx_frequency:.0f}") if (tx_doppler_freq_hz != new_tx_frequency) or (rx_doppler_freq_hz != new_rx_frequency): tx_doppler_freq_hz = new_tx_frequency rx_doppler_freq_hz = new_rx_frequency - print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") + print("Applying Doppler shift!") +# print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") # rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz - print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") +# print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") if (fm != "no"): rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) if (mode != 'e'): tx = "{:.4f}".format(tx_doppler_freq_hz/1e6) - print(tx) +# print(tx) program_fm(rx,tx,rxpl_value,sq,txpl_value) else: - print("No frequency changes!") + print("Not applying Doppler shift!") except Exception as e: print(f"An error occurred: {e}") print("update_doppler failed") From e4d78b36014ba858108d7e0d2ac8747706ec9e42 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 09:17:16 -0400 Subject: [PATCH 219/287] Update transmit.py change sign of 70cm doppler --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 3fe57f08..e79db1fe 100644 --- a/transmit.py +++ b/transmit.py @@ -537,7 +537,7 @@ def update_doppler(fm="yes"): tx_center = 145960000 # AO-73 rx_center = 435140000 tx_doppler_shift = vfoB_frequency - tx_center - rx_doppler_shift = (rx_center/tx_center) * tx_doppler_shift + rx_doppler_shift = -1 * (rx_center/tx_center) * tx_doppler_shift new_tx_frequency = vfoB_frequency new_rx_frequency = rx_center + rx_doppler_shift print("Calculating RX frequency using offset from TX frequency!") From 2966b6e4493248fa970de124c4721f826fd2e9a9 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 09:29:51 -0400 Subject: [PATCH 220/287] Update transmit.py add ISS frequencies --- transmit.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index e79db1fe..0b6cb060 100644 --- a/transmit.py +++ b/transmit.py @@ -534,8 +534,12 @@ def update_doppler(fm="yes"): print(f"New vfoA: {vfoA_frequency}, new vfoB: {vfoB_frequency}") if rigctl: - tx_center = 145960000 # AO-73 - rx_center = 435140000 + if (vfoB_frequency > 145880000): + tx_center = 145960000 # AO-91 + rx_center = 435250000 # AO-73 is same tx_center but 435140000 + else: + tx_center = 145800000 # ISS U/V Repeater + rx_center = 437800000 tx_doppler_shift = vfoB_frequency - tx_center rx_doppler_shift = -1 * (rx_center/tx_center) * tx_doppler_shift new_tx_frequency = vfoB_frequency From 2066707e63dbaf94d7a7860382649ead1651c046 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 10:07:38 -0400 Subject: [PATCH 221/287] Update transmit.py update repeater doppler every 10 sec --- transmit.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/transmit.py b/transmit.py index 0b6cb060..15d04a4d 100644 --- a/transmit.py +++ b/transmit.py @@ -1468,6 +1468,9 @@ if __name__ == "__main__": sleep(1) print("No carrier detected") stop_repeater() + if ((time.perf_counter() - start_time) > 10) and doppler_mode: + update_doppler() + start_time = time.perf_counter() else: print("FSK") if (doppler_mode): From 98be0b1260c65fbc93628063ec115eab71d67a31 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 10:23:47 -0400 Subject: [PATCH 222/287] Update transmit.py transmit frequency is always first --- transmit.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/transmit.py b/transmit.py index 15d04a4d..1b91ec49 100644 --- a/transmit.py +++ b/transmit.py @@ -528,19 +528,19 @@ def update_doppler(fm="yes"): with open("/home/pi/CubeSatSim/frequency.txt", "r") as file: frequencies = file.read().split() - vfoA_frequency = int(frequencies[0]) - vfoB_frequency = int(frequencies[1]) + tx_frequency = int(frequencies[0]) + rx_frequency = int(frequencies[1]) # Not used right now as FT857 emulation only updates transmit frequency print(f"New vfoA: {vfoA_frequency}, new vfoB: {vfoB_frequency}") if rigctl: - if (vfoB_frequency > 145880000): + if (tx_frequency > 145880000): tx_center = 145960000 # AO-91 rx_center = 435250000 # AO-73 is same tx_center but 435140000 else: tx_center = 145800000 # ISS U/V Repeater rx_center = 437800000 - tx_doppler_shift = vfoB_frequency - tx_center + tx_doppler_shift = tx_frequency - tx_center rx_doppler_shift = -1 * (rx_center/tx_center) * tx_doppler_shift new_tx_frequency = vfoB_frequency new_rx_frequency = rx_center + rx_doppler_shift From c51dfdf3066c307043d97a851c15e0ab5cbb9cb8 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 10:39:16 -0400 Subject: [PATCH 223/287] Update transmit.py fix frequency variable names --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 1b91ec49..b8ce4c4d 100644 --- a/transmit.py +++ b/transmit.py @@ -531,7 +531,7 @@ def update_doppler(fm="yes"): tx_frequency = int(frequencies[0]) rx_frequency = int(frequencies[1]) # Not used right now as FT857 emulation only updates transmit frequency - print(f"New vfoA: {vfoA_frequency}, new vfoB: {vfoB_frequency}") + print(f"New TX Frequency: {tx_frequency}, new RX Frequency: {rx_frequency}") if rigctl: if (tx_frequency > 145880000): From 2e2e1ac15ea9ded3b106e9ea8be6280a2139f2be Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 10:40:56 -0400 Subject: [PATCH 224/287] Update transmit.py fix vfo variable name --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index b8ce4c4d..5b3bc411 100644 --- a/transmit.py +++ b/transmit.py @@ -542,7 +542,7 @@ def update_doppler(fm="yes"): rx_center = 437800000 tx_doppler_shift = tx_frequency - tx_center rx_doppler_shift = -1 * (rx_center/tx_center) * tx_doppler_shift - new_tx_frequency = vfoB_frequency + new_tx_frequency = tx_frequency new_rx_frequency = rx_center + rx_doppler_shift print("Calculating RX frequency using offset from TX frequency!") print(f"Tx Doppler Shift: {tx_doppler_shift:.0f} Frequency: {new_tx_frequency:.0f}") From 0b37e44232e745d6f7d4e06e49c1929f4ee28c24 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 10:43:08 -0400 Subject: [PATCH 225/287] Update transmit.py update doppler at start of repeater --- transmit.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/transmit.py b/transmit.py index 5b3bc411..0f0745ea 100644 --- a/transmit.py +++ b/transmit.py @@ -1454,6 +1454,8 @@ if __name__ == "__main__": print("Beacon mode off so no repeater transmission") print("Ready to detect carrier") + if (doppler_mode): + update_doppler() start_time = time.perf_counter() while True: From 0cdd1edc8060c23d3effedc0ebf27a14d6067b06 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 10:52:06 -0400 Subject: [PATCH 226/287] Update transmit.py transmit_cw_id_fm at start of repeater --- transmit.py | 73 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 19 deletions(-) diff --git a/transmit.py b/transmit.py index 0f0745ea..42583573 100644 --- a/transmit.py +++ b/transmit.py @@ -613,6 +613,39 @@ morse_table = [ # 0-9, A-Z only by (ASCII - 48) [ 3, 3, 1, 1, 0, 0 ] # Z ] +def cw_transmit_id_fm(): + global txLed + global no_command + global debug_mode + global sim_mode + global callsign + global tx + global txr + + try: + output(txLed, 1) + print("Transmit CW ID") + status = "" + if not no_command: + status = status + " C" + if sim_mode: + status = status + " S" + if (mode != 'e'): + if (debug_mode == 1): + system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3") + else: + system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1") + else: + if (debug_mode == 1): + system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + txr + "e3") + else: + system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + txr + "e3 > /dev/null 2>&1") + + output(txLed, 0) + except Exception as e: + print(f"An error occurred: {e}") + print("cw_transmit_id_fm failed") + def cw_transmit_string(string): global morse_timing for character in string: @@ -979,25 +1012,26 @@ if __name__ == "__main__": print("Don't transmit CW ID since APRS HAB mode is active") else: if (((mode == 'a') or (mode == 'b') or (mode == 'f') or (mode == 's') or (mode == 'j') or (mode == 'p') or (mode == 'P')) and (command_tx == True) and (skip == False)) or ((mode == 'e') and (command_tx == True)): # battery_saver_mode - output(txLed, 1) - print("Transmit CW ID") - status = "" - if not no_command: - status = status + " C" - if sim_mode: - status = status + " S" - if (mode != 'e'): - if (debug_mode == 1): - system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3") - else: - system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1") - else: - if (debug_mode == 1): - system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + txr + "e3") - else: - system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + txr + "e3 > /dev/null 2>&1") - - output(txLed, 0) + cw_transmit_id_fm() +# output(txLed, 1) +# print("Transmit CW ID") +# status = "" +# if not no_command: +# status = status + " C" +# if sim_mode: +# status = status + " S" +# if (mode != 'e'): +# if (debug_mode == 1): +# system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3") +# else: +# system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1") +# else: +# if (debug_mode == 1): +# system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + txr + "e3") +# else: +# system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + txr + "e3 > /dev/null 2>&1") +# +# output(txLed, 0) sleep(1) else: @@ -1456,6 +1490,7 @@ if __name__ == "__main__": print("Ready to detect carrier") if (doppler_mode): update_doppler() + cw_transmit_id_fm() start_time = time.perf_counter() while True: From 801417ae199452445c6ae9f6480df6e222159cd8 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 11:02:16 -0400 Subject: [PATCH 227/287] Update transmit.py txr always in MHz --- transmit.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index 42583573..44b38102 100644 --- a/transmit.py +++ b/transmit.py @@ -254,8 +254,8 @@ def start_repeater(tx_doppler_freq_hz): global txLed print("Starting repeater") output(txLed, 1) - txr = "{:.3f}".format(tx_doppler_freq_hz/1000) - system("sudo nc -l 8011 | csdr convert_i16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + txr + " > /dev/null 2>&1 &") + txr = "{:.3f}".format(tx_doppler_freq_hz/1e6) + system("sudo nc -l 8011 | csdr convert_i16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + txr + "e3 > /dev/null 2>&1 &") sleep(0.5) system("sudo arecord -D shared_mic -r48000 -fS16_LE -c1 | nc localhost 8011 &") @@ -522,6 +522,7 @@ def update_doppler(fm="yes"): global doppler_table global mode global tx + global txr global rigctl print("update_doppler") @@ -560,6 +561,8 @@ def update_doppler(fm="yes"): if (mode != 'e'): tx = "{:.4f}".format(tx_doppler_freq_hz/1e6) # print(tx) + else: + txr = "{:.3f}".format(tx_doppler_freq_hz/1e6) program_fm(rx,tx,rxpl_value,sq,txpl_value) else: print("Not applying Doppler shift!") @@ -1490,6 +1493,7 @@ if __name__ == "__main__": print("Ready to detect carrier") if (doppler_mode): update_doppler() + txr = "{:.3f}".format(tx_doppler_freq_hz/1e6) cw_transmit_id_fm() start_time = time.perf_counter() From 8b583607cc07bfc610f2621f079b75a263141127 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 11:25:30 -0400 Subject: [PATCH 228/287] Update transmit.py change cw_transmit_id to cw_transmit_fm --- transmit.py | 62 +++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/transmit.py b/transmit.py index 44b38102..c9adb049 100644 --- a/transmit.py +++ b/transmit.py @@ -616,38 +616,38 @@ morse_table = [ # 0-9, A-Z only by (ASCII - 48) [ 3, 3, 1, 1, 0, 0 ] # Z ] -def cw_transmit_id_fm(): +def cw_transmit_fm(morse, tx): global txLed - global no_command +# global no_command global debug_mode - global sim_mode - global callsign - global tx - global txr +# global sim_mode +# global callsign +# global tx +# global txr try: output(txLed, 1) - print("Transmit CW ID") - status = "" - if not no_command: - status = status + " C" - if sim_mode: - status = status + " S" - if (mode != 'e'): - if (debug_mode == 1): - system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3") - else: - system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1") + print("Transmit FM CW " + morse) +# status = "" +# if not no_command: +# status = status + " C" +# if sim_mode: +# status = status + " S" +# if (mode != 'e'): + if (debug_mode == 1): + system("echo 'hi hi de " + morse + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3") else: - if (debug_mode == 1): - system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + txr + "e3") - else: - system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + txr + "e3 > /dev/null 2>&1") + system("echo 'hi hi de " + morse + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1") +# else: +# if (debug_mode == 1): +# system("echo 'hi hi de " + morse + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + txr + "e3") +# else: +# system("echo 'hi hi de " + morse + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + txr + "e3 > /dev/null 2>&1") output(txLed, 0) except Exception as e: print(f"An error occurred: {e}") - print("cw_transmit_id_fm failed") + print("cw_transmit_fm failed") def cw_transmit_string(string): global morse_timing @@ -1015,20 +1015,22 @@ if __name__ == "__main__": print("Don't transmit CW ID since APRS HAB mode is active") else: if (((mode == 'a') or (mode == 'b') or (mode == 'f') or (mode == 's') or (mode == 'j') or (mode == 'p') or (mode == 'P')) and (command_tx == True) and (skip == False)) or ((mode == 'e') and (command_tx == True)): # battery_saver_mode - cw_transmit_id_fm() + # output(txLed, 1) # print("Transmit CW ID") -# status = "" -# if not no_command: -# status = status + " C" -# if sim_mode: -# status = status + " S" -# if (mode != 'e'): + status = "" + if not no_command: + status = status + " C" + if sim_mode: + status = status + " S" + if (mode != 'e'): + cw_transmit_fm(callsign + status, tx) # if (debug_mode == 1): # system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3") # else: # system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1") -# else: + else: + cw_transmit_fm(callsign + status, txr) # if (debug_mode == 1): # system("echo 'hi hi de " + callsign + status + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + txr + "e3") # else: From baff64ff1acdbd8ed09cbf76324ee9b2c9fbd0d5 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 11:38:47 -0400 Subject: [PATCH 229/287] Update transmit.py fix mode e cw id --- transmit.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/transmit.py b/transmit.py index c9adb049..3fe40982 100644 --- a/transmit.py +++ b/transmit.py @@ -1011,6 +1011,13 @@ if __name__ == "__main__": sleep(15) # avoid CW jumping around at start sim_failure_check() + + status = "" + if not no_command: + status = status + " C" + if sim_mode: + status = status + " S" + if (hab_mode == True) and (mode == 'a'): print("Don't transmit CW ID since APRS HAB mode is active") else: @@ -1018,11 +1025,7 @@ if __name__ == "__main__": # output(txLed, 1) # print("Transmit CW ID") - status = "" - if not no_command: - status = status + " C" - if sim_mode: - status = status + " S" + if (mode != 'e'): cw_transmit_fm(callsign + status, tx) # if (debug_mode == 1): @@ -1496,7 +1499,7 @@ if __name__ == "__main__": if (doppler_mode): update_doppler() txr = "{:.3f}".format(tx_doppler_freq_hz/1e6) - cw_transmit_id_fm() + cw_transmit_fm(callsign + status) start_time = time.perf_counter() while True: From 947e98a146af2143b4a5f0099368f981a43045d9 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 11:44:13 -0400 Subject: [PATCH 230/287] Update transmit.py repeater transmit cw id on 2m --- transmit.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/transmit.py b/transmit.py index 3fe40982..ea120182 100644 --- a/transmit.py +++ b/transmit.py @@ -556,13 +556,13 @@ def update_doppler(fm="yes"): # print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") # rx_doppler_freq_hz = rx_doppler_start_hz + rx_doppler_shift_hz # print(f"Tx Doppler shift: {tx_doppler_freq_hz:.0f}") - if (fm != "no"): - rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) - if (mode != 'e'): - tx = "{:.4f}".format(tx_doppler_freq_hz/1e6) + rx = "{:.4f}".format(rx_doppler_freq_hz/1e6) + if (mode != 'e'): + tx = "{:.4f}".format(tx_doppler_freq_hz/1e6) # print(tx) - else: - txr = "{:.3f}".format(tx_doppler_freq_hz/1e6) + else: + txr = "{:.3f}".format(tx_doppler_freq_hz/1e6) + if (fm != "no"): program_fm(rx,tx,rxpl_value,sq,txpl_value) else: print("Not applying Doppler shift!") @@ -1499,7 +1499,7 @@ if __name__ == "__main__": if (doppler_mode): update_doppler() txr = "{:.3f}".format(tx_doppler_freq_hz/1e6) - cw_transmit_fm(callsign + status) + cw_transmit_fm(callsign + status, txr) start_time = time.perf_counter() while True: From 74ed1d74d089b888a7388657d7113d4709625008 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 11:55:51 -0400 Subject: [PATCH 231/287] Update transmit.py add QSY if doppler --- transmit.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index ea120182..8fc473ef 100644 --- a/transmit.py +++ b/transmit.py @@ -988,7 +988,8 @@ if __name__ == "__main__": program_fm(rx,tx,rxpl_value,sq,txpl_value) if (doppler_mode == True): - + + cw_transmit_fm("QSY", tx) if (mode == 'e'): tx_doppler_start_hz = txrf * 1e6 else: @@ -1006,6 +1007,8 @@ if __name__ == "__main__": print("MODE: ") print(mode) + + update_doppler() if (mode == 'm'): print("Sleeping 15 seconds") sleep(15) # avoid CW jumping around at start @@ -1017,7 +1020,7 @@ if __name__ == "__main__": status = status + " C" if sim_mode: status = status + " S" - + if ( if (hab_mode == True) and (mode == 'a'): print("Don't transmit CW ID since APRS HAB mode is active") else: From 41c0b867b370586bfb23430332beeadf53ad46b2 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 11:57:05 -0400 Subject: [PATCH 232/287] Update transmit.py remove stray if --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 8fc473ef..9d2d28f2 100644 --- a/transmit.py +++ b/transmit.py @@ -1020,7 +1020,7 @@ if __name__ == "__main__": status = status + " C" if sim_mode: status = status + " S" - if ( + if (hab_mode == True) and (mode == 'a'): print("Don't transmit CW ID since APRS HAB mode is active") else: From 2318f5c9505f3437b28543c1139fa6dc53341709 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 12:02:33 -0400 Subject: [PATCH 233/287] Update transmit.py remove extra cw id repeater --- transmit.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/transmit.py b/transmit.py index 9d2d28f2..2cbd02a2 100644 --- a/transmit.py +++ b/transmit.py @@ -1499,10 +1499,10 @@ if __name__ == "__main__": print("Beacon mode off so no repeater transmission") print("Ready to detect carrier") - if (doppler_mode): - update_doppler() - txr = "{:.3f}".format(tx_doppler_freq_hz/1e6) - cw_transmit_fm(callsign + status, txr) +# if (doppler_mode): +# update_doppler() +# txr = "{:.3f}".format(tx_doppler_freq_hz/1e6) +# cw_transmit_fm(callsign + status, txr) start_time = time.perf_counter() while True: From 734dae3f02f0221955c6ea76c2fad58110d5700b Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 12:16:45 -0400 Subject: [PATCH 234/287] Update transmit.py only shift frequency for U/V --- transmit.py | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/transmit.py b/transmit.py index 2cbd02a2..df60f308 100644 --- a/transmit.py +++ b/transmit.py @@ -535,19 +535,25 @@ def update_doppler(fm="yes"): print(f"New TX Frequency: {tx_frequency}, new RX Frequency: {rx_frequency}") if rigctl: - if (tx_frequency > 145880000): - tx_center = 145960000 # AO-91 - rx_center = 435250000 # AO-73 is same tx_center but 435140000 + if (tx_frequency < 148000000): + if (tx_frequency > 145880000): + tx_center = 145960000 # AO-91 + rx_center = 435250000 # AO-73 is same tx_center but 435140000 + else: + tx_center = 145800000 # ISS U/V Repeater + rx_center = 437800000 + tx_doppler_shift = tx_frequency - tx_center + rx_doppler_shift = -1 * (rx_center/tx_center) * tx_doppler_shift + new_tx_frequency = tx_frequency + new_rx_frequency = rx_center + rx_doppler_shift + print("Calculating RX frequency using offset from TX frequency!") + print(f"Tx Doppler Shift: {tx_doppler_shift:.0f} Frequency: {new_tx_frequency:.0f}") + print(f"Rx Doppler Shift: {rx_doppler_shift:.0f} Frequency: {new_rx_frequency:.0f}") else: - tx_center = 145800000 # ISS U/V Repeater - rx_center = 437800000 - tx_doppler_shift = tx_frequency - tx_center - rx_doppler_shift = -1 * (rx_center/tx_center) * tx_doppler_shift - new_tx_frequency = tx_frequency - new_rx_frequency = rx_center + rx_doppler_shift - print("Calculating RX frequency using offset from TX frequency!") - print(f"Tx Doppler Shift: {tx_doppler_shift:.0f} Frequency: {new_tx_frequency:.0f}") - print(f"Rx Doppler Shift: {rx_doppler_shift:.0f} Frequency: {new_rx_frequency:.0f}") + new_tx_frequency = tx_frequency + new_rx_frequency = tx_frequency + print(f"Tx Frequency: {new_tx_frequency:.0f}") + print(f"Rx Frequency: {new_rx_frequency:.0f}") if (tx_doppler_freq_hz != new_tx_frequency) or (rx_doppler_freq_hz != new_rx_frequency): tx_doppler_freq_hz = new_tx_frequency From 573eb5b53b9ea100996d44455820652a0e51978b Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 12:49:47 -0400 Subject: [PATCH 235/287] Update transmit.py update FM once per cw string --- transmit.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index df60f308..a14685f5 100644 --- a/transmit.py +++ b/transmit.py @@ -658,7 +658,8 @@ def cw_transmit_fm(morse, tx): def cw_transmit_string(string): global morse_timing for character in string: - if (character != ' '): + if (character != ' '): + update_doppler() cw_transmit_char(character); else: sleep(7.0 * morse_timing); @@ -1515,7 +1516,7 @@ if __name__ == "__main__": if (input(squelch) == False) and (command_tx == True): print("Carrier detected") if (doppler_mode): - update_doppler() + update_doppler() start_repeater(tx_doppler_freq_hz) else: start_repeater(txrf * 1e6) From 5e385b850bddd533754f4483be28b18d0aa64ebb Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sun, 19 Jul 2026 12:55:36 -0400 Subject: [PATCH 236/287] Update transmit.py program fm out of bands to default --- transmit.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index a14685f5..67771e18 100644 --- a/transmit.py +++ b/transmit.py @@ -226,7 +226,15 @@ def program_fm(rx, tx, rxpl_value, sq, txpl_value): if (gpsd_status == "active"): print("Stopping gpsd.socket") system("sudo systemctl stop gpsd.socket") - print("Programming FM module!\n"); + print("Programming FM module!\n"); + txf = float(tx) + rxf = float(rx) + if (txf > 450.0) or (txf < 420.0): + tx = "434.9000" + print("Transmit frequency out of FM bounds") + if (rxf > 450.0) or (rxf < 420.0): + rx = "435.0000" + print("Receive frequency out of FM bounds") output(pd, 1) output (ptt, 1) try: From 7515fe6b09d5f31b90b14be02d5705c9dfa892b9 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 20 Jul 2026 00:21:00 -0400 Subject: [PATCH 237/287] Update transmit.py add two_meter_rpitx transmit --- transmit.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 67771e18..b38de02f 100644 --- a/transmit.py +++ b/transmit.py @@ -223,15 +223,34 @@ def program_fm(rx, tx, rxpl_value, sq, txpl_value): global gpsd_status global pd global ptt + global force_rpitx + global txc + global restore_txc + if (gpsd_status == "active"): print("Stopping gpsd.socket") system("sudo systemctl stop gpsd.socket") print("Programming FM module!\n"); txf = float(tx) rxf = float(rx) - if (txf > 450.0) or (txf < 420.0): + + if (txf > 144.0) and (txf < 148.0): + two_meter_rpitx = True + if (txc): + restore_txc = True + txc = False + tx = "434.9000" + elif (two_meter_rpitx): + two_meter_rpitx = False + if (restore_txc): + txc = True + restore_txc = False + + if (txf > 450.0) or (txf < 420.0) and not two_meter_rpitx: tx = "434.9000" print("Transmit frequency out of FM bounds") + + if (rxf > 450.0) or (rxf < 420.0): rx = "435.0000" print("Receive frequency out of FM bounds") @@ -718,6 +737,8 @@ squelch = 6 green = 16 powerPin = 16 morse_timing = 0.09 # 0.1 +two_meter_rpitx = False +restore_txc = False command_tx = True From c3b9f59206287b616a97a9b36ad278ab3a8b91ad Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 20 Jul 2026 00:32:46 -0400 Subject: [PATCH 238/287] Update transmit.py add log messages --- transmit.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/transmit.py b/transmit.py index b38de02f..d5667e2f 100644 --- a/transmit.py +++ b/transmit.py @@ -223,7 +223,7 @@ def program_fm(rx, tx, rxpl_value, sq, txpl_value): global gpsd_status global pd global ptt - global force_rpitx + global two_meter_rpitx global txc global restore_txc @@ -236,20 +236,23 @@ def program_fm(rx, tx, rxpl_value, sq, txpl_value): if (txf > 144.0) and (txf < 148.0): two_meter_rpitx = True + print("Transmitting in 2m band using rptix") if (txc): restore_txc = True + print("Restore FM with 70cm band") txc = False tx = "434.9000" elif (two_meter_rpitx): two_meter_rpitx = False + print("Stop transmitting in 2m bacnd using rptix") if (restore_txc): txc = True restore_txc = False + print("Restore FM with 70cm band") if (txf > 450.0) or (txf < 420.0) and not two_meter_rpitx: tx = "434.9000" - print("Transmit frequency out of FM bounds") - + print("Transmit frequency out of 70cm band") if (rxf > 450.0) or (rxf < 420.0): rx = "435.0000" @@ -268,13 +271,15 @@ def program_fm(rx, tx, rxpl_value, sq, txpl_value): sleep(0.1) ser.close() ser = serial.Serial("/dev/ttyAMA0", 115200) # reset back to 115200 for cubesatsim code for payload sensor data - except: + except Exception as e: + print(f"An error occurred: {e}") print("Error in serial write") # output(pd, 0) # Don't turn off receiver if (gpsd_status == "active"): print("Restarting gpsd.socket") system("sudo systemctl restart gpsd.socket") - except: + except Exception as e: + print(f"An error occurred: {e}") print("program_fm failed") def start_repeater(tx_doppler_freq_hz): From b1db42250c37a2eb372268d5e2271a8b63dcf74b Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 20 Jul 2026 00:39:55 -0400 Subject: [PATCH 239/287] Update transmit.py prints --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index d5667e2f..187b7cb8 100644 --- a/transmit.py +++ b/transmit.py @@ -248,7 +248,7 @@ def program_fm(rx, tx, rxpl_value, sq, txpl_value): if (restore_txc): txc = True restore_txc = False - print("Restore FM with 70cm band") + print("Restoring FM with 70cm band") if (txf > 450.0) or (txf < 420.0) and not two_meter_rpitx: tx = "434.9000" From da9efd852e72f86a0b6028a1ed92b5f975b09ba4 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 20 Jul 2026 00:58:26 -0400 Subject: [PATCH 240/287] Update transmit.py sudo rm t.txt --- transmit.py | 1 + 1 file changed, 1 insertion(+) diff --git a/transmit.py b/transmit.py index 187b7cb8..6e982d59 100644 --- a/transmit.py +++ b/transmit.py @@ -1166,6 +1166,7 @@ if __name__ == "__main__": f.close() if (debug_mode == 1): print("Packet ready!") + system("sudo rm home/pi/CubeSatSim/t.txt") system("gen_packets -o /home/pi/CubeSatSim/telem.wav /home/pi/CubeSatSim/t.txt -r 48000 > /dev/null 2>&1") system("cat /home/pi/CubeSatSim/t.txt") if (command_tx == True): From beb2d07720be993076892e2240d66b14eea639db Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 20 Jul 2026 00:59:50 -0400 Subject: [PATCH 241/287] Update transmit.py fix sudo rm --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 6e982d59..36685878 100644 --- a/transmit.py +++ b/transmit.py @@ -1166,7 +1166,7 @@ if __name__ == "__main__": f.close() if (debug_mode == 1): print("Packet ready!") - system("sudo rm home/pi/CubeSatSim/t.txt") + system("sudo rm /home/pi/CubeSatSim/t.txt") system("gen_packets -o /home/pi/CubeSatSim/telem.wav /home/pi/CubeSatSim/t.txt -r 48000 > /dev/null 2>&1") system("cat /home/pi/CubeSatSim/t.txt") if (command_tx == True): From 9f640225d385d27eb9e1833470a0bcd161ff09ff Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 20 Jul 2026 01:10:41 -0400 Subject: [PATCH 242/287] Update transmit.py reboot when going two_meter to FM --- transmit.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/transmit.py b/transmit.py index 36685878..e2a568c7 100644 --- a/transmit.py +++ b/transmit.py @@ -249,6 +249,8 @@ def program_fm(rx, tx, rxpl_value, sq, txpl_value): txc = True restore_txc = False print("Restoring FM with 70cm band") + print("Rebooting") + system("sudo reboot now") if (txf > 450.0) or (txf < 420.0) and not two_meter_rpitx: tx = "434.9000" From 780bdb55eaf8a45b7fb63917a7edfccf23ba9f36 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 20 Jul 2026 17:40:31 -0400 Subject: [PATCH 243/287] Update transmit.py remove rm t.txt --- transmit.py | 1 - 1 file changed, 1 deletion(-) diff --git a/transmit.py b/transmit.py index e2a568c7..c047c1b8 100644 --- a/transmit.py +++ b/transmit.py @@ -1168,7 +1168,6 @@ if __name__ == "__main__": f.close() if (debug_mode == 1): print("Packet ready!") - system("sudo rm /home/pi/CubeSatSim/t.txt") system("gen_packets -o /home/pi/CubeSatSim/telem.wav /home/pi/CubeSatSim/t.txt -r 48000 > /dev/null 2>&1") system("cat /home/pi/CubeSatSim/t.txt") if (command_tx == True): From 048689f2257a1780f3aa1b8a7909b272a70d37e8 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 20 Jul 2026 18:10:44 -0400 Subject: [PATCH 244/287] Update transmit.py fix new_tx_frequency --- transmit.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index c047c1b8..8f488067 100644 --- a/transmit.py +++ b/transmit.py @@ -587,7 +587,12 @@ def update_doppler(fm="yes"): new_tx_frequency = tx_frequency new_rx_frequency = tx_frequency print(f"Tx Frequency: {new_tx_frequency:.0f}") - print(f"Rx Frequency: {new_rx_frequency:.0f}") + print(f"Rx Frequency: {new_rx_frequency:.0f}") + else: + new_tx_frequency = tx_frequency + new_rx_frequency = tx_frequency + print(f"Tx Frequency: {new_tx_frequency:.0f}") + print(f"Rx Frequency: {new_rx_frequency:.0f}") if (tx_doppler_freq_hz != new_tx_frequency) or (rx_doppler_freq_hz != new_rx_frequency): tx_doppler_freq_hz = new_tx_frequency From 810cef9613096279ea1986cc85b8062b2de879b6 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 20 Jul 2026 18:15:16 -0400 Subject: [PATCH 245/287] Update transmit.py fix new_rx_frequency for sim --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 8f488067..d108237f 100644 --- a/transmit.py +++ b/transmit.py @@ -585,7 +585,7 @@ def update_doppler(fm="yes"): print(f"Rx Doppler Shift: {rx_doppler_shift:.0f} Frequency: {new_rx_frequency:.0f}") else: new_tx_frequency = tx_frequency - new_rx_frequency = tx_frequency + new_rx_frequency = rx_frequency print(f"Tx Frequency: {new_tx_frequency:.0f}") print(f"Rx Frequency: {new_rx_frequency:.0f}") else: From cb385f4bf997418d24334523762aa62aaa7fd0e3 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 20 Jul 2026 18:58:45 -0400 Subject: [PATCH 246/287] Update frequency.py remove vfo from rigctl --- frequency.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frequency.py b/frequency.py index c38034a4..ea08b0e2 100644 --- a/frequency.py +++ b/frequency.py @@ -857,7 +857,7 @@ if (doppler_mode == 'rig'): sleep(1.0) print("Starting rigctl emulating FT857 rig using virtual serial port /tmp/vttyB") - system("rigctld -m 1022 -r /tmp/vttyB -t 4532 -vv --vfo") + system("rigctld -m 1022 -r /tmp/vttyB -t 4532 -vvv") print("rigctld ended") From 88f5ffbcd1d428cf8d590f582f082db2cb3c956e Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 20 Jul 2026 19:51:43 -0400 Subject: [PATCH 247/287] Update transmit.py don't restore 70cm after 2m in rigctl --- transmit.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/transmit.py b/transmit.py index d108237f..e6ab89b8 100644 --- a/transmit.py +++ b/transmit.py @@ -237,24 +237,24 @@ def program_fm(rx, tx, rxpl_value, sq, txpl_value): if (txf > 144.0) and (txf < 148.0): two_meter_rpitx = True print("Transmitting in 2m band using rptix") - if (txc): - restore_txc = True - print("Restore FM with 70cm band") +# if (txc): +# restore_txc = True +# print("Restore FM with 70cm band") txc = False tx = "434.9000" - elif (two_meter_rpitx): - two_meter_rpitx = False - print("Stop transmitting in 2m bacnd using rptix") - if (restore_txc): - txc = True - restore_txc = False - print("Restoring FM with 70cm band") - print("Rebooting") - system("sudo reboot now") +# elif (two_meter_rpitx): +# two_meter_rpitx = False +# print("Stop transmitting in 2m bacnd using rptix") +# if (restore_txc): +# txc = True +# restore_txc = False +# print("Restoring FM with 70cm band") +# print("Rebooting") +# system("sudo reboot now") - if (txf > 450.0) or (txf < 420.0) and not two_meter_rpitx: + if (txf > 450.0) or ((txf < 420.0) and (txf > 148.0)) or (txf < 144.0) : tx = "434.9000" - print("Transmit frequency out of 70cm band") + print("Transmit frequency out of amateur bands") if (rxf > 450.0) or (rxf < 420.0): rx = "435.0000" From 08404169eedee877ccd3f4ab820b77fc3f5d56d3 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 20 Jul 2026 19:59:34 -0400 Subject: [PATCH 248/287] Update transmit.py use tee instead of echo --- transmit.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index e6ab89b8..d8d1b418 100644 --- a/transmit.py +++ b/transmit.py @@ -1192,7 +1192,9 @@ if __name__ == "__main__": output (ptt, 1) # output(pd, 0) else: - system("echo 'AMSAT-11>APCSS:010101/hi hi ' >> t.txt") +# system("echo 'AMSAT-11>APCSS:010101/hi hi ' >> t.txt") + system("echo 'AMSAT-11>APCSS:010101/hi hi ' | sudo tee -a /home/pi/CubeSatSim/t.txt") + if (debug_mode == 1): system("gen_packets -o /home/pi/CubeSatSim/telem.wav /home/pi/CubeSatSim/t.txt -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/telem.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3") else: From bc02cab00aa4026152d90cdd42d7e5120c9ae689 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Mon, 20 Jul 2026 22:54:37 -0400 Subject: [PATCH 249/287] Update transmit.py remove all killall -rpitx --- transmit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index d8d1b418..6dfe1206 100644 --- a/transmit.py +++ b/transmit.py @@ -300,7 +300,7 @@ def stop_repeater(): system("sudo rpitx -i null > /dev/null 2>&1") system("sudo killall -9 arecord > /dev/null 2>&1") system("sudo killall -9 nc > /dev/null 2>&1") - system("sudo killall -9 rpitx > /dev/null 2>&1") +# system("sudo killall -9 rpitx > /dev/null 2>&1") print("Resetting audio") system("sudo /etc/init.d/alsa-utils stop") system("sudo /etc/init.d/alsa-utils start") @@ -727,7 +727,7 @@ def transmit_carrier(duration): command = "timeout -k 0.5 " + str(duration) + " sudo tune -f " + str(tx_doppler_freq_hz) + " > /dev/null 2>&1" # 434.9e6 start = "sudo tune -f " + str(tx_doppler_freq_hz) + " &" # + " & > /dev/null 2>&1" # 434.9e6 stop = "sudo rpitx -f 434.9e6 &" - killrpitx = "sudo killall -9 rpitx &" +# killrpitx = "sudo killall -9 rpitx &" killtune = "sudo killall -9 tune &" output(txLed, 1) # system(start) From 6e8eaa112b2881b32d36e46066fe5659c2ad851c Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 10:30:52 -0400 Subject: [PATCH 250/287] Update transmit.py 10 Hz updates on repeater mode doppler --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 6dfe1206..daceae22 100644 --- a/transmit.py +++ b/transmit.py @@ -288,7 +288,7 @@ def start_repeater(tx_doppler_freq_hz): global txLed print("Starting repeater") output(txLed, 1) - txr = "{:.3f}".format(tx_doppler_freq_hz/1e6) + txr = "{:.6f}".format(tx_doppler_freq_hz/1e6) system("sudo nc -l 8011 | csdr convert_i16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + txr + "e3 > /dev/null 2>&1 &") sleep(0.5) system("sudo arecord -D shared_mic -r48000 -fS16_LE -c1 | nc localhost 8011 &") From afb606cd40df404f69a4cbf9bcdb1302a4937278 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 10:35:27 -0400 Subject: [PATCH 251/287] Update transmit.py change start_repeater to kHz --- transmit.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index daceae22..d80c871e 100644 --- a/transmit.py +++ b/transmit.py @@ -288,8 +288,9 @@ def start_repeater(tx_doppler_freq_hz): global txLed print("Starting repeater") output(txLed, 1) - txr = "{:.6f}".format(tx_doppler_freq_hz/1e6) - system("sudo nc -l 8011 | csdr convert_i16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + txr + "e3 > /dev/null 2>&1 &") + txr = "{:.3f}".format(tx_doppler_freq_hz/1e3) + print(txr) + system("sudo nc -l 8011 | csdr convert_i16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + txr + " > /dev/null 2>&1 &") sleep(0.5) system("sudo arecord -D shared_mic -r48000 -fS16_LE -c1 | nc localhost 8011 &") From c76471a895251024bbc4f84b596e6d57d99a7fa3 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 13:38:28 -0400 Subject: [PATCH 252/287] Update transmit.py add AO-7 and AO-73 --- transmit.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/transmit.py b/transmit.py index d80c871e..5aa436a5 100644 --- a/transmit.py +++ b/transmit.py @@ -570,13 +570,23 @@ def update_doppler(fm="yes"): print(f"New TX Frequency: {tx_frequency}, new RX Frequency: {rx_frequency}") if rigctl: - if (tx_frequency < 148000000): - if (tx_frequency > 145880000): - tx_center = 145960000 # AO-91 - rx_center = 435250000 # AO-73 is same tx_center but 435140000 - else: - tx_center = 145800000 # ISS U/V Repeater - rx_center = 437800000 + if (tx_frequency > 145955000) and (tx_frequency <= 145965000): + tx_center = 145960000 # AO-91 + rx_center = 435250000 + elif (tx_frequency > 145965000) and (tx_frequency < 145975000): + tx_center = 145970000 # AO-73 center is shifted up 10kHz to avoid overlap with AO-91 + rx_center = 435150000 + elif (tx_frequency > 145795000) and (tx_frequency < 145805000): + tx_center = 145800000 # ISS U/V Repeater + rx_center = 437800000 + elif (tx_frequency > 145945000) and (tx_frequency <= 145955000): + tx_center = 145950000 # AO-7 + rx_center = 432150000 + else: + tx_center = tx_frequency + rx_center = 435000000 # default RX requency + + if (rx_center != 435000000): # don't Doppler shift default RX frequency since don't know the shift tx_doppler_shift = tx_frequency - tx_center rx_doppler_shift = -1 * (rx_center/tx_center) * tx_doppler_shift new_tx_frequency = tx_frequency From fa33857285de9c962cb01f4817c1050e7ca35175 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 13:44:14 -0400 Subject: [PATCH 253/287] Update transmit.py add satellite prints --- transmit.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/transmit.py b/transmit.py index 5aa436a5..f9f0b00f 100644 --- a/transmit.py +++ b/transmit.py @@ -573,18 +573,23 @@ def update_doppler(fm="yes"): if (tx_frequency > 145955000) and (tx_frequency <= 145965000): tx_center = 145960000 # AO-91 rx_center = 435250000 + print("AO-91 detected!") elif (tx_frequency > 145965000) and (tx_frequency < 145975000): tx_center = 145970000 # AO-73 center is shifted up 10kHz to avoid overlap with AO-91 rx_center = 435150000 + print("AO-73 detected!") elif (tx_frequency > 145795000) and (tx_frequency < 145805000): tx_center = 145800000 # ISS U/V Repeater rx_center = 437800000 + print("ISS U/V detected!") elif (tx_frequency > 145945000) and (tx_frequency <= 145955000): tx_center = 145950000 # AO-7 rx_center = 432150000 + print("AO-7 detected!") else: tx_center = tx_frequency rx_center = 435000000 # default RX requency + print("No Satellite detected. Using default RX frequency with no doppler shift") if (rx_center != 435000000): # don't Doppler shift default RX frequency since don't know the shift tx_doppler_shift = tx_frequency - tx_center From 2c226e0c8dfa7be4edee93638ace6cbdc79b325c Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 13:55:01 -0400 Subject: [PATCH 254/287] Update transmit.py use default RX frequency if no satellite detected --- transmit.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/transmit.py b/transmit.py index f9f0b00f..b10a931f 100644 --- a/transmit.py +++ b/transmit.py @@ -557,6 +557,7 @@ def update_doppler(fm="yes"): global doppler_table global mode global tx + global rxf global txr global rigctl print("update_doppler") @@ -588,10 +589,10 @@ def update_doppler(fm="yes"): print("AO-7 detected!") else: tx_center = tx_frequency - rx_center = 435000000 # default RX requency + rx_center = rxf * 1e6 # default RX requency print("No Satellite detected. Using default RX frequency with no doppler shift") - if (rx_center != 435000000): # don't Doppler shift default RX frequency since don't know the shift + if (rx_center != rxf * 1e6): # don't Doppler shift default RX frequency since don't know the shift tx_doppler_shift = tx_frequency - tx_center rx_doppler_shift = -1 * (rx_center/tx_center) * tx_doppler_shift new_tx_frequency = tx_frequency @@ -601,7 +602,7 @@ def update_doppler(fm="yes"): print(f"Rx Doppler Shift: {rx_doppler_shift:.0f} Frequency: {new_rx_frequency:.0f}") else: new_tx_frequency = tx_frequency - new_rx_frequency = rx_frequency + new_rx_frequency = rxf * 1e6 # default RX frequency or should we use same as tx frequency with doppler shift? print(f"Tx Frequency: {new_tx_frequency:.0f}") print(f"Rx Frequency: {new_rx_frequency:.0f}") else: From 609fd96e5cf4fa1b38f37d5907a1c55feeb1a7d3 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 13:59:46 -0400 Subject: [PATCH 255/287] Update transmit.py fix AO-73 doppler --- transmit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index b10a931f..044b86b4 100644 --- a/transmit.py +++ b/transmit.py @@ -576,8 +576,8 @@ def update_doppler(fm="yes"): rx_center = 435250000 print("AO-91 detected!") elif (tx_frequency > 145965000) and (tx_frequency < 145975000): - tx_center = 145970000 # AO-73 center is shifted up 10kHz to avoid overlap with AO-91 - rx_center = 435150000 + tx_center = 145960000 # AO-73 detection is shifted up 10kHz to avoid overlap with AO-91 + rx_center = 435140000 print("AO-73 detected!") elif (tx_frequency > 145795000) and (tx_frequency < 145805000): tx_center = 145800000 # ISS U/V Repeater From 18884dede3a97fe8edfcfa956ecffe1b29d53375 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 14:03:24 -0400 Subject: [PATCH 256/287] Update transmit.py fix AO-73 --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 044b86b4..22c6f838 100644 --- a/transmit.py +++ b/transmit.py @@ -577,7 +577,7 @@ def update_doppler(fm="yes"): print("AO-91 detected!") elif (tx_frequency > 145965000) and (tx_frequency < 145975000): tx_center = 145960000 # AO-73 detection is shifted up 10kHz to avoid overlap with AO-91 - rx_center = 435140000 + rx_center = 435150000 print("AO-73 detected!") elif (tx_frequency > 145795000) and (tx_frequency < 145805000): tx_center = 145800000 # ISS U/V Repeater From e7f6125d3ddec7be29cdacc82c68c4a6dff8bbc3 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 14:09:26 -0400 Subject: [PATCH 258/287] Update transmit.py AO-73 shifted up 10 --- transmit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index 22c6f838..2889153d 100644 --- a/transmit.py +++ b/transmit.py @@ -576,8 +576,8 @@ def update_doppler(fm="yes"): rx_center = 435250000 print("AO-91 detected!") elif (tx_frequency > 145965000) and (tx_frequency < 145975000): - tx_center = 145960000 # AO-73 detection is shifted up 10kHz to avoid overlap with AO-91 - rx_center = 435150000 + tx_center = 145970000 # AO-73 is shifted up 10kHz to avoid overlap with AO-91 + rx_center = 435140000 print("AO-73 detected!") elif (tx_frequency > 145795000) and (tx_frequency < 145805000): tx_center = 145800000 # ISS U/V Repeater From 32c0d47758fed8949906213a45850ddacb6ad992 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 17:18:47 -0400 Subject: [PATCH 259/287] Update transmit.py only sleep 15 seconds cw on boot --- transmit.py | 48 +++++++++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/transmit.py b/transmit.py index 2889153d..b6339162 100644 --- a/transmit.py +++ b/transmit.py @@ -17,6 +17,20 @@ def output(pin, value): system(command) print(command) +def uptime_seconds() + try: + system("sudo cat /proc/uptime > /home/pi/CubeSatSim/uptime") + file = open("/home/pi/CubeSatSim/uptime") + up = file.read().split(" ")[0] + print(up) + uptime = float(up) + print(uptime) + file.close() + return(uptime) + except Exception as e: + print(f"An error occurred: {e}") + print("uptime_seconds failed") + def input(pin): # command = "gpio -g read " + str(pin) query = ["gpio", "-g", "read", str(pin)] # Read GPIO pin @@ -842,22 +856,22 @@ if __name__ == "__main__": except: print("Pi Zero 2 not detected") - try: - system("sudo cat /proc/uptime > /home/pi/CubeSatSim/uptime") - file = open("/home/pi/CubeSatSim/uptime") - up = file.read().split(" ")[0] - print(up) - uptime = float(up) - print(uptime) - if (uptime < uptime_time): - print("Uptime < threshold seconds") - else: - print("Uptime > threshold seconds") - print("Skip CW ID") - skip = True - file.close() - except: - print("Can't open /proc/uptime") +# try: +# system("sudo cat /proc/uptime > /home/pi/CubeSatSim/uptime") +# file = open("/home/pi/CubeSatSim/uptime") +# up = file.read().split(" ")[0] +# print(up) +# uptime = float(up) +# print(uptime) + if (uptime_seconds() < uptime_time): + print("Uptime < threshold seconds") + else: + print("Uptime > threshold seconds") + print("Skip CW ID") + skip = True +# file.close() +# except: +# print("Can't open /proc/uptime") print(skip) if ( mode == "y"): @@ -1074,7 +1088,7 @@ if __name__ == "__main__": print(mode) update_doppler() - if (mode == 'm'): + if (mode == 'm') and (uptime_seconds() < (uptime_time + 5)): print("Sleeping 15 seconds") sleep(15) # avoid CW jumping around at start From 1182c993b54525d476ab4f7c82970d85d2294b72 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 17:20:45 -0400 Subject: [PATCH 260/287] Update transmit.py fix def --- transmit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index b6339162..c278f148 100644 --- a/transmit.py +++ b/transmit.py @@ -17,7 +17,7 @@ def output(pin, value): system(command) print(command) -def uptime_seconds() +def uptime_seconds(): try: system("sudo cat /proc/uptime > /home/pi/CubeSatSim/uptime") file = open("/home/pi/CubeSatSim/uptime") @@ -26,7 +26,7 @@ def uptime_seconds() uptime = float(up) print(uptime) file.close() - return(uptime) + return uptime except Exception as e: print(f"An error occurred: {e}") print("uptime_seconds failed") From cd9daa55f2571cbe63e71941e54d951877c9da44 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 17:29:10 -0400 Subject: [PATCH 261/287] Update transmit.py only transmit CW QSY on boot --- transmit.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index c278f148..e8fc260c 100644 --- a/transmit.py +++ b/transmit.py @@ -1068,7 +1068,9 @@ if __name__ == "__main__": if (doppler_mode == True): - cw_transmit_fm("QSY", tx) + if (command_tx == True) and (skip == False): + cw_transmit_fm("QSY", tx) + if (mode == 'e'): tx_doppler_start_hz = txrf * 1e6 else: From dacf276cfc99cf46a6795175233a6228f4c66ea6 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 17:37:23 -0400 Subject: [PATCH 262/287] Update transmit.py use skip to determine 15 seconds of sleep for cw mode --- transmit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index e8fc260c..6a469d0e 100644 --- a/transmit.py +++ b/transmit.py @@ -29,7 +29,7 @@ def uptime_seconds(): return uptime except Exception as e: print(f"An error occurred: {e}") - print("uptime_seconds failed") + print(" failed") def input(pin): # command = "gpio -g read " + str(pin) @@ -1090,7 +1090,7 @@ if __name__ == "__main__": print(mode) update_doppler() - if (mode == 'm') and (uptime_seconds() < (uptime_time + 5)): + if (mode == 'm') and (skip == False): print("Sleeping 15 seconds") sleep(15) # avoid CW jumping around at start From 3ff6802fd70f7f6de31898fe9f5f6b8b6c948b18 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 21:16:54 -0400 Subject: [PATCH 263/287] Update transmit.py check for gui and sleep 30 more --- transmit.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/transmit.py b/transmit.py index 6a469d0e..ad1c4cd5 100644 --- a/transmit.py +++ b/transmit.py @@ -1093,6 +1093,22 @@ if __name__ == "__main__": if (mode == 'm') and (skip == False): print("Sleeping 15 seconds") sleep(15) # avoid CW jumping around at start + + query = ["systemctl", "get-default", "|", "grep graphical.target"] + try: + result = subprocess.run(query, capture_output=True, text=True, check=True) + print(f"Command run was: {query}") + gui_status = result.stdout.strip() + print(f"Output of the command (stdout): {gui_status}") + except subprocess.CalledProcessError as e: + # print(f"Command failed with return code: {e.returncode}") + print(f"Command run was: {e.cmd}") + gui_status = e.stdout.strip() + print(f"Output of the command (stdout): {e.stdout}") + # print(f"Error output of the command (stderr): {e.stderr}") + if gui_status = "graphical.target": + sleep(30) # sleep another 30 seconds for cpu to settle down + print (gui_status) sim_failure_check() From d1544dc9bb46f792438d1aa17200678e22bee82a Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 21:18:28 -0400 Subject: [PATCH 264/287] Update transmit.py fix == --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index ad1c4cd5..a4fe9de8 100644 --- a/transmit.py +++ b/transmit.py @@ -1106,7 +1106,7 @@ if __name__ == "__main__": gui_status = e.stdout.strip() print(f"Output of the command (stdout): {e.stdout}") # print(f"Error output of the command (stderr): {e.stderr}") - if gui_status = "graphical.target": + if gui_status == "graphical.target": sleep(30) # sleep another 30 seconds for cpu to settle down print (gui_status) From 0691732c9cc06b7929b9443f5b57e76df0fea090 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 21:23:40 -0400 Subject: [PATCH 265/287] Update transmit.py print command result --- transmit.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/transmit.py b/transmit.py index a4fe9de8..241572af 100644 --- a/transmit.py +++ b/transmit.py @@ -1098,6 +1098,7 @@ if __name__ == "__main__": try: result = subprocess.run(query, capture_output=True, text=True, check=True) print(f"Command run was: {query}") + print(result) gui_status = result.stdout.strip() print(f"Output of the command (stdout): {gui_status}") except subprocess.CalledProcessError as e: @@ -1107,6 +1108,7 @@ if __name__ == "__main__": print(f"Output of the command (stdout): {e.stdout}") # print(f"Error output of the command (stderr): {e.stderr}") if gui_status == "graphical.target": + print("Sleep another 30 seconds") sleep(30) # sleep another 30 seconds for cpu to settle down print (gui_status) From 24d437863b52b768e6f32a52ddff82ebfa15bf2f Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 21:29:57 -0400 Subject: [PATCH 266/287] Update transmit.py gui_result --- transmit.py | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/transmit.py b/transmit.py index 241572af..6d20aadc 100644 --- a/transmit.py +++ b/transmit.py @@ -1093,24 +1093,13 @@ if __name__ == "__main__": if (mode == 'm') and (skip == False): print("Sleeping 15 seconds") sleep(15) # avoid CW jumping around at start - - query = ["systemctl", "get-default", "|", "grep graphical.target"] - try: - result = subprocess.run(query, capture_output=True, text=True, check=True) - print(f"Command run was: {query}") - print(result) - gui_status = result.stdout.strip() - print(f"Output of the command (stdout): {gui_status}") - except subprocess.CalledProcessError as e: - # print(f"Command failed with return code: {e.returncode}") - print(f"Command run was: {e.cmd}") - gui_status = e.stdout.strip() - print(f"Output of the command (stdout): {e.stdout}") - # print(f"Error output of the command (stderr): {e.stderr}") - if gui_status == "graphical.target": + + result = subprocess.run("systemctl get-default | grep graphical.target", shell=True, capture_output=True, text=True) + gui_result = result.stdout.strip() + print(gui_result) + if gui_result == "graphical.target": print("Sleep another 30 seconds") sleep(30) # sleep another 30 seconds for cpu to settle down - print (gui_status) sim_failure_check() From 6010d791fea3b3a8b1895af687247e339e238396 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 21:54:53 -0400 Subject: [PATCH 267/287] add gpredict script --- groundstation/gpredict.sh | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100755 groundstation/gpredict.sh diff --git a/groundstation/gpredict.sh b/groundstation/gpredict.sh new file mode 100755 index 00000000..6f926dc8 --- /dev/null +++ b/groundstation/gpredict.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# + +if [ ! $(systemctl get-default | grep graphical) ]; then + + echo "Graphical User Interface not running!" + echo + echo "Do you want to reboot and switch to GUI so you can run Gpredict?" + read answer + + if [ "$answer" = "y" ] || [ "$answer" = "yes" ]; then + echo "Rebooting!" + sudo raspi-config nonint do_boot_behaviour B4 + sudo reboot now + else + echo "You can run Gpredict next time you run the GUI." + exit + fi +fi + +nohup /usr/bin/gpredict /dev/null 2>&1 & From de00467829f464f688a25977bab0aab65acc57e1 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 22:00:10 -0400 Subject: [PATCH 268/287] Update install add gpredict.desktop copy --- install | 1 + 1 file changed, 1 insertion(+) diff --git a/install b/install index c2110176..0b5f72e8 100755 --- a/install +++ b/install @@ -344,6 +344,7 @@ sudo apt-get update && sudo apt-get dist-upgrade -y # fi cp /home/pi/CubeSatSim/groundstation/pacsat.desktop /home/pi/Desktop/pacsat.desktop +cp /home/pi/CubeSatSim/groundstation/gpredict.desktop /home/pi/Desktop/gpredict.desktop if [ ! -d "/home/pi/venv" ]; then From 92a49408f8aed1ed71f55301dd7e0d2c2de4be09 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Tue, 21 Jul 2026 22:02:09 -0400 Subject: [PATCH 269/287] Update pacsat-run.sh add gui check --- groundstation/pacsat-run.sh | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/groundstation/pacsat-run.sh b/groundstation/pacsat-run.sh index 37139874..2c71944f 100755 --- a/groundstation/pacsat-run.sh +++ b/groundstation/pacsat-run.sh @@ -15,6 +15,23 @@ sudo killall -9 direwolf &>/dev/null sudo killall -9 aplay &>/dev/null +if [ ! $(systemctl get-default | grep graphical) ]; then + + echo "Graphical User Interface not running!" + echo + echo "Do you want to reboot and switch to GUI so you can run the Pacsat Ground Station" + read answer + + if [ "$answer" = "y" ] || [ "$answer" = "yes" ]; then + echo "Rebooting!" + sudo raspi-config nonint do_boot_behaviour B4 + sudo reboot now + else + echo "You can run the Pacsat Ground Station next time you run the GUI." + exit + fi +fi + #FILE=/home/pi/.pacsatprofile #if [ ! -f "$FILE" ]; then From 65978555ae3a449ad66fca85202450a9cfe35986 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 00:19:18 -0400 Subject: [PATCH 270/287] Update config for rig frequency, show default rx --- config | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config b/config index 5ae66550..b777293e 100755 --- a/config +++ b/config @@ -296,8 +296,9 @@ TXPL=${11} # echo " MHz" elif [ "${14}" = "rig" ] ; then echo "rigctld Doppler frequency shift enabled" - echo -n "Current TX and RX Frequency (Hz) is: " + echo -n "Current TX Frequency (Hz) is: " cat /home/pi/CubeSatSim/frequency.txt + printf "\b\b\b\b\b\b\b Current RX Frequency (Hz) is ${8} or set for a particular satellite" echo elif [[ ( "$MODE" == "f" || "$MODE" == "b" || "$MODE" == "j") ]] ; then echo "Doppler frequency shift is OFF" From 369361ff6c8a1eba460f88f979a953d2d618d05e Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 00:23:21 -0400 Subject: [PATCH 271/287] Update config remove last 11 chars of frequency.txt --- config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config b/config index b777293e..1a7164f8 100755 --- a/config +++ b/config @@ -297,8 +297,8 @@ TXPL=${11} elif [ "${14}" = "rig" ] ; then echo "rigctld Doppler frequency shift enabled" echo -n "Current TX Frequency (Hz) is: " - cat /home/pi/CubeSatSim/frequency.txt - printf "\b\b\b\b\b\b\b Current RX Frequency (Hz) is ${8} or set for a particular satellite" + head -c -11 frequency.txt + echo "Current RX Frequency (Hz) is: ${8} or set for a particular satellite" echo elif [[ ( "$MODE" == "f" || "$MODE" == "b" || "$MODE" == "j") ]] ; then echo "Doppler frequency shift is OFF" From 9cba600bb6700c0cabe6f6e6dc5b3782c0a0b20d Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 00:24:55 -0400 Subject: [PATCH 272/287] Update config with MHz --- config | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/config b/config index 1a7164f8..038d50b4 100755 --- a/config +++ b/config @@ -298,8 +298,7 @@ TXPL=${11} echo "rigctld Doppler frequency shift enabled" echo -n "Current TX Frequency (Hz) is: " head -c -11 frequency.txt - echo "Current RX Frequency (Hz) is: ${8} or set for a particular satellite" - echo + echo -n "\nCurrent RX Frequency (MHz) is: ${8} or set for a particular satellite\n\n" elif [[ ( "$MODE" == "f" || "$MODE" == "b" || "$MODE" == "j") ]] ; then echo "Doppler frequency shift is OFF" echo -n "TX Frequency is approximately: " From 70c1f4e27de56cd6d82d2ad407ea4c600fbbedae Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 00:25:39 -0400 Subject: [PATCH 273/287] Update config echo -e --- config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config b/config index 038d50b4..361d4f49 100755 --- a/config +++ b/config @@ -298,7 +298,7 @@ TXPL=${11} echo "rigctld Doppler frequency shift enabled" echo -n "Current TX Frequency (Hz) is: " head -c -11 frequency.txt - echo -n "\nCurrent RX Frequency (MHz) is: ${8} or set for a particular satellite\n\n" + echo -e "\nCurrent RX Frequency (MHz) is: ${8} or set for a particular satellite\n\n" elif [[ ( "$MODE" == "f" || "$MODE" == "b" || "$MODE" == "j") ]] ; then echo "Doppler frequency shift is OFF" echo -n "TX Frequency is approximately: " From 0bc4a63918c974dcfa6a29ed64b9a06d06b21045 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 00:26:27 -0400 Subject: [PATCH 274/287] Update config extra newline --- config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config b/config index 361d4f49..887570f8 100755 --- a/config +++ b/config @@ -298,7 +298,7 @@ TXPL=${11} echo "rigctld Doppler frequency shift enabled" echo -n "Current TX Frequency (Hz) is: " head -c -11 frequency.txt - echo -e "\nCurrent RX Frequency (MHz) is: ${8} or set for a particular satellite\n\n" + echo -e "\nCurrent RX Frequency (MHz) is: ${8} or set for a particular satellite\n" elif [[ ( "$MODE" == "f" || "$MODE" == "b" || "$MODE" == "j") ]] ; then echo "Doppler frequency shift is OFF" echo -n "TX Frequency is approximately: " From 8fff887eec7bcef20c44cf0ddf3d611349c19cac Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 00:27:21 -0400 Subject: [PATCH 275/287] Update config remove extra newline --- config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config b/config index 887570f8..14e7aeb6 100755 --- a/config +++ b/config @@ -298,7 +298,7 @@ TXPL=${11} echo "rigctld Doppler frequency shift enabled" echo -n "Current TX Frequency (Hz) is: " head -c -11 frequency.txt - echo -e "\nCurrent RX Frequency (MHz) is: ${8} or set for a particular satellite\n" + echo -e "\nCurrent RX Frequency (MHz) is: ${8} or set for a particular satellite" elif [[ ( "$MODE" == "f" || "$MODE" == "b" || "$MODE" == "j") ]] ; then echo "Doppler frequency shift is OFF" echo -n "TX Frequency is approximately: " From 664f5a02f734a10635d408d93eb11edfd8aecae2 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 00:50:16 -0400 Subject: [PATCH 276/287] Update install download Icons for desktop --- install | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/install b/install index 0b5f72e8..4957dc4e 100755 --- a/install +++ b/install @@ -900,6 +900,15 @@ cd sed -i 's/quick_exec=0/quick_exec=1/' ~/.config/libfm/libfm.conf +if [ ! -d "/home/pi/Icons" ]; then + cd + mkdir Icons + cd Icons + #wget http://cubesatsim.org/icons/* + #wget -r -nd --no-parent -A 'bar.*.tar.gz' http://url/dir/ + wget -r -nd --no-parent -A '*' https://cubesatsim.org/icons/ +fi + sudo apt install -y raspberrypi-ui-mods sudo apt autoremove -y From 575c3aa3acc8ff726b121ded4e7e4e7e24bd0a7b Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 11:10:59 -0400 Subject: [PATCH 277/287] Update transmit.py remove left over doppler table --- transmit.py | 246 +--------------------------------------------------- 1 file changed, 4 insertions(+), 242 deletions(-) diff --git a/transmit.py b/transmit.py index 6d20aadc..e371577a 100644 --- a/transmit.py +++ b/transmit.py @@ -322,243 +322,6 @@ def stop_repeater(): print("Finished resetting audio") # print("Ready to detect carrier") -iss_doppler_passes = { - 5: [ - {"time_sec": -180, "velocity_kms": -4.00, "doppler_434_khz": 5.79, "obs_434_mhz": 434.9058, "doppler_144_khz": 1.93, "obs_144_mhz": 144.9019}, - {"time_sec": -170, "velocity_kms": -3.89, "doppler_434_khz": 5.64, "obs_434_mhz": 434.9056, "doppler_144_khz": 1.88, "obs_144_mhz": 144.9019}, - {"time_sec": -160, "velocity_kms": -3.78, "doppler_434_khz": 5.48, "obs_434_mhz": 434.9055, "doppler_144_khz": 1.83, "obs_144_mhz": 144.9018}, - {"time_sec": -150, "velocity_kms": -3.67, "doppler_434_khz": 5.32, "obs_434_mhz": 434.9053, "doppler_144_khz": 1.77, "obs_144_mhz": 144.9018}, - {"time_sec": -140, "velocity_kms": -3.54, "doppler_434_khz": 5.14, "obs_434_mhz": 434.9051, "doppler_144_khz": 1.71, "obs_144_mhz": 144.9017}, - {"time_sec": -130, "velocity_kms": -3.42, "doppler_434_khz": 4.96, "obs_434_mhz": 434.9050, "doppler_144_khz": 1.65, "obs_144_mhz": 144.9017}, - {"time_sec": -120, "velocity_kms": -3.28, "doppler_434_khz": 4.76, "obs_434_mhz": 434.9048, "doppler_144_khz": 1.59, "obs_144_mhz": 144.9016}, - {"time_sec": -110, "velocity_kms": -3.14, "doppler_434_khz": 4.55, "obs_434_mhz": 434.9046, "doppler_144_khz": 1.52, "obs_144_mhz": 144.9015}, - {"time_sec": -100, "velocity_kms": -2.99, "doppler_434_khz": 4.33, "obs_434_mhz": 434.9043, "doppler_144_khz": 1.44, "obs_144_mhz": 144.9014}, - {"time_sec": -90, "velocity_kms": -2.83, "doppler_434_khz": 4.10, "obs_434_mhz": 434.9041, "doppler_144_khz": 1.37, "obs_144_mhz": 144.9014}, - {"time_sec": -80, "velocity_kms": -2.66, "doppler_434_khz": 3.86, "obs_434_mhz": 434.9039, "doppler_144_khz": 1.29, "obs_144_mhz": 144.9013}, - {"time_sec": -70, "velocity_kms": -2.48, "doppler_434_khz": 3.60, "obs_434_mhz": 434.9036, "doppler_144_khz": 1.20, "obs_144_mhz": 144.9012}, - {"time_sec": -60, "velocity_kms": -2.29, "doppler_434_khz": 3.32, "obs_434_mhz": 434.9033, "doppler_144_khz": 1.11, "obs_144_mhz": 144.9011}, - {"time_sec": -50, "velocity_kms": -2.09, "doppler_434_khz": 3.03, "obs_434_mhz": 434.9030, "doppler_144_khz": 1.01, "obs_144_mhz": 144.9010}, - {"time_sec": -40, "velocity_kms": -1.87, "doppler_434_khz": 2.71, "obs_434_mhz": 434.9027, "doppler_144_khz": 0.90, "obs_144_mhz": 144.9009}, - {"time_sec": -30, "velocity_kms": -1.63, "doppler_434_khz": 2.37, "obs_434_mhz": 434.9024, "doppler_144_khz": 0.79, "obs_144_mhz": 144.9008}, - {"time_sec": -20, "velocity_kms": -1.33, "doppler_434_khz": 1.93, "obs_434_mhz": 434.9019, "doppler_144_khz": 0.64, "obs_144_mhz": 144.9006}, - {"time_sec": -10, "velocity_kms": -0.84, "doppler_434_khz": 1.22, "obs_434_mhz": 434.9012, "doppler_144_khz": 0.41, "obs_144_mhz": 144.9004}, - {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": 0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": 0.00, "obs_144_mhz": 144.9000}, - {"time_sec": 10, "velocity_kms": 0.84, "doppler_434_khz": -1.22, "obs_434_mhz": 434.8988, "doppler_144_khz": -0.41, "obs_144_mhz": 144.8996}, - {"time_sec": 20, "velocity_kms": 1.33, "doppler_434_khz": -1.93, "obs_434_mhz": 434.8981, "doppler_144_khz": -0.64, "obs_144_mhz": 144.8994}, - {"time_sec": 30, "velocity_kms": 1.63, "doppler_434_khz": -2.37, "obs_434_mhz": 434.8976, "doppler_144_khz": -0.79, "obs_144_mhz": 144.8992}, - {"time_sec": 40, "velocity_kms": 1.87, "doppler_434_khz": -2.71, "obs_434_mhz": 434.8973, "doppler_144_khz": -0.90, "obs_144_mhz": 144.8991}, - {"time_sec": 50, "velocity_kms": 2.09, "doppler_434_khz": -3.03, "obs_434_mhz": 434.8970, "doppler_144_khz": -1.01, "obs_144_mhz": 144.8990}, - {"time_sec": 60, "velocity_kms": 2.29, "doppler_434_khz": -3.32, "obs_434_mhz": 434.8967, "doppler_144_khz": -1.11, "obs_144_mhz": 144.8989}, - {"time_sec": 70, "velocity_kms": 2.48, "doppler_434_khz": -3.60, "obs_434_mhz": 434.8964, "doppler_144_khz": -1.20, "obs_144_mhz": 144.8988}, - {"time_sec": 80, "velocity_kms": 2.66, "doppler_434_khz": -3.86, "obs_434_mhz": 434.8961, "doppler_144_khz": -1.29, "obs_144_mhz": 144.8987}, - {"time_sec": 90, "velocity_kms": 2.83, "doppler_434_khz": -4.10, "obs_434_mhz": 434.8959, "doppler_144_khz": -1.37, "obs_144_mhz": 144.8986}, - {"time_sec": 100, "velocity_kms": 2.99, "doppler_434_khz": -4.33, "obs_434_mhz": 434.8957, "doppler_144_khz": -1.44, "obs_144_mhz": 144.8986}, - {"time_sec": 110, "velocity_kms": 3.14, "doppler_434_khz": -4.55, "obs_434_mhz": 434.8954, "doppler_144_khz": -1.52, "obs_144_mhz": 144.8985}, - {"time_sec": 120, "velocity_kms": 3.28, "doppler_434_khz": -4.76, "obs_434_mhz": 434.8952, "doppler_144_khz": -1.59, "obs_144_mhz": 144.8984}, - {"time_sec": 130, "velocity_kms": 3.42, "doppler_434_khz": -4.96, "obs_434_mhz": 434.8950, "doppler_144_khz": -1.65, "obs_144_mhz": 144.8983}, - {"time_sec": 140, "velocity_kms": 3.54, "doppler_434_khz": -5.14, "obs_434_mhz": 434.8949, "doppler_144_khz": -1.71, "obs_144_mhz": 144.8983}, - {"time_sec": 150, "velocity_kms": 3.67, "doppler_434_khz": -5.32, "obs_434_mhz": 434.8947, "doppler_144_khz": -1.77, "obs_144_mhz": 144.8982}, - {"time_sec": 160, "velocity_kms": 3.78, "doppler_434_khz": -5.48, "obs_434_mhz": 434.8945, "doppler_144_khz": -1.83, "obs_144_mhz": 144.8982}, - {"time_sec": 170, "velocity_kms": 3.89, "doppler_434_khz": -5.64, "obs_434_mhz": 434.8944, "doppler_144_khz": -1.88, "obs_144_mhz": 144.8981}, - {"time_sec": 180, "velocity_kms": 4.00, "doppler_434_khz": -5.79, "obs_434_mhz": 434.8942, "doppler_144_khz": -1.93, "obs_144_mhz": 144.8981} - ], - 20: [ - {"time_sec": -180, "velocity_kms": -5.81, "doppler_434_khz": 8.43, "obs_434_mhz": 434.9084, "doppler_144_khz": 2.81, "obs_144_mhz": 144.9028}, - {"time_sec": -170, "velocity_kms": -5.68, "doppler_434_khz": 8.24, "obs_434_mhz": 434.9082, "doppler_144_khz": 2.75, "obs_144_mhz": 144.9027}, - {"time_sec": -160, "velocity_kms": -5.55, "doppler_434_khz": 8.05, "obs_434_mhz": 434.9081, "doppler_144_khz": 2.68, "obs_144_mhz": 144.9027}, - {"time_sec": -150, "velocity_kms": -5.39, "doppler_434_khz": 7.82, "obs_434_mhz": 434.9078, "doppler_144_khz": 2.61, "obs_144_mhz": 144.9026}, - {"time_sec": -140, "velocity_kms": -5.22, "doppler_434_khz": 7.57, "obs_434_mhz": 434.9076, "doppler_144_khz": 2.52, "obs_144_mhz": 144.9025}, - {"time_sec": -130, "velocity_kms": -5.02, "doppler_434_khz": 7.28, "obs_434_mhz": 434.9073, "doppler_144_khz": 2.43, "obs_144_mhz": 144.9024}, - {"time_sec": -120, "velocity_kms": -4.81, "doppler_434_khz": 6.98, "obs_434_mhz": 434.9070, "doppler_144_khz": 2.32, "obs_144_mhz": 144.9023}, - {"time_sec": -110, "velocity_kms": -4.57, "doppler_434_khz": 6.63, "obs_434_mhz": 434.9066, "doppler_144_khz": 2.21, "obs_144_mhz": 144.9022}, - {"time_sec": -100, "velocity_kms": -4.30, "doppler_434_khz": 6.24, "obs_434_mhz": 434.9062, "doppler_144_khz": 2.08, "obs_144_mhz": 144.9021}, - {"time_sec": -90, "velocity_kms": -4.00, "doppler_434_khz": 5.80, "obs_434_mhz": 434.9058, "doppler_144_khz": 1.93, "obs_144_mhz": 144.9019}, - {"time_sec": -80, "velocity_kms": -3.68, "doppler_434_khz": 5.34, "obs_434_mhz": 434.9053, "doppler_144_khz": 1.78, "obs_144_mhz": 144.9018}, - {"time_sec": -70, "velocity_kms": -3.32, "doppler_434_khz": 4.82, "obs_434_mhz": 434.9048, "doppler_144_khz": 1.60, "obs_144_mhz": 144.9016}, - {"time_sec": -60, "velocity_kms": -2.92, "doppler_434_khz": 4.24, "obs_434_mhz": 434.9042, "doppler_144_khz": 1.41, "obs_144_mhz": 144.9014}, - {"time_sec": -50, "velocity_kms": -2.50, "doppler_434_khz": 3.63, "obs_434_mhz": 434.9036, "doppler_144_khz": 1.21, "obs_144_mhz": 144.9012}, - {"time_sec": -40, "velocity_kms": -2.04, "doppler_434_khz": 2.96, "obs_434_mhz": 434.9030, "doppler_144_khz": 0.99, "obs_144_mhz": 144.9010}, - {"time_sec": -30, "velocity_kms": -1.56, "doppler_434_khz": 2.26, "obs_434_mhz": 434.9023, "doppler_144_khz": 0.75, "obs_144_mhz": 144.9008}, - {"time_sec": -20, "velocity_kms": -1.05, "doppler_434_khz": 1.52, "obs_434_mhz": 434.9015, "doppler_144_khz": 0.51, "obs_144_mhz": 144.9005}, - {"time_sec": -10, "velocity_kms": -0.53, "doppler_434_khz": 0.77, "obs_434_mhz": 434.9008, "doppler_144_khz": 0.26, "obs_144_mhz": 144.9003}, - {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, - {"time_sec": 10, "velocity_kms": 0.53, "doppler_434_khz": -0.77, "obs_434_mhz": 434.8992, "doppler_144_khz": -0.26, "obs_144_mhz": 144.8997}, - {"time_sec": 20, "velocity_kms": 1.05, "doppler_434_khz": -1.52, "obs_434_mhz": 434.8985, "doppler_144_khz": -0.51, "obs_144_mhz": 144.8995}, - {"time_sec": 30, "velocity_kms": 1.56, "doppler_434_khz": -2.26, "obs_434_mhz": 434.8977, "doppler_144_khz": -0.75, "obs_144_mhz": 144.8992}, - {"time_sec": 40, "velocity_kms": 2.04, "doppler_434_khz": -2.96, "obs_434_mhz": 434.8970, "doppler_144_khz": -0.99, "obs_144_mhz": 144.8990}, - {"time_sec": 50, "velocity_kms": 2.50, "doppler_434_khz": -3.63, "obs_434_mhz": 434.8964, "doppler_144_khz": -1.21, "obs_144_mhz": 144.8988}, - {"time_sec": 60, "velocity_kms": 2.92, "doppler_434_khz": -4.24, "obs_434_mhz": 434.8958, "doppler_144_khz": -1.41, "obs_144_mhz": 144.8986}, - {"time_sec": 70, "velocity_kms": 3.32, "doppler_434_khz": -4.82, "obs_434_mhz": 434.8952, "doppler_144_khz": -1.60, "obs_144_mhz": 144.8984}, - {"time_sec": 80, "velocity_kms": 3.68, "doppler_434_khz": -5.34, "obs_434_mhz": 434.8947, "doppler_144_khz": -1.78, "obs_144_mhz": 144.8982}, - {"time_sec": 90, "velocity_kms": 4.00, "doppler_434_khz": -5.80, "obs_434_mhz": 434.8942, "doppler_144_khz": -1.93, "obs_144_mhz": 144.8981}, - {"time_sec": 100, "velocity_kms": 4.30, "doppler_434_khz": -6.24, "obs_434_mhz": 434.8938, "doppler_144_khz": -2.08, "obs_144_mhz": 144.8979}, - {"time_sec": 110, "velocity_kms": 4.57, "doppler_434_khz": -6.63, "obs_434_mhz": 434.8934, "doppler_144_khz": -2.21, "obs_144_mhz": 144.8978}, - {"time_sec": 120, "velocity_kms": 4.81, "doppler_434_khz": -6.98, "obs_434_mhz": 434.8930, "doppler_144_khz": -2.32, "obs_144_mhz": 144.8977}, - {"time_sec": 130, "velocity_kms": 5.02, "doppler_434_khz": -7.28, "obs_434_mhz": 434.8927, "doppler_144_khz": -2.43, "obs_144_mhz": 144.8976}, - {"time_sec": 140, "velocity_kms": 5.22, "doppler_434_khz": -7.57, "obs_434_mhz": 434.8924, "doppler_144_khz": -2.52, "obs_144_mhz": 144.8975}, - {"time_sec": 150, "velocity_kms": 5.39, "doppler_434_khz": -7.82, "obs_434_mhz": 434.8922, "doppler_144_khz": -2.61, "obs_144_mhz": 144.8974}, - {"time_sec": 160, "velocity_kms": 5.55, "doppler_434_khz": -8.05, "obs_434_mhz": 434.8919, "doppler_144_khz": -2.68, "obs_144_mhz": 144.8973}, - {"time_sec": 170, "velocity_kms": 5.68, "doppler_434_khz": -8.24, "obs_434_mhz": 434.8918, "doppler_144_khz": -2.75, "obs_144_mhz": 144.8973}, - {"time_sec": 180, "velocity_kms": 5.81, "doppler_434_khz": -8.43, "obs_434_mhz": 434.8916, "doppler_144_khz": -2.81, "obs_144_mhz": 144.8972} - ], - 40: [ - {"time_sec": -180, "velocity_kms": -6.67, "doppler_434_khz": 9.68, "obs_434_mhz": 434.9097, "doppler_144_khz": 3.22, "obs_144_mhz": 144.9032}, - {"time_sec": -170, "velocity_kms": -6.60, "doppler_434_khz": 9.57, "obs_434_mhz": 434.9096, "doppler_144_khz": 3.19, "obs_144_mhz": 144.9032}, - {"time_sec": -160, "velocity_kms": -6.52, "doppler_434_khz": 9.46, "obs_434_mhz": 434.9095, "doppler_144_khz": 3.15, "obs_144_mhz": 144.9032}, - {"time_sec": -150, "velocity_kms": -6.43, "doppler_434_khz": 9.33, "obs_434_mhz": 434.9093, "doppler_144_khz": 3.11, "obs_144_mhz": 144.9031}, - {"time_sec": -140, "velocity_kms": -6.32, "doppler_434_khz": 9.17, "obs_434_mhz": 434.9092, "doppler_144_khz": 3.05, "obs_144_mhz": 144.9031}, - {"time_sec": -130, "velocity_kms": -6.19, "doppler_434_khz": 8.98, "obs_434_mhz": 434.9090, "doppler_144_khz": 2.99, "obs_144_mhz": 144.9030}, - {"time_sec": -120, "velocity_kms": -6.04, "doppler_434_khz": 8.76, "obs_434_mhz": 434.9088, "doppler_144_khz": 2.92, "obs_144_mhz": 144.9029}, - {"time_sec": -110, "velocity_kms": -5.86, "doppler_434_khz": 8.50, "obs_434_mhz": 434.9085, "doppler_144_khz": 2.83, "obs_144_mhz": 144.9028}, - {"time_sec": -100, "velocity_kms": -5.65, "doppler_434_khz": 8.20, "obs_434_mhz": 434.9082, "doppler_144_khz": 2.73, "obs_144_mhz": 144.9027}, - {"time_sec": -90, "velocity_kms": -5.39, "doppler_434_khz": 7.82, "obs_434_mhz": 434.9078, "doppler_144_khz": 2.61, "obs_144_mhz": 144.9026}, - {"time_sec": -80, "velocity_kms": -5.08, "doppler_434_khz": 7.37, "obs_434_mhz": 434.9074, "doppler_144_khz": 2.46, "obs_144_mhz": 144.9025}, - {"time_sec": -70, "velocity_kms": -4.72, "doppler_434_khz": 6.85, "obs_434_mhz": 434.9068, "doppler_144_khz": 2.28, "obs_144_mhz": 144.9023}, - {"time_sec": -60, "velocity_kms": -4.28, "doppler_434_khz": 6.21, "obs_434_mhz": 434.9062, "doppler_144_khz": 2.07, "obs_144_mhz": 144.9021}, - {"time_sec": -50, "velocity_kms": -3.77, "doppler_434_khz": 5.47, "obs_434_mhz": 434.9055, "doppler_144_khz": 1.82, "obs_144_mhz": 144.8993}, # manual note context adjustments active - {"time_sec": -40, "velocity_kms": -3.17, "doppler_434_khz": 4.60, "obs_434_mhz": 434.9046, "doppler_144_khz": 1.53, "obs_144_mhz": 144.9015}, - {"time_sec": -30, "velocity_kms": -2.48, "doppler_434_khz": 3.60, "obs_434_mhz": 434.9036, "doppler_144_khz": 1.20, "obs_144_mhz": 144.9012}, - {"time_sec": -20, "velocity_kms": -1.70, "doppler_434_khz": 2.47, "obs_434_mhz": 434.9025, "doppler_144_khz": 0.82, "obs_144_mhz": 144.9008}, - {"time_sec": -10, "velocity_kms": -0.87, "doppler_434_khz": 1.26, "obs_434_mhz": 434.9013, "doppler_144_khz": 0.42, "obs_144_mhz": 144.9004}, - {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, - {"time_sec": 10, "velocity_kms": 0.87, "doppler_434_khz": -1.26, "obs_434_mhz": 434.8987, "doppler_144_khz": -0.42, "obs_144_mhz": 144.8996}, - {"time_sec": 20, "velocity_kms": 1.70, "doppler_434_khz": -2.47, "obs_434_mhz": 434.8975, "doppler_144_khz": -0.82, "obs_144_mhz": 144.8992}, - {"time_sec": 30, "velocity_kms": 2.48, "doppler_434_khz": -3.60, "obs_434_mhz": 434.8964, "doppler_144_khz": -1.20, "obs_144_mhz": 144.8988}, - {"time_sec": 40, "velocity_kms": 3.17, "doppler_434_khz": -4.60, "obs_434_mhz": 434.8954, "doppler_144_khz": -1.53, "obs_144_mhz": 144.8985}, - {"time_sec": 50, "velocity_kms": 3.77, "doppler_434_khz": -5.47, "obs_434_mhz": 434.8945, "doppler_144_khz": -1.82, "obs_144_mhz": 144.8982}, - {"time_sec": 60, "velocity_kms": 4.28, "doppler_434_khz": -6.21, "obs_434_mhz": 434.8938, "doppler_144_khz": -2.07, "obs_144_mhz": 144.8979}, - {"time_sec": 70, "velocity_kms": 4.72, "doppler_434_khz": -6.85, "obs_434_mhz": 434.8932, "doppler_144_khz": -2.28, "obs_144_mhz": 144.8977}, - {"time_sec": 80, "velocity_kms": 5.08, "doppler_434_khz": -7.37, "obs_434_mhz": 434.8926, "doppler_144_khz": -2.46, "obs_144_mhz": 144.8975}, - {"time_sec": 90, "velocity_kms": 5.39, "doppler_434_khz": -7.82, "obs_434_mhz": 434.8922, "doppler_144_khz": -2.61, "obs_144_mhz": 144.8974}, - {"time_sec": 100, "velocity_kms": 0.87, "doppler_434_khz": -8.19, "obs_434_mhz": 434.8918, "doppler_144_khz": -2.73, "obs_144_mhz": 144.8973}, - {"time_sec": 110, "velocity_kms": 1.70, "doppler_434_khz": -8.50, "obs_434_mhz": 434.8915, "doppler_144_khz": -2.83, "obs_144_mhz": 144.8972}, - {"time_sec": 120, "velocity_kms": 2.48, "doppler_434_khz": -8.76, "obs_434_mhz": 434.8912, "doppler_144_khz": -2.92, "obs_144_mhz": 144.8971}, - {"time_sec": 130, "velocity_kms": 3.17, "doppler_434_khz": -8.98, "obs_434_mhz": 434.8910, "doppler_144_khz": -2.99, "obs_144_mhz": 144.8970}, - {"time_sec": 140, "velocity_kms": 3.77, "doppler_434_khz": -9.17, "obs_434_mhz": 434.8908, "doppler_144_khz": -3.05, "obs_144_mhz": 144.8969}, - {"time_sec": 150, "velocity_kms": 4.28, "doppler_434_khz": -9.33, "obs_434_mhz": 434.8907, "doppler_144_khz": -3.11, "obs_144_mhz": 144.8969}, - {"time_sec": 160, "velocity_kms": 4.72, "doppler_434_khz": -9.46, "obs_434_mhz": 434.8905, "doppler_144_khz": -3.15, "obs_144_mhz": 144.8968}, - {"time_sec": 170, "velocity_kms": 5.08, "doppler_434_khz": -9.58, "obs_434_mhz": 434.8904, "doppler_144_khz": -3.19, "obs_144_mhz": 144.8968}, - {"time_sec": 180, "velocity_kms": 5.39, "doppler_434_khz": -9.68, "obs_434_mhz": 434.8903, "doppler_144_khz": -3.22, "obs_144_mhz": 144.8968} - ], - 70: [ - {"time_sec": -180, "velocity_kms": -7.00, "doppler_434_khz": 10.15, "obs_434_mhz": 434.9102, "doppler_144_khz": 3.38, "obs_144_mhz": 144.9034}, - {"time_sec": -170, "velocity_kms": -6.95, "doppler_434_khz": 10.09, "obs_434_mhz": 434.9101, "doppler_144_khz": 3.36, "obs_144_mhz": 144.9034}, - {"time_sec": -160, "velocity_kms": -6.91, "doppler_434_khz": 10.02, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.34, "obs_144_mhz": 144.9033}, - {"time_sec": -150, "velocity_kms": -6.86, "doppler_434_khz": 9.95, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.32, "obs_144_mhz": 144.9033}, - {"time_sec": -140, "velocity_kms": -6.78, "doppler_434_khz": 9.84, "obs_434_mhz": 434.9098, "doppler_144_khz": 3.28, "obs_144_mhz": 144.9033}, - {"time_sec": -130, "velocity_kms": -6.70, "doppler_434_khz": 9.72, "obs_434_mhz": 434.9097, "doppler_144_khz": 3.24, "obs_144_mhz": 144.9032}, - {"time_sec": -120, "velocity_kms": -6.62, "doppler_434_khz": 9.60, "obs_434_mhz": 434.9096, "doppler_144_khz": 3.20, "obs_144_mhz": 144.9032}, - {"time_sec": -110, "velocity_kms": -6.47, "doppler_434_khz": 9.39, "obs_434_mhz": 434.9094, "doppler_144_khz": 3.13, "obs_144_mhz": 144.9031}, - {"time_sec": -100, "velocity_kms": -6.32, "doppler_434_khz": 9.17, "obs_434_mhz": 434.9092, "doppler_144_khz": 3.05, "obs_144_mhz": 144.9031}, - {"time_sec": -90, "velocity_kms": -6.17, "doppler_434_khz": 8.95, "obs_434_mhz": 434.9090, "doppler_144_khz": 2.98, "obs_144_mhz": 144.9030}, - {"time_sec": -80, "velocity_kms": -5.86, "doppler_434_khz": 8.50, "obs_434_mhz": 434.9085, "doppler_144_khz": 2.83, "obs_144_mhz": 144.9028}, - {"time_sec": -70, "velocity_kms": -5.55, "doppler_434_khz": 8.05, "obs_434_mhz": 434.9081, "doppler_144_khz": 2.68, "obs_144_mhz": 144.9027}, - {"time_sec": -60, "velocity_kms": -5.24, "doppler_434_khz": 7.60, "obs_434_mhz": 434.9076, "doppler_144_khz": 2.53, "obs_144_mhz": 144.9025}, - {"time_sec": -50, "velocity_kms": -4.60, "doppler_434_khz": 6.67, "obs_434_mhz": 434.9067, "doppler_144_khz": 2.22, "obs_144_mhz": 144.9022}, - {"time_sec": -40, "velocity_kms": -3.96, "doppler_434_khz": 5.74, "obs_434_mhz": 434.9057, "doppler_144_khz": 1.91, "obs_144_mhz": 144.9019}, - {"time_sec": -30, "velocity_kms": -3.32, "doppler_434_khz": 4.82, "obs_434_mhz": 434.9048, "doppler_144_khz": 1.60, "obs_144_mhz": 144.9016}, - {"time_sec": -20, "velocity_kms": -2.21, "doppler_434_khz": 3.21, "obs_434_mhz": 434.9032, "doppler_144_khz": 1.07, "obs_144_mhz": 144.9011}, - {"time_sec": -10, "velocity_kms": -1.11, "doppler_434_khz": 1.61, "obs_434_mhz": 434.9016, "doppler_144_khz": 0.53, "obs_144_mhz": 144.9005}, - {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, - {"time_sec": 10, "velocity_kms": 1.11, "doppler_434_khz": -1.61, "obs_434_mhz": 434.8984, "doppler_144_khz": -0.53, "obs_144_mhz": 144.8995}, - {"time_sec": 20, "velocity_kms": 2.21, "doppler_434_khz": -3.21, "obs_434_mhz": 434.8968, "doppler_144_khz": -1.07, "obs_144_mhz": 144.8989}, - {"time_sec": 30, "velocity_kms": 3.32, "doppler_434_khz": -4.82, "obs_434_mhz": 434.8952, "doppler_144_khz": -1.60, "obs_144_mhz": 144.8984}, - {"time_sec": 40, "velocity_kms": 3.96, "doppler_434_khz": -5.74, "obs_434_mhz": 434.8943, "doppler_144_khz": -1.91, "obs_144_mhz": 144.8981}, - {"time_sec": 50, "velocity_kms": 4.60, "doppler_434_khz": -6.67, "obs_434_mhz": 434.8933, "doppler_144_khz": -2.22, "obs_144_mhz": 144.8978}, - {"time_sec": 60, "velocity_kms": 5.24, "doppler_434_khz": -7.60, "obs_434_mhz": 434.8924, "doppler_144_khz": -2.53, "obs_144_mhz": 144.8975}, - {"time_sec": 70, "velocity_kms": 5.55, "doppler_434_khz": -8.05, "obs_434_mhz": 434.8919, "doppler_144_khz": -2.68, "obs_144_mhz": 144.8973}, - {"time_sec": 80, "velocity_kms": 5.86, "doppler_434_khz": -8.50, "obs_434_mhz": 434.8915, "doppler_144_khz": -2.83, "obs_144_mhz": 144.8972}, - {"time_sec": 90, "velocity_kms": 6.17, "doppler_434_khz": -8.95, "obs_434_mhz": 434.8910, "doppler_144_khz": -2.98, "obs_144_mhz": 144.8970}, - {"time_sec": 100, "velocity_kms": 6.32, "doppler_434_khz": -9.17, "obs_434_mhz": 434.8908, "doppler_144_khz": -3.05, "obs_144_mhz": 144.8969}, - {"time_sec": 110, "velocity_kms": 6.47, "doppler_434_khz": -9.39, "obs_434_mhz": 434.8906, "doppler_144_khz": -3.13, "obs_144_mhz": 144.8969}, - {"time_sec": 120, "velocity_kms": 6.62, "doppler_434_khz": -9.60, "obs_434_mhz": 434.8904, "doppler_144_khz": -3.20, "obs_144_mhz": 144.8968}, - {"time_sec": 130, "velocity_kms": 6.70, "doppler_434_khz": -9.72, "obs_434_mhz": 434.8903, "doppler_144_khz": -3.24, "obs_144_mhz": 144.8968}, - {"time_sec": 140, "velocity_kms": 6.78, "doppler_434_khz": -9.84, "obs_434_mhz": 434.8902, "doppler_144_khz": -3.28, "obs_144_mhz": 144.8967}, - {"time_sec": 150, "velocity_kms": 6.86, "doppler_434_khz": -9.95, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.32, "obs_144_mhz": 144.8967}, - {"time_sec": 160, "velocity_kms": 6.91, "doppler_434_khz": -10.02, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.34, "obs_144_mhz": 144.8967}, - {"time_sec": 170, "velocity_kms": 6.95, "doppler_434_khz": -10.09, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.36, "obs_144_mhz": 144.8966}, - {"time_sec": 180, "velocity_kms": 7.00, "doppler_434_khz": -10.15, "obs_434_mhz": 434.8898, "doppler_144_khz": -3.38, "obs_144_mhz": 144.8966} - ], - 85: [ - {"time_sec": -180, "velocity_kms": -7.15, "doppler_434_khz": 10.37, "obs_434_mhz": 434.9104, "doppler_144_khz": 3.46, "obs_144_mhz": 144.9035}, - {"time_sec": -170, "velocity_kms": -7.12, "doppler_434_khz": 10.32, "obs_434_mhz": 434.9103, "doppler_144_khz": 3.44, "obs_144_mhz": 144.9034}, - {"time_sec": -160, "velocity_kms": -7.08, "doppler_434_khz": 10.28, "obs_434_mhz": 434.9103, "doppler_144_khz": 3.42, "obs_144_mhz": 144.9034}, - {"time_sec": -150, "velocity_kms": -7.05, "doppler_434_khz": 10.23, "obs_434_mhz": 434.9102, "doppler_144_khz": 3.41, "obs_144_mhz": 144.9034}, - {"time_sec": -140, "velocity_kms": -6.99, "doppler_434_khz": 10.15, "obs_434_mhz": 434.9101, "doppler_144_khz": 3.38, "obs_144_mhz": 144.9034}, - {"time_sec": -130, "velocity_kms": -6.94, "doppler_434_khz": 10.06, "obs_434_mhz": 434.9101, "doppler_144_khz": 3.35, "obs_144_mhz": 144.9034}, - {"time_sec": -120, "velocity_kms": -6.88, "doppler_434_khz": 9.98, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.33, "obs_144_mhz": 144.9033}, - {"time_sec": -110, "velocity_kms": -6.75, "doppler_434_khz": 9.80, "obs_434_mhz": 434.9098, "doppler_144_khz": 3.26, "obs_144_mhz": 144.9033}, - {"time_sec": -100, "velocity_kms": -6.63, "doppler_434_khz": 9.61, "obs_434_mhz": 434.9096, "doppler_144_khz": 3.20, "obs_144_mhz": 144.9032}, - {"time_sec": -90, "velocity_kms": -6.50, "doppler_434_khz": 9.43, "obs_434_mhz": 434.9094, "doppler_144_khz": 3.14, "obs_144_mhz": 144.9031}, - {"time_sec": -80, "velocity_kms": -6.23, "doppler_434_khz": 9.04, "obs_434_mhz": 434.9090, "doppler_144_khz": 3.01, "obs_144_mhz": 144.9030}, - {"time_sec": -70, "velocity_kms": -5.97, "doppler_434_khz": 8.66, "obs_434_mhz": 434.9087, "doppler_144_khz": 2.88, "obs_144_mhz": 144.9029}, - {"time_sec": -60, "velocity_kms": -5.70, "doppler_434_khz": 8.27, "obs_434_mhz": 434.9083, "doppler_144_khz": 2.76, "obs_144_mhz": 144.9028}, - {"time_sec": -50, "velocity_kms": -5.10, "doppler_434_khz": 7.40, "obs_434_mhz": 434.9074, "doppler_144_khz": 2.47, "obs_144_mhz": 144.9025}, - {"time_sec": -40, "velocity_kms": -4.50, "doppler_434_khz": 6.53, "obs_434_mhz": 434.9065, "doppler_144_khz": 2.18, "obs_144_mhz": 144.9022}, - {"time_sec": -30, "velocity_kms": -3.90, "doppler_434_khz": 5.66, "obs_434_mhz": 434.9057, "doppler_144_khz": 1.89, "obs_144_mhz": 144.9019}, - {"time_sec": -20 ,"velocity_kms": -2.60, "doppler_434_khz": 3.77, "obs_434_mhz": 434.9038, "doppler_144_khz": 1.26, "obs_144_mhz": 144.9013}, - {"time_sec": -10 ,"velocity_kms": -1.30, "doppler_434_khz": 1.89, "obs_434_mhz": 434.9019, "doppler_144_khz": 0.63, "obs_144_mhz": 144.9006}, - {"time_sec": 0 ,"velocity_kms": 0.00, "doppler_434_khz": -0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": -0.00, "obs_144_mhz": 144.9000}, - {"time_sec": 10 ,"velocity_kms": 1.30, "doppler_434_khz": -1.89, "obs_434_mhz": 434.8981, "doppler_144_khz": -0.63, "obs_144_mhz": 144.8994}, - {"time_sec": 20 ,"velocity_kms": 2.60, "doppler_434_khz": -3.77, "obs_434_mhz": 434.8962, "doppler_144_khz": -1.26, "obs_144_mhz": 144.8987}, - {"time_sec": 30 ,"velocity_kms": 3.90, "doppler_434_khz": -5.66, "obs_434_mhz": 434.8943, "doppler_144_khz": -1.89, "obs_144_mhz": 144.8981}, - {"time_sec": 40 ,"velocity_kms": 4.50, "doppler_434_khz": -6.53, "obs_434_mhz": 434.8935, "doppler_144_khz": -2.18, "obs_144_mhz": 144.8978}, - {"time_sec": 50 ,"velocity_kms": 5.10, "doppler_434_khz": -7.40, "obs_434_mhz": 434.8926, "doppler_144_khz": -2.47, "obs_144_mhz": 144.8975}, - {"time_sec": 60 ,"velocity_kms": 5.70, "doppler_434_khz": -8.27, "obs_434_mhz": 434.8917, "doppler_144_khz": -2.76, "obs_144_mhz": 144.8972}, - {"time_sec": 70 ,"velocity_kms": 5.97, "doppler_434_khz": -8.66, "obs_434_mhz": 434.8913, "doppler_144_khz": -2.88, "obs_144_mhz": 144.8971}, - {"time_sec": 80 ,"velocity_kms": 6.23, "doppler_434_khz": -9.04, "obs_434_mhz": 434.8910, "doppler_144_khz": -3.01, "obs_144_mhz": 144.8970}, - {"time_sec": 90 ,"velocity_kms": 6.50, "doppler_434_khz": -9.43, "obs_434_mhz": 434.8906, "doppler_144_khz": -3.14, "obs_144_mhz": 144.8969}, - {"time_sec": 100 ,"velocity_kms": 6.63, "doppler_434_khz": -9.61, "obs_434_mhz": 434.8904, "doppler_144_khz": -3.20, "obs_144_mhz": 144.8968}, - {"time_sec": 110 ,"velocity_kms": 6.75, "doppler_434_khz": -9.80, "obs_434_mhz": 434.8902, "doppler_144_khz": -3.26, "obs_144_mhz": 144.8967}, - {"time_sec": 120 ,"velocity_kms": 6.88, "doppler_434_khz": -9.98, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.33, "obs_144_mhz": 144.8967}, - {"time_sec": 130 ,"velocity_kms": 6.94, "doppler_434_khz": -10.06, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.35, "obs_144_mhz": 144.8966}, - {"time_sec": 140 ,"velocity_kms": 6.99, "doppler_434_khz": -10.15, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.38, "obs_144_mhz": 144.8966}, - {"time_sec": 150 ,"velocity_kms": 7.05, "doppler_434_khz": -10.23, "obs_434_mhz": 434.8898, "doppler_144_khz": -3.41, "obs_144_mhz": 144.8966}, - {"time_sec": 160 ,"velocity_kms": 7.08, "doppler_434_khz": -10.28, "obs_434_mhz": 434.8917, "doppler_144_khz": -3.42, "obs_144_mhz": 144.8966}, - {"time_sec": 170 ,"velocity_kms": 7.12, "doppler_434_khz": -10.32, "obs_434_mhz": 434.8897, "doppler_144_khz": -3.44, "obs_144_mhz": 144.8966}, - {"time_sec": 180 ,"velocity_kms": 7.15, "doppler_434_khz": -10.37, "obs_434_mhz": 434.8896, "doppler_144_khz": -3.46, "obs_144_mhz": 144.8965} - ], - 89: [ - {"time_sec": -180, "velocity_kms": -7.17, "doppler_434_khz": 10.40, "obs_434_mhz": 434.9104, "doppler_144_khz": 3.47, "obs_144_mhz": 144.9035}, - {"time_sec": -170, "velocity_kms": -7.13, "doppler_434_khz": 10.35, "obs_434_mhz": 434.9103, "doppler_144_khz": 3.45, "obs_144_mhz": 144.9034}, - {"time_sec": -160, "velocity_kms": -7.09, "doppler_434_khz": 10.28, "obs_434_mhz": 434.9103, "doppler_144_khz": 3.43, "obs_144_mhz": 144.9034}, - {"time_sec": -150, "velocity_kms": -7.04, "doppler_434_khz": 10.21, "obs_434_mhz": 434.9102, "doppler_144_khz": 3.40, "obs_144_mhz": 144.9034}, - {"time_sec": -140, "velocity_kms": -6.97, "doppler_434_khz": 10.12, "obs_434_mhz": 434.9101, "doppler_144_khz": 3.37, "obs_144_mhz": 144.9034}, - {"time_sec": -130, "velocity_kms": -6.90, "doppler_434_khz": 10.01, "obs_434_mhz": 434.9100, "doppler_144_khz": 3.33, "obs_144_mhz": 144.9033}, - {"time_sec": -120, "velocity_kms": -6.81, "doppler_434_khz": 9.87, "obs_434_mhz": 434.9099, "doppler_144_khz": 3.29, "obs_144_mhz": 144.9033}, - {"time_sec": -110, "velocity_kms": -6.69, "doppler_434_khz": 9.71, "obs_434_mhz": 434.9097, "doppler_144_khz": 3.24, "obs_144_mhz": 144.9032}, - {"time_sec": -100, "velocity_kms": -6.55, "doppler_434_khz": 9.51, "obs_434_mhz": 434.9095, "doppler_144_khz": 3.17, "obs_144_mhz": 144.9032}, - {"time_sec": -90, "velocity_kms": -6.38, "doppler_434_khz": 9.25, "obs_434_mhz": 434.9093, "doppler_144_khz": 3.08, "obs_144_mhz": 144.9031}, - {"time_sec": -80, "velocity_kms": -6.15, "doppler_434_khz": 8.93, "obs_434_mhz": 434.9089, "doppler_144_khz": 2.97, "obs_144_mhz": 144.9030}, - {"time_sec": -70, "velocity_kms": -5.87, "doppler_434_khz": 8.51, "obs_434_mhz": 434.9085, "doppler_144_khz": 2.84, "obs_144_mhz": 144.9028}, - {"time_sec": -60, "velocity_kms": -5.49, "doppler_434_khz": 7.97, "obs_434_mhz": 434.9080, "doppler_144_khz": 2.66, "obs_144_mhz": 144.9027}, - {"time_sec": -50, "velocity_kms": -5.01, "doppler_434_khz": 7.26, "obs_434_mhz": 434.9073, "doppler_144_khz": 2.42, "obs_144_mhz": 144.9024}, - {"time_sec": -40, "velocity_kms": -4.37, "doppler_434_khz": 6.34, "obs_434_mhz": 434.9063, "doppler_144_khz": 2.11, "obs_144_mhz": 144.9021}, - {"time_sec": -30, "velocity_kms": -3.55, "doppler_434_khz": 5.15, "obs_434_mhz": 434.9051, "doppler_144_khz": 1.72, "obs_144_mhz": 144.9017}, - {"time_sec": -20, "velocity_kms": -2.53, "doppler_434_khz": 3.67, "obs_434_mhz": 434.9037, "doppler_144_khz": 1.22, "obs_144_mhz": 144.9012}, - {"time_sec": -10, "velocity_kms": -1.32, "doppler_434_khz": 1.92, "obs_434_mhz": 434.9019, "doppler_144_khz": 0.64, "obs_144_mhz": 144.9006}, - {"time_sec": 0, "velocity_kms": 0.00, "doppler_434_khz": 0.00, "obs_434_mhz": 434.9000, "doppler_144_khz": 0.00, "obs_144_mhz": 144.9000}, - {"time_sec": 10, "velocity_kms": 1.32, "doppler_434_khz": -1.92, "obs_434_mhz": 434.8981, "doppler_144_khz": -0.64, "obs_144_mhz": 144.8994}, - {"time_sec": 20, "velocity_kms": 2.53, "doppler_434_khz": -3.67, "obs_434_mhz": 434.8963, "doppler_144_khz": -1.22, "obs_144_mhz": 144.8988}, - {"time_sec": 30, "velocity_kms": 3.55, "doppler_434_khz": -5.15, "obs_434_mhz": 434.8949, "doppler_144_khz": -1.72, "obs_144_mhz": 144.8983}, - {"time_sec": 40, "velocity_kms": 4.37, "doppler_434_khz": -6.34, "obs_434_mhz": 434.8937, "doppler_144_khz": -2.11, "obs_144_mhz": 144.8979}, - {"time_sec": 50, "velocity_kms": 5.01, "doppler_434_khz": -7.26, "obs_434_mhz": 434.8927, "doppler_144_khz": -2.42, "obs_144_mhz": 144.8976}, - {"time_sec": 60, "velocity_kms": 5.49, "doppler_434_khz": -7.97, "obs_434_mhz": 434.8920, "doppler_144_khz": -2.66, "obs_144_mhz": 144.8973}, - {"time_sec": 70, "velocity_kms": 5.87, "doppler_434_khz": -8.51, "obs_434_mhz": 434.8915, "doppler_144_khz": -2.84, "obs_144_mhz": 144.8972}, - {"time_sec": 80, "velocity_kms": 6.15, "doppler_434_khz": -8.93, "obs_434_mhz": 434.8911, "doppler_144_khz": -2.97, "obs_144_mhz": 144.8970}, - {"time_sec": 90, "velocity_kms": 6.38, "doppler_434_khz": -9.25, "obs_434_mhz": 434.8907, "doppler_144_khz": -3.08, "obs_144_mhz": 144.8969}, - {"time_sec": 100, "velocity_kms": 6.55, "doppler_434_khz": -9.51, "obs_434_mhz": 434.8905, "doppler_144_khz": -3.17, "obs_144_mhz": 144.8968}, - {"time_sec": 110, "velocity_kms": 6.69, "doppler_434_khz": -9.71, "obs_434_mhz": 434.8903, "doppler_144_khz": -3.24, "obs_144_mhz": 144.8968}, - {"time_sec": 120, "velocity_kms": 6.81, "doppler_434_khz": -9.87, "obs_434_mhz": 434.8901, "doppler_144_khz": -3.29, "obs_144_mhz": 144.8967}, - {"time_sec": 130, "velocity_kms": 6.90, "doppler_434_khz": -10.01, "obs_434_mhz": 434.8900, "doppler_144_khz": -3.33, "obs_144_mhz": 144.8967}, - {"time_sec": 140, "velocity_kms": 6.97, "doppler_434_khz": -10.12, "obs_434_mhz": 434.8899, "doppler_144_khz": -3.37, "obs_144_mhz": 144.8966}, - {"time_sec": 150, "velocity_kms": 7.04, "doppler_434_khz": -10.21, "obs_434_mhz": 434.8898, "doppler_144_khz": -3.40, "obs_144_mhz": 144.8966}, - {"time_sec": 160, "velocity_kms": 7.09, "doppler_434_khz": -10.28, "obs_434_mhz": 434.8897, "doppler_144_khz": -3.43, "obs_144_mhz": 144.8966}, - {"time_sec": 170, "velocity_kms": 7.13, "doppler_434_khz": -10.35, "obs_434_mhz": 434.8897, "doppler_144_khz": -3.45, "obs_144_mhz": 144.8966}, - {"time_sec": 180, "velocity_kms": 7.17, "doppler_434_khz": -10.40, "obs_434_mhz": 434.8896, "doppler_144_khz": -3.47, "obs_144_mhz": 144.8965} - ] -} - def update_doppler(fm="yes"): try: @@ -568,7 +331,6 @@ def update_doppler(fm="yes"): global rxpl_value global txpl_value global sq - global doppler_table global mode global tx global rxf @@ -741,7 +503,7 @@ def cw_transmit_char(character): duration = morse_table[(ord(character.upper()) - ord('0')) % 44][i] if duration == 1: duration = 1.2 - print(duration) +# print(duration) while (duration != 0): transmit_carrier(duration * morse_timing) sleep(morse_timing * 0.4) # 6) @@ -1081,10 +843,10 @@ if __name__ == "__main__": rx_doppler_shift_hz = 0 print(f"Rx center frequency: {rx_doppler_start_hz}") - TARGET_PASS = 85 # Maximum elevation profile +# TARGET_PASS = 85 # Maximum elevation profile - doppler_table = iss_doppler_passes[TARGET_PASS] - print(f"Pass Max Elevation: {TARGET_PASS}°") +# doppler_table = iss_doppler_passes[TARGET_PASS] +# print(f"Pass Max Elevation: {TARGET_PASS}°") print("MODE: ") print(mode) From fa87607d3ec66b370622e61d66aed684195d9476 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 11:16:48 -0400 Subject: [PATCH 278/287] Update transmit.py in sim mode, shift rx frequency too --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index e371577a..d2269332 100644 --- a/transmit.py +++ b/transmit.py @@ -383,7 +383,7 @@ def update_doppler(fm="yes"): print(f"Rx Frequency: {new_rx_frequency:.0f}") else: new_tx_frequency = tx_frequency - new_rx_frequency = tx_frequency + new_rx_frequency = rx_frequency print(f"Tx Frequency: {new_tx_frequency:.0f}") print(f"Rx Frequency: {new_rx_frequency:.0f}") From be70f211fca8076af66055f2b61120875f459ffa Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 11:27:37 -0400 Subject: [PATCH 279/287] Update config -F print correct frequency --- config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config b/config index 14e7aeb6..7b69b013 100755 --- a/config +++ b/config @@ -1225,8 +1225,8 @@ elif [ "$1" = "-F" ]; then echo $1 $2 $3 $4 $5 $6 $tx $rx $9 ${10} ${11} ${12} ${13} ${14} echo $1 $2 $3 $4 $5 $6 $tx $rx $9 ${10} ${11} ${12} ${13} ${14} > /home/pi/CubeSatSim/sim.cfg - rxf=$(echo "$8 * 1000000" | bc) - txf=$(echo "$7 * 1000000" | bc) + rxf=$(echo "$rx * 1000000" | bc) + txf=$(echo "$tx * 1000000" | bc) echo $txf $rxf echo $txf $rxf > /home/pi/CubeSatSim/frequency.txt From 2613f2902dbd309d242794b9c751d250bc9e9bd4 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 11:40:08 -0400 Subject: [PATCH 280/287] Update transmit.py repeater mode, only shift by 290 if in 70cm --- transmit.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index d2269332..e79a6e37 100644 --- a/transmit.py +++ b/transmit.py @@ -715,7 +715,12 @@ if __name__ == "__main__": txf = float(config[6]) tx = "{:.4f}".format(txf) if (mode == 'e'): - txrf = (txf - 290.0) # - 0.1 # Cross Band Repeater mode transmit frequency in 2m band + if (txf > 420.0) and (txf < 450.0): + txrf = (txf - 290.0) # - 0.1 # Cross Band Repeater mode transmit frequency in 2m band + elif (txf > 144.0) and (txf < 148.0): + txrf = (txf - 290.0) # - 0.1 # Cross Band Repeater mode transmit frequency in 2m band + else: + txf = 144.9 txr = "{:.4f}".format(txrf) print("Transmit frequency: ",txr) else: From d0cf959932500ff8efb25cd8f9e1fa7a109566e9 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 11:44:06 -0400 Subject: [PATCH 281/287] Update transmit.py print repeater tx calculation --- transmit.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index e79a6e37..ef0c00c4 100644 --- a/transmit.py +++ b/transmit.py @@ -717,8 +717,10 @@ if __name__ == "__main__": if (mode == 'e'): if (txf > 420.0) and (txf < 450.0): txrf = (txf - 290.0) # - 0.1 # Cross Band Repeater mode transmit frequency in 2m band + print("Repeater mode subtracting 290 MHz from TX Frequency") elif (txf > 144.0) and (txf < 148.0): - txrf = (txf - 290.0) # - 0.1 # Cross Band Repeater mode transmit frequency in 2m band + txrf = txf # Cross Band Repeater mode transmit frequency is already in 2m band + print("Repeater mode using 2m TX Frequency") else: txf = 144.9 txr = "{:.4f}".format(txrf) From c7f117d87390bccb72880760b4d0d4c4564c5e85 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 12:28:58 -0400 Subject: [PATCH 282/287] Update frequency.py remove repeater frequency changes --- frequency.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/frequency.py b/frequency.py index ea08b0e2..d05b2e82 100644 --- a/frequency.py +++ b/frequency.py @@ -730,12 +730,13 @@ try: if len(config) > 6: txf = float(config[6]) tx = "{:.4f}".format(txf) - if (mode == 'e'): - txrf = (txf - 290.0) # - 0.1 # Cross Band Repeater mode transmit frequency in 2m band - txr = "{:.4f}".format(txrf) - print("Transmit frequency: ",txr) - else: - print("Transmit frequency: ",tx) +# if (mode == 'e'): +# txrf = (txf - 290.0) # - 0.1 # Cross Band Repeater mode transmit frequency in 2m band +# txr = "{:.4f}".format(txrf) +# print("Transmit frequency: ",txr) +# else: +# print("Transmit frequency: ",tx) + print("Transmit frequency: ",tx) if len(config) > 7: rxf = float(config[7]) rx = "{:.4f}".format(rxf) @@ -797,10 +798,11 @@ if (doppler_mode == 'off'): if (doppler_mode == 'sim'): print("Sim mode") - if (mode == 'e'): - tx_doppler_start_hz = txrf * 1e6 - else: - tx_doppler_start_hz = txf * 1e6 +# if (mode == 'e'): +# tx_doppler_start_hz = txrf * 1e6 +# else: +# tx_doppler_start_hz = txf * 1e6 + tx_doppler_start_hz = txf * 1e6 tx_doppler_shift_hz = 0 print(f"Tx center frequency: {tx_doppler_start_hz}") rx_doppler_start_hz = rxf * 1e6 From da949a287e51428a15c977cff70017fc3dd41d0a Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 12:41:36 -0400 Subject: [PATCH 283/287] Update transmit.py check for tx freq 3rd harmonic rx --- transmit.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/transmit.py b/transmit.py index ef0c00c4..7bba93b5 100644 --- a/transmit.py +++ b/transmit.py @@ -714,6 +714,7 @@ if __name__ == "__main__": if len(config) > 6: txf = float(config[6]) tx = "{:.4f}".format(txf) + txrf = 0 if (mode == 'e'): if (txf > 420.0) and (txf < 450.0): txrf = (txf - 290.0) # - 0.1 # Cross Band Repeater mode transmit frequency in 2m band @@ -731,6 +732,16 @@ if __name__ == "__main__": rxf = float(config[7]) rx = "{:.4f}".format(rxf) print(rx) + if abs(rxf - 3 * txrf) < 10.0: + txrf = txrf + 0.02 + txr = "{:.4f}".format(txrf) + print("Adjusting Repeater TX frequency to avoid 3rd harmonic RX") + print("Transmit frequency: ",txr) + if abs(rxf - 3 * txf) < 10.0: + txf = txf + 0.02 + tx = "{:.4f}".format(txf) + print("Adjusting TX frequency to avoid 3rd harmonic RX") + print("Transmit frequency: ",tx) if len(config) > 8: if config[8] == 'y' or config[8] == 'yes': hab_mode = True From d47a1a6b7eb49178c864f6b9208a1a92521c8ae5 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 12:56:37 -0400 Subject: [PATCH 284/287] Update transmit.py 3rd harmonic test in start_repeater --- transmit.py | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/transmit.py b/transmit.py index 7bba93b5..1f2fa830 100644 --- a/transmit.py +++ b/transmit.py @@ -298,11 +298,16 @@ def program_fm(rx, tx, rxpl_value, sq, txpl_value): print(f"An error occurred: {e}") print("program_fm failed") -def start_repeater(tx_doppler_freq_hz): +def start_repeater(tx_freq_hz, rx_freq_hz): global txLed print("Starting repeater") + + if abs(rx_freq_hz - 3 * tx_freq_hz) < 10.0: + tx_freq_hz = tx_freq_hz + 30000 + print("Adjusting Repeater TX frequency to avoid 3rd harmonic RX") + output(txLed, 1) - txr = "{:.3f}".format(tx_doppler_freq_hz/1e3) + txr = "{:.3f}".format(tx_freq_hz/1e3) print(txr) system("sudo nc -l 8011 | csdr convert_i16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + txr + " > /dev/null 2>&1 &") sleep(0.5) @@ -732,16 +737,6 @@ if __name__ == "__main__": rxf = float(config[7]) rx = "{:.4f}".format(rxf) print(rx) - if abs(rxf - 3 * txrf) < 10.0: - txrf = txrf + 0.02 - txr = "{:.4f}".format(txrf) - print("Adjusting Repeater TX frequency to avoid 3rd harmonic RX") - print("Transmit frequency: ",txr) - if abs(rxf - 3 * txf) < 10.0: - txf = txf + 0.02 - tx = "{:.4f}".format(txf) - print("Adjusting TX frequency to avoid 3rd harmonic RX") - print("Transmit frequency: ",tx) if len(config) > 8: if config[8] == 'y' or config[8] == 'yes': hab_mode = True @@ -1380,9 +1375,9 @@ if __name__ == "__main__": print("Carrier detected") if (doppler_mode): update_doppler() - start_repeater(tx_doppler_freq_hz) + start_repeater(tx_doppler_freq_hz, tx_doppler_freq_hz) else: - start_repeater(txrf * 1e6) + start_repeater(txrf * 1e6, rxf * 1e6) while (input(squelch) == False): sleep(1) print("No carrier detected") From 8a8a0dd4bff3219f56268b4fbc676bc154d9347e Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 12:59:20 -0400 Subject: [PATCH 285/287] Update transmit.py 3rd harmonic within 10kHz --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index 1f2fa830..c7d79f8b 100644 --- a/transmit.py +++ b/transmit.py @@ -302,7 +302,7 @@ def start_repeater(tx_freq_hz, rx_freq_hz): global txLed print("Starting repeater") - if abs(rx_freq_hz - 3 * tx_freq_hz) < 10.0: + if abs(rx_freq_hz - 3 * tx_freq_hz) < 10000: tx_freq_hz = tx_freq_hz + 30000 print("Adjusting Repeater TX frequency to avoid 3rd harmonic RX") From 502db4260d50cd4c68dba654c60df416f1031387 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 13:02:42 -0400 Subject: [PATCH 286/287] Update transmit.py fix rx doppler freq in start_repeater --- transmit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transmit.py b/transmit.py index c7d79f8b..b244811b 100644 --- a/transmit.py +++ b/transmit.py @@ -1375,7 +1375,7 @@ if __name__ == "__main__": print("Carrier detected") if (doppler_mode): update_doppler() - start_repeater(tx_doppler_freq_hz, tx_doppler_freq_hz) + start_repeater(tx_doppler_freq_hz, rx_doppler_freq_hz) else: start_repeater(txrf * 1e6, rxf * 1e6) while (input(squelch) == False): From c0f95dee8c4f68a20ff7f4ecc0006e7c270e60d7 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Wed, 22 Jul 2026 13:56:20 -0400 Subject: [PATCH 287/287] Update transmit.py transmit CW QSY at default freq for Repeater --- transmit.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/transmit.py b/transmit.py index b244811b..3a4448e7 100644 --- a/transmit.py +++ b/transmit.py @@ -841,10 +841,13 @@ if __name__ == "__main__": # if (mode != 'e'): program_fm(rx,tx,rxpl_value,sq,txpl_value) + if ((doppler_mode == True) and (command_tx == True) and (skip == False)) or (mode == 'e'): + cw_transmit_fm("QSY", tx) + if (doppler_mode == True): - if (command_tx == True) and (skip == False): - cw_transmit_fm("QSY", tx) +# if (command_tx == True) and (skip == False): +# cw_transmit_fm("QSY", tx) if (mode == 'e'): tx_doppler_start_hz = txrf * 1e6