Q65 — цифровой протокол, разработанный Джо Тейлором (K1JT) и его командой в 2021 году для проведения минимальных связей в условиях сложных трасс прохождения радиосигнала, в том числе для проведения связи через отражение сигнала от Луны, где сигналы не только очень сильно ослабевают, но и имеют Доплеровский разброс. В этой статье будут рассмотрены подробности работы протокола.

Статья может быть интересна радиолюбителям, как знакомым, так и не знакомым с Q65, а также тем, кто хочет понять устройство этого протокола.

Введение

Джо Тейлор и его команда представили протокол Q65 в 2021 году в составе программного комплекса WSJT; цель разработки протокола заключалась в осуществлении минимальных двусторонних связей на радиолюбительских диапазонах VHF и выше, на сложных трассах, таких как тропосферное и ионосферное рассеяние, с неустойчивым прохождением и сильными ослаблениями сигналов; а также трасса Земля-Луна-Земля, на которой ослабление сигнала особенно велико и присутствует Допплеровский сдвиг частоты.

Протокол Q65 является улучшенной версией протокола QRA64 (представленного в 2016 году), имеющий более помехоустойчивый код коррекции ошибок, более широкую полосу частот 65-FSK, а также несколько скоростей передачи информации.

Тропосферное рассеяние

Тропосферное рассеяние (tropospheric scattering) — явление в радиосвязи, основывается на использовании неоднородностей (облака, туман, влага, колебания температуры и влажности) тропосферы, на высотах от 10 до 15 км, в качестве вторичных излучателей. 

Свойства тропосферного слоя определяются такими параметрами как: давление, температура и абсолютная влажность.

На основе этого явления существует вид загоризонтной радиосвязи в VHF, UHF диапазонах, позволяющий обеспечить связь на расстояниях от 100 до 500 км, а в некоторых случаях и до 1000 км.

Рисунок 1: Схема тропосферной трассы.
Рисунок 1: Схема тропосферной трассы.

При тропосферном рассеянии большая часть энергии радиоволны беспрепятственно проходит сквозь рассеивающую область. Мощность рассеянной радиоволны убывает экспоненциально (в зависимости от частоты и состояния тропосферы, общее ослабление может достигать до 150 дБ/км и выше), при этом радиосигнал подвержен замираниям, возникающим из-за интерференций при переотражении. 

В связи с этим, для обеспечения устойчивой связи, передатчик должен обладать высокой мощностью, а также на приемной, как и на передающей стороне, должны применяться антенны с узкой диаграммой направленности, которая обеспечивала бы достаточное усиление, возникающее из-за потерь мощности сигнала на трассе.

Также, для борьбы с замираниями сигнала, на принимающей стороне может быть установлено несколько антенн, расположенных на значительном удалении друг от друга.

До внедрения спутниковой связи, радиосвязь через тропосферу активно использовалась для обеспечения связи с удаленными и труднодоступными регионами, в том числе со стратегическими военными объектами, где невозможно было использовать проводную связь.

На 2025 год тропосферная радиосвязь может использоваться в качестве резервного канала связи, а также используется в системах, критичных к времени задержки сигнала (как правило, в военных целях). Также этот вид связи используется энтузиастами для установления дальних связей.

Ионосферная рассеяние

Ионосферное рассеяние (ionospheric scattering) — явление отражения и рассеяния радиоволн от нижних слоев ионосферы, насыщенных ионизированными частицами на высотах от 70 до 90 км.

Прохождение радиоволн через ионосферу определяется состоянием солнечной и геомагнитной активности, временем года, временем суток и географическим положением.

Явление ионосферного рассеяния позволяет осуществлять связи в VHF диапазонах на расстояния до 1500 км и 2000-3000 км при хорошем прохождении.

Рисунок 2: Схема ионосферной трассы.
Рисунок 2: Схема ионосферной трассы.

Дальность и прохождение радиоволн через ионосферное рассеяние зависит от частоты, так например любительский VHF диапазон 50 МГц (6 метров, в РФ не разрешен для передачи сигналов) является более подходящим, чем более высокочастотные диапазоны, т.к. с ростом частоты, воздействие ионосферы на радиоволны уменьшается и они проходят сквозь нее свободно.

Как и при тропосферном рассеянии, радиосигналы, отраженные от ионосферы, претерпевают сильное ослабление (в зависимости от состояния ионосферы, общие потери мощности могут доходить до 180-200 дБ/км и более) и интерференции.

