Довелося вирішити наступну проблему - при вибірці реєстрацій з числом точок більше сотні тисяч (а їх порядок легко перевалює десятки і сотні мільйонів точок на тривалості 0.2 сек) та їх візуалізації на тренді дуже добре з'їдається RAM. Це невірний підхід як з погляду проектування програми і раціонального використання ресурсів. Адже немає сенсу виводити тренд з кількістю точок більшою роздільної здатності екрану вашого монітора і тим більше зберігати їх у пам'яті.
Простий приклад, роздільна здатність монітора по-горизонталі 1920 пкс, по-вертикалі 1080 пкс, а кількість точок у тренді 10 млн. Ви просто їх не побачите фізично. То навіщо їх пхати у контейнер тренду? Правильно, немає жодного сенсу. Необхідно проріджувати вибірки з пошуком характерних екстремумів
Алгоритм вибірки та візуалізації трендів у бенчмарку наступний
- Скануємо весь архів через файлові потоки для визначення кількості точок реєстрацій по всіх каналах. З цифровими осцилографами все простіше - їх реєстрація в CSV-файлі міститься у вигляді амплітуд всіх каналів в одному рядку з однією тимчасовою міткою, відокремлених комами. Таких рядків – необмежена кількість. Таким чином, по-горизонталі кількість точок по каналах АЦП однакова
- Визначаємо поточну роздільну здатність екрана користувача та розраховуємо кількість інтервалів STEP, у кожному з яких будемо здійснювати пошук максимального піку (екстремуму) за модулем. Кількість екстремумів дорівнює кількості сканованих інтервалів, тобто. точок на екрані. Фактично, який би часовий інтервал не вибрав користувач візуалізації, кількість точок на екрані для кожного каналу не перевищить дозволу монітора по-горизонталі. Тобто. розмір архіву з реєстраціями не має значення, чи він хоч пару кілобайт, хоч десяток гігабайт
- Парсим реєстрацію та видаємо у тренд максимальний екстремум з кожного інтервалу STEP при проході по всій довжині тимчасової вибірки
- Користувач бачить на екрані проріджений архів за часом початку та кінця запису
- При необхідності більш детального перегляду ділянки тренда, користувач виділяє необхідну ділянку на екрані лівою кнопкою миші та клавішами навігації +/-/Left/Right. Алгоритм визначає новий мінімум і максимум тимчасової ділянки та робить новий перерахунок необхідного інтервалу STEP, але вже для конкретної тимчасової вибірки, яку парсер візуалізує на екрані. Таким чином, мала ділянка з більшого тренду з N-точками розгортається на весь тренд з підвантаженням проріджених точок по кожному з каналів до дозволу екрана користувача
- Користувач має можливість повернути картинку тренда у вихідний стан, виконавши UnZoom або скасування через "гарячу клавішу" Escape, або завантаживши реєстрацію заново
- Користувач має можливість експорту та друку картинки тренду
- Користувачеві доступні файли реєстрацій як осцилографів Agilent, і Tektronix
- У межах кожного каналу по всьому полю тренду проводиться візуалізація "бігаючими маркерами" з відображенням амплітудно-часових параметрів та номера точки (з можливістю вибору абсолютних або відносних показників амплітуди по вертикалі згідно зсуву каналів щодо нуля)
- Кількість каналів, що відображаються на тренді необмежено, але керування зміщенням по-вертикалі доступне для 4-х (для найпоширеніших моделей)
Fd = 4Fs/(2n-1)