I’ve just seen the analysis by @bali above for Drishti so I revert back to follow 69010 and added the fixed TLE set.
While waiting to see if the S-Band downlink from BusanSat was active tonight, I checked on NuLink-2. The 38k4 downlink is still going!
@gigasignal contacted me in private, and asked if I had any optical observations. This happenend to be so. These polar orbits drift in view of the camera every now and then. I am a bit lost in the identifications, I list only Space Track TLE numbers. Here they are:
69003 Not seen:
68981 Not seen:
69012:
69013:
69013 and 69011:
69011:
68990 Not seen:
69010, if this is still Drishti, then it is still in solid shape, and didn’t disintegrate
:
69019:
68989:
68988 Not seen:
68980:
A few were automatically detected, and gave these sky coordinates:
68989 26 100K 0794 E 20260516233327243 17 25 1035309+460911 37 S
69010 26 100AG 0794 E 20260516233217755 17 25 1022288+421566 37 S
69010 26 100AG 0794 E 20260516233225814 17 25 1037780+384125 37 S
69011 26 100AH 0794 E 20260516233137983 17 25 1035568+401264 37 S
69012 26 100AJ 0794 E 20260516233019045 17 25 1013917+460575 37 S
69012 26 100AJ 0794 E 20260516233027701 17 25 1032602+421213 37 S
A few were seen but to faint to be automatically detected: 69013, 69019, 68980.
Some where not detected: 68981, 69003, 68990, 68988. Could be small objects of course.
Others did not pass the camera. This can be seen in this plot:
The yellow lines are all satellites of this launch. The white square is the expcted FOV of the camera. The red circles are all detected satellites (any launch) of the other night.
Hope this is useful. Cheers, Eelke.
![]()
cool! dristhi is 190kg sat. pretty big and heavy compare with common small cubesat.
68989 is busansat. BusanSat is ocean observation satellite promoted by a local government in Korea. It is a 12U. pretty big for cubesat.
i’m wondering if 1U cubesat or maybe even pocket sat like hades can captured by your optical groundstation
To complete our check of the NuLink sats, tonight I was able to confirm that NuLink-1 is still active on S-Band. Unfortunately not quite enough SNR on this pass to decode the 38k4.
The NORAD ID 69000U seems to be mismatched with GEMINI-POLLUX again.
The current TLE for NORAD ID 69000 no longer matches the observed Doppler curve:
1 69000U 26100W 26138.83335647 -.00062350 00000-0 -56861-2 0 9999
2 69000 97.7056 35.8729 0011987 48.0412 344.6182 14.95387147 1301
Using the TLE from a few days ago, it still matched the observations very well. The fitted TLE that was used is shown below:
1 69000U 26100W 26136.40949124 .00001324 00000-0 13578-3 0 9992
2 69000 97.7354 34.4638 0001856 57.9473 302.1926 14.92103209 1965
The nearby objects are still relatively far from the observed Doppler curve. The closest candidate seems to be object 68999, but it is still not a good match.
It isn’t the first time this happens with large deployments, lets keep monitoring.
The same error as a couple of days ago.
Jan | PE0SAT
Objects 68985, 68986, 68987 and 68999 passed the camera but were not seen. They must be small.
Since there’s not much happening except for the MUCH appreciated efforts of those skilled at matching transmissions to objects, I thought I’d close the loop on the 38k4 downlink from NuLink-1 since it was too weak to decode the other night. Managed 2 ‘strong enough’ packets tonight which provided -4- frames of data! So, both of those sats seem to be in good working order. Damn shame the 401 MHz LoRa downlinks are either not actually transmitting or are much too weak (even for LoRa!) to be heard on the ground.
So pleased to finally be able to report both RX and decodes from BusanSat!
https://x.com/scott23192/status/2058782174887793030
… same 38k4 settings as used w/ NuLink-1 & 2.
Since this one was not transmitting on every pass here, I didn’t know if I would get a pass with enough elevation -and- an active downlink.
… if anyone would like to do any testing, a short crop of the strongest packets is available as a 32-bit float I/Q file (samp rate = 375000) at:
try convert your floating 32 to sdrpp wav, and waterfall signal seen like below. correct?
use nfm, because cannot use usb because usb max only 1200 hz.
try create satyml
name: BUSANSAT
norad: 68989
data:
&tlm Telemetry:
unknown
transmitters:
38k4 FSK downlink:
frequency: 2218.000e+6
modulation: FSK
baudrate: 38400
deviation: 9600
framing: AX100 ASM+Golay
scrambler: CCSDS
syncword: 4
data:
- *tlm
gr_satellites BUSANSAT.yml --audio --samp_rate 48000
but no decode data
After converting the IQ and also moving it to the center of the IQ, I got the following signal and frames.
Then the following command was used to decode:
gr_satellites BUSANSAT.yml --rawint16 gqrx_20260525_040500_428950000_375000_BusanSat--crop.wav --samp_rate 375000 --iq
***** VERBOSE PDU DEBUG PRINT ******
((transmitter . 38k4 FSK downlink))
pdu length = 223 bytes
pdu vector contents =
0000: 54 f5 96 00 7a 10 42 55 53 41 4e 20 6e 73 74 40
0010: 6e 61 72 61 73 70 61 63 65 2e 63 6f 6d 01 17 1b
0020: 25 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0060: 00 00 00 00 00 00 00 00 00 06 ff f5 06 f5 f4 f1
0070: f5 f3 f2 da 21 23 20 55 15 55 15 55 5a 00 ea ff
0080: b9 00 06 00 3d 02 a6 02 0d 00 ce 02 1f 0d 2d 00
0090: 20 0d 83 13 88 13 00 02 00 03 05 01 00 00 00 00
00a0: 0a 00 0c 00 0a 00 0b 00 0b 00 0c 00 e4 01 ee 01
00b0: 0a 02 f1 01 c7 01 d2 01 23 22 26 24 23 23 06 07
00c0: 05 06 0f 10 0f 0f b0 7e fb ff a3 00 00 00 00 55
00d0: 02 25 27 80 8d cf 84 51 00 00 00 00 00 c9 5c
************************************
***** VERBOSE PDU DEBUG PRINT ******
((transmitter . 38k4 FSK downlink))
pdu length = 223 bytes
pdu vector contents =
0000: 54 f5 96 00 7a 11 42 55 53 41 4e 20 6e 73 74 40
0010: 6e 61 72 61 73 70 61 63 65 2e 63 6f 6d 01 17 1b
0020: 25 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0060: 00 00 00 00 00 00 00 00 00 05 ff f5 05 f4 f3 f0
0070: f4 f3 f1 da 21 23 20 55 15 55 15 55 5a 00 ea ff
0080: b9 00 06 00 3d 02 a6 02 0d 00 ce 02 1f 0d 2d 00
0090: 20 0d 83 13 88 13 00 02 00 03 05 01 00 00 00 00
00a0: 0a 00 0c 00 0a 00 0b 00 0b 00 0c 00 e4 01 ee 01
00b0: 0a 02 f1 01 c7 01 d2 01 23 22 26 24 23 23 06 07
00c0: 05 06 0f 10 0f 0f b0 7e fb ff a3 00 00 00 00 55
00d0: 02 25 27 80 8d cf 84 51 00 00 00 00 00 49 50
************************************
***** VERBOSE PDU DEBUG PRINT ******
((transmitter . 38k4 FSK downlink))
pdu length = 223 bytes
pdu vector contents =
0000: 54 f5 96 00 7a 12 42 55 53 41 4e 20 6e 73 74 40
0010: 6e 61 72 61 73 70 61 63 65 2e 63 6f 6d 01 17 1b
0020: 25 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0060: 00 00 00 00 00 00 00 00 00 05 ff f5 05 f4 f3 f0
0070: f4 f3 f1 da 22 23 1f 55 15 55 15 55 5a 00 ea ff
0080: b9 00 06 00 3d 02 a6 02 0d 00 ce 02 1f 0d 2d 00
0090: 20 0d 83 13 88 13 00 02 00 03 05 01 00 00 00 00
00a0: 0a 00 0c 00 0a 00 0b 00 0b 00 0c 00 e4 01 ee 01
00b0: 0a 02 f1 01 c7 01 d2 01 23 22 26 24 23 23 06 07
00c0: 05 06 0f 10 0f 0f b0 7e fb ff a3 00 00 00 00 55
00d0: 02 25 27 92 90 cf 84 51 00 00 00 00 00 6a 2f
************************************
All files can be found at this BUSANSAT location.
Jan | PE0SAT
lol. i forget to centre it..
reply the audio with centering at sdrpp, and voila:
gr_satellites BUSANSAT.yml --audio --samp_rate 48000
-> Packet from 38k4 FSK downlink
Container:
header = Container:
addresses = ListContainer:
Container:
callsign = u'*zK\x00=\x08' (total 6)
ssid = Container:
ch = False
ssid = 1
extension = False
Container:
callsign = u"*) '\x107" (total 6)
ssid = Container:
ch = False
ssid = 9
extension = True
control = 0x74
pid = 0x40
info = b'naraspace.com\x01\x17\x1b%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\xff\xf5\x05\xf4\xf3\xf0\xf4\xf3\xf1\xda!# U\x15U\x15UZ\x00\xea\xff\xb9\x00\x06\x00=\x02\xa6\x02\r\x00\xce\x02\x1f\r-\x00 \r\x83\x13\x88\x13\x00\x02\x00\x03\x05\x01\x00\x00\x00\x00\n\x00\x0c\x00\n\x00\x0b\x00\x0b\x00\x0c\x00\xe4\x01\xee\x01\n\x02\xf1\x01\xc7\x01\xd2\x01#"&$##\x06\x07\x05\x06\x0f\x10\x0f\x0f\xb0~\xfb\xff\xa3\x00\x00\x00\x00U\x02%\'\x80\x8d\xcf\x84Q\x00\x00\x00\x00\x00IP' (total 207)
correlate_access_code_tag_bb :debug: writing tag at sample 1741605
correlate_access_code_tag_bb :debug: writing tag at sample 1815739
correlate_access_code_tag_bb :debug: writing tag at sample 1855121
correlate_access_code_tag_bb :debug: writing tag at sample 2390131
correlate_access_code_tag_bb :debug: writing tag at sample 2466781
-> Packet from 38k4 FSK downlink
Container:
header = Container:
addresses = ListContainer:
Container:
callsign = u'*zK\x00=\x08' (total 6)
ssid = Container:
ch = False
ssid = 1
extension = False
Container:
callsign = u"*) '\x107" (total 6)
ssid = Container:
ch = False
ssid = 9
extension = True
control = 0x74
pid = 0x40
info = b'naraspace.com\x01\x17\x1b%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\xff\xf5\x05\xf4\xf3\xf0\xf4\xf3\xf1\xda!# U\x15U\x15UZ\x00\xea\xff\xb9\x00\x06\x00=\x02\xa6\x02\r\x00\xce\x02\x1f\r-\x00 \r\x83\x13\x88\x13\x00\x02\x00\x03\x05\x01\x00\x00\x00\x00\n\x00\x0c\x00\n\x00\x0b\x00\x0b\x00\x0c\x00\xe4\x01\xee\x01\n\x02\xf1\x01\xc7\x01\xd2\x01#"&$##\x06\x07\x05\x06\x0f\x10\x0f\x0f\xb0~\xfb\xff\xa3\x00\x00\x00\x00U\x02%\'\x80\x8d\xcf\x84Q\x00\x00\x00\x00\x00IP' (total 207)
Great, only the telemetry doesn’t make sense, this isn’t ax25, maybe csp.
My guess is that @K4KDR uses a direwolf Virtual KISS TNC to decode the hex data.
Jan | PE0SAT
Of course you’re correct, Jan. I like the view provided; makes it easy to spot ASCII, for example.

