time-nuts@lists.febo.com

Discussion of precise time and frequency measurement

View all threads

recap of parallel signal question

JL
Jim Lux
Fri, Oct 10, 2025 7:49 PM

I was asked to summarize this to close out the thread:
The original question posed was:
Is there a way to generate one of some closely spaced (~1kHz) carriers at a HF frequency (<30 MHz) with a minimal parts count.
The application is to do "interspacecraft ranging" between small sats in a constellation that is maybe 50-100km across that is being used 
as a radio interferometer for imaging sources in the 100 kHz to 30 (or 40) MHz band.
Each satellite has a TCXO (or OCXO), but there's no guarantee that they're all the same (or will stay the same over aging, temperature, etc.) but you can assume that they are within 1ppm of the nominal frequency (which is the same for all satellites).

In this application one needs precise time and position of the receiver - better than 1 nanosecond, 30 cm.  This flows from the interferometry error budget which typically runs around 0.5 radian uncertainty. (30 deg)

The signal could be used to determine the relative offset of the oscillator as well as the intersatellite range.  With those two pieces of information, one can solve for the "shape" of the constellation in space (if there's enough nodes) and all the clock offsets. Being "in band" it also measures the delay through the electronics, which is also needed for the interferometry. 

In these systems, the receiver typically samples the entire bandwidth, and then runs through a polyphase filter bank to channelize it.  There's always interference sources, so you declare those channels with interference as unusable.  Using a few of the channels for the ranging function doesn't affect the overall science very much. If you have 1 kHz channels, the actual sources one is imaging are broadband, with >10% relative bandwidth, so a source at 1 MHz is 100kHz wide - losing a few kHz of the bandwidth doesn't affect the imaging very much, as long as the "bad channels" are spread out.  There is science value in covering the band and measuring the time history (SunRISE measures Type II and Type III bursts, which last hours or minutes respectively, sweeping from 100 MHz down to 10 kHz.  If you want to track the motion of something like this, you need wide band.  Another interesting source is radiation from Auroras - one would like to image that with some resolution (e.g. where is it relative to the poles of the planet you're looking at).

I started this with the idea of a simple CW carrier, modulated by a very low rate timecode (i.e. 1 pps pulse) which could conceiveably be generated with no additional parts other than the wire from a bit on an FPGA to the antenna. (e.g. you could use an XOR or a diode) I then wondered if there was a simple PLL or linked counters scheme to generate multiple signals that are spaced out, but in a low added phase noise way.

The demodulation process can be processing intensive (it would be done on the ground, perhaps, using the raw data from the satellite receivers).

The list came through, and I got lots of suggestions.  There was some discussion that the onchip DPLL on FPGAs tend to be not very quiet. There were suggestions of other PLL implementations. 
There was also the suggestion of using CDMA (rather than FDMA, as I was thinking) - You'd modulate a PN code with good cross correlation properties, and every satellite has its own unique code (e.g. one of the 1024 Gold codes used by GPS - and there are other groups of codes).  
The modulator is simple - an XOR gate if you want BPSK, a diode if you want AM. 

So the next question (in my spare time) is to look for some analysis on "CDMA code performance where the carrier is not all the same frequency but has a small offset". And to contemplate the bandwidth - is a 1 kchip/second encoding going to work? It's going to be pretty narrow band overall, but I can integrate over an arbitrarily long time.

The ranges don't change that fast - for SunRISE, the relative spacecraft velocity among the six space vehicles is single digit cm/second, and in any sort of solving for frequency process you'd mo

