Wiki Запис і дані
Запис IQ
Запис зберігає на диск усю миттєву смугу приймача у власному форматі відліків приладу, без стиснення, разом із сайдкаром SigMF. Запис — не «без втрат», а без тихих втрат: кожен загублений відлік порахований у метаданих SigMF, розриви з відомим місцем позначені там, де сталися, а частка втрат дописується в ім’я файлу.
Як записати
- Настройте прилад на потрібну частоту й оберіть темп вибірки: записується вся захоплена смуга, а не лише смуга VFO.
- Натисніть кнопку ⏺ у шапці бічної панелі (підказка Почати запис IQ (потік продовжиться сам)) або кнопку Запис у групі Запис на вкладці Пристрій.
- Поки запис іде, кнопка в групі показує Пише…, а значок ⏺ червоний.
- Щоб зупинити, натисніть Стоп у групі або ⏺ ще раз. Кнопка ⏹ у шапці зупиняє і запис, і потік.
Кнопка ⏺ у шапці сама знімає паузу потоку, кнопка Запис у групі — ні. Якщо потік стоїть на паузі, починайте запис кнопкою ⏺.
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_le0.9.33 — так пишуть Pluto і bladeRF; float32 зі шкалою ±0.25 уcf32_le0.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 | потік стояв на паузі під час запису |
transmit | HackRF 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 — оцінка за годинником; місце розриву у файлі позначене лише там, де його знає саме джерело.
- Темп вибірки під час запису змінити не можна.