Для связи через ионосферное рассеяние, как и при тропосферном, применяются передатчики высокой мощности и антенны с узкой диаграммой направленности для обеспечения устойчивой связи.

Отражение радиосигналов от Луны

Связь через отражение радиоволн от лунной поверхности (moonbounce/EME) — способ радиосвязи на VHF/UHF диапазонах, с использованием Луны в качестве пассивного отражателя. 

Этот вид радиосвязи является достаточно технически сложным, требующим высоких требований к антеннам и приемникам, но позволяет осуществлять связи практически любых двух точек на земном шаре, с которых одновременно видно Луну.

Рисунок 3: Схема трассы Земля-Луна-Земля
Рисунок 3: Схема трассы Земля-Луна-Земля

Исторически, первые эксперименты по проведению связей с использованием Луны, были проведены в середине 40-х годов прошлого столетия, с использованием мощных передатчиков и направленных антенн. В 60-х годах на частоте 1296 МГц впервые были проведены любительские связи.

Так как атмосфера планеты взаимодействует с радиоволнами, а Луна является диэлектриком, то общие потери на трассе Земля-Луна-Земля достигают 243 Дб. 

Для осуществления связи используются направленные антенны (и антенные стеки) с высоким коэффициентом усиления (как следствие, большим количеством элементов, при применении конструкций Uda-Yagi) и очень узкой диаграммой направленности, позволяющие сфокусировать излучаемый радиосигнал (как правило мощностью от 500-1000 ватт и более)  в сторону Луны, а на принимающей стороне принять и детектировать очень сильно ослабленный сигнал.

В радиолюбительском хобби считается одним из самых сложных видов связи, так как затрагивает такие области как построение многоэлементных антенн, высокочастотную радиотехнику и, в какой-то степени, астрономию.

Общие технические характеристики

  • Цикл передачи: 15, 30, 60, 120, 300 сек;

  • Тип модуляции: 65-FSK;

  • Механизм коррекции ошибок: Q-ary Repeat Accumulate (65, 15);

  • Ширина полосы: от 230 Гц до 1730 Гц:

  • Размер сообщения: 85 бит.

Структура протокола

На прикладном уровне структура протокола во многом заимствует логику работы протоколов FT8/FT4/MSK144, описанных ранее в соответствующих статьях, в связи с этим настоятельно рекомендуется с ними ознакомиться.

Q65, как и любой протокол передачи данных, представляет собой «матрешку», в которой нижележащий уровень инкапсулирует в себя данные с уровней выше.

Общая схема протокола приведена на рисунке 4. Разделение на уровни модели OSI условное.

Рисунок 4: Общая схема протокола (абстракция по уровням OSI условная).
Рисунок 4: Общая схема протокола (абстракция по уровням OSI условная).

На рисунке 4 приведена общая схема протокола Q65 при формировании исходящего сигнала.

Прикладной радиообмен

Протокол Q65 ориентирован на минимальную двустороннюю связь, связь, как правило осуществляется между двумя участниками. В качестве полезной информации передаются позывные с квадратами местоположения и SNR-рапорты.

Структура и формат сообщений идентичны сообщениям в протоколах FTX и MSK144 рассмотренных в предыдущих статьях.

6bit-кодирование

Так как протокол Q65 для коррекции ошибок использует алгоритм Q-ary Repeat Accumulation, который оперирует кодовыми словами размером в 6 бит (по этой причине используется 2^6 — 64-FSK), данные кодируемых сообщений перекодируются в 6-и битное представление.

Алгоритм 6-битного кодирования на языке python, можно реализовать используя библиотеку numpy.

import typing
import numpy as np
import numpy.typing as npt


def q65_6bit_encode(bits: npt.NDArray[np.uint8]) -> npt.NDArray[np.uint8]:
    n_chunks = bits.shape[0] // 6
    bits = bits[:n_chunks * 6]
    chunks_reshaped = bits.reshape((n_chunks, 6))
    values = chunks_reshaped.dot(1 << np.arange(5, -1, -1))
    return values.tolist()

Функция q65_6bit_encode принимает на вход массив бит; далее, используя reshape (изменение формы массива), происходит объединение бит данных в группы по 6 бит. Результатом функции является массив, элементы которого содержат по 6 бит исходных данных.

Так, исходное сообщение CQ R9FEU LO87 (в hex-представлении: 00 00 00 20 59 ac ff 94 c9 c8) после 6-и битного кодирования будет выглядеть как 00 00 00 00 08 05 26 2c 3f 39 13 09 32.

