|
Подскажите с фильтром |
|
|
|
Apr 10 2011, 18:33
|
Группа: Участник
Сообщений: 8
Регистрация: 15-07-10
Пользователь №: 58 460

|
Подскажите фильтр для снижения равномерно распределенного шума в сигнале. Полезный сигнал лежит в диапазоне 0-200Гц, частота дискритезации 10КГц. Фильтр должен быть простым в вычислительном плане, т.к. будет применятся в реальном времени на обычном МК ARM.
|
|
|
|
|
Apr 12 2011, 21:11
|
Группа: Участник
Сообщений: 8
Регистрация: 15-07-10
Пользователь №: 58 460

|
Охладить девайс это сурово). Сегодня подсказали что оптимальным в такой ситуации будет фильтр, имеющий АЧХ схожую с АЧХ полезного сигнала. Буду смотреть расхождение и находить оптимальный. Но важнее другой вопрос. Какие фильтры выгоднее в вычислительном плане? Что нибудь скользящее среднее или что нибудь похожие. КИХ фильтр это хорошо, но уж больно большой порядок выходит.
|
|
|
|
|
Apr 13 2011, 12:54
|
Местный
  
Группа: Участник
Сообщений: 468
Регистрация: 4-03-05
Пользователь №: 3 066

|
Цитата(EasenMan @ Apr 13 2011, 01:11)  Сегодня подсказали что оптимальным в такой ситуации будет фильтр, имеющий АЧХ схожую с АЧХ полезного сигнала. Это и есть согласованный фильтр, как об этом было сказано постом выше. Цитата(EasenMan @ Apr 13 2011, 01:11)  Но важнее другой вопрос. Какие фильтры выгоднее в вычислительном плане? Что-нибудь скользящее среднее или что-нибудь похожие. Если речь идет о согласованном фильтре, то ничего другого кроме КИХ быть в принципе не может. И скользящее среднее это тоже КИХ-фильтр. Цитата(EasenMan @ Apr 13 2011, 01:11)  КИХ фильтр это хорошо, но уж больно большой порядок выходит. Большой порядок чего? ФНЧ КИХ-фильтра на частоту среза 200Гц и частотой дискретизации 10кГц? Реализуйте в виде каскадного соединения КИХ-фильтров дециматоров реализованных полифазно, это снизит вычислительные затраты в 10-100 раз. Если нужна минимизация вычислений для согласованного фильтра, то говорите что за сигнал у Вас.
|
|
|
|
|
Apr 13 2011, 14:44
|
Частый гость
 
Группа: Свой
Сообщений: 170
Регистрация: 12-02-08
Из: г.Минск (РБ)
Пользователь №: 34 969

|
А зачем КИХ? Автор минимальный фильтр хочет (отдельный вопрос что с 200 Гц сигналом ARM и здоровенный протащит). Что-нибудь рекурсивное, типа интегратора с постоянной времени. Uout += Uin-Uout/k, можно несколько раз последовательно, причём только первое звено с частотой 10 кГц считать нужно. Для ARM (без однотактового деления) k - выбираем степень двойки и заменяем сдвигом, получаем полосу чуть шире 200 Гц (следующими звеньями точнее подгоним), или, что лучше, умножаем всё на k, получаем k*Uin - Uout (просто формула менее наглядна). Если коэффициент передачи фильтра должен быть = 1, нормируем его на выходе делением (вместо деления можно посчитать дробь со степенью двойки в знаменателе и заменить одним умножением и одним сдвигом). Предполагается, что всё считаем целочисленно. Мысленно представляем операционник в инвертирующем включении, с конденсатором параллельно резистору обратной связи, работу которого описывает данная формула. Литературу читать не надо, коэффициенты подбираем методом тыка или вариацией в математическом пакете. Проще некуда. Если АЧХ сложный, то после этого уже фильтрованный сигнал, с малым потоком данных неспеша мучаем сложными фильтрами, если известна форма - коррелируем быстрым алгоритмом. Если от узкополосных помех отстраиваемся - обеляющий фильтр наверное стоит добавить и т. д. Короче если мыслить категориями схемотехники - тупо фильтруем несколько раз интегрирующей RC цепочкой, а потом уже обрабатываем замысловато. RC - в данном случае програмная.
Сообщение отредактировал st232bd - Apr 13 2011, 14:51
|
|
|
|
|
Apr 14 2011, 11:38
|
Группа: Участник
Сообщений: 8
Регистрация: 15-07-10
Пользователь №: 58 460

