Доработка синхронизации
This commit is contained in:
151
SDR/common.h
Normal file
151
SDR/common.h
Normal 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
|
||||
Reference in New Issue
Block a user