CRC-12

Для контроля целостности сообщений в Q65 используется 12 битный контрольный избыточный код CRC-12.

Для вычисления CRC-12 в Q65 используется полином со значением 0xF01.

CRC12_POLYNOMIAL = 0xF01

Вычисление значения осуществляется функцией crc12.

def crc12(x: npt.NDArray[np.uint8]) -> int:
    sr = 0
    for t in x:
        for _ in range(6):
            if (t ^ sr) & 0x01:
                sr = (sr >> 1) ^ CRC12_POLYNOMIAL
            else:
                sr >>= 1
            t >>= 1
    return sr

Функция crc12 на вход принимает массив 6-битных значений данных из результата работы функции q65_6bit_encode. Результатом является целое число, со значением контрольной суммы.

Для сообщения CQ R9FEU LO87 представленного в 6-и битной форме, значение CRC-12 составляет 3121.

Q-ary Repeat Accumulation

Для обеспечения устойчивости протокола к искажениям и помехам, в Q65 используется алгоритм Q-ary Repeat Accumulation, с длиной кода в 65 символов, из которых 15 содержат исходные данные.

Q-ary Repeat Accumulation (далее QRA) — подвид LDPC кодов коррекции ошибок, в которых используется повторно-аккумулирующее (Repeat Accumulation) кодирование над конечным полем с q элементами (Q-ary). Процесс кодирования QRA основывается на вычислении бит проверки на четность на основе взвешенного аккумулирования повторяющихся систематических исходных символах.

В основе QRA лежит линейное кодирование над конечным полем GF(q) (сокращение от Galois Field). Конечное поле — поле, состоящее из конечного числа элементов. Характеристикой поля является простое число p, количество элементов конечного поля является степенью характеристики q=p^n (n∈N) . Более подробно с полями Галуа и их арифметикой можно ознакомиться в соответствующих статьях.

Рисунок 5: Граф Таннера QRA алгоритма.
Рисунок 5: Граф Таннера QRA алгоритма.

На рисунке 5 приведен граф Таннера QRA-алгоритма, на графике информационные биты обозначены буквами x, биты проверки четности — символами y. Матрица пермутации (перестановок) П подбирается с учетом минимизации коротких циклов повторений информационных символов.

Для упрощения операций умножения в конечном поле, аккумулирование весов (важности) информационных символов осуществляется в логарифмической форме; логарифм каждого символа, согласно матрице пермутаций, складывается с логарифмом веса этого символа. Обратный переход к элементам конечного поля осуществляется путем вычисления значения экспоненты от вычисленного значения веса символа, на основе чего уже происходит расчет битов четности.

Биты проверки на четность рассчитываются рекуррентно на основе взвешенных сумм информационных символов. Как и в LDPC-кодах, расчет значения битов проверки на четность осуществляется операцией сложения по модулю 2 (xor).

Аналогично LDPC-кодам, значения проверочных бит должны удовлетворять условию, что результат сложения бит данных и бит четности, по модулю 2, был равен нулю.

Алгоритм QRA имеет преимущество в помехоустойчивости по сравнению с остальными кодами коррекции ошибок за счет:

  • добавления избыточности за счет многократного повторения слов, что повышает вероятность исправления ошибок при декодировании;

  • вычисление весов осуществляется в конечных полях большой размерности, что повышает корреляционные свойства кодовых слов;

  • используются алфавитов больших размерностей, что позволяет осуществлять кодирование с высокой дистанцией между кодовыми словами, что позволяет минимизировать ошибки.

Описанные свойства позволяют приближают алгоритм QRA к пределу Шеннона.

На рисунке 6 приведен график сравнения эффективности алгоритмов коррекции ошибок в канале с аддитивным белым шумом Гаусса (AWGN) с использованием NCFSK (некогерентный FSK). Красной стрелкой обозначена граница Шеннона для канала связи. Ось Eb/No определяет отношение сигнал/шум на бит.

Рисунок 6: Сравнение алгоритмов коррекции ошибок на канале с AWGN.
Рисунок 6: Сравнение алгоритмов коррекции ошибок на канале с AWGN.

В Q65 матрица пермутаций задается как qra_acc_input_idx, где значения определяют индексы символов в исходном сообщении.

