Files
templates/cpp/signal-eigen
Andrey 41e24629ce Расширить DEIF, загрузку CAN и общую обработку сигналов
Добавить общее ядро DEIF, эмуляцию приборов и переносимые панели Python/Qt.
Расширить загрузчики F2812 и F28335, обновление Flash и профиль STM Invertor.
Добавить альтернативный МНК Eigen, модели неисправностей и диагностику сигналов.
Обновить справочники устройств, проекты CCS и регрессионные проверки.
2026-10-24 15:40:51 +03:00
..

Альтернативный МНК 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, официальный архив. SHA-256: 8586084f71f9bde545ee7fa6d00288b264a2b7ac3607b974e54d13e7162c1c72. Заголовки компилируются с EIGEN_MPL2_ONLY; Eigen-COPYING.MPL2 копируется рядом с библиотекой и включается в пакет SETGUI. Сборка не требует интернета.

Из каталога SETGUI:

.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.