I was asked to summarize this to close out the thread: The original question posed was: Is there a way to generate one of some closely spaced (~1kHz) carriers at a HF frequency (<30 MHz) with a minimal parts count. The application is to do "interspacecraft ranging" between small sats in a constellation that is maybe 50-100km across that is being used  as a radio interferometer for imaging sources in the 100 kHz to 30 (or 40) MHz band. Each satellite has a TCXO (or OCXO), but there's no guarantee that they're all the same (or will stay the same over aging, temperature, etc.) but you can assume that they are within 1ppm of the nominal frequency (which is the same for all satellites). In this application one needs precise time and position of the receiver - better than 1 nanosecond, 30 cm.  This flows from the interferometry error budget which typically runs around 0.5 radian uncertainty. (30 deg) The signal could be used to determine the relative offset of the oscillator as well as the intersatellite range.  With those two pieces of information, one can solve for the "shape" of the constellation in space (if there's enough nodes) and all the clock offsets. Being "in band" it also measures the delay through the electronics, which is also needed for the interferometry.  In these systems, the receiver typically samples the entire bandwidth, and then runs through a polyphase filter bank to channelize it.  There's always interference sources, so you declare those channels with interference as unusable.  Using a few of the channels for the ranging function doesn't affect the overall science very much. If you have 1 kHz channels, the actual sources one is imaging are broadband, with >10% relative bandwidth, so a source at 1 MHz is 100kHz wide - losing a few kHz of the bandwidth doesn't affect the imaging very much, as long as the "bad channels" are spread out.  There is science value in covering the band and measuring the time history (SunRISE measures Type II and Type III bursts, which last hours or minutes respectively, sweeping from 100 MHz down to 10 kHz.  If you want to track the motion of something like this, you need wide band.  Another interesting source is radiation from Auroras - one would like to image that with some resolution (e.g. where is it relative to the poles of the planet you're looking at). I started this with the idea of a simple CW carrier, modulated by a very low rate timecode (i.e. 1 pps pulse) which could conceiveably be generated with no additional parts other than the wire from a bit on an FPGA to the antenna. (e.g. you could use an XOR or a diode) I then wondered if there was a simple PLL or linked counters scheme to generate multiple signals that are spaced out, but in a low added phase noise way. The demodulation process can be processing intensive (it would be done on the ground, perhaps, using the raw data from the satellite receivers). The list came through, and I got lots of suggestions.  There was some discussion that the onchip DPLL on FPGAs tend to be not very quiet. There were suggestions of other PLL implementations.  There was also the suggestion of using CDMA (rather than FDMA, as I was thinking) - You'd modulate a PN code with good cross correlation properties, and every satellite has its own unique code (e.g. one of the 1024 Gold codes used by GPS - and there are other groups of codes).   The modulator is simple - an XOR gate if you want BPSK, a diode if you want AM.  So the next question (in my spare time) is to look for some analysis on "CDMA code performance where the carrier is not all the same frequency but has a small offset". And to contemplate the bandwidth - is a 1 kchip/second encoding going to work? It's going to be pretty narrow band overall, but I can integrate over an arbitrarily long time. The ranges don't change that fast - for SunRISE, the relative spacecraft velocity among the six space vehicles is single digit cm/second, and in any sort of solving for frequency process you'd mo
MD
Magnus Danielson
Sun, Oct 12, 2025 3:37 PM

Hi Jim

Den 2025-10-10 kl. 21:49, skrev Jim Lux via time-nuts:

I was asked to summarize this to close out the thread:
The original question posed was:
Is there a way to generate one of some closely spaced (~1kHz) carriers at a HF frequency (<30 MHz) with a minimal parts count.
The application is to do "interspacecraft ranging" between small sats in a constellation that is maybe 50-100km across that is being used
as a radio interferometer for imaging sources in the 100 kHz to 30 (or 40) MHz band.
Each satellite has a TCXO (or OCXO), but there's no guarantee that they're all the same (or will stay the same over aging, temperature, etc.) but you can assume that they are within 1ppm of the nominal frequency (which is the same for all satellites).

In this application one needs precise time and position of the receiver - better than 1 nanosecond, 30 cm.  This flows from the interferometry error budget which typically runs around 0.5 radian uncertainty. (30 deg)

The signal could be used to determine the relative offset of the oscillator as well as the intersatellite range.  With those two pieces of information, one can solve for the "shape" of the constellation in space (if there's enough nodes) and all the clock offsets. Being "in band" it also measures the delay through the electronics, which is also needed for the interferometry.

In these systems, the receiver typically samples the entire bandwidth, and then runs through a polyphase filter bank to channelize it.  There's always interference sources, so you declare those channels with interference as unusable.  Using a few of the channels for the ranging function doesn't affect the overall science very much. If you have 1 kHz channels, the actual sources one is imaging are broadband, with >10% relative bandwidth, so a source at 1 MHz is 100kHz wide - losing a few kHz of the bandwidth doesn't affect the imaging very much, as long as the "bad channels" are spread out.  There is science value in covering the band and measuring the time history (SunRISE measures Type II and Type III bursts, which last hours or minutes respectively, sweeping from 100 MHz down to 10 kHz.  If you want to track the motion of something like this, you need wide band.  Another interesting source is radiation from Auroras - one would like to image that with some resolution (e.g. where is it relative to the poles of the planet you're looking at).

I started this with the idea of a simple CW carrier, modulated by a very low rate timecode (i.e. 1 pps pulse) which could conceiveably be generated with no additional parts other than the wire from a bit on an FPGA to the antenna. (e.g. you could use an XOR or a diode) I then wondered if there was a simple PLL or linked counters scheme to generate multiple signals that are spaced out, but in a low added phase noise way.

The demodulation process can be processing intensive (it would be done on the ground, perhaps, using the raw data from the satellite receivers).

The list came through, and I got lots of suggestions.  There was some discussion that the onchip DPLL on FPGAs tend to be not very quiet. There were suggestions of other PLL implementations.
There was also the suggestion of using CDMA (rather than FDMA, as I was thinking) - You'd modulate a PN code with good cross correlation properties, and every satellite has its own unique code (e.g. one of the 1024 Gold codes used by GPS - and there are other groups of codes).
The modulator is simple - an XOR gate if you want BPSK, a diode if you want AM.

I would say you want BPSK, and that gives you a ton of references to
build from. The mixer comes in to translate frequency at some point or
another.

So the next question (in my spare time) is to look for some analysis on "CDMA code performance where the carrier is not all the same frequency but has a small offset". And to contemplate the bandwidth - is a 1 kchip/second encoding going to work? It's going to be pretty narrow band overall, but I can integrate over an arbitrarily long time.

As for small frequency offsets, this is well researched as well, as this
is exactly what different doppler frequencies does in GPS/GNSS. What you
do is you do is that you have two lock loops, one for the carrier
frequency and then another for the code phase. For a classical GPS L1
C/A code receiver, you do integrate and dump on Early, Prompt and Late
correlation-detection. The Early and Late is 1/2 chip offset and as you
look at the difference and inbalance give you a phase-error to track the
code-phase properly. The prompt detection is used for the carrier
tracking loop. You do this individually for every signal you track.

To put some numbers on it. For GPS operating with an L1 frequency of
154*10.23 MHz = 1.57542 GHz and 1.023 MCh/s a maximum doppler frequency
of +/- 6 kHz typically needs to be tolerated. Once lock is achieved,
this is constantly tracked by the loop and the receiver DDS shifts the
signal accordingly to achieve the demodulated I&Q channels as you can
expect. To achieve lock you need to search doppler and chip search,
something which is done using FFT accelerated methods these days, as
cross-correlation can be done in O(n log n) rather than O(n^2). For GPS
L1 C/A you have 1023 chips in 1 ms, and correlating over 1 ms you can
tolerate +/- 500 Hz frequency error. Searching in 500 Hz steps rather
than 1 kHz steps increases your correlation. Decorrelation due to
frequency shift is due to the sinc() function you can expect. Once you
captured doppler and code phase, handover to a cheap (resources and
power) correlation channel is done. Naturally, you can initiate your
search in the end where you have good reasons to expect a high
likelihood of quick discovery, but make sure to make the capture (and
re-capture) robust.

For ns level precision you want to transfer from code-phase tracking
over to carrier phase tracking. For GPS L1 C/A the relationship of L1
carrier frequency and C/A chip-length is 1540 cycles per chip, which
gives an integer uncertainty of which carrier cycle is aligned with the
chip change, i.e. which of 1540 has the rising edge just as the chip
changes. This ambiguity needs to be resolved, and it becomes a harder
problem the higher the carrier / chip frequency relationship becomes.
Depending on S/N the uncertainty of the code-tracking is maybe in the
range of 1/1000 of the chip-length. So, you probably want to see a
fairly good rate on the chip-range.

This also becomes additional problematic if you have ionspheric delay
shifts since the altitude may cause inter-sat links to have enough
ionosphere to accumulate sizeable delay. Now, the ionospheric delay
actually affect the code and carrier phase shift with same amplitude,
but opposite sign. This is however not very helpful as S/N properties
differs. Operating dual carrier frequencies help as the ionospheric
offset scales by (1+f1²/f2^2+...) but the approximation only uses the
first squared version. With this you combine the L1 and L2 observations
to a synthesized version and is able to directly estimate the
ionospheric delay and can correct the pseudo-ranges of each L1/L2
code/carrier pseudorange (4 pseudoranges in total).

There are many books covering this. A personal favorite is the Kaplan &
Hegarty "GPS principles and applications", but the Misra & Enge "Global
Positioning System - Signals, Measurement and Performance" is very much
appreciated by others. I'd say that they are both good but with
different strengths, and the Kaplan book helped me to understand how
things really work.

The ranges don't change that fast - for SunRISE, the relative spacecraft velocity among the six space vehicles is single digit cm/second, and in any sort of solving for frequency process you'd mo

Also, much of the basic ephimeris is known and you can actually estimate
the basic difference between them based on ephimeris alone, including
doppler shifts. You can't a priori estimate ionospheric delays with any
meaningful accuracy. Even the GPS Klobuchar model for single-frequency
C/A on average only remove half the shift. Dual frequency observation
does that up front.

Cheers,
Magnus

Hi Jim Den 2025-10-10 kl. 21:49, skrev Jim Lux via time-nuts: > I was asked to summarize this to close out the thread: > The original question posed was: > Is there a way to generate one of some closely spaced (~1kHz) carriers at a HF frequency (<30 MHz) with a minimal parts count. > The application is to do "interspacecraft ranging" between small sats in a constellation that is maybe 50-100km across that is being used > as a radio interferometer for imaging sources in the 100 kHz to 30 (or 40) MHz band. > Each satellite has a TCXO (or OCXO), but there's no guarantee that they're all the same (or will stay the same over aging, temperature, etc.) but you can assume that they are within 1ppm of the nominal frequency (which is the same for all satellites). > > In this application one needs precise time and position of the receiver - better than 1 nanosecond, 30 cm.  This flows from the interferometry error budget which typically runs around 0.5 radian uncertainty. (30 deg) > > The signal could be used to determine the relative offset of the oscillator as well as the intersatellite range.  With those two pieces of information, one can solve for the "shape" of the constellation in space (if there's enough nodes) and all the clock offsets. Being "in band" it also measures the delay through the electronics, which is also needed for the interferometry. > > In these systems, the receiver typically samples the entire bandwidth, and then runs through a polyphase filter bank to channelize it.  There's always interference sources, so you declare those channels with interference as unusable.  Using a few of the channels for the ranging function doesn't affect the overall science very much. If you have 1 kHz channels, the actual sources one is imaging are broadband, with >10% relative bandwidth, so a source at 1 MHz is 100kHz wide - losing a few kHz of the bandwidth doesn't affect the imaging very much, as long as the "bad channels" are spread out.  There is science value in covering the band and measuring the time history (SunRISE measures Type II and Type III bursts, which last hours or minutes respectively, sweeping from 100 MHz down to 10 kHz.  If you want to track the motion of something like this, you need wide band.  Another interesting source is radiation from Auroras - one would like to image that with some resolution (e.g. where is it relative to the poles of the planet you're looking at). > > I started this with the idea of a simple CW carrier, modulated by a very low rate timecode (i.e. 1 pps pulse) which could conceiveably be generated with no additional parts other than the wire from a bit on an FPGA to the antenna. (e.g. you could use an XOR or a diode) I then wondered if there was a simple PLL or linked counters scheme to generate multiple signals that are spaced out, but in a low added phase noise way. > > The demodulation process can be processing intensive (it would be done on the ground, perhaps, using the raw data from the satellite receivers). > > > The list came through, and I got lots of suggestions.  There was some discussion that the onchip DPLL on FPGAs tend to be not very quiet. There were suggestions of other PLL implementations. > There was also the suggestion of using CDMA (rather than FDMA, as I was thinking) - You'd modulate a PN code with good cross correlation properties, and every satellite has its own unique code (e.g. one of the 1024 Gold codes used by GPS - and there are other groups of codes). > The modulator is simple - an XOR gate if you want BPSK, a diode if you want AM. I would say you want BPSK, and that gives you a ton of references to build from. The mixer comes in to translate frequency at some point or another. > So the next question (in my spare time) is to look for some analysis on "CDMA code performance where the carrier is not all the same frequency but has a small offset". And to contemplate the bandwidth - is a 1 kchip/second encoding going to work? It's going to be pretty narrow band overall, but I can integrate over an arbitrarily long time. As for small frequency offsets, this is well researched as well, as this is exactly what different doppler frequencies does in GPS/GNSS. What you do is you do is that you have two lock loops, one for the carrier frequency and then another for the code phase. For a classical GPS L1 C/A code receiver, you do integrate and dump on Early, Prompt and Late correlation-detection. The Early and Late is 1/2 chip offset and as you look at the difference and inbalance give you a phase-error to track the code-phase properly. The prompt detection is used for the carrier tracking loop. You do this individually for every signal you track. To put some numbers on it. For GPS operating with an L1 frequency of 154*10.23 MHz = 1.57542 GHz and 1.023 MCh/s a maximum doppler frequency of +/- 6 kHz typically needs to be tolerated. Once lock is achieved, this is constantly tracked by the loop and the receiver DDS shifts the signal accordingly to achieve the demodulated I&Q channels as you can expect. To achieve lock you need to search doppler and chip search, something which is done using FFT accelerated methods these days, as cross-correlation can be done in O(n log n) rather than O(n^2). For GPS L1 C/A you have 1023 chips in 1 ms, and correlating over 1 ms you can tolerate +/- 500 Hz frequency error. Searching in 500 Hz steps rather than 1 kHz steps increases your correlation. Decorrelation due to frequency shift is due to the sinc() function you can expect. Once you captured doppler and code phase, handover to a cheap (resources and power) correlation channel is done. Naturally, you can initiate your search in the end where you have good reasons to expect a high likelihood of quick discovery, but make sure to make the capture (and re-capture) robust. For ns level precision you want to transfer from code-phase tracking over to carrier phase tracking. For GPS L1 C/A the relationship of L1 carrier frequency and C/A chip-length is 1540 cycles per chip, which gives an integer uncertainty of which carrier cycle is aligned with the chip change, i.e. which of 1540 has the rising edge just as the chip changes. This ambiguity needs to be resolved, and it becomes a harder problem the higher the carrier / chip frequency relationship becomes. Depending on S/N the uncertainty of the code-tracking is maybe in the range of 1/1000 of the chip-length. So, you probably want to see a fairly good rate on the chip-range. This also becomes additional problematic if you have ionspheric delay shifts since the altitude may cause inter-sat links to have enough ionosphere to accumulate sizeable delay. Now, the ionospheric delay actually affect the code and carrier phase shift with same amplitude, but opposite sign. This is however not very helpful as S/N properties differs. Operating dual carrier frequencies help as the ionospheric offset scales by (1+f1²/f2^2+...) but the approximation only uses the first squared version. With this you combine the L1 and L2 observations to a synthesized version and is able to directly estimate the ionospheric delay and can correct the pseudo-ranges of each L1/L2 code/carrier pseudorange (4 pseudoranges in total). There are many books covering this. A personal favorite is the Kaplan & Hegarty "GPS principles and applications", but the Misra & Enge "Global Positioning System - Signals, Measurement and Performance" is very much appreciated by others. I'd say that they are both good but with different strengths, and the Kaplan book helped me to understand how things really work. > The ranges don't change that fast - for SunRISE, the relative spacecraft velocity among the six space vehicles is single digit cm/second, and in any sort of solving for frequency process you'd mo Also, much of the basic ephimeris is known and you can actually estimate the basic difference between them based on ephimeris alone, including doppler shifts. You can't a priori estimate ionospheric delays with any meaningful accuracy. Even the GPS Klobuchar model for single-frequency C/A on average only remove half the shift. Dual frequency observation does that up front. Cheers, Magnus