qra_acc_input_idx = np.array([
   13, 1, 3, 4, 8, 12, 9, 14, 10, 5,
   0, 7, 1, 11, 8, 9, 12, 6, 3, 10,
   7, 5, 2, 13, 12, 4, 8, 0, 1, 11,
   2, 9, 14, 5, 6, 13, 7, 12, 11, 2,
   9, 0, 10, 4, 7, 14, 8, 11, 3, 6,
   10
])

Логарифмы символов в конечном поле также могут быть заданы таблично в qra_log, где индекс таблицы соответствует значению символа, а значение — значение логарифма.

qra_log = np.array([
   -1, 0, 1, 6, 2, 12, 7, 26, 3, 32,
   13, 35, 8, 48, 27, 18, 4, 24, 33, 16,
   14, 52, 36, 54, 9, 45, 49, 38, 28, 41,
   19, 56, 5, 62, 25, 11, 34, 31, 17, 47,
   15, 23, 53, 51, 37, 44, 55, 40, 10, 61,
   46, 30, 50, 22, 39, 43, 29, 60, 42, 21,
   20, 59, 57, 58
])

Значение Log(0) не используется и в таблице записано как -1 для выравнивания индексации.

Значения логарифмов весов символов в конечном поле также можно представить таблично  в qra_acc_input_wlog.

qra_acc_input_wlog = np.array([
   0, 14, 0, 0, 13, 37, 0, 27, 56, 62,
   29, 0, 52, 34, 62, 4, 3, 22, 25, 0,
   22, 0, 20, 10, 0, 43, 53, 60, 0, 0,
   0, 62, 0, 5, 0, 61, 36, 31, 61, 59,
   10, 0, 29, 39, 25, 18, 0, 14, 11, 50,
   17
])

Таблица экспонент qra_exp в конечном поле.

qra_exp = np.array([
   1, 2, 4, 8, 16, 32, 3, 6, 12, 24,
   48, 35, 5, 10, 20, 40, 19, 38, 15, 30,
   60, 59, 53, 41, 17, 34, 7, 14, 28, 56,
   51, 37, 9, 18, 36, 11, 22, 44, 27, 54,
   47, 29, 58, 55, 45, 25, 50, 39, 13, 26,
   52, 43, 21, 42, 23, 46, 31, 62, 63, 61,
   57, 49, 33
])

Алгоритм расчета проверочных бит QRA:

qra_NC = 50
qra_M = 64


def qra_encode(x: npt.NDArray[np.uint8]) -> npt.NDArray[np.int64]:
    y = np.zeros(qra_NC, dtype=np.int64)

    chk = 0
    for k in range(qra_NC):
        t = x[qra_acc_input_idx[k]]
        if t:
            t = (qra_log[t] + qra_acc_input_wlog[k]) % (qra_M - 1)
            t = qra_exp[t]
            chk ^= t

        y[k] = chk

    return y

Значение qra_NC определяет количество проверочных бит (65 - 15); значение qra_M определяет мощность алфавита и размер конечного поля.

Функция qra_encode принимает на вход массив 6-битных информационных символов, далее, извлекая символы согласно матрице пермутаций qra_acc_input_idx  выполняется взвешивание t (символы со значениями 0 исключаются); в chk содержатся значения битов проверки четности.

Результатом работы функции является массив размером qra_NC элементов, содержащий в себе биты проверок для входящего массива.

В протоколе Q65 вычисление QRA осуществляется на данных сообщения с включенным в них значением CRC-12:

def q65_encode_msg(msg: npt.NDArray[np.uint8]) -> npt.NDArray[np.int64]:
    crc = crc12(msg)
    data_in = np.concat((msg, (crc & 0x3F, crc >> 6),))
    data_out = qra_encode(data_in)
    return np.concat((msg, data_out,))

Для сообщения CQ R9FEU LO87 и его CRC-12 (00 00 00 00 08 05 26 2c 3f 39 13 09 32 31 30) проверочными битами будет значение 31 31 31 39 35 09 30 1c 04 27 27 0b 0b 03 3d 3f 25 13 13 00 3d 38 38 34 06 34 39 39 39 30 30 0d 3d 1b 3d 00 30 24 17 17 11 11 08 32 13 0f 30 02 02 12.

Контрольная сумма CRC-12 участвует в расчете проверочных бит QRA, но исключается из FSK-сигнала, таким образом, результатом функции q65_encode_msg является конкатенация массива исходного сообщения и QRA-кодов.

