Страница 1 из 1

Отфильтровать 50Гц

Добавлено: 05 май 2021, 16:14
kitkit
Добрый день!

Подскажите, пожалуйста, как мне лучше отфильтровать из сигнала 50Гц?

Рабочая частота у меня 10КГц, я собираю данные с частотой 320400Гц, провожу децимацию в 4 раза со скользящим средним и затем при помощи БПФ измеряю магнитуду на этой частоте.

Проблема в том, что присутствует изрядная наводка 50Гц на исходный сигнал, и её хорошо видно после децимации, ну и на выходе у меня видно биения полезного сигнала.

Использую я библиотеку CMSIS-DSP, процессор ARM Cortex-M4F.

Посоветуйте, пожалуйста, как лучше убрать эту наводку? В ЦОС я новичок, не всё пока понимаю, заранее спасибо!

Re: Отфильтровать 50Гц

Добавлено: 05 май 2021, 20:29
Бахурин Сергей
Если все что ниже 10 кГц не интересует, то лучше всего использовать фильтр верхних частот. Рассчитать коэффициенты можно в матлабе питоне или библиотекой dspl. Потом надо отфильтровать сигнал этим фильтром и наводка пропадёт. Если надо можете взять из dspl готовые функции расчёта фильтра и непосредственно фильтрации

Re: Отфильтровать 50Гц

Добавлено: 07 май 2021, 15:19
kitkit
А как dspl собрать в ARM без ОС?

Re: Отфильтровать 50Гц

Добавлено: 07 май 2021, 18:51
Бахурин Сергей
Взять необходимые функции (исходники) и подключить к проекту

Re: Отфильтровать 50Гц

Добавлено: 13 авг 2021, 14:23
calm
Здравствуйте всем! Не буду создавать новую тему, потому что вопрос в принципе этот же. Я на форуме пишу первый раз в жизни.

Во-первых, сразу большой поклон Сергею Бахурину за библиотеку, мы ее прикрутили в наш проект в Visual C++ с прорисовкой графиков по результатам. Я пользуюсь функцией перехода с спектру сигнала.

Итак, моя проблема.
Есть зондирующий бесконечный прямоугольный миандр частотой 4-7кГц. Обратно приходят импульсы с изменением формы. Выход зависит от формы принятого сигнала и амплитуды. Собираю я всё это АЦП, которое умеет до 100М, но работаю на 1М, т.к. сигнал на 100М уж очень "пушистый"... В аналоговой части я поставил фильтры на сколько это возможно и, в принципе, избавился, но на низкой частоте есть помеха 50Гц, а может 100Гц. Выглядит как биения с частотой 100Гц, но, наверное, это две 50Гц. Откуда она берется? Честно не знаю, потому, что вывозил своё устройство в поле и работал от аккумулятора с ноутбуком, помеха присутствует.

Очень бы хотелось понять и сделать фильтр хотя бы верхних частот, чтобы хотя бы до 2кГц всё убить. А если бы можно было сделать пропуск только 3-8кГц, было бы великолепно. Гуглил реально много по этому поводу, здесь тоже читал. Голова поплыла, наверное, это нужно изучать размеренно и структурировано, а я какие-то куски вырываю, поэтому не получается, а на длительное изучение вопроса нет времени (к тому времени меня уже уволят).

Что я пытался. Сигнал идет бесконечно, но чтение ацп производится кусками. Максимум 25000 значений. На период моего сигнала уходит 131 отсчет. Обычно я читаю 500 значений, нахожу начало и конец периода по 2каналу, к которому подключен зондирующий сигнал. Нахожу этот период, произвожу вычисления и вывожу график. По изменению графика - результат. Но эти урывки по 500 значений читаются в произвольный момент, когда помеха в минимуме или максимуме. От этого график сильно прыгает сам по себе даже без полезного сигнала. Я пытался читать 21000 значений, чтобы перекрыть 20мс периода помехи, но там ничего из простого усреднения сделать невозможно, потому что частота сигнала и помехи не кратны. Сигнал в реале оказался 7722Гц. Нужен фильтр, аналоговый не помогает, возможно, эта помеха внутри АЦП. Другого АЦП попробовать нету, начальство не станет еще одно приобретать за 68к руб. ради пробы.

Великая просьба посоветовать мне, если Вам не сложно, что и как применить, причем не формулами, а лучше на примере кода, основанного на Библиотеке. Спасибо.

Re: Отфильтровать 50Гц

Добавлено: 13 авг 2021, 23:10
Бахурин Сергей
Сделать полосовой цифровой фильтр несложно. Я только не понял данные идут сплошным потоком или нет? Если фильтровать каждый фрагмент 500 отсчетов то это не даст результата. Надо фильтровать поток с ацп без разрыва. Ещё вопрос зачем 1 мгц частоты ацп если сигнал 8 кГц?

Re: Отфильтровать 50Гц

Добавлено: 14 авг 2021, 02:11
calm
Спасибо большое за ответ!
Сигнал (конечно) идет непрерывно, но вызов функции чтения происходит по какому-то запросу, то есть блоками. Это я никак не контролирую, это зашито в DLL производителя АЦП. Некая функция callback моей программы вызывается этой библиотекой производителя с уже готовым блоком значений. И так, пока не переведу переменную в stop. Если когда-то все-таки получится перейти на чип АЦП, управляемый Raspberry Pi, то будем читать как хотим, хотя поставили эксперимент, распбери очень медленно читает данные по SPI. Но это другая история.

Я понимаю, что фильтровать 500 значений - ерунда. Нужно, чтобы вмещался период помехи. Могу читать 25мс при помехе 10/20мс и сигнале 130мкс с частотой дискретизации 1мкс (или выше). Дело в том, что этот считанный блок может начинаться хоть откуда с любой части непрерывного вечного сигнала.

Я бы с удовольствием рассказал всё подноготную, но не в открытом доступе здесь, все-таки некая коммерческая тайна. Ваш e-mail я не смог найти, если Вы видите здесь мой 383@ в профиле, напишите, я Вам все расскажу. Возможно, я вообще копаю не в ту степь, и Вы мне чем-то поможете, но вот что у меня получилось:

Я собираю импульсы. Полезная информация заключается в форме принятого импульса. Если правый угол задран - это одно, если левый - другое. Важна не только амплитуда сигнала и угол отрезка между углами импульса, но и радиус скругления этого отрезка от левого к правому углу импульса. Ну еще фаза (сдвиг) тоже важна.

Очень хорошо все эти изменения показывают графики, построенные по значениям выходного спектра сигнала из функции fourier_series_dec. По вещественным и мнимым значениям это хорошо видно. Высокие частоты (пушистость) я обрезал электронным аналоговым фильтром. Остались качания всего импульса низкочастотной помехой и немного волнистая полка импульса, т.е. частоты 50-100Гц и около 60-70кГц. 1млн выборок в секунду и использую, чтобы видеть весь импульс, при 250к уже не достаточно информативно. Из-за этих помех значения качаются даже в покое, поэтому дальность зондирования очень низкая, а подальше изменения значений от объекта наблюдения меньше этих качающих изменений графиков из-за помех. Определение невозможно.

В итоге, нужен фильтр с полосой пропускания 3-8кГц, чтобы я мог использовать частоту 4-7кГц. Спасибо Вам огромное)

Re: Отфильтровать 50Гц

Добавлено: 14 авг 2021, 11:29
Бахурин Сергей

Re: Отфильтровать 50Гц

Добавлено: 14 авг 2021, 19:19
calm
Спасибо, написал Вам :)