Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выделение резких изменений амплитуды
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
idle1
Здравствуйте, форумчане!

Подскажите пожалуйста, как отфильтровать резкие изменения амплитуды.
Частота: 100кГц
Напряжение амплитуды, примерно: 2В
Сложность в том, что присутствует плавное изменение амплитуды.

В приложении форма сигнала и то чего я добиваюсь.
Дальнейшая обработка будет в МК, нужно поймать горбушку для вызова прерывания.

Побывал АМ демодулятор на диоде и ОУ, но в сигнале все равно присутствует пила и как отфильтровать, я уже всю голову сломал.
Хотя бы направьте в каком направлении копать!
Plain
Например, два чередуемых пиковых детектора и компаратор модуля разности их результатов.
idle1
Цитата(Plain @ Oct 29 2017, 05:11) *
Например, два чередуемых пиковых детектора и компаратор модуля разности их результатов.


А можно поподробнее?

Сейчас придумал использовать два детектора с разной чувствительностью.
Первый - с совсем малой чувствительностью - задает опорное напряжение
Второй - более чувствителен
Затем сравнить их компаратором. Это позволит исключить срабатывания при плавном изменении амплитуды.
Помогите схемой для развития темы


idle1
Цитата(Plain @ Oct 30 2017, 01:29) *

Спасибо, Plain!!!
Я честно не ожидал столь развернутого ответа! Завтра прогоню через симулятор и попробую собрать на макетке.
Мне же удалось достичь более скромного результата laughing.gif

Еще раз спасибо!!!!!!!

toweroff
Plain, не совсем понятна идея работы Q3 и Q5. Если не трудно, объясните, пожалуйста
HardEgor
Цитата(toweroff @ Oct 30 2017, 13:11) *
Plain, не совсем понятна идея работы Q3 и Q5. Если не трудно, объясните, пожалуйста

Если вы не заметили, на базы Q3 и Q5 приходят сигналы PD1 и PD2
Molotov
Здравствуйте. Я так понял, что нужно найти резкое падение огибающей сигнала. Предложу свой-микроконтроллерный способ. Сигнал детектируете - на конденсатор, для сглаживания - ну в общем это входит в обычный детектор.sm.gif Далее на ногу микроконтроллера - в АЦП. Программой обрабатываете амплитуду сэмплов. Берет несколько сэмплов(массив) и смотрите как изменяется амплитуда по времени. Если амплитуда упала за короткий промежуток времени, то генерируете прерывание(искусственное, программное). Если медленно амплитуда ушла - значит задаете новое опорное напряжение - это то же своя величина, а не AREF. Какой микроконтроллер, кстати?
idle1
Цитата(Molotov @ Oct 30 2017, 12:53) *
Здравствуйте. Я так понял, что нужно найти резкое падение огибающей сигнала. Предложу свой-микроконтроллерный способ. Сигнал детектируете - на конденсатор, для сглаживания - ну в общем это входит в обычный детектор.sm.gif Далее на ногу микроконтроллера - в АЦП. Программой обрабатываете амплитуду сэмплов. Берет несколько сэмплов(массив) и смотрите как изменяется амплитуда по времени. Если амплитуда упала за короткий промежуток времени, то генерируете прерывание(искусственное, программное). Если медленно амплитуда ушла - значит задаете новое опорное напряжение - это то же своя величина, а не AREF. Какой микроконтроллер, кстати?


Я пробовал так, но на МК потребляется слишком много ресурсов для этого, т.к. небольшой дрейф амплитуды присутствует всегда, и таких цепей 16шт. Контроллер ATmega168.
К тому же мне нужно очень точно определить время появление данного провала, а при программном прерывание этого сделать невозможно.
jcxz
Цитата(idle1 @ Oct 30 2017, 13:06) *
Я пробовал так, но на МК потребляется слишком много ресурсов для этого, т.к. небольшой дрейф амплитуды присутствует всегда, и таких цепей 16шт. Контроллер ATmega168.
К тому же мне нужно очень точно определить время появление данного провала, а при программном прерывание этого сделать невозможно.

