LINUX.ORG.RU

Выделение низких частот(2-6Гц) сигнала при помощи ДПФ


0

0

Есть задача: МК обрабатывает данные с акселерометра, сбор данных происходит каждые 2мс, отсчеты собираются в течении 1с, те 500(можно 512, если использовать БПФ) за 1 секунду. Далее необходимо найти уровни сигналов с частотами от 2-5 Гц, после чего принимается решение о превышении уровня сигналов допустимого значения. Делаю так: набираю массив данных в течение 1с, затем отсчеты скидываются по КОМ-порту на ПК в Матлаб. Затем полученные отсчеты прогоняю через FFT и на выходе должен увидеть спектр частот. Все прекрасно работает если частота воздействия на акселерометр от 100 Гц и выше(более 250Гц не проверял). Но если воздействую на акселерометр с частотой примерно 2-6 Гц, то в спектре эти частоты практически «не выделяются», вот картинка(1 график-исходный сигнал,2график-после FFT ф-ии): http://sb.uploads.ru/qsm8r.png Причем воздействие видно даже визуально+амплитуда сигнала воздейтсвия много выше уровня шума! Попробовал просто «вырезать» шум, те в коде программы просто делаю (если noise_min<=сигнал<=noise_max, то сигнал = 0), тогда ситуация улучшилась, и сигналы нужных частот стали видны в спектре, сделал я это как то интуитивно, из-за того что уровень амлитуды определенной частоты - это энергия сигнала данной частоты на 1ом графике, а там визуально видно, что воздействие хоть и отчетливое, но уж очень кратковременное и по сравнению с энергией шума, его энергия мала. Поэтому не знаю насколько такое решение правомерно и как оно будет работать в общем случае, те в разных условиях и не понятно какие границы шума обрезать и тд. В связи с этим появились вопросы: 1)Возможно ли при таком исходном сигнале выделить низкие частоты, если да то как? 2)Надо ли обрабатывать дополнительно исходный сигнал, до преобразований Фурье, если да, то как грамотно это сделать?

//не тот сайт, не тот раздел форума...

Можно отфильтровать сигнал ещё до преобразования Фурье, если вообще это преобразование нужно. КИХ фильтры, к примеру, реализуются элементарно как в МК(десяток строк кода на сишке) , так и в матлабе(готовые функции есть). Надо только выбрать частоты, тип фильтра и получить матрицу коэффициентов.

qub
()

Не особо вникая: а почему Фурье? Почему бы просто не сделать FIR-фильтр на нужные частоты. Можно полосовой, можно LPF и анализировать отфильтрованное?

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)

Если ты ждешь на FFT сигнала пика на 4ГЦ, то его и не должно быть, с твоим-то воздействием.

Если я двадцать раз в секунду стукну ногтем по столу, я не получу гудение на 20Гц, не так ли?

thesis ★★★★★
()

У тебя на выборку получается от двух до пяти искомых колебаний. Как думаешь, какая точность получится? Если хочешь НЧ детектировать, надо данные хотя бы секунд 5 собирать!

Если ВЧ тебе не нужно, можно добавить обычный RC (или активный, если сигнал слабый) фильтр на входе, чтобы он чуть интегрировал, сглаживая ВЧ.

Еще можно добавить софтовую обработку: скажем, скользящую медиану.

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

Eddy_Em ☆☆☆☆☆
()

Ты сейсмограф что ли делаешь? Если да, то тебе ни компьютер, ни матлаб не нужны.

P.S. И вообще, зачем матлаб, если в такой простой задаче даже Octave — оверхед?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Во-первых, спасибо за ответы! Уточню задачу и алгоритм: Надо сделать устройтсво, которое улавливает шаги на расстоянии N метров на основе акселерометра. Был предложен алгоритм: собираем информацию от дачика в течение 6 секунд(на секунду 500 отсчетов), задем делаем для каждой секунды ДПФ(БПФ), находим среднюю ампл-ду каждой секунды в полосе от 2 до 5 Герц, далее находим коэффициент К=Аср6/( (Аср1+Аср2+Аср3+Аср4+Аср5)/5 ), если К превышает порог, значит шаги есть. Затем делаем А1=А2;А2=А3;А3=А4;А4=А5;А5=А6; а А6 считаем снова( т.е. собираем 500 отсчетов за секунду и тд.). Алгоритм и математика крутятся в МК, просто скидываю все отсчеты и результаты по интерфейсу в Windows(написал программку на WinApi и использую также Матлаб) для того, чтобы проверить правильность работы алгоритма МК(сравниваю что получаем на МК и в матлабе например)+для того,чтобы все результаты видеть наглядно. Т.к. алгоритм изначально был предложен, я его и придерживаюсь. По поводу RC фильтра аппаратного - этот вариант не подходит, дабы в перспективе могут понадобиться и другие частоты, например ловить буду не только шаги и тд. А вот по поводу программного фильтра, это интересней. Я сегодня как то интуитивно понял, что пики сигналов приходящих надо сгладить,сделал так - разбил 500 отсчетов на N отрезков(пробовал 100 и 50 отрезков), каждый отрезок усреднял, на выходе получается набор «столбиков», потом все это хозяйство подсовывал в Фурье, результат намного лучше!Теперь осталось осознать какой фильтр выбрать, и как его правильно рассчитать,просто под рукой нету интернета, поэтому есть некоторая ограниченность при экспериментах. Поэтому теперь такие вопросы появились: 1)Какой фильтр лучше выбрать в данной ситуации? 2)Повлияет ли фильтр на «точность» измерений, просто на больших расстояниях всплески сигнала будут не такие большие... ? И если можно пример расчета фильтра или советы по его расчетам! Спасибо, заранее всем благодарен!

BaRaGoZ
() автор топика
Ответ на: комментарий от BaRaGoZ

Во-первых, спасибо за ответы! Уточню задачу и алгоритм: Надо сделать устройтсво, которое улавливает шаги на расстоянии N метров на основе акселерометра.

Шаги? Вообще-то, задача весьма обширная. Особенно если тебе нужно какие-то особенности замечать, отличать животное от человека и т. д. Есть одна статья довольно цитируемая:

Kenneth M. Houston, Daniel P. McGaffigan «Spectrum analysis techniques for personnel detection using seismic sensors».

Там есть спектральный анализ шагов при воздействии на сейсмодатчик и предложен один вариант решения, который можно первым делом попробовать. К сожалению, не могу сказать, где взять статью нахаляву. Поэтому погляди на практические результаты в другой статье, в которой используется такой же метод:

Например, http://sem-proceedings.com/26i/sem.org-IMAC-XXVI-Conf-s42p03-Zero-power-Seism...

Ну а дальше как-нибудь в google «footstep (detection | discrimination) seismic» и еще по списку литературы в статьях. Тема обширная, на самом деле.

Zubok ★★★★★
()
Ответ на: комментарий от BaRaGoZ

А эта информация не должна быть секретной там например? Госконтора?

deterok ★★★★★
()

Вот еще, кстати. Смотри Chapter 2. Тот же самый метод. И еще есть исходный код прямо в статье, в самом конце, но для TMS, правда.

http://dspace.mit.edu/bitstream/handle/1721.1/16941/53237410.pdf

Обрати внимание, что FFT после фильтрации и выделения огибающей (envelope) делается.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Статьи очень интересные, сам найти не смог ничего подобного,дабы искал на русском... спасибо большое! Буду пробовать,если серьезные вопросы будут или что-то интересное всплывет, отпишусь!

BaRaGoZ
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.