Розділи Wiki

Wiki Запис і дані

Запис IQ

Запис зберігає на диск усю миттєву смугу приймача у власному форматі відліків приладу, без стиснення, разом із сайдкаром SigMF. Запис — не «без втрат», а без тихих втрат: кожен загублений відлік порахований у метаданих SigMF, розриви з відомим місцем позначені там, де сталися, а частка втрат дописується в ім’я файлу.

Як записати

  1. Настройте прилад на потрібну частоту й оберіть темп вибірки: записується вся захоплена смуга, а не лише смуга VFO.
  2. Натисніть кнопку ⏺ у шапці бічної панелі (підказка Почати запис IQ (потік продовжиться сам)) або кнопку Запис у групі Запис на вкладці Пристрій.
  3. Поки запис іде, кнопка в групі показує Пише…, а значок ⏺ червоний.
  4. Щоб зупинити, натисніть Стоп у групі або ⏺ ще раз. Кнопка ⏹ у шапці зупиняє і запис, і потік.

Кнопка ⏺ у шапці сама знімає паузу потоку, кнопка Запис у групі — ні. Якщо потік стоїть на паузі, починайте запис кнопкою ⏺.

0.9.30 Старт запису не зупиняє потік обробки: на HackRF One це прибрало втрату відліків у транспорті саме в мить старту запису.

Що лягає на диск

Усі записи йдуть у теку C:\sdrsa-rec; якщо її немає, програма створить її сама. Змінити теку не можна. Запис складається з пар файлів — даних і сайдкара:

  • 20261004-153012-000.sigmf-data — сирі відліки IQ;
  • 20261004-153012-000.sigmf-meta — метадані SigMF у форматі JSON.

Ім’я — дата й час початку запису (РРРРММДД-ГГХХСС) і номер сегмента. Запис ріжеться на сегменти, щоб один збій не забрав усе: новий сегмент починається, щойно попередній досяг 1 ГіБ або 60 секунд, і має власний сайдкар. Сегменти нумеруються -000, -001, -002…

Формат відліків
Той, який віддає сам прилад: cs8 (8 біт зі знаком) для HackRF One і cu8 (8 біт без знака) для RTL-SDR 0.9.25. У сайдкарі це ci8 і cu8. Перетворення 8→16 біт подвоїло б файл і не додало б жодного біта. Приймачі SDR SA PRO PRO пишуть свої формати: 12-бітні відліки в ci16_le 0.9.33 — так пишуть Pluto і bladeRF; float32 зі шкалою ±0.25 у cf32_le 0.9.43 — так пише Fobos SDR. Повна шкала таких записів менша за шкалу їхнього типу, і сайдкар називає її полем sdrsa:full_scale: без нього запис читався б на 24 чи 12 дБ нижче, ніж його бачили під час запису. Плеєр і передавач програми це поле читають.
Обсяг
Два байти на відлік IQ, тобто потік у МБ/с — це подвоєний темп у МС/с: 40 МБ/с на 20 МС/с, 16 МБ/с на 8 МС/с, 5.12 МБ/с на 2.56 МС/с. Десять хвилин на 20 МС/с — близько 24 ГБ; виміряно 24.26 ГБ і нуль втрат на диску, що встигає. Записи ci16_le займають чотири байти на відлік IQ, cf32_le — вісім.
Сайдкар під час запису
Поки дані йдуть, оновлюється приблизно раз на дві секунди й щоразу замінюється цілим файлом, а не дописується. Тому навіть якщо процес убито, на диску лишається читабельний запис. Поле sdrsa:complete у ньому стає true, лише коли сегмент закрито як слід: за ним видно, що запис обірвано, а не просто він короткий.
Що в сайдкарі
Формат і темп (core:datatype, core:sample_rate), прилад (core:hw), частота кожної ділянки (captures з core:frequency), час початку запису, лічильники втрат (sdrsa:drops) і розриви (annotations). Коли треба — ще повну шкалу (sdrsa:full_scale) і лік розривів транспорту (sdrsa:transport_breaks, див. нижче).