Берёте нормальный контроллер, соответствующий задаче: хотя-бы ARM, лучше - DSP.
Далее - всё программно: демодуляция, убирание "плавного изменение амплитуды" (ФВЧ) и т.п.
Для такой несложной задачи наворачивать лес из кучи внешних элементов - это прошлый век.
Molotov
Ну микроконтроллеры ATMega не такие уж и слабые. Я даже читал, что в него и преобразование Фурье даже можно запихнуть.sm.gif
Цитата(jcxz @ Oct 30 2017, 17:29) *
Берёте нормальный контроллер, соответствующий задаче: хотя-бы ARM, лучше - DSP.
Далее - всё программно: демодуляция, убирание "плавного изменение амплитуды" (ФВЧ) и т.п.
Для такой несложной задачи наворачивать лес из кучи внешних элементов - это прошлый век.

- Ему нужна аналоговая часть, я понял о чем он говорит. Вероятно, АЦП там работает медленно и ему нужно побыстрее. Там АЦП работает 10-20 с копейкам тактов - медленно - понимаю.
А зачем это все вообще нужно?sm.gif
ARM и DSP - это конечно хорошо, но в радиолюбительских условиях, возможно, ему трудно будет спаять много тонких и маленьких выводов, да и плата тоже может развестись с трудом - имею ввиду само изготовление.
idle1
Цитата(Molotov @ Oct 30 2017, 16:54) *
Ну микроконтроллеры ATMega не такие уж и слабые. Я даже читал, что в него и преобразование Фурье даже можно запихнуть.sm.gif

- Ему нужна аналоговая часть, я понял о чем он говорит. Вероятно, АЦП там работает медленно и ему нужно побыстрее. Там АЦП работает 10-20 с копейкам тактов - медленно - понимаю.
А зачем это все вообще нужно?sm.gif
ARM и DSP - это конечно хорошо, но в радиолюбительских условиях, возможно, ему трудно будет спаять много тонких и маленьких выводов, да и плата тоже может развестись с трудом - имею ввиду само изготовление.


ARM и DSP конечно хорошо, но использовать 1-5% потенциала процессора только ради АЦП не вижу смысла. Хотя сам придерживаюсь мнения, что если можно сделать обработку на МК, то её нужно сделать на МК!
jcxz
Цитата(idle1 @ Oct 30 2017, 17:45) *
ARM и DSP конечно хорошо, но использовать 1-5% потенциала процессора только ради АЦП не вижу смысла. Хотя сам придерживаюсь мнения, что если можно сделать обработку на МК, то её нужно сделать на МК!

Вообще-то разговор был не только и не столько об АЦП, как о решении всей вашей задачи программно.
Лучше уж недоиспользовать сколько-то процентов МК, чем городить AVR+куча внешней обвязки, а потом ещё и алгоритм ухищряться втиснуть в AVR.
Plain
Цитата(toweroff @ Oct 30 2017, 09:11) *
не совсем понятна идея работы Q3 и Q5

Буферы (усилители тока). Токи их эмиттеров 40 мкА заданы R1 — стало быть, токи баз порядка 200 нА, и можно посчитать, не превышает ли дрейф напряжений на удерживающих конденсаторах выбранной ёмкости рабочего диапазона схемы.

Цитата(jcxz @ Oct 30 2017, 14:29) *
Берёте нормальный контроллер, соответствующий задаче: хотя-бы ARM, лучше - DSP.

