mirror of
https://github.com/smittix/intercept.git
synced 2026-07-08 01:28:13 -07:00
Add SNR column to signal hits table
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import json
|
import json
|
||||||
|
import math
|
||||||
import os
|
import os
|
||||||
import queue
|
import queue
|
||||||
import select
|
import select
|
||||||
@@ -287,6 +288,7 @@ def scanner_loop():
|
|||||||
_start_audio_stream(current_freq, mod)
|
_start_audio_stream(current_freq, mod)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
snr_db = round(10 * math.log10(rms / effective_threshold), 1) if rms > 0 and effective_threshold > 0 else 0.0
|
||||||
scanner_queue.put_nowait({
|
scanner_queue.put_nowait({
|
||||||
'type': 'signal_found',
|
'type': 'signal_found',
|
||||||
'frequency': current_freq,
|
'frequency': current_freq,
|
||||||
@@ -294,6 +296,7 @@ def scanner_loop():
|
|||||||
'audio_streaming': True,
|
'audio_streaming': True,
|
||||||
'level': int(rms),
|
'level': int(rms),
|
||||||
'threshold': int(effective_threshold),
|
'threshold': int(effective_threshold),
|
||||||
|
'snr': snr_db,
|
||||||
'range_start': scanner_config['start_freq'],
|
'range_start': scanner_config['start_freq'],
|
||||||
'range_end': scanner_config['end_freq']
|
'range_end': scanner_config['end_freq']
|
||||||
})
|
})
|
||||||
@@ -606,6 +609,7 @@ def scanner_loop_power():
|
|||||||
'audio_streaming': False,
|
'audio_streaming': False,
|
||||||
'level': level,
|
'level': level,
|
||||||
'threshold': threshold,
|
'threshold': threshold,
|
||||||
|
'snr': round(snr, 1),
|
||||||
'range_start': scanner_config['start_freq'],
|
'range_start': scanner_config['start_freq'],
|
||||||
'range_end': scanner_config['end_freq']
|
'range_end': scanner_config['end_freq']
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -985,11 +985,15 @@ function addSignalHit(data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const mod = data.modulation || 'fm';
|
const mod = data.modulation || 'fm';
|
||||||
|
const snr = data.snr != null ? data.snr : null;
|
||||||
|
const snrText = snr != null ? `${snr > 0 ? '+' : ''}${snr.toFixed(1)} dB` : '---';
|
||||||
|
const snrColor = snr != null ? (snr >= 10 ? 'var(--accent-green)' : snr >= 3 ? 'var(--accent-cyan)' : 'var(--accent-orange, #f0a030)') : 'var(--text-muted)';
|
||||||
const row = document.createElement('tr');
|
const row = document.createElement('tr');
|
||||||
row.style.borderBottom = '1px solid var(--border-color)';
|
row.style.borderBottom = '1px solid var(--border-color)';
|
||||||
row.innerHTML = `
|
row.innerHTML = `
|
||||||
<td style="padding: 4px; color: var(--text-secondary); font-size: 9px;">${timestamp}</td>
|
<td style="padding: 4px; color: var(--text-secondary); font-size: 9px;">${timestamp}</td>
|
||||||
<td style="padding: 4px; color: var(--accent-green); font-weight: bold;">${data.frequency.toFixed(3)}</td>
|
<td style="padding: 4px; color: var(--accent-green); font-weight: bold;">${data.frequency.toFixed(3)}</td>
|
||||||
|
<td style="padding: 4px; color: ${snrColor}; font-weight: bold; font-size: 9px;">${snrText}</td>
|
||||||
<td style="padding: 4px; color: var(--text-secondary);">${mod.toUpperCase()}</td>
|
<td style="padding: 4px; color: var(--text-secondary);">${mod.toUpperCase()}</td>
|
||||||
<td style="padding: 4px; text-align: center;">
|
<td style="padding: 4px; text-align: center;">
|
||||||
<button class="preset-btn" onclick="tuneToFrequency(${data.frequency}, '${mod}')" style="padding: 2px 6px; font-size: 9px; background: var(--accent-green); border: none; color: #000; cursor: pointer; border-radius: 3px;">Listen</button>
|
<button class="preset-btn" onclick="tuneToFrequency(${data.frequency}, '${mod}')" style="padding: 2px 6px; font-size: 9px; background: var(--accent-green); border: none; color: #000; cursor: pointer; border-radius: 3px;">Listen</button>
|
||||||
|
|||||||
@@ -1303,13 +1303,14 @@
|
|||||||
<tr style="color: var(--text-muted); border-bottom: 1px solid var(--border-color);">
|
<tr style="color: var(--text-muted); border-bottom: 1px solid var(--border-color);">
|
||||||
<th style="text-align: left; padding: 4px;">Time</th>
|
<th style="text-align: left; padding: 4px;">Time</th>
|
||||||
<th style="text-align: left; padding: 4px;">Frequency</th>
|
<th style="text-align: left; padding: 4px;">Frequency</th>
|
||||||
|
<th style="text-align: left; padding: 4px;">SNR</th>
|
||||||
<th style="text-align: left; padding: 4px;">Mod</th>
|
<th style="text-align: left; padding: 4px;">Mod</th>
|
||||||
<th style="text-align: center; padding: 4px; width: 60px;">Action</th>
|
<th style="text-align: center; padding: 4px; width: 60px;">Action</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody id="scannerHitsBody">
|
<tbody id="scannerHitsBody">
|
||||||
<tr style="color: var(--text-muted);">
|
<tr style="color: var(--text-muted);">
|
||||||
<td colspan="4" style="padding: 15px; text-align: center; font-size: 10px;">No
|
<td colspan="5" style="padding: 15px; text-align: center; font-size: 10px;">No
|
||||||
signals detected</td>
|
signals detected</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
Reference in New Issue
Block a user