Skip to content

Commit b716d85

Browse files
committed
Добавлена документация для трекинга комплексных и целочисленных фильтров IQ-потоков, включая цели, этапы и технические риски
1 parent 9a27589 commit b716d85

1 file changed

Lines changed: 217 additions & 0 deletions

File tree

docs/IQFiltersTracking.md

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
1+
# Трекинг: комплексные и целочисленные фильтры для IQ-потоков
2+
3+
## Цель
4+
Реализовать полноценную линейку IQ-фильтров для:
5+
- комплексных потоков
6+
- целочисленных потоков формата HackRF One (interleaved int8 I/Q)
7+
- целочисленных потоков формата USRP B210 (interleaved int16 little-endian I/Q)
8+
9+
С обязательным повторением существующей методики:
10+
- расчёт коэффициентов (как в текущих FIR/IIR/семействах Butterworth/Chebyshev/Elliptic)
11+
- структура API фильтров
12+
- система модульных тестов и проверок устойчивости
13+
14+
## Ключевой принцип внедрения
15+
Каждый этап должен давать сразу используемый результат (не ждать окончания всей программы работ).
16+
17+
## Область покрытия
18+
- FIR
19+
- IIR (включая SOS там, где применимо)
20+
- Билдеры/спецификации для расчёта коэффициентов
21+
- Потоковые API (Span/Stream + async)
22+
- Набор тестов (корректность, стабильность, совместимость форматов)
23+
24+
## Соглашения по форматам
25+
- HackRF One: interleaved int8, порядок байт I,Q,I,Q...
26+
- USRP B210: interleaved int16 LE, порядок I,Q,I,Q...
27+
- Для целочисленных API обязательны:
28+
- saturating clamp
29+
- явно документированная политика округления
30+
- контроль переполнений и формата входа
31+
32+
## Этапы
33+
34+
### Этап 0: Контракт и базовые типы данных (MVP foundation)
35+
Статус: Planned
36+
37+
Результат этапа:
38+
- Общие контракты для IQ-фильтров (процессинг одного отсчёта, блока, потока)
39+
- Типы/адаптеры для complex/int8/int16 IQ-представления
40+
- Единая политика преобразований int <-> double/complex
41+
42+
Задачи:
43+
- Ввести интерфейсы (например, IIqFilter<TSample>) без ломки текущего API
44+
- Зафиксировать соглашения по формату буферов HackRF/B210
45+
- Добавить вспомогательные конвертеры interleaved <-> sample/span
46+
47+
Критерии готовности:
48+
- Есть минимальный API для обработки блока IQ-данных трёх типов
49+
- Есть тесты на конвертацию форматов и граничные случаи буферов
50+
51+
Используемость после этапа:
52+
- Можно строить пайплайн с уже единым форматом входа/выхода
53+
54+
---
55+
56+
### Этап 1: Комплексный FIR для IQ (первый рабочий фильтр)
57+
Статус: Planned
58+
59+
Результат этапа:
60+
- FIR для Complex IQ-потока
61+
- Поддержка IEnumerable/Span/Stream(опционально)
62+
63+
Задачи:
64+
- Реализовать ComplexFIR с состоянием
65+
- Добавить FrequencyResponse и поведение Reset
66+
- Проверить совпадение с референсом (double FIR на I и Q по отдельности)
67+
68+
Критерии готовности:
69+
- Точность тестов в рамках заданного eps
70+
- Нет аллокаций в hot path для Span API
71+
72+
Используемость после этапа:
73+
- Можно сразу фильтровать комплексный IQ в реальных задачах
74+
75+
---
76+
77+
### Этап 2: Комплексный IIR для IQ + SOS
78+
Статус: Planned
79+
80+
Результат этапа:
81+
- IIR для Complex IQ-потока
82+
- SOS-путь для высоких порядков (аналогично текущему IIR)
83+
84+
Задачи:
85+
- Реализовать ComplexIIR (direct form + SOS)
86+
- Повторить методику валидации секций и коэффициентов
87+
- Сверить выход с референсом (раздельная фильтрация I/Q в double)
88+
89+
Критерии готовности:
90+
- Устойчивость на длинных прогонах
91+
- Совпадение амплитудно-частотных и фазовых характеристик с допуском
92+
93+
Используемость после этапа:
94+
- Комплексные IIR фильтры готовы для production-пайплайнов
95+
96+
---
97+
98+
### Этап 3: Целочисленные FIR/IIR для HackRF One (int8)
99+
Статус: In progress (частично)
100+
101+
Результат этапа:
102+
- int8 interleaved IQ фильтрация FIR/IIR
103+
- in-place и out-of-place блоковые методы
104+
- stream/sync/async API
105+
106+
Задачи:
107+
- Довести FIR-покрытие до паритета с IIR
108+
- Унифицировать состояние и поведение ошибок
109+
- Документировать политику квантования и клиппинга
110+
111+
Критерии готовности:
112+
- Полный набор тестов для int8
113+
- Совпадение с complex/double референсом после квантования
114+
115+
Используемость после этапа:
116+
- Готовый путь для HackRF RX/TX в raw-буферах
117+
118+
---
119+
120+
### Этап 4: Целочисленные FIR/IIR для USRP B210 (int16)
121+
Статус: Planned
122+
123+
Результат этапа:
124+
- int16 LE interleaved IQ фильтрация FIR/IIR
125+
- API аналогичный HackRF ветке
126+
127+
Задачи:
128+
- Реализовать обработку int16 LE без лишних копирований
129+
- Добавить in-place/out-of-place и stream/sync/async
130+
- Проверить корректность endian и знакового диапазона
131+
132+
Критерии готовности:
133+
- Проход тестов совместимости формата B210
134+
- Совпадение с reференсом на эталонных наборах
135+
136+
Используемость после этапа:
137+
- Готовая интеграция в пайплайн USRP B210
138+
139+
---
140+
141+
### Этап 5: Расчёт коэффициентов для IQ-линейки (паритет с текущими фильтрами)
142+
Статус: Planned
143+
144+
Результат этапа:
145+
- Повторена вся методика расчёта коэффициентов для IQ-линейки
146+
- Билдеры/спецификации возвращают варианты для complex/int8/int16 обработки
147+
148+
Задачи:
149+
- Переиспользовать текущие формулы и билдеры, не дублируя логику
150+
- Добавить фабрики/адаптеры для целевого типа потока
151+
- Ввести проверку соответствия коэффициентов между ветками
152+
153+
Критерии готовности:
154+
- Для каждого семейства фильтров коэффициенты совпадают с базовой веткой
155+
- Тесты регрессии на коэффициенты стабильны
156+
157+
Используемость после этапа:
158+
- Полноценный расчёт и создание нужного IQ-фильтра из одного DSL
159+
160+
---
161+
162+
### Этап 6: Полная тестовая матрица и регрессия
163+
Статус: Planned
164+
165+
Результат этапа:
166+
- Единая система модульных тестов для всех представлений сигнала
167+
168+
Подсистемы тестирования:
169+
- Unit: корректность Process/Reset/State
170+
- Golden vectors: фиксированные входы/выходы
171+
- Property-based: инварианты (линейность, нулевая реакция, boundedness)
172+
- Stability/long-run: длинные последовательности, дрейф и overflow
173+
- Format tests: interleaved/endianness/odd-length/partial-read
174+
- Cross-check: complex vs double(I/Q), int vs quantized reference
175+
176+
Критерии готовности:
177+
- Покрытие критичных веток не ниже целевого порога
178+
- Отсутствие флаки-тестов
179+
- Отдельные профили тестов: fast/extended
180+
181+
Используемость после этапа:
182+
- Надёжная база для дальнейшего развития и рефакторинга
183+
184+
## Декомпозиция по релизам (предлагаемый порядок)
185+
1. R1: Этап 0 + Этап 1
186+
2. R2: Этап 2
187+
3. R3: Этап 3 (доведение до полного паритета)
188+
4. R4: Этап 4
189+
5. R5: Этап 5 + Этап 6
190+
191+
## Технические риски и меры
192+
- Риск: расхождение результатов между complex и int ветками
193+
- Мера: единый reference pipeline + golden vectors
194+
- Риск: нестабильность IIR высоких порядков
195+
- Мера: обязательный SOS путь и long-run тесты
196+
- Риск: overhead от конвертаций
197+
- Мера: Span/in-place API и профилирование hot path
198+
- Риск: ошибки формата USRP LE
199+
- Мера: отдельный набор тестов на endian/знак/границы
200+
201+
## Definition of Done (для каждого этапа)
202+
- Реализован API и минимум один рабочий сценарий использования
203+
- Добавлены и проходят модульные тесты этапа
204+
- Обновлена документация с примерами
205+
- Нет регрессий в уже реализованных этапах
206+
207+
## Трекер задач (чеклист)
208+
- [ ] Этап 0: контракты и базовые адаптеры
209+
- [ ] Этап 1: Complex FIR
210+
- [ ] Этап 2: Complex IIR + SOS
211+
- [ ] Этап 3: HackRF int8 FIR/IIR (паритет)
212+
- [ ] Этап 4: USRP B210 int16 FIR/IIR
213+
- [ ] Этап 5: коэффициенты/билдеры IQ-линейки
214+
- [ ] Этап 6: полная тестовая матрица
215+
216+
## Примечание по текущему состоянию
217+
Уже реализованы части этапа 3 для IIR (включая interleaved, stream sync/async). Нужно довести FIR-паритет и встроить в общий трек этапов 0/5/6.

0 commit comments

Comments
 (0)