реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Помогите со схемно-программным решением для измерения периода, при ограниченных ресурсах
Diusha
сообщение Dec 27 2010, 03:24
Сообщение #1


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



На вход девайса может поступать периодический сигнал. А может не поступать, а вместо него – лабуда. Будем считать, что если сигнал есть, то он по крайней мере в разы больше шума, но когда cигнала нет, «лабуда» м.б. большой (как сигнал, если бы он был). Задача – определить, что появился сигнал и измерить его период. Диапазон 1…10 мс, точность нужна порядка 2% (все числа пока ориентировочные).
Форма сигнала может быть любой, вовсе не обязательно, что только с двумя экстремумами по времени за период.
Вычислительная мощность ограничена, ибо AVR => 8 бит, невысокая тактовая. Плюс загружен еще другой задачей.
Обрабатывать непрерывный поток с АЦП, боюсь, некогда, поэтому пытаюсь его минимизировать. Попытался сделать так:

сигнал (с правильной пост. сост.) завожу на аналоговый компаратор и АЦП. Компаратор выдает прерывание по каждой смене состояния (т.е. в обе стороны). По прерыванию запускаю АЦП, и в идеале должен получить отсчеты в моменты минимумов и максимумов.

Реально, конечно, в моменты горбов получаю кучу отсчетов, часть из которых отсекаю по признаку «слишком рано после предыдущего».

Вопросы:

1. Удачно ли такое схемное-программное решение для получения отсчетов?

2. (в случае положительного ответа на 1.) Каким путем посоветуете поступить с полученными отсчетами?
На заметке а) быстрое преобразование Фурье, б) автокорреляционная функция. Есть еще и в) мысля в сторону алгоритмов поиска периода подстроки в строке.

3. Или вообще надо всё совсем не так?
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Dec 28 2010, 00:41
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



частота полезного периодического сигнала в каком диапазоне?
может стоит сначала прогнать сигнал через полосовой фильтр, а потом производить дальнейшую обработку?
Go to the top of the page
 
+Quote Post
KARLSON
сообщение Dec 28 2010, 02:22
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 5-05-06
Из: Нижегородская обл.
Пользователь №: 16 819



Цитата(Diusha @ Dec 27 2010, 09:24) *
2.Каким путем посоветуете поступить с полученными отсчетами?


Так отсчёты не нужны для основной рабготы? А что если Вам считать период таймером (наверника он есть в АВР), запускающийся от прерывания компаратора?


--------------------
Кризис - это не отсутствие денег, а отсутствие идей! Учитесь и никаких кризисов не будет.
Go to the top of the page
 
+Quote Post
Diusha
сообщение Dec 28 2010, 10:27
Сообщение #4


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(alexeyv @ Dec 28 2010, 06:41) *
частота полезного периодического сигнала в каком диапазоне?
может стоит сначала прогнать сигнал через полосовой фильтр, а потом производить дальнейшую обработку?

Я же написал: период полезного сигнала 1...10 мс (ориентировочно). Наверно нечетко сформулировал
Фильтры ставить не хочется, хочетс с самым минимальным минимумом компонентов. Ну если уж окажется никак, то тут уж шо уж тут уж (с).
Тем более, что шумы в основном примерно в том же диапазоне

Цитата(KARLSON @ Dec 28 2010, 08:22) *
Так отсчёты не нужны для основной рабготы? А что если Вам считать период таймером (наверника он есть в АВР), запускающийся от прерывания компаратора?

Само собой, таймером определяю моменты срабатывания компаратора (Input Capture mode).
Я привел пример формы сигнала, для которого в идеале за период (его) я должен получить 6 отсчетов. Но сигнал может быть и "хуже" (больше отсчетов), а может быть синусоида (2 отсчета), наперед это неизвестно. Поэтому чтобы из кучи отсчетов выудить период, нужен какой-то алгоритм. Это раз. А два - это то, что реально на период я получаю не 6 (как в примере), а десятки отсчетов, из которых надо как-то отсечь лишние (чтобы меньше обрабатывать), но "не выплеснуть и младенца".

