Diusha 0 27 декабря, 2010 Опубликовано 27 декабря, 2010 · Жалоба На вход девайса может поступать периодический сигнал. А может не поступать, а вместо него – лабуда. Будем считать, что если сигнал есть, то он по крайней мере в разы больше шума, но когда cигнала нет, «лабуда» м.б. большой (как сигнал, если бы он был). Задача – определить, что появился сигнал и измерить его период. Диапазон 1…10 мс, точность нужна порядка 2% (все числа пока ориентировочные). Форма сигнала может быть любой, вовсе не обязательно, что только с двумя экстремумами по времени за период. Вычислительная мощность ограничена, ибо AVR => 8 бит, невысокая тактовая. Плюс загружен еще другой задачей. Обрабатывать непрерывный поток с АЦП, боюсь, некогда, поэтому пытаюсь его минимизировать. Попытался сделать так: сигнал (с правильной пост. сост.) завожу на аналоговый компаратор и АЦП. Компаратор выдает прерывание по каждой смене состояния (т.е. в обе стороны). По прерыванию запускаю АЦП, и в идеале должен получить отсчеты в моменты минимумов и максимумов. Реально, конечно, в моменты горбов получаю кучу отсчетов, часть из которых отсекаю по признаку «слишком рано после предыдущего». Вопросы: 1. Удачно ли такое схемное-программное решение для получения отсчетов? 2. (в случае положительного ответа на 1.) Каким путем посоветуете поступить с полученными отсчетами? На заметке а) быстрое преобразование Фурье, б) автокорреляционная функция. Есть еще и в) мысля в сторону алгоритмов поиска периода подстроки в строке. 3. Или вообще надо всё совсем не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeyv 0 28 декабря, 2010 Опубликовано 28 декабря, 2010 · Жалоба частота полезного периодического сигнала в каком диапазоне? может стоит сначала прогнать сигнал через полосовой фильтр, а потом производить дальнейшую обработку? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KARLSON 1 28 декабря, 2010 Опубликовано 28 декабря, 2010 · Жалоба 2.Каким путем посоветуете поступить с полученными отсчетами? Так отсчёты не нужны для основной рабготы? А что если Вам считать период таймером (наверника он есть в АВР), запускающийся от прерывания компаратора? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Diusha 0 28 декабря, 2010 Опубликовано 28 декабря, 2010 (изменено) · Жалоба частота полезного периодического сигнала в каком диапазоне? может стоит сначала прогнать сигнал через полосовой фильтр, а потом производить дальнейшую обработку? Я же написал: период полезного сигнала 1...10 мс (ориентировочно). Наверно нечетко сформулировал Фильтры ставить не хочется, хочетс с самым минимальным минимумом компонентов. Ну если уж окажется никак, то тут уж шо уж тут уж (с). Тем более, что шумы в основном примерно в том же диапазоне Так отсчёты не нужны для основной рабготы? А что если Вам считать период таймером (наверника он есть в АВР), запускающийся от прерывания компаратора? Само собой, таймером определяю моменты срабатывания компаратора (Input Capture mode). Я привел пример формы сигнала, для которого в идеале за период (его) я должен получить 6 отсчетов. Но сигнал может быть и "хуже" (больше отсчетов), а может быть синусоида (2 отсчета), наперед это неизвестно. Поэтому чтобы из кучи отсчетов выудить период, нужен какой-то алгоритм. Это раз. А два - это то, что реально на период я получаю не 6 (как в примере), а десятки отсчетов, из которых надо как-то отсечь лишние (чтобы меньше обрабатывать), но "не выплеснуть и младенца". P.S. Под отсчетом я здесь подразумеваю пару: [момент времени (по сигналу с компаратора); величина в этот момент (с АЦП)] Изменено 28 декабря, 2010 пользователем Diusha Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EvgenyNik 0 28 декабря, 2010 Опубликовано 28 декабря, 2010 · Жалоба если сигнал есть, то он по крайней мере в разы больше шума, но когда cигнала нет, «лабуда» м.б. большой (как сигнал, если бы он был). Задача – определить, что появился сигнал и измерить его период. Получается, что только компаратором не отделить интервалы сигнала от остального времени шума, т.к. компаратор замучает Вас прерываниями на шуме. Тупо и напрямую я бы стал решать так: 1. Набирал бы некий буфер, куда помещались бы, как минимум, два периода минимально возможной частоты. 2. Прогонял БПФ с целью выявить максимумы частотного спектра 3. По полученным частотным компонентам брал бы ширину окна величиной с период и методом наименьших квадратов сравнивал бы "кадры" с шагом в ширину окна. 4. За повторяемый сигнал выбрал бы тот период, у которого наименьшее расхождение по погрешности сравнения кадров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Designer56 0 28 декабря, 2010 Опубликовано 28 декабря, 2010 · Жалоба а просто отфильтровать сигнал на входе до 1 кГц? Проще не придумаешь. Религия не позволяет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 28 декабря, 2010 Опубликовано 28 декабря, 2010 · Жалоба По прерыванию запускаю АЦП, и в идеале должен получить отсчеты в моменты минимумов и максимумов. Вы точно понимаете как работает эта схема?! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Diusha 0 29 декабря, 2010 Опубликовано 29 декабря, 2010 · Жалоба 3. По полученным частотным компонентам брал бы ширину окна величиной с период и методом наименьших квадратов сравнивал бы "кадры" с шагом в ширину окна. 4. За повторяемый сигнал выбрал бы тот период, у которого наименьшее расхождение по погрешности сравнения кадров. Т.е., для каждого полученного частотного компонента брать свое окно и далее по тексту? Тогда точно времени не хватит :( И, насколько я понимаю, для такого алгоритма нужно отсчеты получать непрерывным потоком (компаратор в пролете)? а просто отфильтровать сигнал на входе до 1 кГц? Проще не придумаешь. Религия не позволяет? Религия мне, как атеисту, позволяет все. Но мысль непонятна. Что даст фильтрование? Я не силен в данной теме, поэтому посните, пожалуйста. Может Вы имеете в виду наделать фильтров (программно) от 100 до 1000 Гц с шагом 2%? Напоминаю: AVR :( Вы точно понимаете как работает эта схема?! Да. Если этот вопрос трактовать несколько иначе ("Как работает эта схема?"), ответ будет более развернутый :) Напряжение на "-" компаратора всегда будет отставать от "+" (вх. сигнала). (Речь о мгновенных напряжениях) Допустим, входное напряжение растет. На "-" оно будет чуть ниже. Вх. н. перестало расти, пошло на убыль. Теперь на "-" напр. больше, чем на "+" - получаю прерывание. Реально (по понятным причинам) получаю не 1 прер., а много Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex_os 0 29 декабря, 2010 Опубликовано 29 декабря, 2010 · Жалоба Если этот вопрос трактовать несколько иначе ("Как работает эта схема?"), ответ будет более развернутый :) Напряжение на "-" компаратора всегда будет отставать от "+" (вх. сигнала). (Речь о мгновенных напряжениях) Допустим, входное напряжение растет. На "-" оно будет чуть ниже. Вх. н. перестало расти, пошло на убыль. Теперь на "-" напр. больше, чем на "+" - получаю прерывание. Реально (по понятным причинам) получаю не 1 прер., а много Крайне сомнительная схема, работать будет только на идеальной синусоиде (да Вы сами в этом убедились). Если время измерения не критично можно попробовать сделать что-то вроде ФАПЧ. Достаточно будет 1-4 отсчета на измеряемый период. В плане выч. затрат это будет самое экономное решение, в плане программирования довольно геморное, т.к. частота может быть в довольно широких пределах. Да, предполагается что момент взятие отсчета АЦП можно задавать программно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexkok 0 29 декабря, 2010 Опубликовано 29 декабря, 2010 · Жалоба Я же написал: период полезного сигнала 1...10 мс (ориентировочно). Наверно нечетко сформулировал Фильтры ставить не хочется, хочетс с самым минимальным минимумом компонентов. Но придется, хотя бы одно звено. Само собой, таймером определяю моменты срабатывания компаратора (Input Capture mode). Я привел пример формы сигнала, для которого в идеале за период (его) я должен получить 6 отсчетов. Но сигнал может быть и "хуже" (больше отсчетов), а может быть синусоида (2 отсчета), наперед это неизвестно. Поэтому чтобы из кучи отсчетов выудить период, нужен какой-то алгоритм. Это раз. А два - это то, что реально на период я получаю не 6 (как в примере), а десятки отсчетов, из которых надо как-то отсечь лишние (чтобы меньше обрабатывать), но "не выплеснуть и младенца". P.S. Под отсчетом я здесь подразумеваю пару: [момент времени (по сигналу с компаратора); величина в этот момент (с АЦП)] Предлагаю: 1. Изменить схему, добавив гистерезис 2. Алгоритм примерно такой: - считаете средний, максимальный и минимальный полупериоды/периоды на скользящем окне; - считаете некое подобие "дисперсии", попроще; - если "дисперсия" меньше порога, значит есть сигнал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Diusha 0 30 декабря, 2010 Опубликовано 30 декабря, 2010 · Жалоба Крайне сомнительная схема, работать будет только на идеальной синусоиде (да Вы сами в этом убедились). Синусоида ничуть не лучше нарисованного примера сигнала, у нее такие же плоские верхушки. По идее схема должна хорошо работать с пилой (не проверял, т.к. такая форма маловероятна). Если время измерения не критично можно попробовать сделать что-то вроде ФАПЧ. К сожалению, очень критично. 0.5 сек – уже точно не годится. Хотелось бы 0.1, ну 0.2 макс. Получается на нижней частоте 10 (20) периодов. Вероятно придется чем-то пожертвовать. 1. Изменить схему, добавив гистерезис Вот это идея мне понравилась! Спасибо! Только у АВРок, к сожалению, у компаратора нет выхода на улицу. Придется на внешнем операционнике сделать. Программно выводить выход компаратора по прерыванию – возможны ошибки. Хотя, кто его знает… 2. Алгоритм примерно такой: - считаете средний, максимальный и минимальный полупериоды/периоды на скользящем окне; Дело «за малым»: определить период. В это-то все и упирается. Выделив период, возможно будет достаточно тупо 10 периодов разделить на 10. Можно, наверно, период искать банально как интервал от максимума до максимума, а максимумами считать те, которые отличаются друг от друга не более, чем на …% от амплитуды. Ну вот мы и нашли период; если за N периодов разброс меньше, чем, значит все в абажуре. Но может быть такая форма сисигнала, которая все испортит. Можно, добавив еще несколько IF–THEN, предусмотреть и 2 и 3 максимума (≈одинаковых) на период. Но наверно есть покрасивше алгоритм Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexkok 0 30 декабря, 2010 Опубликовано 30 декабря, 2010 · Жалоба Вот это идея мне понравилась! Спасибо! Только у АВРок, к сожалению, у компаратора нет выхода на улицу. Придется на внешнем операционнике сделать. Программно выводить выход компаратора по прерыванию – возможны ошибки. Хотя, кто его знает… У меня ошибка в схеме, цепь ПОС/гистерезиса нужно подключить к средней точке, а не к сигнальной цепи. Нулём сигнала, соответственно, должна быть средняя точка. Дело «за малым»: определить период. В это-то все и упирается. Выделив период, возможно будет достаточно тупо 10 периодов разделить на 10. После корректировки схемы Вы будете иметь точки пересечения нуля и никаких проблем с вычислением периода быть не должно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Diusha 0 30 декабря, 2010 Опубликовано 30 декабря, 2010 · Жалоба У меня ошибка в схеме, цепь ПОС/гистерезиса нужно подключить к средней точке, а не к сигнальной цепи. Нулём сигнала, соответственно, должна быть средняя точка. Ну вот, до этого было понятно, а теперь стало непонятно :( ;) Разве приведенная Вами схема не будет выделять пики? По-моему, там все логично После корректировки схемы Вы будете иметь точки пересечения нуля и никаких проблем с вычислением периода быть не должно. Я-то как раз хотел сделать схему, выделяющую пики, а не пересечения нуля, чтобы эти пики измерить и получить доп. информацию. Измерение нулей много информации не добавит ;) Сигнал может пересекать ноль больше 2-х раз за период (также как и иметь больше 2-х пиков (верхний и ниж.) за период). Так что, с нулями я окажусь в той же ситуации, только без величины сигнала Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexkok 0 30 декабря, 2010 Опубликовано 30 декабря, 2010 · Жалоба Ну вот, до этого было понятно, а теперь стало непонятно :( ;) Я-то как раз хотел сделать схему, выделяющую пики, а не пересечения нуля, чтобы эти пики измерить и получить доп. информацию. Измерение нулей много информации не добавит ;) Сигнал может пересекать ноль больше 2-х раз за период (также как и иметь больше 2-х пиков (верхний и ниж.) за период). Так что, с нулями я окажусь в той же ситуации, только без величины сигнала Этот пример возможен при амплитуде помехи или шума близкой по уровню к амплитуде сигнала. Но Вы писали, что Будем считать, что если сигнал есть, то он по крайней мере в разы больше шума При таких условиях и наличии гистерезиса шумы будут подавляться и лишних переходов через ноль не будет. Если же Вы хотите обеспечить выделение сигнала и при малых отношениях с/ш, то всё резко усложняется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Diusha 0 31 декабря, 2010 Опубликовано 31 декабря, 2010 · Жалоба Этот пример возможен при амплитуде помехи или шума близкой по уровню к амплитуде сигнала. Нет. Это нарисован сигнал без помехи. Его форма м.б. любой (в разумных пределах) и заранее не известна, в т.ч. и такой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться