# RFG Processor - Радиофотонный радар

## Описание

RFGProcessor - новый процессор для обработки данных радиофотонного радара, основанный на алгоритмах из `RFG_Receiver_GUI/main.py`.

## Основные возможности

### Типы данных
- **SYNC_DET (0xF0)** - Данные синхронного детектирования (~1000 сэмплов)
- **RAW (0xD0)** - Сырые ADC данные с меандровой модуляцией (~64000 сэмплов)

### Обработка данных

#### Для SYNC_DET (по умолчанию):
1. Интерполяция до 1000 точек
2. Прямая FFT обработка (данные уже демодулированы)
3. Гауссово сглаживание
4. Обнуление центра FFT

#### Для RAW:
1. Интерполяция до 64000 точек
2. Генерация меандрового сигнала
3. Синхронное детектирование (умножение на меандр)
4. Частотная сегментация (по 86 точек)
5. FFT обработка с гауссовым сглаживанием
6. Обнуление центра FFT

### Выходные графики

1. **Processed Signal** - Обработанный сигнал в частотной области (3-13.67 ГГц)
2. **Fourier Transform** - Спектр FFT с гауссовым сглаживанием

## Конфигурация

### Файл: `configs/rfg_config.json`

```json
{
  "data_type": "SYNC_DET",         // Тип данных: "RAW" или "SYNC_DET"
  "pont_in_one_fq_change": 86,     // Размер сегмента частоты
  "gaussian_sigma": 5.0,           // Параметр сглаживания (σ)
  "fft0_delta": 5,                 // Смещение обнуления центра FFT
  "standard_raw_size": 64000,      // Целевой размер для RAW
  "standard_sync_size": 1000,      // Целевой размер для SYNC_DET
  "freq_start_ghz": 3.0,           // Начало частотного диапазона
  "freq_stop_ghz": 13.67,          // Конец частотного диапазона
  "fq_end": 512,                   // Точка отсечки FFT
  "show_processed": true,          // Показать Processed Signal
  "show_fourier": true             // Показать Fourier Transform
}
```

### UI параметры

Процессор предоставляет следующие настройки через веб-интерфейс:

- **Тип данных** - Выбор между RAW и SYNC_DET
- **Гауссово сглаживание (σ)** - Слайдер 0.1-20.0
- **Размер сегмента частоты** - Слайдер 50-200
- **Смещение центра FFT** - Слайдер 0-20
- **Точка отсечки FFT** - Слайдер 100-1000
- **Частота начала (ГГц)** - Слайдер 1.0-15.0
- **Частота конца (ГГц)** - Слайдер 1.0-15.0
- **Переключатели** - Показать/скрыть графики

## Использование

### Автоматическая регистрация

Процессор автоматически регистрируется в `ProcessorManager` при запуске системы.

### Входные данные

Процессор ожидает данные из pipe в формате `SweepData`:
- `points`: список пар `[(real, imag), ...]`
- Для ADC данных используется только `real` часть
- Данные должны соответствовать формату 0xF0 (SYNC_DET) или 0xD0 (RAW)

### Пример структуры данных

```python
sweep_data = SweepData(
    sweep_number=1,
    timestamp=1234567890.0,
    points=[(adc_sample_1, 0), (adc_sample_2, 0), ...],
    total_points=1000  # или 64000 для RAW
)
```

## Алгоритмы обработки

### 1. Интерполяция данных
```python
# Линейная интерполяция scipy.interpolate.interp1d
old_indices = np.linspace(0, 1, len(data))
new_indices = np.linspace(0, 1, target_size)
```

### 2. Меандровая демодуляция (только RAW)
```python
# Генерация квадратного сигнала
time_idx = np.arange(1, size + 1)
meander = square(time_idx * np.pi)
demodulated = data * meander
```

### 3. Частотная сегментация (только RAW)
```python
# Разделение на сегменты и суммирование
segment_size = 86
for segment in segments:
    signal.append(np.sum(segment))
```

### 4. FFT обработка
```python
# Обрезка + FFT + сдвиг
sig_cut = np.sqrt(np.abs(signal[:512]))
F = np.fft.fft(sig_cut)
Fshift = np.abs(np.fft.fftshift(F))

# Обнуление центра
center = len(sig_cut) // 2
Fshift[center:center+1] = 0

# Гауссово сглаживание
FshiftS = gaussian_filter1d(Fshift, sigma=5.0)
```

## Отличия от оригинального main.py

### Изменено:
1. **Вход данных**: Вместо CSV файлов - pipe через `SweepData`
2. **Без накопления**: Обработка каждой развёртки отдельно (убран `PeriodIntegrate=2`)
3. **Без B-scan**: Только Processed Signal + Fourier Transform
4. **Plotly вместо Matplotlib**: Веб-визуализация
5. **JSON конфигурация**: Вместо хардкода констант
6. **Один sweep**: Нет потокового чтения файлов

### Сохранено:
- ✅ Алгоритмы обработки (интерполяция, меандр, сегментация, FFT)
- ✅ Гауссово сглаживание
- ✅ Обнуление центра FFT
- ✅ Частотный диапазон 3-13.67 ГГц
- ✅ Параметры обработки (sigma=5, segment=86, delta=5)

## Файлы

```
vna_system/core/processors/
├── implementations/
│   ├── rfg_processor.py          # Основной класс
│   └── RFG_PROCESSOR_README.md   # Эта документация
├── configs/
│   └── rfg_config.json           # Конфигурация по умолчанию
└── manager.py                    # Регистрация процессора
```

## Разработка и отладка

### Логирование
Процессор использует стандартную систему логирования:
```python
from vna_system.core.logging.logger import get_component_logger
logger = get_component_logger(__file__)
```

### Тестирование
Для тестирования создайте `SweepData` с тестовыми ADC данными:
```python
# Тест SYNC_DET (1000 точек)
test_data = [(float(i), 0.0) for i in range(1000)]

# Тест RAW (64000 точек)
test_data = [(float(i), 0.0) for i in range(64000)]
```

## Зависимости

- `numpy` - Численные операции
- `scipy.signal.square` - Генерация меандра
- `scipy.ndimage.gaussian_filter1d` - Гауссово сглаживание
- `scipy.interpolate.interp1d` - Интерполяция
- `plotly` - Визуализация

## Авторство

Создан на основе алгоритмов из `/home/awe/Documents/RFG_Receiver_GUI/main.py`
Адаптирован для VNA System architecture.

## Версия

v1.0 - Первая реализация (2025-11-28)
- Поддержка SYNC_DET и RAW форматов
- Два графика: Processed Signal + Fourier Transform
- Полная интеграция с VNA System