P.S. Под отсчетом я здесь подразумеваю пару: [момент времени (по сигналу с компаратора); величина в этот момент (с АЦП)]

Сообщение отредактировал Diusha - Dec 28 2010, 10:28
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Dec 28 2010, 11:14
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



Цитата
если сигнал есть, то он по крайней мере в разы больше шума, но когда cигнала нет, «лабуда» м.б. большой (как сигнал, если бы он был). Задача – определить, что появился сигнал и измерить его период.

Получается, что только компаратором не отделить интервалы сигнала от остального времени шума, т.к. компаратор замучает Вас прерываниями на шуме.
Тупо и напрямую я бы стал решать так:
1. Набирал бы некий буфер, куда помещались бы, как минимум, два периода минимально возможной частоты.
2. Прогонял БПФ с целью выявить максимумы частотного спектра
3. По полученным частотным компонентам брал бы ширину окна величиной с период и методом наименьших квадратов сравнивал бы "кадры" с шагом в ширину окна.
4. За повторяемый сигнал выбрал бы тот период, у которого наименьшее расхождение по погрешности сравнения кадров.


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
Designer56
сообщение Dec 28 2010, 13:10
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 932
Регистрация: 13-10-06
Из: Уфа
Пользователь №: 21 290



а просто отфильтровать сигнал на входе до 1 кГц? Проще не придумаешь. Религия не позволяет?


--------------------
"...Дьяволу ведомо многое не потому, что он- Дьявол, а потому, что он стар..."
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Dec 28 2010, 14:47
Сообщение #7


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(Diusha @ Dec 27 2010, 11:24) *
По прерыванию запускаю АЦП, и в идеале должен получить отсчеты в моменты минимумов и максимумов.

Вы точно понимаете как работает эта схема?!


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Diusha
сообщение Dec 29 2010, 03:05
Сообщение #8


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(Евгений Николаев @ Dec 28 2010, 17:14) *
3. По полученным частотным компонентам брал бы ширину окна величиной с период и методом наименьших квадратов сравнивал бы "кадры" с шагом в ширину окна.
4. За повторяемый сигнал выбрал бы тот период, у которого наименьшее расхождение по погрешности сравнения кадров.

Т.е., для каждого полученного частотного компонента брать свое окно и далее по тексту? Тогда точно времени не хватит sad.gif
И, насколько я понимаю, для такого алгоритма нужно отсчеты получать непрерывным потоком (компаратор в пролете)?

Цитата(Designer56 @ Dec 28 2010, 19:10) *
а просто отфильтровать сигнал на входе до 1 кГц? Проще не придумаешь. Религия не позволяет?

Религия мне, как атеисту, позволяет все. Но мысль непонятна. Что даст фильтрование? Я не силен в данной теме, поэтому посните, пожалуйста.
Может Вы имеете в виду наделать фильтров (программно) от 100 до 1000 Гц с шагом 2%? Напоминаю: AVR sad.gif

Цитата(GetSmart @ Dec 28 2010, 20:47) *
Вы точно понимаете как работает эта схема?!

Да.
Если этот вопрос трактовать несколько иначе ("Как работает эта схема?"), ответ будет более развернутый sm.gif

Напряжение на "-" компаратора всегда будет отставать от "+" (вх. сигнала). (Речь о мгновенных напряжениях) Допустим, входное напряжение растет. На "-" оно будет чуть ниже.
Вх. н. перестало расти, пошло на убыль. Теперь на "-" напр. больше, чем на "+" - получаю прерывание. Реально (по понятным причинам) получаю не 1 прер., а много
Go to the top of the page
 
+Quote Post
alex_os
сообщение Dec 29 2010, 03:36
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030



Цитата(Diusha @ Dec 29 2010, 09:05) *
Если этот вопрос трактовать несколько иначе ("Как работает эта схема?"), ответ будет более развернутый sm.gif

Напряжение на "-" компаратора всегда будет отставать от "+" (вх. сигнала). (Речь о мгновенных напряжениях) Допустим, входное напряжение растет. На "-" оно будет чуть ниже.
Вх. н. перестало расти, пошло на убыль. Теперь на "-" напр. больше, чем на "+" - получаю прерывание. Реально (по понятным причинам) получаю не 1 прер., а много