Данная задача математически не решается на фиксированной частоте дискретизации — данную же схему немного переделать, и она будет работать и на 100 МГц, и на 1 ГГц, а у ЦПС пупок развяжется уже на 1 МГц, если попытаться приблизиться хоть к какой-нибудь достоверности, ещё и подразумевая сугубо тепличный сигнал.
Tarbal
Цитата(Plain @ Oct 30 2017, 22:57) *
Данная задача математически не решается на фиксированной частоте дискретизации — данную же схему немного переделать, и она будет работать и на 100 МГц, и на 1 ГГц, а у ЦПС пупок развяжется уже на 1 МГц, если попытаться приблизиться хоть к какой-нибудь достоверности, ещё и подразумевая сугубо тепличный сигнал.


Все задачи решаются программно. Ну если сил у процессора хватит, как вы верно заметили. Однако задача стоит не на 1 МГц и не 1 Ггц и решается при помощи контроллера. Я на 4 мегагерцовом (1 мегагерц частота процессора) PIC16C71 делал приемник FSK modem 1200/2200. Аналоговое решение не спорю эффективнее и легче применимо для более высоких частот, но для 100 килогерц ее на АРМе и тем более на ДСП легко можно решить.
Molotov
Куда такие частоты лупите - уж после детектора явно будет частота поменьше. Понятно? Т.е. после детектора частота будет поменьше, как я уже сказал и АЦП уже будет реально ее прихватить.sm.gif
ViKo
Plain - молодец! И все-то у него получается.
А если синхронный детектор сделать?
Alexashka
Обнаруживает спад в одной полуволне.
Нажмите для просмотра прикрепленного файла
ViKo
От делителя R16 R17 зависит.
iliusmaster
Решение с пиковыми детекторами изящное и работоспособно при правильном выборе элементов в широком диапазоне частот и температур.
Совсем неясна любовь к использованию МК там, где 3 корпуса мелкосхем и сборка транзисторов решают задачу быстро, "дешево" и эффективно. Вот оно Использование МК ради использования МК!
jcxz
Цитата(iliusmaster @ Oct 31 2017, 11:29) *
Совсем неясна любовь к использованию МК там, где 3 корпуса мелкосхем и сборка транзисторов решают задачу быстро, "дешево" и эффективно. Вот оно Использование МК ради использования МК!

Что именно неясно? Вам неясно почему решение вообще без каких либо мелкосхем и транзисторов лучше, чем их наличие? Я думал - это должно быть очевидно.
Неясно почему 1 чип (МК), лучше чем огород из 5 (МК+3логики+сборка)?
HardEgor
Цитата(jcxz @ Oct 31 2017, 17:04) *
Неясно почему 1 чип (МК), лучше чем огород из 5 (МК+3логики+сборка)?

Везде есть свои плюсы и минусы, и каждый человек к ним имеет свой собственный набор весовых коэффициентов sm.gif

Возможно вам проще реализовать программно, но вы алгоритм еще не выложили, а Plain по-быстрому собрал и выложил готовую схему. Кому-то проще схему сделать, потому что время жмет, а программист не очень высокой квалификации и долго будет реализовывать, а кому-то надо 100к шт. выпустить - ему выгоднее привлечь стороннего.
С другой стороны, всё-равно надо плату/комплектацию заказывать-монтировать-проверять и что 1 корпус, что 10 - не будет играть большой роли(тем более у ТС на плате уже не 1 корпус). Вот когда будет приличная серия - тогда да, можно и переделать на программную реализацию. И т.д. и т.п.
iliusmaster
Цитата(jcxz @ Oct 31 2017, 13:04) *
Что именно неясно? Вам неясно почему решение вообще без каких либо мелкосхем и транзисторов лучше, чем их наличие? Я думал - это должно быть очевидно.
Неясно почему 1 чип (МК), лучше чем огород из 5 (МК+3логики+сборка)?

Все просто,
1 - цена. Эта "рассыпуха" стоит сущие копейки.
2 - надежность. Понятие зависание программы для "рассыпухи" отсутствует.
3 - не нужно монструозного МК, который тупо будет гонять данные с АЦП.