Група «Запис»

Група стоїть на вкладці Пристрій під групою Джерело.

Запис і Стоп
Початок і кінець запису. Під час запису перша кнопка неактивна й показує Пише….
Формат
Формат відліків приладу й слово SigMF, наприклад «cs8 · SigMF». Підказка поруч рахує потік у МБ/с і обсяг за десять хвилин для поточного темпу.
Тривалість
Скільки секунд ефіру вже на диску в цьому записі.
На диску
Записаний обсяг у гігабайтах і номер поточного сегмента.
Лишилось місця
Вільне місце на диску й на скільки хвилин його вистачить за поточного темпу. Жовтіє, коли лишається менше ніж 10 хвилин, червоніє — менше ніж 2. Видно лише під час запису.
Черга писаря
Заповнення черги перед диском у відсотках і найдовший окремий запис на диск у мілісекундах. Черга розрахована на 20 секунд потоку (на 20 МС/с це 800 МБ пам’яті, але не більше ніж восьма частина вільної) й переживає короткі затримки диска. Якщо вона росте й жовтіє (понад 70 %), диск не встигає, і далі підуть втрати.
Втрати в записі
Чотири лічильники — див. нижче. З’являються, щойно на диск щось записано.

Унизу групи — шлях до поточного файлу, а якщо щось пішло не так — червоний рядок із причиною.

Втрати: чотири лічильники

Втрати показані окремо, бо це різні несправності з різними причинами й різними діями. Перші три числа — у відліках, четверте — кількість розривів; усі стосуються лише цього запису: те, що прилад загубив до натискання кнопки, у файл не зараховується.

ЛічильникЩо сталосяЩо робити
Диск не встигчерга перед диском переповнилась, і писар викинув відлікишвидший диск
Кільце джерелапрограма не встигла забрати відліки з кільця приладунижчий темп або швидша машина
Не доїхаловідліки загубились між приладом і програмою; драйвер про них не повідомляє, тому це оцінка за годинникомінший порт USB, нижчий темп
Розривів у метаданихскільки розривів у часі позначено в сайдкарі—

Ті самі числа лежать у сайдкарі в полі sdrsa:drops (source_ring, transport, paused, writer_ring). Якщо за запис щось загублено, після зупинки програма дописує це в імена всіх його файлів: -drop0.12pct, коли втрачено 0.01 % відліків чи більше, або -drop12 — точне число відліків, коли частка менша. Виходить, наприклад, 20261004-153012-000-drop0.12pct.sigmf-data. Сайдкар можна загубити, а ім’я їде разом із даними. Відкинуте на паузі в ім’я не входить: це ваше рішення, а не несправність.

Розриви з відомим місцем

Розрив, місце якого відоме, записується в сайдкар як анотація з міткою gap: позиція у відліках, скільки відліків бракує і причина в полі sdrsa:gap_kind. Файл даних у цьому місці просто стикує сусідні відліки, тому програма, що читає запис, має зважати на анотації. 0.9.35 Позначка стоїть саме там, де пропуск, і дві різні дірки не зливаються в одну.

ПричинаКоли з’являється
ringпереповнилось кільце джерела
writerдиск не встиг
pauseпотік стояв на паузі під час запису
transmitHackRF One передавав: поки йде передача, приймання немає
sweep 0.9.25ішов свіп: поки він триває, запис не отримує відліків
retune 0.9.25прилад перестроївся; скільки відліків драйвер відкинув на перестройці, береться з його лічильника
reconnect 0.9.25потік обірвався або прилад перепідключали; розрив рахується від миті, коли потік зупинився
transport 0.9.36розрив у транспорті, місце якого знає саме джерело: передача USB, що повернулась зі збоєм (RTL-SDR), передача непарної довжини (RTL-SDR, HackRF One), а в SDR SA PRO — і розрив, який позначає його приймач: порція, якої не довезла мережа Pluto, чи стрибок мітки часу bladeRF. Скільки відліків тут бракує, анотація не каже: у ній нуль відліків