Закодированное алгоритмом QRA сообщение CQ R9FEU LO87 будет выглядеть как 00 00 00 00 08 05 26 2c 3f 39 13 09 32 31 31 31 39 35 09 30 1c 04 27 27 0b 0b 03 3d 3f 25 13 13 00 3d 38 38 34 06 34 39 39 39 30 30 0d 3d 1b 3d 00 30 24 17 17 11 11 08 32 13 0f 30 02 02 12.

Синхронизация

Для передачи информации протокол Q65 использует 65-тоновую FSK, 64 тона для передачи информационных бит и 1 тон с индексом 0 для синхронизации. 

Общая длина последовательности передачи Q65 состоит из 85 тонов, тона синхронизации встраиваются в общую передачу на позиции, соответствующим последовательности 1, 9, 12, 13, 15, 22, 23, 26, 27, 33, 35, 38, 46, 50, 55, 60, 62, 66, 69, 74, 76, 85.

Последовательность значений, используемых в качестве маркера синхронизации является псевдослучайной и, скорее всего, подобрана эмпирическим путем, для получения оптимальной корреляционной картины.

Формирование списка тонов протокола Q65 происходит путем расстановки последовательности кодовых слов на позиции, не входящие в перечень номеров синхронизаций.

Объединяя предыдущие этапы преобразования и кодирования данных, формирование списка тонов осуществляется функцией q65_encode.

Q65_SYNC = np.array([1, 9, 12, 13, 15, 22, 23, 26, 27, 33, 35, 38, 46, 50, 55, 60, 62, 66, 69, 74, 76, 85])


def q65_encode(payload: typing.ByteString) -> npt.NDArray[np.uint8]:
    arr = np.frombuffer(payload, dtype=np.uint8)
    bits = np.unpackbits(arr)

    msg = q65_6bit_encode(bits)
    codeword = q65_encode_msg(msg)

    tones_count = 85
    tones = np.zeros(tones_count, dtype=np.uint8)

    tone_indices = np.setdiff1d(range(tones_count), Q65_SYNC - 1)
    tones[tone_indices] = codeword + 1

    return tones

В функции q65_encode данные, полученные от q65_encode_msg расставляются в массив tones. В tone_indices вычисляются позиции, не занятые тонами синхронизации. Так как массив Q65_SYNC содержит номера позиций, то для перехода к индексам, все значения уменьшаются на единицу. При записи тонов в результирующий массив значения codeword увеличиваются на единицу, чтобы не пересекаться с тонами синхронизации.

FSK-манипуляция

Как и в протоколах семейства FTX, для формирования дискретного сигнала, в Q65 используется частотная манипуляция с когерентной фазой.

Используя библиотеку numpy, генератор сигнала может быть реализован в виде функции:

def synth_fsk(
       tones: npt.NDArray[np.uint8], sample_rate: int,
       samples_per_symbol: int,
       f0: float, bandwidth: float) -> npt.NDArray[np.float64]:
    dt = 1.0 / sample_rate

    phase = 0.0

    signal = np.zeros(tones.shape[0] * samples_per_symbol, dtype=np.float64)
    for i, tone in np.ndenumerate(tones):
        idx, *_ = i

        freq = f0 + bandwidth * tone
        phase_delta = 2 * np.pi * freq * dt

        phases = np.fromiter(
            (np.fmod(phase_delta * i + phase, 2 * np.pi)
             for i in range(samples_per_symbol)),
            dtype=np.float64
        )

        t_start = idx * samples_per_symbol
        t_end = t_start + samples_per_symbol

        signal[t_start:t_end] = np.sin(phases)

        phase = np.fmod(phase_delta * samples_per_symbol + phase, 2 * np.pi)

    return signal

Функция synth_fsk принимает на вход перечень тонов сигнала (tones); параметр sample_rate определяет частоту дискретизации сигнала; samples_per_symbol определяет продолжительность одного тона в семплах; параметром f0 задается нижняя частота, относительно которой будут формироваться частоты тонов сигнала; значение параметра bandwidth определяет полосу частот, в которой тоны будут равномерно распределяться (чем шире полоса, тем дальше по частоте будут отстоять друг от друга тоны).

Значение частоты каждого тона определяется переменной freq. Начало и конец тона рассчитываются соответствуют значениям переменных t_start и t_end

Сигнал формируется функцией sin. Когерентность фазы обеспечивается значением переменной phase.

Подрежимы