jcxz
Цитата(HardEgor @ Oct 31 2017, 16:48) *
Возможно вам проще реализовать программно, но вы алгоритм еще не выложили, а Plain по-быстрому собрал и выложил готовую схему.

Готовая - это ещё не говорит о том, что она будет работать так, как надо ТС. И даже не факт, что если сейчас, испытанная на каком-то сигнале эта схема будет работать достаточно удовлетворительно, то завтра, когда что-то немного изменится, оно так же будет работать.
А один из главных плюсов программной реализации - гибкость. Алгоритм в будущем нетрудно переделать, доработать под новые исходные данные. А вот схему...
Да и программная реализация там должна быть несложная.
И раздел здесь - "для начинающих", а это значит для людей развивающихся, а развиваться можно только пытаясь разобраться в чём-то новом, а не тупо повторяя чужое готовое решение.
Tanya
Цитата(jcxz @ Nov 1 2017, 12:05) *
А один из главных плюсов программной реализации - гибкость. Алгоритм в будущем нетрудно переделать, доработать под новые исходные данные. А вот схему...
Да и программная реализация там должна быть несложная.
И раздел здесь - "для начинающих", а это значит для людей развивающихся, а развиваться можно только пытаясь разобраться в чём-то новом, а не тупо повторяя чужое готовое решение.

Хороший алгоритм нахождения максимума (пусть даже у нас чистая синусоида) по десятку отсчетов на период можете предложить? Чтобы еще за период справлялся...
jcxz
Цитата(Tanya @ Nov 1 2017, 14:58) *
Хороший алгоритм нахождения максимума (пусть даже у нас чистая синусоида) по десятку отсчетов на период можете предложить? Чтобы еще за период справлялся...

Сразу - нет. Надо сперва в Матлабе пробовать.
Но я бы сначала попробовал выпрямить сигнал и прогнать его через простой ФНЧ с децимацией (может даже предварительной, чтобы уменьшить загрузку CPU).
Как видно - у автора длительность искомых событий примерно равна 4 периодам, так что можно сделать децимацию как минимум в 4 раза.
DSP уровня TI-шного C55xx с такой задачей справится без вопросов. А на Cortex-M надо будет писать очень оптимально и наверное на асме (обработчик сэмплов).
idle1
Цитата(jcxz @ Nov 1 2017, 15:22) *
Сразу - нет. Надо сперва в Матлабе пробовать.
Но я бы сначала попробовал выпрямить сигнал и прогнать его через простой ФНЧ с децимацией (может даже предварительной, чтобы уменьшить загрузку CPU).
Как видно - у автора длительность искомых событий примерно равна 4 периодам, так что можно сделать децимацию как минимум в 4 раза.
DSP уровня TI-шного C55xx с такой задачей справится без вопросов. А на Cortex-M надо будет писать очень оптимально и наверное на асме (обработчик сэмплов).


Я тоже размышляю на тему перехода в МК, уж больно меня пугает такое количество аналоговой рассыпухи.
Сейчас пробую реализацию на стареньком ARM7TDMI. Прерывания с ADC для уменьшения количества циклов выношу в RAM. Частота известна и стабильна, нужно только при инициализации поймать верх горбушки, а далее измерять с заданной частотой и вносить корректировки.
Предложенная Plain’ом схема мне очень нравится, если с МК прогорит, то вернусь к ней.
* Жалко всего две руки и одна голова, а так бы и схему собирал и кодил одновременно sm.gif
Andreas1
Цитата(jcxz @ Nov 1 2017, 15:22) *
DSP уровня TI-шного C55xx с такой задачей справится без вопросов. А на Cortex-M надо будет писать очень оптимально и наверное на асме (обработчик сэмплов).

