Детектирование частоты в заданном диапазоне

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Прорезались зубы
Аватара пользователя
Сообщения: 239
Зарегистрирован: Вт сен 09, 2008 17:35:48
Откуда: Уфа

Сообщение MegaRazoR »

Задана частота 2000 Гц. Известно, что отклонение от номинала составляет +(-)15Гц. Таким образом есть полоса от 1985 до 2015 Гц. Надо оприделить есть ли в спектре входного сигнала синус, принадлежащий этому диапазону.

П.С.
Я в начале сделал по алгоритму Гертцеля поиск 2000 Гц. Все нормально заработало. Теперь оказалось что задание не правильно изложили и придется переделывать.
У меня даже нет идеи как это можно организовать. ХЕЛП !
спасибо вам за ваше терпение и ваши подробные ответы ! :)
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 239
Зарегистрирован: Вт сен 09, 2008 17:35:48
Откуда: Уфа

Сообщение MegaRazoR »

Есть мысль использовать быстрое преобразование Фурье. Затем искать в заданном диапазоне частот частоту, мощность которой превышает заданное значение.
Вот только с теорией проблемы. Не понимаю как можно представить реальный (хоть и дискретный) сигнал конечным числом частот. Ведь на самом деле их бесконечное количество.
Еще не понятно какой должна быть выборка и в каком виде представляется результат.
спасибо вам за ваше терпение и ваши подробные ответы ! :)
Реклама
akl
Друг Кота
Сообщения: 4470
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Здравствуйте.
К сожалению, не знаком с алгоритмом "Гертцеля". Может быть так, при условии, что тактовая частота контроллера, к примеру, 10МГц:
-в модулях сравнения таймера создать временнЫе ворота, соответствующие периодам 2015...1985Гц (4962...5037 тиков )
-с началом сигнала запускать таймер; по окончании делать анализ
- если срабатывает прерывание 4962, но не срабатывает 5037 делается вывод о нахождении сигнала в заданной области.
Для повышения точности, такой анализ можно проводить по 10 периодам.
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

При дисретных отчетах методами ДПФ и БПФ можно получить предельную частоту fд/2. Дальше начинается перенос спектра. Поэтому если например частота дискретизации 5 кГц, то разложить в спектр можно частоты от 0 до 2500 Гц. Теорию Вам я выкладывал. Накладывайте окно на частоты, т.е. по простому считайте только отклики с номерами 1986...2016 это Ваш диапазон. Выбирайте критерий "наличия" и наверное все.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Все не так страшно. Попробуйте это.
Вложения
realfft.zip
(1.57 КБ) 234 скачивания
Контактная информация:
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 239
Зарегистрирован: Вт сен 09, 2008 17:35:48
Откуда: Уфа

Сообщение MegaRazoR »

akl писал(а):Здравствуйте.
К сожалению, не знаком с алгоритмом "Гертцеля". Может быть так, при условии, что тактовая частота контроллера, к примеру, 10МГц:
-в модулях сравнения таймера создать временнЫе ворота, соответствующие периодам 2015...1985Гц (4962...5037 тиков )
-с началом сигнала запускать таймер; по окончании делать анализ
- если срабатывает прерывание 4962, но не срабатывает 5037 делается вывод о нахождении сигнала в заданной области.
Для повышения точности, такой анализ можно проводить по 10 периодам.
Что то я ни чего не понял что вы написали.
Этот алгоритм мне надо реализовать на ПЛИСке.
Что за модуль сравнения таймера ?
спасибо вам за ваше терпение и ваши подробные ответы ! :)
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 239
Зарегистрирован: Вт сен 09, 2008 17:35:48
Откуда: Уфа

Сообщение MegaRazoR »

Meteor писал(а):При дисретных отчетах методами ДПФ и БПФ можно получить предельную частоту fд/2. Дальше начинается перенос спектра. Поэтому если например частота дискретизации 5 кГц, то разложить в спектр можно частоты от 0 до 2500 Гц. Теорию Вам я выкладывал. Накладывайте окно на частоты, т.е. по простому считайте только отклики с номерами 1986...2016 это Ваш диапазон. Выбирайте критерий "наличия" и наверное все.
Дело том что частота может быть напрмер 2000.0001 Гц и т.д.
поэтому не получится просто перебирать с шагом в 1.
спасибо вам за ваше терпение и ваши подробные ответы ! :)
Прорезались зубы
Аватара пользователя
Сообщения: 239
Зарегистрирован: Вт сен 09, 2008 17:35:48
Откуда: Уфа

Сообщение MegaRazoR »

pyzh_man писал(а):Все не так страшно. Попробуйте это.
Я так понимаю туда надо только еще подключить файл ap.h и все ?
И в результате в массиве а что получим ? Где хранятся обещаные значения амплитуды и частоты ? )
спасибо вам за ваше терпение и ваши подробные ответы ! :)
Прорезались зубы
Аватара пользователя
Сообщения: 239
Зарегистрирован: Вт сен 09, 2008 17:35:48
Откуда: Уфа

Сообщение MegaRazoR »

Если для выборки был выбран временной отрезок, который содержит не целое число периодов (например 5.317) сложного сигнала то это приведет к ошибке работы алгоритма ?
спасибо вам за ваше терпение и ваши подробные ответы ! :)
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