Крайне сомнительная схема, работать будет только на идеальной синусоиде (да Вы сами в этом убедились).

Если время измерения не критично можно попробовать сделать что-то вроде ФАПЧ. Достаточно будет 1-4 отсчета на
измеряемый период. В плане выч. затрат это будет самое экономное решение, в плане программирования довольно геморное, т.к. частота может быть в довольно широких пределах.
Да, предполагается что момент взятие отсчета АЦП можно задавать программно.



--------------------
ну не художники мы...
Go to the top of the page
 
+Quote Post
alexkok
сообщение Dec 29 2010, 04:39
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 609
Регистрация: 3-03-07
Из: San Jose
Пользователь №: 25 837



Цитата(Diusha @ Dec 28 2010, 17:27) *
Я же написал: период полезного сигнала 1...10 мс (ориентировочно). Наверно нечетко сформулировал
Фильтры ставить не хочется, хочетс с самым минимальным минимумом компонентов.

Но придется, хотя бы одно звено.
Цитата
Само собой, таймером определяю моменты срабатывания компаратора (Input Capture mode).
Я привел пример формы сигнала, для которого в идеале за период (его) я должен получить 6 отсчетов. Но сигнал может быть и "хуже" (больше отсчетов), а может быть синусоида (2 отсчета), наперед это неизвестно. Поэтому чтобы из кучи отсчетов выудить период, нужен какой-то алгоритм. Это раз. А два - это то, что реально на период я получаю не 6 (как в примере), а десятки отсчетов, из которых надо как-то отсечь лишние (чтобы меньше обрабатывать), но "не выплеснуть и младенца".

P.S. Под отсчетом я здесь подразумеваю пару: [момент времени (по сигналу с компаратора); величина в этот момент (с АЦП)]

Предлагаю:
1. Изменить схему, добавив гистерезис
Прикрепленное изображение

2. Алгоритм примерно такой:
- считаете средний, максимальный и минимальный полупериоды/периоды на скользящем окне;
- считаете некое подобие "дисперсии", попроще;
- если "дисперсия" меньше порога, значит есть сигнал.


--------------------
Go to the top of the page
 
+Quote Post
Diusha
сообщение Dec 30 2010, 04:12
Сообщение #11


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(alex_os @ Dec 29 2010, 09:36) *
Крайне сомнительная схема, работать будет только на идеальной синусоиде (да Вы сами в этом убедились).

Синусоида ничуть не лучше нарисованного примера сигнала, у нее такие же плоские верхушки. По идее схема должна хорошо работать с пилой (не проверял, т.к. такая форма маловероятна).

Цитата(alex_os @ Dec 29 2010, 09:36) *
Если время измерения не критично можно попробовать сделать что-то вроде ФАПЧ.

К сожалению, очень критично. 0.5 сек – уже точно не годится. Хотелось бы 0.1, ну 0.2 макс. Получается на нижней частоте 10 (20) периодов. Вероятно придется чем-то пожертвовать.

Цитата(alexkok @ Dec 29 2010, 10:39) *
1. Изменить схему, добавив гистерезис

Вот это идея мне понравилась! Спасибо!
Только у АВРок, к сожалению, у компаратора нет выхода на улицу. Придется на внешнем операционнике сделать. Программно выводить выход компаратора по прерыванию – возможны ошибки. Хотя, кто его знает…

Цитата(alexkok @ Dec 29 2010, 10:39) *
2. Алгоритм примерно такой:
- считаете средний, максимальный и минимальный полупериоды/периоды на скользящем окне;

Дело «за малым»: определить период. В это-то все и упирается. Выделив период, возможно будет достаточно тупо 10 периодов разделить на 10.

Можно, наверно, период искать банально как интервал от максимума до максимума, а максимумами считать те, которые отличаются друг от друга не более, чем на …% от амплитуды. Ну вот мы и нашли период; если за N периодов разброс меньше, чем, значит все в абажуре. Но может быть такая форма сисигнала, которая все испортит.