Число відліків, загублених у USB (Не доїхало), місця не має: програма знає лише, скільки відліків бракує за годинником. Воно йде в лічильник і в ім’я файлу. Місце розриву позначає анотація transport — лише там, де його знає саме джерело. Поле sdrsa:transport_breaks каже, скільки таких розривів було за запис (total) і скільки з них позначено анотаціями (marked): анотацій щонайбільше 2000 на запис, решта — лише в ліку.

Окрема мітка suspect 0.9.25 позначає відліки, які записано, але яким не можна довіряти: вона з’являється, коли синтезатор RTL-SDR не захопив частоту. Це не втрата, тому до втрат вона не зараховується.

Частота, темп і свіп під час запису

  • Зміна частоти. 0.9.25 Перестройка не зупиняє запис. З першого відліку на новій частоті в сайдкарі відкривається новий елемент captures зі своєю core:frequency, тож кожна ділянка файлу підписана власною частотою. Якщо на перестройці драйвер відкинув відліки, на цьому місці стоїть розрив retune.
  • Темп вибірки. 0.9.25 Запис має один темп на весь файл. Спроба змінити його під час запису (зокрема колесом миші над спектром) відхиляється вікном Темп не змінено: триває запис. Якщо прилад усе ж опинився на іншому темпі, запис зупиняється сам вікном Запис зупинено: темп приладу змінився; записане досі лишається цілим.
  • Свіп. 0.9.25 Свіп під час запису працює на темпі запису, але відліків запис у цей час не отримує. Перерва позначається розривом sweep. Якщо запис має бути суцільним, зупиніть свіп.
  • Передача. Почати запис під час передачі не можна (вікно Запис не почато: триває передача). Передача посеред запису лишає розрив transmit.

Диск

  • Для 20 МС/с диск C: має тримати сталі 40 МБ/с — саме сталі, а не на перших гігабайтах: десятихвилинний запис займає близько 24 ГБ.
  • Запис не почнеться, якщо на диску менше ніж 2 ГіБ вільного місця: програма скаже, скільки є і скільки треба.
  • Місце перевіряється й під час запису. Коли його стає менше ніж 2 ГіБ, запис зупиняється сам, а в групі з’являється червоний рядок; усе записане досі лишається цілим.
  • Якщо росте Диск не встиг, диск повільніший за потік. Допоможе нижчий темп вибірки.

Як відкрити запис знову

Запис відкривається у стартовому вікні програми кнопкою Продовжити без пристрою. Пункт меню Файл → Відкрити запис… у головному вікні джерела не перемикає: після вибору файлу програма відповідає Не реалізовано, тож щоб відкрити запис, її треба перезапустити. У записі з кількома частотами кожна ділянка відтворюється зі своєю: поле Центр у групі Джерело показує частоту поточної ділянки. Подробиці — на сторінці Демо-сигнал і записи IQ. Той самий файл можна віддати назад в ефір через передавач HackRF One, якщо його темп лежить у межах 2–20 МС/с.

Обмеження

  • Тека записів — лише C:\sdrsa-rec; змінити її не можна.
  • Записується завжди вся миттєва смуга у форматі приладу, без стиснення.
  • З tinySA і tinySA Ultra 0.9.25 запису IQ немає: прилад віддає рівні, а не відліки, тому на вкладці немає групи Запис, а в шапці — кнопки ⏺.
  • Під час свіпу й передачі запис не отримує відліків; ці перерви позначаються, а не заповнюються.
  • Втрати в USB — оцінка за годинником; місце розриву у файлі позначене лише там, де його знає саме джерело.
  • Темп вибірки під час запису змінити не можна.

Wiki описує версію 0.9.49. Версію вашої програми видно в меню «Довідка» → «Про програму». Знайшли неточність? Напишіть нам.