Лабораторная 8.22 — Пакетная CSS-синхронизация и PER¶
Цель¶
Расширить CSS-детектор из Labs 8.20/8.21 до детерминированного пакетного приёмника:
- обнаружить преамбулу из повторяющихся upchirp и оценить начало пакета;
- проверить sync word из двух символов и два downchirp;
- оценить целую и дробную составляющие CFO;
- скорректировать CFO перед решением payload-символов;
- измерить SER, PER, пропуски обнаружения и ложные срабатывания;
- проверить чувствительность к sample-rate offset.
Сигнал по-прежнему называется CSS/LoRa-like, а не LoRa-compatible: модель намеренно не реализует LoRa header, whitening, coding, interleaving и CRC.
Структура пакета¶
шумовой префикс | 8 upchirp | sync 18,52 | 2 downchirp |
16 payload-символов | шумовой суффикс
Timing metric выполняет dechirp каждого кандидата преамбулы, суммирует мощность FFT-bin по повторяющимся chirp и сравнивает сильнейший bin со средней мощностью. Sync word и downchirp подтверждают, что высокий metric относится к ожидаемой структуре пакета.
Оценка CFO¶
FFT-пик преамбулы даёт целое смещение в bin, а поворот фазы этого пика между соседними upchirp, дробную часть:
CFO = целое смещение FFT-bin + phase_step / (2π)
По умолчанию вносится CFO 1,25 bin. Без коррекции все payload-пакеты ошибочны; после синхронизации и коррекции контрольная точка -6 dB имеет нулевой PER для фиксированного seed.
Запуск¶
python blocks/block_08_modulation_and_synchronization/python/lab_8_22_css_packet_sync_per.py
Артефакты¶
docs/assets/lab822_css_timing_metric.png
docs/assets/lab822_css_per_vs_snr.png
docs/assets/lab822_css_sro_sensitivity.png
docs/assets/lab822_css_packet_metrics.json
Статистический объём¶
- 1000 пакетов на каждую точку SNR;
- 16 000 payload-символов на точку;
- 1000 независимых noise-only испытаний false alarm;
- 200 пакетов на каждую точку sample-rate offset.
Нулевой результат: конечный тест, а не доказательство сколь угодно малого PER. Для 1000 пакетов без ошибок приближённая верхняя 95%-граница равна 3/1000.
Критерии приёмки¶
- начало примера, sync word и downchirp восстановлены;
- ошибка CFO меньше
0,05bin; - corrected PER ниже uncorrected PER в контрольной точке;
- присутствуют missed-detection и false-alarm statistics;
- SRO sweep показывает деградацию и предел коррекции пересэмплированием.
Чего ожидать¶
Результаты по пакетам в зависимости от SNR (1000 пакетов на точку, введён CFO 1,25 бина):
| SNR | Пропуск обнаружения | PER без коррекции | PER с коррекцией | SER с коррекцией |
|---|---|---|---|---|
| −15 дБ | 0,948 | 1,0 | 1,0 | 0,609 |
| −12 дБ | 0,419 | 1,0 | 0,93 | 0,139 |
| −9 дБ | 0,013 | 1,0 | 0,045 | 0,004 |
| −6 дБ | 0 | 1,0 | 0 | 0 |
| −3 дБ | 0 | 1,0 | 0 | 0 |
Смещение частоты дискретизации (200 пакетов на точку): до 100 ppm ничего не отказывает; на 250 ppm отказывает каждый пакет без коррекции, а коррекция восстанавливает все; на 500 ppm даже приёмник с коррекцией теряет 20 % пакетов. В 1000 испытаниях только с шумом ложных срабатываний нет.
- Без коррекции CFO не проходит ничего ни при каком SNR: сдвиг 1,25 бина смещает каждый символ на один бин плюс четверть, ровно тот отказ, что предсказывает Лабораторная 8.21.
- Ниже −9 дБ доминирует пропуск обнаружения. Пакет теряется раньше, чем его увидит детектор полезной нагрузки, поэтому PER растёт быстрее SER.
Упражнения¶
- Какова 95-процентная верхняя граница PER при −6 дБ, если в 1000 пакетах 0 отказов? Что нужно, чтобы заявить PER ниже 1e-4?
- Переведите 250 ppm смещения частоты дискретизации в дрейф 16-символьной полезной нагрузки (в отсчётах) к её последнему символу. Почему даже приёмник с коррекцией начинает терять пакеты на 500 ppm?
Ответы (проверены запуском скрипта лабораторной)
- При 0 отказов на 1000 пакетах верхняя граница с доверием 95 %: около
3/1000 = 3·10⁻³(«правило трёх»). Чтобы заявить PER < 10⁻⁴, нужно около 30 000 пакетов без отказа. - От начала пакета до конца полезной нагрузки
(8 + 2 + 2 + 16) × 128 = 3584чипа, поэтому 250 ppm дают уход на 0,9 чипа, а 500 ppm на 1,8 чипа; только за 16 символов нагрузки: 0,5 и 1,0 чипа. В CSS сдвиг тайминга на один чип перемещает пик после снятия чирпа на один бин: как CFO в один бин. Исправленный приёмник убирает постоянное смещение, оценённое по преамбуле, но смещение частоты дискретизации продолжает расти по нагрузке, поэтому при 500 ppm последние символы снова примерно на бин в стороне, и часть пакетов теряется.