Pull to refresh

Comments 4

Хорошая статья — объяснение оверсэмплинга ясное, а таблица результатов уже показывает, что метод работает: остаточный дисбаланс после триммирующего пуска (0,013 и 0,05 мм/с) — отличный результат. Ниже — как выжать из этого больше средствами цифровой обработки, оставаясь в рамках возможностей платы Due (96 КБ SRAM, Cortex‑M3 без аппаратного FPU) и вашего ПК‑приложения.

Смена ракурса

Для балансировки вам, по сути, не нужно высокое разрешение формы сигнала по всей записи — вам нужно одно комплексное число на плоскость: амплитуда и фаза вибрации точно на 1‑й оборотной гармонике (1×), плюс, возможно, 2×, 3× для диагностики. Это задача узкополосной оценки, а у узкополосной оценки рычаги мощнее, чем у пословного повышения разрешения.

1. Когерентное выделение — ваш главный рычаг (вероятно, сильнее самого оверсэмплинга)

Поскольку вы ведёте порядковый анализ (в каждую запись из 8192 отсчётов укладывается целое число оборотов), составляющая 1× попадает точно на бин ДПФ (спектральный отсчёт) без растекания спектра. Если вычислить только этот бин алгоритмом Гёрцеля — или, что эквивалентно, программным синхронным детектором (умножение на cos/sin от привязанной к тахометру фазы и накопление, чтобы получить квадратуры I/Q) — вы сразу получаете амплитуду и фазу. При этом когерентный выигрыш растёт как √N относительно случайного шума (√8192 ≈ 90×). Заодно подавляется всё, что не лежит на целом порядке (асинхронная вибрация, шум подшипников и т. п.).

Полезно знать: такое суммирование одного бина по всей записи математически тождественно синхронному усреднению во временно́й области. Если сгруппировать запись по «номеру отсчёта внутри оборота», то бин порядка k равен R × (ДПФ от усреднённого оборота). То есть «усреднить все обороты в угловой области» и «прочитать точный бин порядка» — это одна и та же операция. Скорее всего, вы уже получаете большую часть этого выигрыша из пика вашего БПФ; уточнение сводится к тому, чтобы:

  • (а) запись охватывала целое число оборотов;

  • (б) использовать прямоугольное окно, когда вы действительно привязаны к порядку (окно Ханна размыло бы энергию и съело часть когерентного выигрыша — добавляйте его только как страховку от ухода частоты вращения);

  • (в) читать именно бин нужного порядка, а не локальный максимум.

Оверсэмплинг тогда ложится поверх этого как меньший, вторичный выигрыш.

2. Убедитесь, что выигрыш оверсэмплинга реален — проверьте наличие дизера

Оверсэмплинг повышает разрешение только при наличии некоррелированного шума величиной ≥ ~1 ступеньки АЦП (LSB) на дополнительных отсчётах (вы сами отмечаете это для постоянного сигнала). Вибрация поверх шума датчика/усилителя обычно это условие выполняет, но очень «тихий» канал (малый сигнал, низкий шум) выдаст идентичные доп. отсчёты и не даст ничего — туда стоит подмешать ~1–2 ступеньки дизера (шум с треугольным распределением, TPDF).

Заявленное вами улучшение в 3–5 раз согласуется с ~+2,5 битами разрешения (32× ≈ 4^2.5 ≈ 5,6×), так что цифры сходятся. А ваш приём с вычитанием minSignal, чтобы остаться в пределах uint16_t, — правильное решение с учётом лимита ОЗУ: 32‑битный аккумулятор удвоил бы 64 КБ → 128 КБ и не влез бы в 96 КБ.

3. Следите за фазовой задержкой от окна усреднения

