[chore](trx-rs): remove MANUAL.md - moved to docs/ (wiki submodule)
Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
@@ -1,103 +0,0 @@
|
|||||||
# trx-rs Manual
|
|
||||||
|
|
||||||
## SDR Noise Blanker
|
|
||||||
|
|
||||||
The noise blanker suppresses impulse noise (clicks, pops, ignition interference)
|
|
||||||
on raw IQ samples before any mixing or filtering takes place. It works by
|
|
||||||
tracking a running RMS level of the signal and replacing any sample whose
|
|
||||||
magnitude exceeds **threshold x RMS** with the last known clean sample.
|
|
||||||
|
|
||||||
### Configuration (server-side)
|
|
||||||
|
|
||||||
The noise blanker is configured per rig. In a multi-rig setup each
|
|
||||||
`[[rigs]]` entry has its own `[rigs.sdr.noise_blanker]` section:
|
|
||||||
|
|
||||||
```toml
|
|
||||||
[[rigs]]
|
|
||||||
id = "hf"
|
|
||||||
|
|
||||||
[rigs.rig]
|
|
||||||
type = "sdr"
|
|
||||||
|
|
||||||
[rigs.sdr.noise_blanker]
|
|
||||||
enabled = true
|
|
||||||
threshold = 10.0 # 1 – 100; lower = more aggressive blanking
|
|
||||||
```
|
|
||||||
|
|
||||||
For the legacy single-rig (flat) config the path is `[sdr.noise_blanker]`:
|
|
||||||
|
|
||||||
```toml
|
|
||||||
[sdr.noise_blanker]
|
|
||||||
enabled = true
|
|
||||||
threshold = 10.0
|
|
||||||
```
|
|
||||||
|
|
||||||
| Field | Type | Default | Range | Description |
|
|
||||||
|-------------|-------|---------|---------|-------------|
|
|
||||||
| `enabled` | bool | false | — | Turn the noise blanker on or off. |
|
|
||||||
| `threshold` | float | 10.0 | 1 – 100 | Multiplier applied to the running RMS. A sample whose magnitude exceeds this multiple is replaced. Lower values blank more aggressively; higher values only catch strong impulses. |
|
|
||||||
|
|
||||||
The noise blanker is off by default.
|
|
||||||
|
|
||||||
### Choosing a threshold
|
|
||||||
|
|
||||||
The threshold controls how aggressively the blanker suppresses impulses.
|
|
||||||
A value of **N** means: blank any sample whose magnitude exceeds **N times**
|
|
||||||
the running average signal level.
|
|
||||||
|
|
||||||
| Threshold | Behavior | Use case |
|
|
||||||
|-----------|----------|----------|
|
|
||||||
| 3 – 5 | Very aggressive — blanks frequently | Dense impulse noise (motors, power lines, LED drivers nearby) |
|
|
||||||
| 8 – 12 | Moderate — catches clear spikes without touching normal signals | Typical HF conditions with occasional ignition or switching noise |
|
|
||||||
| 15 – 25 | Conservative — only blanks strong impulses well above the noise floor | Light interference, or when you want minimal artifacts on weak signals |
|
|
||||||
| 30 – 100 | Very light — rarely triggers | Faint, infrequent clicks; mostly a safety net |
|
|
||||||
|
|
||||||
**Start at 10** (the default) and adjust while listening:
|
|
||||||
|
|
||||||
- If impulse noise is still audible, lower the threshold.
|
|
||||||
- If weak signals sound choppy or distorted, raise it — the blanker may be
|
|
||||||
mistaking signal peaks for noise.
|
|
||||||
- On bands with steady atmospheric noise (e.g. 160 m / 80 m), a threshold of
|
|
||||||
**5 – 8** usually works well.
|
|
||||||
- On quieter VHF/UHF bands where the noise floor is low, values of **15 – 25**
|
|
||||||
avoid false triggers from strong signals.
|
|
||||||
|
|
||||||
### Web UI
|
|
||||||
|
|
||||||
When the server reports noise-blanker support, two controls appear in the
|
|
||||||
**SDR Settings** row of the web interface:
|
|
||||||
|
|
||||||
- **Noise Blanker** checkbox — enables or disables the blanker in real time.
|
|
||||||
- **NB Threshold** number input (1–100) with a **Set** button — adjusts the
|
|
||||||
detection threshold. Press Enter or click Set to apply.
|
|
||||||
|
|
||||||
Both controls stay hidden until the server sends filter state containing NB
|
|
||||||
fields, so they only appear when connected to an SDR backend.
|
|
||||||
|
|
||||||
### HTTP API
|
|
||||||
|
|
||||||
```
|
|
||||||
POST /set_sdr_noise_blanker?enabled=true&threshold=10
|
|
||||||
```
|
|
||||||
|
|
||||||
| Parameter | Type | Required | Description |
|
|
||||||
|-------------|--------|----------|-------------|
|
|
||||||
| `enabled` | bool | yes | `true` or `false` |
|
|
||||||
| `threshold` | float | yes | Value between 1 and 100 |
|
|
||||||
|
|
||||||
### How it works
|
|
||||||
|
|
||||||
The blanker runs on every IQ block (4096 samples) *before* the mixer stage in
|
|
||||||
the DSP pipeline:
|
|
||||||
|
|
||||||
1. For each sample, compute magnitude² (`re² + im²`).
|
|
||||||
2. Compare against `threshold² × mean_sq` (the exponentially-smoothed running
|
|
||||||
mean of magnitude²).
|
|
||||||
3. If the sample exceeds the threshold, replace it with the previous clean
|
|
||||||
sample.
|
|
||||||
4. Otherwise, update the running mean with smoothing factor α = 1/128 and store
|
|
||||||
the sample as the last clean value.
|
|
||||||
|
|
||||||
Because the blanker operates on raw IQ before frequency translation, it removes
|
|
||||||
impulse noise across the entire captured bandwidth regardless of the tuned
|
|
||||||
channel offset.
|
|
||||||
Reference in New Issue
Block a user