Добавить общее ядро DEIF, эмуляцию приборов и переносимые панели Python/Qt. Расширить загрузчики F2812 и F28335, обновление Flash и профиль STM Invertor. Добавить альтернативный МНК Eigen, модели неисправностей и диагностику сигналов. Обновить справочники устройств, проекты CCS и регрессионные проверки.
51 lines
4.5 KiB
Markdown
51 lines
4.5 KiB
Markdown
# Альтернативный МНК Eigen QR
|
|
|
|
Необязательный настольный модуль выполняет полиномиальный МНК через
|
|
`Eigen::ColPivHouseholderQR`. Исходный двухпроходный решатель остаётся вариантом
|
|
по умолчанию. Прошивки и основная SETProtocol DLL продолжают собираться как C99.
|
|
|
|
Путь вызова: GUI → Python/ctypes → `setsignal_eigen` → общая подготовка
|
|
`set_signal.c` → callback Eigen → общие вычисление кривой и RMSE.
|
|
Сортировка, усреднение повторов X, нормировка, сетка, рабочий буфер и аннотации
|
|
формул совпадают у обоих вариантов. Порог ранга Eigen относительный: `1e-12`;
|
|
он может иначе классифицировать пограничные данные, чем исходная ортогонализация.
|
|
Модуль не зависит от Qt и не участвует в обмене с устройствами.
|
|
|
|
| Файл | Назначение и зависимости |
|
|
| --- | --- |
|
|
| `signal_eigen.cpp` | Решатель QR и экспорт `set_signal_reconstruct_eigen`; C++14, Eigen, `set_signal.h` |
|
|
| `build.py` | Сборка DLL/SO, проверка и распаковка локального архива; Python 3.8+ и C/C++ компиляторы |
|
|
| `vendor/eigen-3.4.0.tar.gz` | Оригинальный архив зависимости, без изменений |
|
|
| `../../python/set_devices/signal_eigen.py` | Ленивый ctypes-загрузчик отдельного компонента |
|
|
|
|
Зависимость: [Eigen 3.4.0, официальный архив](https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.gz).
|
|
SHA-256: `8586084f71f9bde545ee7fa6d00288b264a2b7ac3607b974e54d13e7162c1c72`.
|
|
Заголовки компилируются с `EIGEN_MPL2_ONLY`; `Eigen-COPYING.MPL2` копируется
|
|
рядом с библиотекой и включается в пакет SETGUI. Сборка не требует интернета.
|
|
|
|
Из каталога SETGUI:
|
|
|
|
```powershell
|
|
.venv/Scripts/python.exe third_party/templates/cpp/signal-eigen/build.py --output src/gui_desktop/native/setsignal_eigen.dll # Собираем 64-битный настольный компонент рядом с основной DLL.
|
|
```
|
|
|
|
Для 32-битного приложения добавьте `--arch x86`. Компилятор C обрабатывает
|
|
общий алгоритм отдельно от C++14-решателя. Windows-модуль использует статический
|
|
CRT и PE-подсистему 6.01; работоспособность на самой Windows 7 требует проверки
|
|
на соответствующей машине. Для Linux/macOS укажите имя `libsetsignal_eigen.so`
|
|
или `libsetsignal_eigen.dylib`. `scripts/build_exe.py` собирает и упаковывает
|
|
компонент автоматически, включая вариант Windows 7 x86.
|
|
|
|
Контракт `set_signal_fit_fn` описан в `c/set-protocol/include/set_signal.h`:
|
|
callback получает уникальные нормированные X/Y, количество точек и степень 1…5,
|
|
возвращает коэффициенты по возрастанию степеней аргумента `2*x-1`.
|
|
Владение выходами остаётся у вызывающего; Eigen выделяет временные матрицы
|
|
только в настольном порте. Коды ошибок: 0 — успех, 1 — параметры, 2 — нечисловой
|
|
результат, 3 — недостаточный ранг, 5 — память/ошибка C++-решателя.
|
|
Исключения не пересекают C ABI. Общих изменяемых рабочих буферов нет.
|
|
|
|
Загрузчик ищет компонент рядом с выбранной SETProtocol DLL. Переменная
|
|
`SETSIGNAL_EIGEN_LIBRARY` позволяет явно задать путь для тестов. Отсутствующая
|
|
библиотека вызывает понятную ошибку после выбора Eigen; скрытой замены
|
|
на исходный решатель нет. Используется в обработке графиков и генераторе SETGUI.
|