Перейти к содержанию

Лабораторная 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,05 bin;
  • 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.

Упражнения

  1. Какова 95-процентная верхняя граница PER при −6 дБ, если в 1000 пакетах 0 отказов? Что нужно, чтобы заявить PER ниже 1e-4?
  2. Переведите 250 ppm смещения частоты дискретизации в дрейф 16-символьной полезной нагрузки (в отсчётах) к её последнему символу. Почему даже приёмник с коррекцией начинает терять пакеты на 500 ppm?
Ответы (проверены запуском скрипта лабораторной)
  1. При 0 отказов на 1000 пакетах верхняя граница с доверием 95 %: около 3/1000 = 3·10⁻³ («правило трёх»). Чтобы заявить PER < 10⁻⁴, нужно около 30 000 пакетов без отказа.
  2. От начала пакета до конца полезной нагрузки (8 + 2 + 2 + 16) × 128 = 3584 чипа, поэтому 250 ppm дают уход на 0,9 чипа, а 500 ppm на 1,8 чипа; только за 16 символов нагрузки: 0,5 и 1,0 чипа. В CSS сдвиг тайминга на один чип перемещает пик после снятия чирпа на один бин: как CFO в один бин. Исправленный приёмник убирает постоянное смещение, оценённое по преамбуле, но смещение частоты дискретизации продолжает расти по нагрузке, поэтому при 500 ppm последние символы снова примерно на бин в стороне, и часть пакетов теряется.