Оглавление:

КИХ-фильтрация для более надежного определения частоты: 5 шагов
КИХ-фильтрация для более надежного определения частоты: 5 шагов

Видео: КИХ-фильтрация для более надежного определения частоты: 5 шагов

Видео: КИХ-фильтрация для более надежного определения частоты: 5 шагов
Видео: Уроки Arduino. Фильтры данных, обработка сигналов 2024, Ноябрь
Anonim
КИХ-фильтрация для более надежного определения частоты
КИХ-фильтрация для более надежного определения частоты

Я действительно большой поклонник инструкций Akellyirl о надежном обнаружении частоты с использованием методов DSP, но иногда метод, который он использовал, недостаточно хорош, если у вас есть измерения с шумом.

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

К сожалению, создать цифровой фильтр непросто, и здесь требуется довольно много математики. Поэтому я подумал о создании какой-то программы, которая упростит создание таких фильтров, чтобы позволить любому использовать их в своих проектах, не вдаваясь в подробности.

В этом руководстве я собираюсь обнаружить синусоидальную волну 50 Гц в шумных измерениях с помощью Arduino Uno (Arduino на самом деле не требуется).

Шаг 1. Проблема

Эта проблема
Эта проблема

Представьте, что измеренные входные данные выглядят как приведенная выше кривая - довольно шумно.

Если мы сконструируем простой частотный детектор, подобный тому, что есть в инструкции Akellyirl, результатом будет «-inf» или, в случае приведенного ниже кода: «Да, слишком много шума…»

Примечание: я использовал почти весь код akellyirl, но добавил вверху массив rawData, содержащий зашумленные измерения.

Ниже вы можете найти весь код в файле под названием «uniltered.ino».

Шаг 2: решение

Решение
Решение

Поскольку входные данные зашумлены, но мы знаем частоту, которую мы ищем, мы можем использовать созданный мной инструмент под названием easyFIR, чтобы создать полосовой фильтр и применить его к входным данным, что приводит к гораздо более чистому входу для частотного детектора (изображение выше).

Шаг 3: EasyFIR

EasyFIR
EasyFIR

Инструмент easyFIR довольно прост в использовании, просто скачайте репозиторий GitHub и запустите файл easyFIR.py с одним образцом ваших измерений (в формате CSV).

Если вы откроете файл easyFIR.py, вы найдете 5 параметров (см. Изображение выше), которые вы можете и должны изменить в зависимости от желаемого результата. После того, как вы настроили 5 параметров и запустили файл python, вы увидите рассчитанные коэффициенты в своем терминале. Эти коэффициенты имеют решающее значение для следующего шага!

Более подробную информацию о точном использовании можно найти здесь:

Шаг 4: фильтрация

Фильтрация
Фильтрация

Теперь, если вы рассчитали необходимые коэффициенты фильтра, довольно легко применить фактический фильтр к частотному детектору.

Как вы можете видеть на изображении выше, вам нужно только добавить коэффициенты, функцию applyFilter и затем отфильтровать входные измерения.

Ниже вы можете найти весь код в файле под названием «filter.ino».

Примечание: большое спасибо этому сообщению о переполнении стека за отличный алгоритм применения фильтров!

Шаг 5: наслаждайтесь

Наслаждаться
Наслаждаться

Как видите, теперь мы можем обнаруживать сигнал 50 Гц даже в шумной среде?

Не стесняйтесь адаптировать мою идею и код к вашим потребностям. Буду очень признателен за ваши доработки!

Если вам понравится моя работа, я был бы очень признателен, если бы вы поддержали мою работу со звездой на GitHub!

Спасибо за поддержку!:)

Рекомендуемые: