Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: измерение частоты аналогового сигнала
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Spym
Доброго времени суток.

Требуется измерять частоту аналогового сигнала при помощи АЦП в mega32, точнее - искать сигнал с частотой 4850 - 4990Гц.

Какие существуют методы обнаружения известной частоты?
Чем определяется необходимая частота дискретизации входящего сигнала?

Мне это представляется как отсчет времени между всплесками на заданную амплитуду, и поиском всплесков с заданным периодом, с дальнейшей статистической обработкой полученных данных.
С ЦОС практически не знаком...
fmdost
Цитата(Spym @ Mar 13 2008, 02:56) *
... С ЦОС практически не знаком ...

То-же.
Хочу сделать себе светамузычку. Вот что насобирал фильтры с укороченными коэффициэнтами, правда ссылка на первоисточник платная, мож кто поделится. Вот ещё есть програмка по расчёту фильтров, правда 1998года. Нажмите для просмотра прикрепленного файла
Ув Камрады. Если кто знает доходчивый сайт или книжку, особенно применительно к экономии вычислительных ресурсов по теме, поделитесь, очень актуально, pls.
DimaD
Цитата(Spym @ Mar 13 2008, 01:56) *
Требуется измерять частоту аналогового сигнала при помощи АЦП в mega32, точнее - искать сигнал с частотой 4850 - 4990Гц.


Сформулируйте точнее, что именно Вам необходимо.
Spym
Сигнал этот есть выход микрофона, нужно определить наличие звука с частотой, близкой к 4920Гц.
Используется вход АЦП с усилением 200х.
Lexdaw
Почему вы не хотите сделать на паре ОУполосовой аналоговый фильтр?Цифровой фильтр для не спеца вещь достаточно сложная.
GDI
Поиск частоты - это фурье, чтобы найти одну частоту надо выполнить дискретное преобразование фурье, причем не быстрое, а полное.
jorikdima
Цитата(Lexdaw @ Mar 13 2008, 17:48) *
Почему вы не хотите сделать на паре ОУполосовой аналоговый фильтр?Цифровой фильтр для не спеца вещь достаточно сложная.

почему?

про аналоговый фильтр согласен. наличие/отсутствие определять по порогу
uriy
Существует алгоритм Герцеля. Насколько я понял он предназначен для нахождения энергии некоторого небольшого количества спектральных составляющих. Вроде пишут что гораздо проще FFT.
Spym
Цитата(GDI @ Mar 13 2008, 17:58) *
Поиск частоты - это фурье, чтобы найти одну частоту надо выполнить дискретное преобразование фурье, причем не быстрое, а полное.

Тогда хотелось бы ознакомиться с теорией фурье преобразований, если не существует упрощённых методов поиска частоты.
jorikdima
Цитата(Spym @ Mar 13 2008, 18:36) *
Тогда хотелось бы ознакомиться с теорией фурье преобразований, если не существует упрощённых методов поиска частоты.

В любой книге по ЦОС. Кроме того, после того как освоитесь, не помешает использовать пакет fdatool из matlab это сильно упростит расчет и визуализацию фильтра.
megachip
Может подойдет что нибудь вроде lm567(Tone Decoder).
Dopler
Как быстро необходимо дать ответ об обнаруженной частоте?
Можно применить синхронный детектор.
В памяти контроллера нужно хранить два сигнала - sin и cos требуемой частоты (две квадратуры) с такой же частотой дискретизации, какая будет у входного сигнала. Опорные сигналы должны содержать целое число периодов. Входной сигнал перемножается на опорные. Если разложить по формуле sin(a)*sin(cool.gif, то получится сумма синусов с частотами a-b и a+b, т.е. если частота a=b, то получается постоянная составляющая, плюс сигнал удвоенной частоты. Таким образом, если пропустить полученный сигнал (входной, умноженный на опорный) через ФНЧ, то сигнал двойной частоты отфильтруется, останется только постоянная составляющая. Ее амплитуда определяется как корень квадратный из суммы квадратов синусной и косинусной составляющей.

В данном случае можно сделать ФНЧ на 100 Гц (а можно и на 20, в зависимости от скорости, с которой надо давать ответ), корень квадратный можно попробовать вычислять таблицей, хотя если не нужны точные значения амплитуды сигнала искомой частоты, а нужно только детектировать ее наличие - то корень брать вообще не обязательно.
Spym
Цитата
Можно применить синхронный детектор.[quote]
Наложение частоты?
Хотелось бы увидеть реализацию на С. Особенно фильтр нижних частот 07.gif .

или использовать таки быстрое Фурье.
Определять значение преобразования только для 4920гц?

Кстати, какой должна быть минимальная частота дискретизации?
_Pasha
Цитата(Dopler @ Mar 14 2008, 00:19) *
Как быстро необходимо дать ответ об обнаруженной частоте?
Можно применить синхронный детектор.
************************************************************
Ее амплитуда определяется как корень квадратный из суммы квадратов синусной и косинусной составляющей.


Держу в руках старинную книжку
"Микропроцессорный комплект БИС серии К1815 для цировой обработки сигналов" М.:"Радио и связь",1992
Я ее не выбросил из-за одной цитаты (с.232)
Цитата
Yвых = max (|Y_Re|, 7/8 |Y_Re| + 1/2 |Y_Im|, 1/2|Y_Re|+7/8|Y_Im|, |Y_Im|)


Это касается приближенного вычисления амплитуды огибающей на выходе фильтра.
Заявленная погрешность 2.98%.
В формуле Y_Re, Y_Im - накопленные суммы в квадратурных каналах,
|x| - это я обозначил модуль значения (по-маткадовски)
Очень благородно! Пользовал лично, еще когда об аппаратном умножителе на аврках,пиках и мечтать не приходилось.

По-поводу собсно обнаружения, надо еще ловить динамику изменения этой огибающей, потому что в отсутствие сигнала у нас могут быть ложные срабатывания.
Ловить динамику можно скользящим средним с небольшим окном, дабы не добавлять задержки, плюс
отношение текущей огибающей к скользящему среднему.
DimaD
Spym, не влазьте в преобразование Фурье, там просто утоните.

Прислушайтесь к Megachip, Вам может подойти lm567. Сам использовал.
С помощью конденсаторов и резисторов настраиваетесь на необходимую частоту. Если эта частота совпадет с входной частотой, тогда на выходе будете иметь лог. 1 (или лог. 0, точно не помню).
Spym
Получается тут, что определить наличие частоты нужно не позже чем через 10мкс после её появления 07.gif . Видимо придётся сделать выбор в пользу аппаратного определения.
Цитата
Если эта частота совпадет с входной частотой, тогда на выходе будете иметь лог. 1 (или лог. 0, точно не помню).

"Совпадает"? с каким допуском? 1 или 0 означает наличие частоты?
Qwertty
Цитата(Spym @ Mar 14 2008, 11:49) *
Получается тут, что определить наличие частоты нужно не позже чем через 10мкс после её появления 07.gif . Видимо придётся сделать выбор в пользу аппаратного определения.

У Вас период искомой частоты больше 200 мкС. Определить ее наличие через 10 мкс не сможет ни программный, ни аппаратный вариант.
Spym
ага. 30 периодов это ~6мс. придётся вносить поправки, хотя это и нежелательно. Но фурье или синхронный детектор вряд ли будут быстрее...
DimaD
Spym, Вам нужно как минимум 1/5000Гц (если для определения частоты использовать период). Преобразование Фурье, как предлагали, Вы не сможете ну ни как закончить за 10мкс.

567 микросхема при наличии сигнала на входе изменяет свое состояние с 1 на 0 или наоборот.
GDI
Быстрое фурье может считать ТОЛЬКО ВСЕ гармоники, а если надо только одну гармонику сигнала, то обычное фурье будет менее затратно по ресурсам, по сути это будет похоже на то что вам написали про синхронный детектор, т.е. ДПФ это сумма произведений входных отсчетов сигнала на cos и sin искомой частоты.
Я не знаю что у вас за задача, но фурье ведь можно считать и не на каждом периоде, т.е. накопили отсчеты на длину вашего фурье, потом начали считать коэффициенты для одной нужной гармоники, а входные сигналы в это время отбрасываете, по окончании расчетов опять запустили накопление. фаза входного сигнала при этом не важна, потому что спектр - это корень квадратный от суммы квадратов коэффициентов фурье.
DimaD
Позвольте Spym узнать, какое такое важное решение нужно принять за 10мкс?
GDI
Цитата
Кстати, какой должна быть минимальная частота дискретизации?

вы и теорему Котельникова не знаете? 07.gif минимальная частота дискретизации = 2Fmax.
Кстати, еще и антиальясинговый фильтр перед АЦП не помешает, чтобы частоты выше Fmax на вход не пропускал.
Spym
я остановился на аппаратном фильтре. По этому слегка оффтопик:

Цитата
Позвольте Spym узнать, какое такое важное решение нужно принять за 10мкс?

Нужно определить момент появления частоты с возможно высокой точностью.

Цитата
567 микросхема при наличии сигнала на входе изменяет свое состояние с 1 на 0 или наоборот.

"The 567 is a general purpose tone decoder designed to provide a saturated transistor switch to ground when an input signal is present within the passband." © даташит. Как я понял из написанного, при совпадении частот на выходе появляется 0...?

И ещё, не совсем ясен вывод LOOP_FILTER. Емкость на нём определяет количество периодов, за которое будет определено совпадение частот? к OUTPUT_FILTER подключается нагрузочный резистор, но каковы его допустимые номиналы?
Spym
Ступил извините. С 567 всё ясно.
Кроме
Цитата
при совпадении частот на выходе появляется 0...?
rezident
Можно еще попробовать корреляционную функцию по дискретным отсчетам посчитать. Для определения есть/нет много точек не потребуется. В качестве второй функции для корреляции взять отсчеты синуса с требуемой частотой.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.