Add terrestrial HF SSTV mode with predefined frequencies and modulation support

Adds a general-purpose SSTV decoder alongside the existing ISS SSTV mode,
supporting USB/LSB/FM modulation on common amateur radio HF/VHF/UHF
frequencies (14.230 MHz USB, 3.845 MHz LSB, etc.) with auto-detection
of modulation from preset frequency table.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Smittix
2026-02-06 15:36:41 +00:00
parent 8fca54e523
commit 4c67307951
8 changed files with 1897 additions and 89 deletions

View File

@@ -0,0 +1,86 @@
<!-- SSTV GENERAL MODE -->
<div id="sstvGeneralMode" class="mode-content">
<div class="section">
<h3>SSTV Decoder</h3>
<p class="info-text" style="font-size: 11px; color: var(--text-dim); margin-bottom: 12px;">
Decode Slow-Scan Television images on common amateur radio HF/VHF/UHF frequencies.
Select a predefined frequency or enter a custom one.
</p>
<p class="info-text" style="font-size: 10px; color: var(--accent-yellow); margin-bottom: 8px;">
Note: HF frequencies (below 30 MHz) require an upconverter with RTL-SDR.
</p>
</div>
<div class="section">
<h3>Frequency</h3>
<div class="form-group">
<label>Preset Frequency</label>
<select id="sstvGeneralPresetFreq" onchange="SSTVGeneral.selectPreset(this.value)" style="width: 100%; padding: 6px 8px; font-family: var(--font-mono); font-size: 11px; background: var(--bg-secondary); border: 1px solid var(--border-color); border-radius: 4px; color: var(--text-primary);">
<option value="">-- Select frequency --</option>
<optgroup label="80 m (HF)">
<option value="3.845|lsb">3.845 MHz LSB - US calling</option>
<option value="3.730|lsb">3.730 MHz LSB - Europe primary</option>
</optgroup>
<optgroup label="40 m (HF)">
<option value="7.171|lsb">7.171 MHz LSB - International</option>
<option value="7.040|lsb">7.040 MHz LSB - Alt US/EU</option>
</optgroup>
<optgroup label="30 m (HF)">
<option value="10.132|usb">10.132 MHz USB - Narrowband</option>
</optgroup>
<optgroup label="20 m (HF)">
<option value="14.230|usb">14.230 MHz USB - Most popular</option>
<option value="14.233|usb">14.233 MHz USB - Digital SSTV</option>
<option value="14.240|usb">14.240 MHz USB - Europe alt</option>
</optgroup>
<optgroup label="15 m (HF)">
<option value="21.340|usb">21.340 MHz USB - International</option>
</optgroup>
<optgroup label="10 m (HF)">
<option value="28.680|usb">28.680 MHz USB - International</option>
</optgroup>
<optgroup label="6 m (VHF)">
<option value="50.950|usb">50.950 MHz USB - SSTV calling</option>
</optgroup>
<optgroup label="2 m (VHF)">
<option value="145.625|fm">145.625 MHz FM - Simplex</option>
</optgroup>
<optgroup label="70 cm (UHF)">
<option value="433.775|fm">433.775 MHz FM - Simplex</option>
</optgroup>
</select>
</div>
<div class="form-group">
<label>Frequency (MHz)</label>
<input type="number" id="sstvGeneralFrequency" value="14.230" step="0.001" min="1" max="500">
</div>
<div class="form-group">
<label>Modulation</label>
<select id="sstvGeneralModulation" style="width: 100%; padding: 6px 8px; font-family: var(--font-mono); font-size: 11px; background: var(--bg-secondary); border: 1px solid var(--border-color); border-radius: 4px; color: var(--text-primary);">
<option value="usb">USB (Upper Sideband)</option>
<option value="lsb">LSB (Lower Sideband)</option>
<option value="fm">FM (Frequency Modulation)</option>
</select>
</div>
</div>
<div class="section">
<h3>Resources</h3>
<div style="display: flex; flex-direction: column; gap: 6px;">
<a href="https://www.sigidwiki.com/wiki/Slow-Scan_Television_(SSTV)" target="_blank" rel="noopener" class="preset-btn" style="text-decoration: none; text-align: center;">
SigID Wiki - SSTV
</a>
</div>
</div>
<div class="section">
<h3>About Terrestrial SSTV</h3>
<p class="info-text" style="font-size: 11px; color: var(--text-dim);">
Amateur radio operators transmit SSTV images on HF bands worldwide.
The most popular frequency is 14.230 MHz USB on the 20m band.
</p>
<p class="info-text" style="font-size: 11px; color: var(--text-dim); margin-top: 8px;">
Common modes: PD120, PD180, Martin1, Scottie1, Robot36
</p>
</div>
</div>