MegaRazoR писал(а):Если для выборки был выбран временной отрезок, который содержит не целое число периодов (например 5.317) сложного сигнала то это приведет к ошибке работы алгоритма ?
Могу сказать только одно, по собственному опыту, при попадании на интервале обработки более периода сигнала спектр сильно искажается.

А что о самой выборке известно? Частота отсчетов, число выборок в периоде обработки... Трудно советовать не зная полных данных. И откуда такие требования по точности 1мГц, сами придумали или преподаватель извращенец?
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

В массиве а и будут размещены: частота, амплитуда; частота, амплитуда...
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

библиотеку ар() можно не использовать. Достаточно прописать в используемом языке число пи (pi) и возведение в квадрат (sqr).
Контактная информация:
Прорезались зубы
Аватара пользователя
Сообщения: 239
Зарегистрирован: Вт сен 09, 2008 17:35:48
Откуда: Уфа

Сообщение MegaRazoR »

Meteor писал(а):
MegaRazoR писал(а):Если для выборки был выбран временной отрезок, который содержит не целое число периодов (например 5.317) сложного сигнала то это приведет к ошибке работы алгоритма ?
Могу сказать только одно, по собственному опыту, при попадании на интервале обработки более периода сигнала спектр сильно искажается.

А что о самой выборке известно? Частота отсчетов, число выборок в периоде обработки... Трудно советовать не зная полных данных. И откуда такие требования по точности 1мГц, сами придумали или преподаватель извращенец?
Выборку можно сделать какую угодно. Главно чтобы не дольше 1 секунды она набиралась.
Частота дискрет. 8000 Гц.
Анализируемый сигнал представляет из себя шум -30 dB. + Речь 300-3400 Гц -20 : -10 dB. + Иногда появляется и держится пару секунд тональный вызов 2000(+-15) Гц -15 : - 10 dB. Вот этот тональный вызов и надо выловить.
Прикол в том, что генератор тонального вызова может выдавать какую угодно частоту в указаном диапазоне так как он реализован на дискретных элементах и разброс их номиналов весьма велик (да еще и температура влияет).

А как вообще возможно выхватить выборку кратную периоду ? Ведь фаза и полный период сложного сигнала (а не его гармоник) не известны.
спасибо вам за ваше терпение и ваши подробные ответы ! :)
Прорезались зубы
Аватара пользователя
Сообщения: 239
Зарегистрирован: Вт сен 09, 2008 17:35:48
Откуда: Уфа

Сообщение MegaRazoR »

pyzh_man писал(а):библиотеку ар() можно не использовать. Достаточно прописать в используемом языке число пи (pi) и возведение в квадрат (sqr).
а что означает вот это ap::real_1d_array& a ?
спасибо вам за ваше терпение и ваши подробные ответы ! :)
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Определение массива вещественных переменных.
Контактная информация:
Прорезались зубы
Аватара пользователя
Сообщения: 239
Зарегистрирован: Вт сен 09, 2008 17:35:48
Откуда: Уфа

Сообщение MegaRazoR »

ясно. спасибо. но не знаю на сколько это применимо в данной ситуации. Посмотрим что скажет уважаемый Метеор. )
спасибо вам за ваше терпение и ваши подробные ответы ! :)
Модератор
Аватара пользователя
Сообщения: 11169
Зарегистрирован: Чт окт 27, 2005 18:50:07
Откуда: из мест не столь отдалённых

Сообщение Сэр Мурр »

Не понял цели.
Нужно определить наличие 2000 Гц в сигнале в реальном времени(тогда просто надо использовать полосовой фильтр), или в уже зарегистрированном сигнале (тогда БПФ подходит).
Ну и ещё- информация об амплитуде этой частоты- нужна или нет?
Прорезались зубы
Аватара пользователя
Сообщения: 239
Зарегистрирован: Вт сен 09, 2008 17:35:48
Откуда: Уфа

Сообщение MegaRazoR »

Надо в реальном времени. Но в люом случае в ПЛИС поступают отсчеты с АЦП. Полюбому надо набрать выборку.
спасибо вам за ваше терпение и ваши подробные ответы ! :)
Модератор
Аватара пользователя
Сообщения: 11169
Зарегистрирован: Чт окт 27, 2005 18:50:07
Откуда: из мест не столь отдалённых

Сообщение Сэр Мурр »

Моё мнение- надо комбинировать аналоговый и цифровой методы.
Полосовым фильтром выделять 2000 Гц, а цифровым- анализировать длительность сигнала, равномерность его амплитуды (для опознания, что это именно сигнал вызова), и реальную частоту (проходит ли она в допуск)
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Значит так. Раз отсчетов максимум 8000 и не только потому, применяйте или БПФ или ДПФ. Голову долями частоты больше не грейте. Что касается "ловли" периода, то это сложная задача и нужна для других целей. Я на начальном этапе пошел проще, выбирал из массива число отсчетов за ед времени, разложил и нехай с ней этой спектральной кривой. Так во всяком случае честнее и правильнее. То что у Вас частота поползет не переживайте, ведь задача не узнать собственно сколько ее частоты, а определить наличие в диапазоне.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»