Афтору надо 16 каналов завести в проц - это только дсп и то не всякий справится , а с ним сложностей в изучении вагон. Если был бы один-два канала да, намного проще копеечным STM32F030 обойтись, который дешевле выбранной атмеги, имеет шустрое ацп и достаточно ресурсов для данной задачи без всяких асмов.
ViKo
Компаратором (внешним или внутренним) находить переходы сигнала через 0. По срабатыванию запускать таймер или АЦП. Таймером или временем выборки подобрать, чтобы АЦП срабатывал на вершинах синусоид. По некоему количеству выборок находить скользящее среднее. Количество выборок должно быть таким, чтобы отслеживать плавные изменения сигнала. По среднему вычислять порог, насколько ниже ловить. Сравнивая выборку с порогом, принимать решение. Гуляем!
jcxz
Цитата(idle1 @ Nov 2 2017, 04:42) *
Сейчас пробую реализацию на стареньком ARM7TDMI. Прерывания с ADC для уменьшения количества циклов выношу в RAM. Частота известна и стабильна, нужно только при инициализации поймать верх горбушки, а далее измерять с заданной частотой и вносить корректировки.

Если хотите, чтобы получилось, то имхо - процессор надо всё-таки помощнее - хотя бы Cortex-M с частотой явно больше 100МГц.
И писать надо оптимально. А это уж явно не вытягивать сэмплы программно из АЦП - тут у вас всё быстродействие CPU только на это и уйдёт.
Явно нужно DMA+ADC и подумать над оптимальным расположением кода/данных в памяти.

Цитата(Andreas1 @ Nov 2 2017, 08:58) *
Афтору надо 16 каналов завести в проц - это только дсп и то не всякий справится , а с ним сложностей в изучении вагон. Если был бы один-два канала да, намного проще копеечным STM32F030 обойтись, который дешевле выбранной атмеги, имеет шустрое ацп и достаточно ресурсов для данной задачи без всяких асмов.

А где автор говорит про 16 каналов? Вроде в исходном задании только 1 канал....

Цитата(ViKo @ Nov 2 2017, 09:16) *
Компаратором (внешним или внутренним) находить переходы сигнала через 0. По срабатыванию запускать таймер или АЦП. Таймером или временем выборки подобрать, чтобы АЦП срабатывал на вершинах синусоид.

Ну да - и по малейшему шуму, вся работа идёт лесом.

PS: Да - и начинать надо не с АЦП и программирования, а с создания модели в Матлабе. Чтобы хоть примерно оценить требуемые для решения задачи ресурсы.
Tanya
Цитата(jcxz @ Nov 2 2017, 10:44) *
Ну да - и по малейшему шуму, вся работа идёт лесом.

Вот именно это я и подразумевала, когда писала про обработку. Тут как минимум по трем - пяти точкам в районе максимума надо проводить аппроксимацию. Квадратичную. Тут, конечно, отсутствие присутствия сдвига частоты и фазы приятно.
ViKo
Цитата(Tanya @ Nov 2 2017, 11:14) *
Вот именно это я и подразумевала, когда писала про обработку. Тут как минимум по трем - пяти точкам в районе максимума надо проводить аппроксимацию. Квадратичную. Тут, конечно, отсутствие присутствия сдвига частоты и фазы приятно.

Можно и пачку преобразований сделать, на максимальной частоте дискретизации. Хотя у синусоиды вершина не резко меняется, шаг влево-вправо за попытку к бегству не считается.
Зависит от точности задаваемого порога. А он, мне думается, ±лапоть.
Tanya
Цитата(ViKo @ Nov 2 2017, 11:33) *
Хотя у синусоиды вершина не резко меняется, шаг влево-вправо за попытку к бегству не считается.

Помеха может резко поменять. Кроме того, ТС не сказал, как меняется (быстро, то, что он хочет отловить) сигнал. Может ли он резко изломать синусоиду как раз вблизи ее максимума...
jcxz
Цитата(Tanya @ Nov 2 2017, 11:53) *
Помеха может резко поменять.