Можно, добавив еще несколько IF–THEN, предусмотреть и 2 и 3 максимума (≈одинаковых) на период. Но наверно есть покрасивше алгоритм
Go to the top of the page
 
+Quote Post
alexkok
сообщение Dec 30 2010, 05:12
Сообщение #12


Знающий
****

Группа: Участник
Сообщений: 609
Регистрация: 3-03-07
Из: San Jose
Пользователь №: 25 837



Цитата(Diusha @ Dec 30 2010, 11:12) *
Вот это идея мне понравилась! Спасибо!
Только у АВРок, к сожалению, у компаратора нет выхода на улицу. Придется на внешнем операционнике сделать. Программно выводить выход компаратора по прерыванию – возможны ошибки. Хотя, кто его знает…

У меня ошибка в схеме, цепь ПОС/гистерезиса нужно подключить к средней точке, а не к сигнальной цепи.
Нулём сигнала, соответственно, должна быть средняя точка.
Цитата
Дело «за малым»: определить период. В это-то все и упирается. Выделив период, возможно будет достаточно тупо 10 периодов разделить на 10.

После корректировки схемы Вы будете иметь точки пересечения нуля и никаких проблем с вычислением периода быть не должно.


--------------------
Go to the top of the page
 
+Quote Post
Diusha
сообщение Dec 30 2010, 11:22
Сообщение #13


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(alexkok @ Dec 30 2010, 11:12) *
У меня ошибка в схеме, цепь ПОС/гистерезиса нужно подключить к средней точке, а не к сигнальной цепи.
Нулём сигнала, соответственно, должна быть средняя точка.

Ну вот, до этого было понятно, а теперь стало непонятно sad.gif wink.gif
Разве приведенная Вами схема не будет выделять пики? По-моему, там все логично

Цитата(alexkok @ Dec 30 2010, 11:12) *
После корректировки схемы Вы будете иметь точки пересечения нуля и никаких проблем с вычислением периода быть не должно.

Я-то как раз хотел сделать схему, выделяющую пики, а не пересечения нуля, чтобы эти пики измерить и получить доп. информацию. Измерение нулей много информации не добавит wink.gif
Сигнал может пересекать ноль больше 2-х раз за период (также как и иметь больше 2-х пиков (верхний и ниж.) за период). Так что, с нулями я окажусь в той же ситуации, только без величины сигнала
Go to the top of the page
 
+Quote Post
alexkok
сообщение Dec 30 2010, 15:18
Сообщение #14


Знающий
****

Группа: Участник
Сообщений: 609
Регистрация: 3-03-07
Из: San Jose
Пользователь №: 25 837



Цитата(Diusha @ Dec 30 2010, 17:22) *
Ну вот, до этого было понятно, а теперь стало непонятно sad.gif wink.gif
Я-то как раз хотел сделать схему, выделяющую пики, а не пересечения нуля, чтобы эти пики измерить и получить доп. информацию. Измерение нулей много информации не добавит wink.gif
Сигнал может пересекать ноль больше 2-х раз за период (также как и иметь больше 2-х пиков (верхний и ниж.) за период). Так что, с нулями я окажусь в той же ситуации, только без величины сигнала

Этот пример возможен при амплитуде помехи или шума близкой по уровню к амплитуде сигнала.
Но Вы писали, что
Цитата
Будем считать, что если сигнал есть, то он по крайней мере в разы больше шума

При таких условиях и наличии гистерезиса шумы будут подавляться и лишних переходов через ноль не будет.
Если же Вы хотите обеспечить выделение сигнала и при малых отношениях с/ш, то всё резко усложняется.


--------------------
Go to the top of the page
 
+Quote Post
Diusha
сообщение Dec 31 2010, 05:14
Сообщение #15


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(alexkok @ Dec 30 2010, 21:18) *
Этот пример возможен при амплитуде помехи или шума близкой по уровню к амплитуде сигнала.

Нет. Это нарисован сигнал без помехи. Его форма м.б. любой (в разумных пределах) и заранее не известна, в т.ч. и такой.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 02:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01517 секунд с 7
ELECTRONIX ©2004-2016