2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Я действительно большой поклонник инструкций Akellyirl о надежном обнаружении частоты с использованием методов DSP, но иногда метод, который он использовал, недостаточно хорош, если у вас есть измерения с шумом.
Одно простое решение, позволяющее получить более чистый входной сигнал для частотного детектора, - это применить какой-то фильтр вокруг частоты, которую вы хотите обнаружить.
К сожалению, создать цифровой фильтр непросто, и здесь требуется довольно много математики. Поэтому я подумал о создании какой-то программы, которая упростит создание таких фильтров, чтобы позволить любому использовать их в своих проектах, не вдаваясь в подробности.
В этом руководстве я собираюсь обнаружить синусоидальную волну 50 Гц в шумных измерениях с помощью Arduino Uno (Arduino на самом деле не требуется).
Шаг 1. Проблема
Представьте, что измеренные входные данные выглядят как приведенная выше кривая - довольно шумно.
Если мы сконструируем простой частотный детектор, подобный тому, что есть в инструкции Akellyirl, результатом будет «-inf» или, в случае приведенного ниже кода: «Да, слишком много шума…»
Примечание: я использовал почти весь код akellyirl, но добавил вверху массив rawData, содержащий зашумленные измерения.
Ниже вы можете найти весь код в файле под названием «uniltered.ino».
Шаг 2: решение
Поскольку входные данные зашумлены, но мы знаем частоту, которую мы ищем, мы можем использовать созданный мной инструмент под названием easyFIR, чтобы создать полосовой фильтр и применить его к входным данным, что приводит к гораздо более чистому входу для частотного детектора (изображение выше).
Шаг 3: EasyFIR
Инструмент easyFIR довольно прост в использовании, просто скачайте репозиторий GitHub и запустите файл easyFIR.py с одним образцом ваших измерений (в формате CSV).
Если вы откроете файл easyFIR.py, вы найдете 5 параметров (см. Изображение выше), которые вы можете и должны изменить в зависимости от желаемого результата. После того, как вы настроили 5 параметров и запустили файл python, вы увидите рассчитанные коэффициенты в своем терминале. Эти коэффициенты имеют решающее значение для следующего шага!
Более подробную информацию о точном использовании можно найти здесь:
Шаг 4: фильтрация
Теперь, если вы рассчитали необходимые коэффициенты фильтра, довольно легко применить фактический фильтр к частотному детектору.
Как вы можете видеть на изображении выше, вам нужно только добавить коэффициенты, функцию applyFilter и затем отфильтровать входные измерения.
Ниже вы можете найти весь код в файле под названием «filter.ino».
Примечание: большое спасибо этому сообщению о переполнении стека за отличный алгоритм применения фильтров!
Шаг 5: наслаждайтесь
Как видите, теперь мы можем обнаруживать сигнал 50 Гц даже в шумной среде?
Не стесняйтесь адаптировать мою идею и код к вашим потребностям. Буду очень признателен за ваши доработки!
Если вам понравится моя работа, я был бы очень признателен, если бы вы поддержали мою работу со звездой на GitHub!
Спасибо за поддержку!:)