Thanks Scott, just gave it a try and got the following output.
And needs some tuning, I only need the hex/ascii part, and tips?
[2026-05-25 20:42:19] [0L] (Not AX.25)T<0xf5><0x96><0x00>z<0x12>BUSAN nst@naraspace.com<0x01><0x17><0x1b>%<0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x00><0x05><0xff><0xf5><0x05><0xf4><0xf3><0xf0><0xf4><0xf3><0xf1><0xda>"#<0x1f>U<0x15>U<0x15>UZ<0x00><0xea><0xff><0xb9><0x00><0x06><0x00>=<0x02><0xa6><0x02><0x0d><0x00><0xce><0x02><0x1f><0x0d>-<0x00> <0x0d><0x83><0x13><0x88><0x13><0x00><0x02><0x00><0x03><0x05><0x01><0x00><0x00><0x00><0x00><0x0a><0x00><0x0c><0x00><0x0a><0x00><0x0b><0x00><0x0b><0x00><0x0c><0x00><0xe4><0x01><0xee><0x01><0x0a><0x02><0xf1><0x01><0xc7><0x01><0xd2><0x01>#"&$##<0x06><0x07><0x05><0x06><0x0f><0x10><0x0f><0x0f><0xb0>~<0xfb><0x
[2026-05-25 20:42:19] ------
[2026-05-25 20:42:19] 000: 54 f5 96 00 7a 12 42 55 53 41 4e 20 6e 73 74 40 T...z.BUSAN nst@
[2026-05-25 20:42:19] 010: 6e 61 72 61 73 70 61 63 65 2e 63 6f 6d 01 17 1b naraspace.com...
[2026-05-25 20:42:19] 020: 25 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 %...............
[2026-05-25 20:42:19] 030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
[2026-05-25 20:42:19] 040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
[2026-05-25 20:42:19] 050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
[2026-05-25 20:42:19] 060: 00 00 00 00 00 00 00 00 00 05 ff f5 05 f4 f3 f0 ................
[2026-05-25 20:42:19] 070: f4 f3 f1 da 22 23 1f 55 15 55 15 55 5a 00 ea ff ...."#.U.U.UZ...
[2026-05-25 20:42:19] 080: b9 00 06 00 3d 02 a6 02 0d 00 ce 02 1f 0d 2d 00 ....=.........-.
[2026-05-25 20:42:19] 090: 20 0d 83 13 88 13 00 02 00 03 05 01 00 00 00 00 ...............
[2026-05-25 20:42:19] 0a0: 0a 00 0c 00 0a 00 0b 00 0b 00 0c 00 e4 01 ee 01 ................
[2026-05-25 20:42:19] 0b0: 0a 02 f1 01 c7 01 d2 01 23 22 26 24 23 23 06 07 ........#"&$##..
[2026-05-25 20:42:19] 0c0: 05 06 0f 10 0f 0f b0 7e fb ff a3 00 00 00 00 55 .......~.......U
[2026-05-25 20:42:19] 0d0: 02 25 27 92 90 cf 84 51 00 00 00 00 00 6a 2f .%'....Q.....j/
[2026-05-25 20:42:19] ------
Jan | PE0SAT
I’m sure there are parsing commands to pull out only the ASCII; I prefer to see both.
All my direwolf sessions are started by various scripts. #1, I always log everything to text files and, #2, I often filter out various things to only display what I’d like to see. For instance:
k4kdr@3010i5:~$ more KISS-direwolf.sh
#!/bin/bash
clear
# create 'log' folder under current directory if it doesn't already exist
mkdir -p log
direwolf -c kiss.conf -dup -t 0 -qd -p | ts '[%Y-%m-%d %H:%M:%S]' | tee -a log/$
(date +%Y-%m-%d--%H%M).txt | grep -v -e "0L" -e "Invalid" -e "all communication"
-e "Troubleshooting" -e "000: 09 00 00" -e "direwolf command line"
rm /tmp/kisstnc
… is the most commonly used script. I should add here the .conf file:
k4kdr@3010i5:~$ more kiss.conf
ARATE 48000
ACHANNELS 1
AGWPORT 8100
KISSPORT 0
KISSPORT 4000
… now, if I KNOW that the decode is not AX.25, then I like to filter out the ‘source’ & ‘destination’ address lines as well for cleaner output:
k4kdr@3010i5:~$ more non-ax25_KISS-direwolf.sh
#!/bin/bash
clear
# create 'log' folder under current directory if it doesn't already exist
mkdir -p log
direwolf -c kiss.conf -dup -t 0 -qd -p | ts '[%Y-%m-%d %H:%M:%S]' | tee -a log/$
(date +%Y-%m-%d--%H%M).txt | grep -v -e "0L" -e "Invalid" -e "all communication"
-e "Troubleshooting" -e "000: 09 00 00" -e "direwolf command line" -e "dest" -
e "source" -e "Station address" -e "Source Address" -e "*** The origin" -e "Dest
ination Address"
… I hope those are helpful.
Thanks Scott,
I combined the two and used some variables, maybe also helpful for you and others.
The ts command is part of the debian moreutils package.
#!/usr/bin/env bash
#
CONFDIR="${HOME}"/etc
DCONF="${CONFDIR}"/kisstnc.conf
DLOG="${HOME}"/log
if [ ! -d "${DLOG}" ]; then mkdir -p "${DLOG}"; fi
ax25 () {
direwolf -c ${DCONF} -dupkn -t 0 -qd -p | \
ts "[%Y-%m-%d %H:%M:%S]" | \
tee -a "${DLOG}"/direwolf-"$(date +%Y-%m-%d_%H:%M)".log | \
grep -v -e "0L" -e "Invalid" -e "all communication" \
-e "Troubleshooting" -e "000: 09 00 00" \
-e "direwolf command line" -e "dest" -e "source" \
-e "Station address" -e "Source Address" \
-e "*** The origin" -e "Destination Address"
}
non-ax25 () {
direwolf -c "${DCONF}" -dupkn -t 0 -qd -p | \
ts '[%Y-%m-%d %H:%M:%S]' | \
tee -a "${DLOG}"/direwolf-"$(date +%Y-%m-%d_%H:%M)".log | \
grep -v -e "0L" -e "Invalid" -e "all communication" \
-e "Troubleshooting" -e "000: 09 00 00" \
-e "direwolf command line" -e "dest" -e "source" \
-e "Station address" -e "Source Address" -e "*** The origin" \
-e "Destination Address"
}
case "${1}" in
"ax25")
ax25
;;
"non-ax25")
non-ax25
;;
*)
echo "Exit, no valid input, use ax25 or non-ax25."
exit 1
;;
esac
Check the variables if you want to use this script.
After that it only need an ax25 or non-ax25 commandline option to run the function needed.
Example kisstnc-direwolf.sh non-ax25
Jan | PE0SAT
I hope BusanSat doesn’t have a problem…
With the modulation & framing figured out, I was anxious to catch some ‘live’ decodes one of these passes. Tonight I got more than I bargained for: 405 frames of the same 9-byte pattern:
… will have to keep an eye on this one and hope that we see a return to the pretty packets seen the other night w/ some ASCII included. Here’s my post w/ additional images:
BusanSat back to proper frames again. Always hate to see a satellite lock-up or otherwise fail so early in the mission!




