|
То что ARM хороший фильтр потащит, это не спорю, просто система, которая построена на этом МК, работает в реальном времени и кроме расчета фильтра ,необходимо еще много чего сделать, в том числе и регуляторы обсчитать, поэтому и ставка на максимальную производительность(в пределах разумного). С несколькими проходами рекурсивного фильтра согласен, а вот последующая обработка я так понимаю не получится, т.к. входной сигнал может быть либо синусоида с частотой 50-200Гц, либо какие то S-кривые. Хотелось бы узнать про расчет коэффициентов для БИХ фильтра. Точней рассчитать то их не трудно в MATLAB, но они получаются очень маленькие и точные(0,00097962856 что то типа того), так вот, можно ли их отмасштабиравать до целых чисел и как это сделать?
|
|
|
|
|
Apr 14 2011, 14:58
|
Частый гость
 
Группа: Участник
Сообщений: 125
Регистрация: 9-10-05
Из: С.-Петербург
Пользователь №: 9 418

|
Цитата(EasenMan @ Apr 14 2011, 15:38)  Хотелось бы узнать про расчет коэффициентов для БИХ фильтра. Точней рассчитать то их не трудно в MATLAB, но они получаются очень маленькие и точные(0,00097962856 что то типа того), так вот, можно ли их отмасштабиравать до целых чисел и как это сделать? Нормируете коэффициенты к единице, умножаете на 2^{ваша разрядность-1}-1, берете целую часть ( а лучше округляете до ближайшего целого).
|
|
|
|
|
Apr 21 2011, 05:18
|
Частый гость
 
Группа: Участник
Сообщений: 82
Регистрация: 27-08-05
Пользователь №: 8 009

|
Цитата(EasenMan @ Apr 11 2011, 00:33)  Подскажите фильтр для снижения равномерно распределенного шума в сигнале. Полезный сигнал лежит в диапазоне 0-200Гц, частота дискритезации 10КГц. Фильтр должен быть простым в вычислительном плане, т.к. будет применятся в реальном времени на обычном МК ARM. Не буду открывать новую тему, т.к. эта вроде в тему :-) На 16-разрядном АЦП измеряю с частотой 10кГц.(ФНЧ 5кГц на входе есть) Полоса полезного сигнала тоже до 200Гц. Ни какие фильтрации не помогают выйти даже на 16-разрядную точность измерений, не говоря уж о мечтах в виде 18-разрядной точности. Присутствует шум порядка 2-х младших значащих разрядов, частотой - единицы Герц. О чем дальше думать? (ограничений в производительности нет)
Сообщение отредактировал dsp_counter - Apr 21 2011, 05:23
|
|
|
|
|
Apr 21 2011, 09:17
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 29-05-10
Из: Пенза
Пользователь №: 57 619

|
Цитата(st232bd @ Apr 13 2011, 17:44)  А зачем КИХ? .... Короче если мыслить категориями схемотехники - тупо фильтруем несколько раз интегрирующей RC цепочкой, а потом уже обрабатываем замысловато. RC - в данном случае програмная. Кстати, это неплохо работающая идея. У себя в проектах, связанных с управлением (например, специализированный инвертор) я часто ставлю фильтры малого порядка на вычитаниях,сложениях и сдвигах - там какая проблема - одна частота - сэмплинга - определяется ШИМ-ом (10 kHz) а другая оборотами ротора (до 450 Hz) - ну а посередке надо все убрать для работы в представлении управления ротором (и убрать лишний шум) Если идти от теории - данная схема просто приводиться к чуть модифицированной классической структуре цифрового фильтра (чтобы уйти от головной боли со сверхмалыми коэффициентами)
Сообщение отредактировал sinc_func - Apr 21 2011, 09:22
|
|
|
|
|
Apr 21 2011, 11:37
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 29-05-10
Из: Пенза
Пользователь №: 57 619

