Доработка синхронизации

This commit is contained in:
Maxim
2026-06-03 10:49:38 +03:00
parent b00af27058
commit 9d6452c860
4 changed files with 732 additions and 484 deletions

151
SDR/common.h Normal file
View File

@@ -0,0 +1,151 @@
/**
* common.h — Общие определения и конфигурация для приёмника и передатчика
* OFDM + RS(255,223) FEC + PlutoSDR
*
* Включает:
* - Параметры OFDM-модуляции/демодуляции
* - Параметры помехоустойчивого кодирования Рида-Соломона
* - Настройки радиотракта по умолчанию
* - Общие макросы и прототипы функций
*/
#ifndef COMMON_H
#define COMMON_H
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <math.h>
#include <signal.h>
#include <getopt.h>
#include <time.h>
#include <unistd.h>
#include <iio.h>
#include <liquid/liquid.h>
// ============================================================
// ПАРАМЕТРЫ OFDM-МОДУЛЯЦИИ (ОБЩИЕ ДЛЯ ПРИЁМНИКА И ПЕРЕДАТЧИКА)
// ============================================================
#define OFDM_M 64 // Количество поднесущих
#define OFDM_CP 16 // Длина циклического префикса
#define OFDM_TAPER 4 // Длина сглаживающего окна
// ============================================================
// ПАРАМЕТРЫ ПОМЕХОУСТОЙЧИВОГО КОДИРОВАНИЯ РИДА-СОЛОМОНА
// ============================================================
#define RS_DATA 223 // Размер блока данных (байт)
#define RS_ENC 255 // Размер кодированного блока (байт)
// ============================================================
// ПАРАМЕТРЫ РАДИОТРАКТА ПО УМОЛЧАНИЮ
// ============================================================
#define DEFAULT_FREQ 1265000000 // Частота несущей: 1265 МГц
#define DEFAULT_RATE 3840000 // Частота дискретизации: 3.84 МГц
#define DEFAULT_BW 3000000 // Полоса пропускания: 3 МГц
// ============================================================
// АДРЕСА PLUTOSDR ПО УМОЛЧАНИЮ
// ============================================================
#define TX_URI_DEFAULT "ip:192.168.3.1" // Адрес передатчика
#define RX_URI_DEFAULT "ip:192.168.2.1" // Адрес приёмника
// ============================================================
// ОБЩИЕ ВСПОМОГАТЕЛЬНЫЕ МАКРОСЫ
// ============================================================
/**
* Безопасное освобождение памяти с проверкой указателя
*/
#define SAFE_FREE(ptr) do { \
if ((ptr) != NULL) { \
free(ptr); \
(ptr) = NULL; \
} \
} while(0)
/**
* Вывод отладочного сообщения с меткой времени
*/
#define LOG_INFO(fmt, ...) \
fprintf(stderr, "[INFO] " fmt "\n", ##__VA_ARGS__)
#define LOG_ERROR(fmt, ...) \
fprintf(stderr, "[ОШИБКА] " fmt "\n", ##__VA_ARGS__)
#define LOG_WARN(fmt, ...) \
fprintf(stderr, "[ВНИМ.] " fmt "\n", ##__VA_ARGS__)
// ============================================================
// СТРУКТУРА ЗАГОЛОВКА КАДРА (12 байт)
// ============================================================
/**
* Формат заголовка кадра:
* Байты 0-1: Сигнатура начала кадра (0xF0, 0xAA)
* Байты 2-5: Порядковый номер кадра (32 бита)
* Байты 6-7: Размер исходных данных (16 бит)
* Байты 8-9: Количество блоков FEC (16 бит)
* Байт 10: Размер последнего блока RS
* Байт 11: Зарезервирован
*/
#define HDR_SIGNATURE_0 0xF0 // Первый байт сигнатуры
#define HDR_SIGNATURE_1 0xAA // Второй байт сигнатуры
#define HDR_SIZE 12 // Размер заголовка в байтах
// ============================================================
// ПРОТОТИПЫ ОБЩИХ ФУНКЦИЙ
// ============================================================
/**
* Инициализация общего обработчика сигналов завершения
* Устанавливает обработчики для SIGINT и SIGTERM
*/
void setup_signal_handlers(void);
/**
* Вывод справки по использованию
*
* @param prog_name Имя исполняемого файла
* @param mode Режим работы: "TX" или "RX"
*/
void print_usage(const char *prog_name, const char *mode);
/**
* Форматированный вывод конфигурации радиотракта
*
* @param mode Режим: "ПЕРЕДАТЧИК" или "ПРИЁМНИК"
* @param freq Частота несущей
* @param rate Частота дискретизации
* @param bw Полоса пропускания
* @param fec_on Флаг активации FEC
*/
void print_config(const char *mode, long long freq, long long rate,
long long bw, int fec_on);
/**
* Инициализация контекста PlutoSDR и базовых устройств
*
* @param uri URI подключения
* @param ctx Указатель на контекст (выход)
* @param phy Указатель на физическое устройство (выход)
* @param dev Указатель на устройство TX/RX (выход)
* @param is_tx Флаг направления (1=TX, 0=RX)
* @return 0 при успехе, -1 при ошибке
*/
int pluto_init(const char *uri, struct iio_context **ctx,
struct iio_device **phy, struct iio_device **dev, int is_tx);
/**
* Настройка параметров радиотракта
*
* @param phy Физическое устройство
* @param freq Частота несущей
* @param rate Частота дискретизации
* @param bw Полоса пропускания
* @param gain Усиление (только для TX и manual RX)
* @param is_tx Флаг направления
*/
void pluto_configure(struct iio_device *phy, long long freq, long long rate,
long long bw, double gain, int is_tx);
#endif // COMMON_H