mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:27:33 +00:00
e813ada6b258ba3ff9337b1aee83b2d6e9e9ba95
Причина щелчков (особенно слышных в TUN с непрерывной несущей): TX-поток ждал FTXMicSem с таймаутом PeriodMs (auto-reset event), а PushTXMicSamples* сигналили семафор каждый push. PullSoundCardMic зовётся из самого TX-потока → сем сигналится → следующий WaitFor возвращается немедленно. Плюс bottom-check всегда фигачил silence-блок, если Avail<BufSize (а это всегда так после inner loop). В итоге на один реальный период радио (≈21мс @ 1024/48k): Wake1 (timeout): pull → voice block + silence block Wake2 (immediate, sem был set): pull N=0 → silence block = 3 блока IQ × 4096 пар = 12288 пар вместо 4096. На 192k DUC это ≈585k sps вместо 192k → FIFO радио переполняется → щелчки. Фикс: - PushTXMicSamples* больше не сигналят семафор (TX-поток сам себя будил через них). Сем оставлен только для будилки на shutdown. - TX-поток тикает строго по таймеру, ProcessedAny-флаг гарантирует silence-блок только когда в этом тике ни одного реального не было. Per-tick теперь: ровно 1 блок IQ — точно соответствует темпу радио. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Languages
Pascal
96.4%
Python
2.9%
Shell
0.6%