Вот именно. А ещё ТС не сказал об уровне шумов в его канале. От этого очень сильно будет зависеть решение. На картинках сигнал довольно чистый.
idle1
Цитата(jcxz @ Nov 2 2017, 12:02) *
Вот именно. А ещё ТС не сказал об уровне шумов в его канале. От этого очень сильно будет зависеть решение. На картинках сигнал довольно чистый.

Шумов в канале нет, но есть плавное изменение амплитуды (его отсеиваю по средней). Задача поймать именно резкий провал. Сейчас я делаю аппроксимацию по 5ти последним пикам синусоиды.
Плавное изменение - это изменение на +/-0.1В/сек.
Резкое - от 0.4В за период.
Частотного и фазового сдвига нет.
ViKo
Еще бы знать нормальную амплитуду сигнала. rolleyes.gif И частоту. А, в стартовом сообщении дано. Амплитуда - это пиковое значение, в одну сторону, не размах?
Судя по картинкам, как раз размах. Т.е. сигнал падает на ~40%. От и говорю, ±лапоть.
Andreas1
Цитата(jcxz @ Nov 2 2017, 10:44) *
А где автор говорит про 16 каналов? Вроде в исходном задании только 1 канал....

В 9 сообщении.
Компаратор по переходу через ноль, запуск ацп с задержкой в почти четверть периода и обработка. Канала 2..3 можно обработать для нешумного сигнала и без матлабов и дсп дешевым армом на 48Мгц.
Можно еще и с компаратора не сразу на старт таймера, а через ФАПЧ цифровой , если фронты дрожат.
А 16каналов - это уже другого уровня проц нужен или несколько попроще.
idle1
Цитата(Andreas1 @ Nov 2 2017, 12:49) *
В 9 сообщении.
Компаратор по переходу через ноль, запуск ацп с задержкой в почти четверть периода и обработка. Канала 2..3 можно обработать для нешумного сигнала и без матлабов и дсп дешевым армом на 48Мгц.
Можно еще и с компаратора не сразу на старт таймера, а через ФАПЧ цифровой , если фронты дрожат.
А 16каналов - это уже другого уровня проц нужен или несколько попроще.

Каналов реально 16! Они синхронны по частоте и сдвигу, но с разными амплитудами. При ТС я рассматривал только один и хотел делать по аналогии. С компаратором будет сложность, т.к. дрейф амплитуды по ним различен.
jcxz
Цитата(idle1 @ Nov 2 2017, 13:20) *
Каналов реально 16!

Да уж... вторую страницу обсуждаем как дом строить, дошли уже до сорта травы на клумбе возле... и только тут узнаём, что речь о строительстве на Марсе идёт! smile3009.gif
16 каналов ни на каком Cortex-M не сделаете. Только на более менее нормальном DSP или на очень серьёзном ARM-е. Да и то постараться придётся.
Tarbal
Цитата(iliusmaster @ Oct 31 2017, 12:29) *
Решение с пиковыми детекторами изящное и работоспособно при правильном выборе элементов в широком диапазоне частот и температур.
Совсем неясна любовь к использованию МК там, где 3 корпуса мелкосхем и сборка транзисторов решают задачу быстро, "дешево" и эффективно. Вот оно Использование МК ради использования МК!


Все просто. Если надо модификацию, то не надо новую схему собирать. Переписал программу и вперед.

Цитата(Tanya @ Nov 1 2017, 15:58) *
Хороший алгоритм нахождения максимума (пусть даже у нас чистая синусоида) по десятку отсчетов на период можете предложить? Чтобы еще за период справлялся...


Да запросто. Навскидку: Сравнивать сигнал с его автокорреляционной функцией, которая считай тот же синус, но только чистый от шума. Отнормировать на приблизительное равенство амплитуд (чем точнее -- тем чувствительнее будет) и считать дисперсию разницы. Как подскочила -- считай неоднородность. Интервал подсчета дисперсии период -- даже среднего не надо будет считать (хотя можно и без среднего посчитать дисперсию). Время реакции правда будет задержано на период, но может это допустимо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.