|
Цитата(dsp_counter @ Apr 21 2011, 08:18)  ... Ни какие фильтрации не помогают выйти даже на 16-разрядную точность измерений, не говоря уж о мечтах в виде 18-разрядной точности. Присутствует шум порядка 2-х младших значащих разрядов, частотой - единицы Герц. О чем дальше думать? (ограничений в производительности нет) Если там действительно есть таким образом частотно-локализованный шум - я бы надрезами на плате и закоротками постарался бы выяснить - что все таки является источником этого шума (разделяй и властвуй) Плата конечно будет серьезно "пожевана", но множественные быстрые практические опыты при контроле величины шума по FFT (например в Матлабе) и чтение дата-шитов могут быстрее вывести к источнику проблемы чем изыски в фильтрации
|
|
|
|
|
Apr 21 2011, 12:24
|
Местный
  
Группа: Участник
Сообщений: 468
Регистрация: 4-03-05
Пользователь №: 3 066

|
Цитата(dsp_counter @ Apr 21 2011, 15:15)  На всякий случай добавлю деталей: - из АЦП получаю последовательность 10 кГц; (16 разрядов) - усредняя по 8 точек получаем сигнал с частотой сэмплирования 1250Гц; (здесь и далее плавающая точка при вычислениях) - фильтрую КИХ с полосой пропускания 110-140Гц (всего 199 коэффициентов); - выделяю амплитуду полученного сигнала; (по 3-м точкам интерполирую и нахожу максимум) - получается не очень :-).
О чем дальше думать? (ограничений в производительности нет) Конечно, можно и даже нужно курочить и кромсать плату в поисках источника шума, но для начала я бы посоветовал избавиться от первого дециматора на 8. Столь, казалось бы, незамысловатое действие, как усреднение по 8 отсчетам засрет испортит Вам весь околонулевой участок спектра по самое некуда, особенно если в исходном сигнале есть помехи на частотах кратных (и близких к ним) частоте 1250Гц  . Да и вообще, все что выше 625Гц просто завернется в ноль  . Если ограничений по ресурсам нет, то ставьте нормальный фильтр перед дециматором. Но все эти фильтрации будут сильно бесполезными если то, что Вы называете ФНЧ на 5кГц это просто RC-цепочка  . Ситуация полностью аналогичная сказанному до этого, только теперь все что выше 5кГц будет заворачиваться в ваш сигнал. И не заметить это будет очень трудно имея 16-битный АЦП  . Да, а что за АЦП то? И уверены, что он сам не шумит в младших 1-3 разрядах? А вообще, какая конечная цель? И зачем "выделяю амплитуду полученного сигнала; (по 3-м точкам интерполирую и нахожу максимум)" ?
|
|
|
|
|
Apr 21 2011, 15:29
|
Частый гость
 
Группа: Участник
Сообщений: 82
Регистрация: 27-08-05
Пользователь №: 8 009

|
Цитата(Самурай @ Apr 21 2011, 18:24)  1. ....... Столь, казалось бы, незамысловатое действие, как усреднение по 8 отсчетам испортит Вам весь околонулевой участок спектра по самое некуда......
2. ......... Если ограничений по ресурсам нет, то ставьте нормальный фильтр перед дециматором.......
3. ........Да, а что за АЦП то? И уверены, что он сам не шумит в младших 1-3 разрядах?.......
4. .....А вообще, какая конечная цель? И зачем "выделяю амплитуду полученного сигнала;..... Уважаемый САМУРАЙ, кажется, что Вы в теме. Если можете, помогите. 1. А как от него избавиться (от усреднения)? Просто взять каждую восьмую точку? 2. Про ресурсы я чуть-чуть увлекся. :-) Но если обсуждать еще и их, то мы можем в дебри уйти. 3. Наверняка шумит АЦП. Но не на низких же частотах. 4. Конечная цель: измерить напряжение в этой полосе частот (110-140). А вото что такое "измерить напряжение", точно сформулировать не могу, пока пытаюсь измерить амплитуду. Уважаемый sinc_func, плату курочил. Даже при закороченном входе АЦП шумит и сильно.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|