Суммирование overs1 отсчётов сразу после основного — это фильтр «скользящее прямоугольное окно» (boxcar), который вносит групповую задержку τ ≈ overs1 × 5 мкс. Для обоих виброканалов она одинакова, поэтому относительная фаза между плоскостями сохраняется. Но overs1 зависит от Nzad, а Nzad — от частоты вращения, и ваши пуски идут на разных оборотах (2007 / 1801 / 1687 / 2159 об/мин). Значит, фазовый сдвиг относительно тахометра отличается от пуска к пуску, и это вносит небольшую систематическую погрешность в коэффициенты влияния.

При 2000 об/мин и overs1 ≈ 10 это ~0,6°, меняясь от нескольких десятых до ~1° между пусками — мало, но вы работаете на точности, где это уже способно сказаться. Дешёвое исправление на стороне ПК: повернуть 1×‑вектор каждого пуска на e^{+j2πfτ}, используя собственное τ этого пуска.

4. Форма фильтра (второстепенно)

Прямоугольное окно — слабый антиалиасинговый / децимирующий фильтр. Для низких порядков (1×–3×) этого достаточно; переходить на короткий CIC/КИХ‑дециматор имеет смысл, только если начнёте интересоваться высшими гармониками или подавлением наложения спектров.

5. Порядковый трекинг внутри записи

Ваша адаптивная дискретизация это уже обеспечивает. Если частота вращения «плывёт» внутри одной записи, передискретизация по углу на ПК перед ДПФ удержит порядок точно на бине и подтянет и амплитуду, и фазу.

Спасибо за развернутый комментарий!
Да, основную роль играет синхронное накопление по оборотам, оверсэмплинг здесь как бесплатное дополнение :-). Оверсэмплинг помогает, когда сигнал слабый и составляет несколько ступенек АЦП, в какой-то степени он заменяет аппаратное усиление сигнала.
Чтобы не было растекания спектра, когда частота вращения гуляет, применена передискретизация, чтобы на каждый оборот приходилось заданное число отсчетов (в степени 2). При этом даже если частота вращения гуляет, но АЧХ системы практически горизонтальна в диапазоне гуляния ( мы далеко от резонанса), то амплитуда и фаза будут меняться незначительно. При этом составляющая 1× попадает точно на бин. Приятно глазу! )

  • (а) запись охватывала целое число оборотов;

  • (б) использовать прямоугольное окно, когда вы действительно привязаны к порядку (окно Ханна размыло бы энергию и съело часть когерентного выигрыша — добавляйте его только как страховку от ухода частоты вращения);

Да, так это и реализовано. Запись охватывает целое число оборотов - потом при обработке обрезается по оборотным меткам и передискретизируется в степени 2. И по факту используется прямоугольное окно.

туда стоит подмешать ~1–2 ступеньки дизера (шум с треугольным распределением, TPDF).

Это аппаратно подмешивать? Это надо влезать в плату?

При 2000 об/мин и overs1 ≈ 10 это ~0,6°, меняясь от нескольких десятых до ~1° между пусками

В конечном-то итоге это выливается в погрешность угла установки корректирующих грузов, а там погрешность в 1 градус нивелируется невозможностью так точно установить груз. Я так понимаю.

Предлагается сузить динамический диапазон на входе (естественно - ухудшив С/Ш), чтобы потом нагнать разрядность математикой. Я правильно понял? Почему бы просто не ограничить oversN до 16?
Будет ли статья о том, как съэкономить на входном фильтре (anti-aliasing) с помощью передискретизации?

В смысле "сузить динамический диапазон на входе" ? Нет, речь идет о том, что при маленьких сигналах (несколько ступенек АЦП) делать не один отсчет, а несколько (сколько сможем из-за ограничений) и потом их просуммировать (усреднить). Чем больше таких отсчетов мы сможем взять, тем лучше получится разрешение. Поэтому наоборот, oversN желательно брать по максимуму.
Ну и да, это будет способом сэкономить на антиалиасинговом фильтре, поскольку ВЧ сигнал (помеха) как-то усреднится и не пролезет в НЧ область спектра.

Sign up to leave a comment.

Articles