Spectrum Analysis Guides
The SkyWalker-1’s BCM4500 demodulator and BCM3440 tuner accept any signal in the 950—2150 MHz IF range. While the demod pipeline only locks to DVB-S, Turbo, DCII, and DSS carriers, the AGC registers respond to RF energy at any frequency in range. Custom firmware v3.02.0 exposes this through SIGNAL_MONITOR (0xB7) and TUNE_MONITOR (0xB8) commands, turning the hardware into a crude but useful power detector.
skywalker.py wraps these commands into practical modes: spectrum sweeps, transponder scanning, dish alignment monitoring, L-band direct input, and long-duration carrier tracking.
pip install pyusb matplotlibHow to Sweep the Ku-Band Spectrum
Section titled “How to Sweep the Ku-Band Spectrum”Survey what transponders are active on a satellite by stepping across the IF range and recording AGC power at each frequency.
-
Confirm the dish is pointed at the target satellite and the LNB coax is connected to the SkyWalker-1 F-connector.
-
Run a spectrum sweep. The tool steps from
--startto--stopin MHz (IF frequency), reading AGC power at each step. Specify your LNB local oscillator frequency so the output labels show true downlink frequencies.Sweep Ku-band low (H-pol) sudo python3 tools/skywalker.py spectrum --lnb-lo 9750 --start 950 --stop 2150 --step 5Sweep Ku-band high (V-pol) sudo python3 tools/skywalker.py spectrum --lnb-lo 10600 --start 950 --stop 2150 --step 5 -
Look for peaks in the output. Each peak corresponds to a carrier — the wider the peak, the higher the symbol rate. The AGC value is relative, not calibrated, so compare peaks to each other rather than treating the numbers as absolute power.
-
Note the downlink frequencies of interesting peaks. Use these as inputs to the Tuning Tool to attempt demodulator lock, or feed them into the transponder scanner below for automated identification.
How to Find Transponders Automatically
Section titled “How to Find Transponders Automatically”The scan mode automates the full process of discovering and identifying transponders on a satellite. It runs three phases internally: coarse AGC sweep, peak refinement, and blind demod lock attempts.
-
Start a scan with your LNB parameters and a detection threshold. The threshold controls how many dB above the noise floor a peak must be to count as a candidate.
Full satellite scan, H-pol high band sudo python3 tools/skywalker.py scan --lnb-lo 10600 --pol H --band high --threshold 3 -
The scanner runs three phases automatically:
- Phase 1 — Coarse sweep: Steps across the full IF range reading AGC power. Builds a noise floor baseline and identifies candidate peaks above the threshold.
- Phase 2 — Peak refinement: Re-sweeps each candidate with finer step size to pinpoint center frequencies and estimate bandwidths.
- Phase 3 — Blind scan: Attempts demodulator lock at each refined peak, cycling through modulation types (QPSK, Turbo QPSK, Turbo 8PSK, DCII) and common symbol rates. Reports lock status, SNR, and modulation parameters for each successful lock.
-
Review the results. Successfully locked transponders are reported with their downlink frequency, symbol rate, modulation type, FEC rate, and SNR. Peaks that produced AGC response but no demod lock may be DVB-S2, analog, or non-satellite signals.
How to Align a Dish
Section titled “How to Align a Dish”The monitor mode provides real-time signal quality feedback at high poll rates, suitable for peaking a dish on a known transponder.
-
Pick a known strong transponder on the target satellite. You need the downlink frequency and symbol rate. Transponder lists for most satellites are available from LyngSat or SatBeams.
-
Start the signal monitor at a high poll rate. The tool tunes to the specified transponder and continuously reads SNR and lock status.
Monitor for dish alignment (50 Hz polling) sudo python3 tools/skywalker.py monitor 12520 27500 --lnb-lo 10600 --pol H --band high --rate 50 --audio --peak-hold -
Slowly move the dish in azimuth and elevation while watching the SNR reading. The
--peak-holdflag keeps the highest observed value on screen so you can tell when you have passed the peak. -
The
--audioflag produces a pitch-proportional tone through the system audio — higher pitch means stronger signal. This frees you from watching the screen while adjusting the dish. -
Fine-tune for maximum SNR. Once you find the general peak, make small adjustments in azimuth, then elevation, then azimuth again. Tighten the mount hardware and verify the SNR holds.
How to Monitor L-Band Direct
Section titled “How to Monitor L-Band Direct”The SkyWalker-1 accepts 950—2150 MHz directly at the F-connector. With no LNB in the path, you can survey L-band signals from a direct-connect antenna or feed.
-
Disconnect the LNB coax cable. Connect your L-band antenna, preamp, or feed directly to the SkyWalker-1 F-connector.
-
Run the
lbandmode. This automatically disables LNB power output to protect direct-connect equipment, then sweeps the IF range with zero LO offset.Full L-band survey with allocation annotations sudo python3 tools/skywalker.py lband --band-info -
The
--band-infoflag annotates the sweep output with ITU frequency allocation data for the 950—2150 MHz range, identifying which services (GPS, Iridium, Inmarsat, amateur, weather satellite, ATC) occupy each segment. -
Narrow to a specific band of interest for higher resolution sweeps.
Focus on 23cm amateur band sudo python3 tools/skywalker.py lband --23cm --plotFocus on weather satellite frequencies sudo python3 tools/skywalker.py lband --start 1670 --stop 1710 --step 0.5 --dwell 50
How to Receive QO-100 DATV
Section titled “How to Receive QO-100 DATV”The Es’hail 2 / QO-100 geostationary amateur satellite carries DVB-S QPSK signals on its narrowband transponder at 10489—10499 MHz downlink. This is the one scenario where amateur satellite signals are both in the SkyWalker-1’s IF range AND use a compatible modulation scheme.
The catch: a standard 9.75 GHz universal LNB places QO-100 at ~741 MHz IF, which is below the 950 MHz minimum. You need a modified or purpose-built LNB with a lower LO frequency.
| LNB LO | QO-100 IF Range | In Range? |
|---|---|---|
| 9750 MHz (standard) | 739 — 749 MHz | No |
| 9000 MHz (custom) | 1489 — 1499 MHz | Yes |
| 9250 MHz (custom) | 1239 — 1249 MHz | Yes |
With a suitable LNB, sweep the QO-100 DATV range:
sudo python3 tools/skywalker.py spectrum --lnb-lo 9000 --start 1480 --stop 1510 --step 1 --dwell 30To tune to a specific carrier once you have identified it:
sudo python3 tools/tune.py tune 10494 1000 --lnb-lo 9000 --mod qpsk --fec autoHow to Track a Carrier Over Time
Section titled “How to Track a Carrier Over Time”Track mode continuously monitors a transponder’s signal quality and logs timestamped samples. Useful for rain fade analysis, antenna drift detection, and long-term signal characterization.
-
Tune to the target transponder frequency and symbol rate, specifying LNB parameters as usual.
-
Start tracking with logging enabled. Specify a duration in seconds, or omit
--durationto run until Ctrl-C.Track a transponder for 1 hour with CSV logging sudo python3 tools/skywalker.py track 12520 27500 --lnb-lo 10600 --pol H --band high --log signal_log.csv --duration 3600 -
The tracker logs SNR, lock status, and AGC values at each sample. Lock/unlock transitions are flagged in the log for easy filtering.
-
For frequency drift analysis, add
--drift-trackto monitor the demodulator’s carrier frequency offset over time.Track with drift detection sudo python3 tools/skywalker.py track 12520 27500 --lnb-lo 10600 --pol H --band high --drift-track --log drift.csv
How to Export Data
Section titled “How to Export Data”All spectrum analysis modes support data export. Choose the format that fits your workflow.
| Flag | Applicable Modes | Output Format |
|---|---|---|
--csv FILE | spectrum, scan, lband | Comma-separated: frequency, power, annotations |
--log FILE | track | Timestamped CSV: time, frequency, SNR, lock, AGC |
--json-lines FILE | track | One JSON object per sample, newline-delimited |
--json | scan | Full scan results as a single JSON document |
--plot | spectrum, scan, lband | Interactive matplotlib window |
Combine --csv or --json with --plot to both save data and visualize it in a single run.
See Also
Section titled “See Also”- Tuning Tool — transponder tuning, LNB control, transport stream capture
- RF Specifications — IF range, symbol rate limits, LNB current limits
- Signal Monitoring — SNR, lock status, and AGC register details