Полосовой пропускающий фильтр:
Фильтр высоких частот:
Фильтр низких частот:
Получились такие картинки :
PИмея два таких сигнала (синусную и косинусную составляющие, или реальную и мнимую часть сигнала), можно сказать что осуществили дискретное преобразование Фурье для заданой чатоты. Выстроив синусные и косинусные значения для всех интересующих нас частот, получим спектр амплитуды сигнала, и его фазу.PPТакая же аналогия наверно применима и для операции свёртки коэффициентов фильтра и входного сигнала.
Свёртка сигнала с косинусоидой:
И если также поступить с гармоническим сигналом функции косинуса такой же частоты, то выходной сигнал быдет содержать косинусную составяющую от входного сигнала с такой же частотой.
Свёртка сигнала с синусоидой:
Для предварительной оценки работы цифрового фильтра написал програмку на C#, которая производит расчёт коэффициентов фильтра, моделирует работу цифрового фильтра,Pпозволяет визуально наблюдать результат обработки сигнала. На рисунках ниже представлены формы сигналов. К примеру синим отображён входной сигнал, частота его меняется плавно от минимальной до максимальной заданных частот. Красным отображён обработанный фильтром сигнал, зелёным отображены коэффициенты фильтра. Салатовым, форма весового окна Блекмена (если используется). Её используют для получения требуемой формы амплитудно-частотной характеристики фильтра в полосе пропускания и подавления всплесков сигнала за пределами её. В нижних текстовых окнах программы выводятся коэффициенты фильтра как вещественных, так и в целых числах.PНа рисунках видно, что если просуммировать все отсчёты входного сигнала, перемноженные с соответствующими отсчётами гармонического сигнала функции синуса определённой частоты (операция свёртки), то выходной сигнал быдет содержать синусную составяющую от входного сигнала с такой же частотой.
Причём каждое поступающее значение записывается перед предыдущим. Такая организация буфера не требует перестановки элементов при обработки значений, изменяем только индекс буфера (уменьшаем на 1 ) при поступлении нового значения. Работа нашего цифрового фильтра реализована так: c каждым поступившим новым значением в буфер, производим перемножение отсчётов сигнала в буфере начиная с только что поступившего до номера, увеличенного на длинну фильтра, на все соответсвующие по возрастающему от 0 до mfilterPномеру коэффициентов импульсной характеристики фильтра. В результате получим 1 значение отфильтрованного сигнала и занесём его в массив fdacdata[]. Длинна фильтра (количество коэффициентов фильтра), mfilter выбрана путём компромисса между качеством фильтрации, и производительностью микроконтроллера, при длинне фильтра mfilter=31, частоте дискретизации 8000 кГц, половина ресурсов уходит на работу цифрового фильтра.(при тактовой частоте 32МГц времяPоперации свёртки составляет порядка 75 мкСек).
Оцифрованные сигналы с АЦП представляют собой целочисленные значения от 0 до 4095, затем их переведём в значения переменной от-2047 до +2047, причем значение равное 0 (Vadc / 2) это отсутствие сигнала. С частотой дискретизации, значения поступают в буфер переменной fadcdata[], организованный в виде кольца на 256 значений.
В интернете много хороших статей по цифровой обработки сигнала, я лиш в краце коснусь способа реализации в моём варианте. Программа в микроконтроллере сама расчитывает требуемые коэффициенты фильтра, основываясь на длинне фильтра, частоте дискретизации, начальной и конечной частоте пропускания фильтра. Получаемые значения коэффициентов имеют вещественне значения, с многими цифрами после запятой. А так как в микроконтроллере нет блока для работы вещественными числами, и програмная обработка таких чисел занимает гораздо больше времени, чем работа с целыми числами, то перенесём значения коэфиициентов в целочисленные неправильные дроби. К примеру, вещественное число 0,12345 можно предствать в виде дроби 505/4096, чей результат не сильно отличается от исходного, но может значительно уменьшить время затрачиваемое на арифмитические операции. Можно конечно и все отнормированные значения коэффициентов фильтра умножить хоть на миллион, и потом делить на него же. Но если для ускорения работы программы придётся переходить на ассемблер, неправильные дроби предпочтительнее, так как позволят операции деления заменить сдвигами вправо. Хотя данный микроконтроллер затрачивает один такт на целочисленное умножение и от 2 до 12 тактов на деление, меньшие значения в знаменателе позволяют использовать меньше тактов для деления.
Решил сделать подобное устройство на микроконтроллере, заодно попрактиковатьсяPв цифровой обработкой сигнала. Микроконтроллеру как раз и поручим выделение из окружающих звуков требуемый нам сигнал с полосой от 1400 до 1600 герц и длительностью от 0,5 до 1,5 секунд. Для выделения используем цифровой фильтр с конечной импульсной характеристикой, который легко програмно реализовать, несмотря на некоторые его недостатки. Сигнал с микрофона, предварительно усиленный операционным усилителем, подаём на вход АЦП микроконтроллера, а затем с частотой дискретизации, равной 8000 герц, оцифрованные 12-разрядные значения будем обрабатывать. Для получаения частоты дискретизации используем таймер микроконтроллера.
Pвнутренности брелка (1987 год ):
Давным-давно, в начале перестройки начали появлятся у народа забавные тайваньские штучки, к примеру часы электронные с кучей мелодей, или вот брелок к ключам, который на свист забывшего где лежат эти ключи человека, откликался своим ответным пронзительным писком. В брелке находился пьезо излучатель, он же и микрофон, пара маленьких батареек и платка с залитой клеем микросхемой.
Опубликовано автором
Фильтрация звука на STM32L с использованием КИХ фильтра
Блог разработчиков электроники
Фильтрация звука на STM32L с использованием КИХ фильтра | electro.luxmentis.ru Блог разработчиков электроники. embedders разработка сигнал применение отладка keil iar библиотеки OS микроконтроллеры схемы STM32 STM8 TI ST DSP High Voltage STM32F4 cortex f4 Лазер использование. поиск авторов единомышленников. обмен опытом.
Комментариев нет:
Отправить комментарий