Так как протокол Q65 разработан для работы на различных трассах с использованием нескольких диапазонов, на которых может меняться шумовая картина и прохождение, Q65 параметризуется такими параметрами как продолжительность передачи (30, 60, 120, 300 сек) и полоса пропускания (A, B, C, D, каждая из которых в 2 раза шире предыдущей), которые записываются в виде суффикса (например Q65-60D определяет длительность передачи в 60 сек и полосу пропускания 1730 Гц).

Генератора сигнала для протокола Q65:

def gen_signal(tones: npt.NDArray[np.uint8], sample_rate: int,
              f0: float, q65_type: typing.Literal[1, 2, 3, 4],
              period: typing.Optional[typing.Literal[15, 30, 60, 120, 300]] = None) -> npt.NDArray[np.float64]:
    if period == 30:
        nsps = 3600
    elif period == 60:
        nsps = 7200
    elif period == 120:
        nsps = 16000
    elif period == 300:
        nsps = 41472
    else:
        nsps = 1800

    samples_per_symbol = 4 * nsps  # 48000 Hz sampling

    baud = sample_rate / samples_per_symbol
    bandwidth = baud * q65_type

    signal = synth_fsk(tones, sample_rate=sample_rate, samples_per_symbol=samples_per_symbol, f0=f0,
                      bandwidth=bandwidth)

    return signal

Функция gen_signal оперирует списком тонов на входе, значение f0 определяет нижнюю частоту сигнала; значение параметра q65_type соответствует полосам частот, обозначаемых как A, B, C, D; аргумент period. Результатом является массив дискретных значений сигнала звуковой частоты.

Итоговый код генератора, объединяющий в себе рассмотренные выше функции:

from scipy.io.wavfile import write


def gen_q65_tones(payload: typing.ByteString) -> npt.NDArray[np.uint8]:
    tones = q65_encode(payload)
    return tones


def main():
    msg = message_encode("CQ", "R9FEU", "LO87")
    tones = gen_q65_tones(payload)

    sample_rate = 48000
    signal = gen_signal(tones, sample_rate, f0=1000, q65_type=1, period=15)

    amplitude = np.iinfo(np.int16).max
    wave = signal * amplitude

    write("examples/signal.wav", sample_rate, wave.astype(np.int16))


if __name__ == '__main__':
    main()

Описание и работа функции message_encode была рассмотрена в статье, посвященной протоколам семейства FTX.

В данном примере формируется сигнал Q65-15A.

После запуска кода, сформированный и готовый к передаче в эфир, сигнал записывается в wav-файл с именем signal.wav.

На рисунке 7 представлена спектрограмма сформированного сигнала. 

На спектрограмме можно заметить спектральные выбросы на стыках тонов разной частоты, характерные при резком изменении частоты без использования сглаживающих фильтров (в Q65 не используются).

Рисунок 7: Спектр сигнала Q65.
Рисунок 7: Спектр сигнала Q65.

Рекомендации по подрежимам

На основании проведения множества тестов в течении полугода командой Тейлора и энтузиастов были определены эффективные параметры приведенные в таблице 1.

Трасса

Подрежим

Ионосферное рассеяние 50 МГц

30A

Ионосферное рассеяние 50 МГц QRP

120E

Ионосферное рассеяние 144 МГц

60C

Тропосферное и дождевое рассеяние 10 ГГц

60D

Малогабаритный EME 10 и 24 ГГц

120E

EME 50, 144 МГц

60A

EME 432 МГц

60B

EME 1296 МГц

60C

EME 10 ГГц

60D

Тем не менее, приведенные рекомендации и диапазоны не являются обязательными.

Важное замечание: диапазон 6М (50 МГц) не разрешен к использованию для передач радиосигналаов в РФ.

Заключение

В статье был проведен обзор и анализ и принцип работы протокола Q65. Так, используя достаточно помехоустойчивые алгоритмы коррекции ошибок и использование частотной манипуляции при длительных циклах передачи позволяет сделать возможной минимальную радиосвязь в очень сложных условиях прохождения и распространения радиосигналов; связи через тропосферное и ионосферное рассеяние становятся осуществимыми при мощности передатчика до 100 Вт и направленных антеннах средних размеров.

Также протокол представляет интерес с точки зрения методов обеспечения целостности передачи данных в условиях шумных каналах связи.

Так как протокол, как и предыдущие цифровые протоколы Тейлора и его команды, представляет собой «матрешку» или «луковицу», технология может быть использована как базис для радиолюбительских экспериментов с передачей информации на большие расстояния через разные трассы.

Ссылки

Комментарии (0)