Каюсь Не занимался построением цифровых фильтров.
Идеология примерно такая: пачка сдвиговых регистров (образуют задержку), и на них, собственно, висит фильтрующая схема, которая высчитывает df/dt и "отрубает" все то, что "медленнее" или "быстрее" заданного значения. Для 5 Гц задержка будет серьезная
А для чего алгоритм, для компа или контроллера? Или на железе воротить? Имхо такие вещи лучше всего делать на ПЛИС.
_________________ Лучше быть первым в деревне, чем вторым в Риме
Цифровой фильтр для программной реализации на компе. При этом к моменту фильтрации все измерительные отсчеты уже известны, то есть и до текущей фильтруемой точки и после.
Карма: 46
Рейтинг сообщений: 236
Зарегистрирован: Чт окт 27, 2005 18:50:07 Сообщений: 11169 Откуда: из мест не столь отдалённых
Рейтинг сообщения:0 Медали: 2
Мы для подобной цели используем метод скользящего среднего с задаваемым окном.Метод реализуется на компе для сглаживания кривой
фототока,работает очень хорошо-не искажает ход кривой,но не подкреплён мат.теорией
В принципе сами используем метод скользящего среднего окна. Однако, мы его используем чтобы отфильтровать помеху с заданной частотой. При этом, ессно, происходит подавление целого спектра чатот, а не одной частоты. Кроме того, длина фильтра рассчитывается для подавления помехи в зависимости от частоты опроса, и если идеальная длина фильтра получается дробной величиной в единицах измерительных отсчетов, ее приходится кратно увеличивать. Сейчас стоит задача работать на более низких частотах опроса, чем ранее, что приводит к значительному увеличению длины фильтра по действующей методике. Следовательно, фильтр будет подавлять больший спектр частот полезного сигнала. Кроме того, желательно подавить не просто точечную помеху (50 Гц), но все высокие частоты, т.к. на качество измерительной системы не приходится здесь надеяться. Буду благодарен, если кто-то порекомендует в поставленных ранее условиях как подходящие фильтры нижних частот, так и отдельной частоты.
Карма: 46
Рейтинг сообщений: 236
Зарегистрирован: Чт окт 27, 2005 18:50:07 Сообщений: 11169 Откуда: из мест не столь отдалённых
Рейтинг сообщения:0 Медали: 2
Лесник,извините-это я забыл указать себя в предыдущем сообщении.Послал Вам образец доморощенной фильтрации,в теории не силен-всё получено эмпирически,после множества попыток подбора аппроксимирующей кривой,это в принципе невозможно для данного процесса. Далее эта кривая используется для нахождения точки изгиба,процесс полностью компьютеризирован
Метод простого среднего окна отличается тем, что, наверное, нет более простого в реализации метода.
Алгоритм: Задаемся длиной фильтра в измерительных отсчетах n (нечетное). Вычисляем сумму первых n измерительных отсчетов S[(n-1)/2]. Первые (n-1)/2 отсчетов не фильтруются (последние тоже). Отфильтрованный отсчет с номером (n-1)/2 заменяется на S/n. (Нумерация отсчетов от 0). Далее каждый i-й измерительный код вычисляется как Si/n, где
Si=S[i-1] + N[i+(n-1)/2] - N[i-n/2]
N - измерительные отсчеты
Т.е. оно и есть скользящее окно. Отфильтрованный код есть тривиальне арифметическое среднее текущего и (n-1)/2 неотфильтрованных отсчетов слева и справа (до и после). Для экономии вычислительных расходов при вычислениях следующая сумма вычисляется вычитанием из предыдущей суммы ее первого измерительного кода и прибавлением нового последнего кода в текущей сумме. При манипуляциях с цифрами с плавающей точкой я использую реинициализацию вычисления суммы через определенное количество отсчетов, иначе накапливаются погрешности, связанные с дискретностью машинного кодирования чисел.
Алгоритм - вырожденный случай взвешенного среднего скользящего окна, когда измерительные отсчеты в сумме умножаются на весовые коэффициенты. В этом случае можно осуществить более гибкую настройку частотных свойств фильтра. Процессов таким фильтром фильтровал множество...
Глубинный смысл происходящего: Допустим, предполагаем помеху с частотой fп = 50 Гц. Период помехи, соответственно Tп = 1/fп = 0.02. Пусть процесс опрашивается с чатотой fопр=2000 Гц. Тогда, если взять среднее на периоде, синусоидальная помеха будет практически полностью уничтожена (если подобрать нужную фазу ее совсем не будет). В наших условиях длиной фильтра будет 41 точка (текущий отсчет и по 10 до и после). Т.е. длина фильтра в идеале вычисляется из Tп = (n-1)/fопр. При вычислении возникает проблема, когда n оказывается дробным числом. Например:
fопр | n расчетное
----------
2000 | 41
1000 | 21
500 | 11
250 | 6
Для 250 получили 6 - число четное. Полуфильтр будет 2.5. 2.5 отсчета усреднить не получится (задача не тривиальная). Таким образом, приходится увеличить кратно фильтр и взять n=11, т.е. в данном случае два периода. Если опросность еще уменьшить вдвое, придется взять длину фильтра в три периода помехи и т.д.
Получается, что при понижении опросности длина фильтра увеличивается, и в пределе можно дойти до абсурда, когда на выходе фильтра получается просто среднее всего процесса или еще хуже - всего процесса не хватает для осуществления фильтрации.
Тут же можно видеть, что при таком подходе мы фильтруем не только 50 Гц, но и 100 и т.д.
Что вообще можно сказать о достоинствах вышеизложенного метода. Да в принципе ничего. Разве что в условиях отсутствия представлений о свойствах помех ничего другого на ум не приходит, кроме этого фильтра и ручного подбора его длины по критерию наибольшей красивости выходной кривой по субъективной оценке на основании данных онтологической перцепции.
Нужно убрать все верхние частоты. Баттерворд кий нить, или еще что нить. Никак не решу в условия вышеописанной задачи.
эээ, ребят, а прямое и обратное преобразование Фурье? На компе ж делается по уже готовым измерениям! разложили в ряд на куске каком-то и выкидывайте ненужные частоты.
типовая же задача из ЦОС (DSP).
насчет скользящего фильтра - частота среза фильтра зависит напрямую от длины окна. чем больше длина окна, тем меньше частота среза такого фильтра.
так вот, преобразование Фурье позволяет представить любую функцию времени у(t) как сумму синусоид, т.е. получить спектр этой функции.
P.S. оффтоп,
но говоря про синусоиды вспомнил как мне батя наглядно объяснил в децтве синусоиды.
вобщем представь говорил, идет бык по снегу и мочиться на ходу. хрен его болтается, а он идет. так вот след на снегу это и есть синусоида. чем быстрее идет, тем шире контур - это период. чем шире болтается, тем дальше мочится - это амплитуда.
_________________ Я просто верю в то, что рушить догмы - лучший способ не стареть.
Карма: 46
Рейтинг сообщений: 236
Зарегистрирован: Чт окт 27, 2005 18:50:07 Сообщений: 11169 Откуда: из мест не столь отдалённых
Рейтинг сообщения:0 Медали: 2
Для начинающих посетителей этого сайта.
Вопрос, заданный в вежливой форме и без распальцовки, имеет гораздо более высокие шансы на вразумительный ответ.
Для интересующихся цифровой фильтрацией.
Непереодические сигналы невозможно(без введения граничных условий) разложить в ряд Фурье и Вейвлет. Поэтому мы и придумали фильтрацию со скользящим окном; нас результат устраивает. Сейчас думаем о дальнейшей адаптации этого метода к реальным сигеналам.
Для начинающих посетителей этого сайта. Вопрос, заданный в вежливой форме и без распальцовки, имеет гораздо более высокие шансы на вразумительный ответ.
Для интересующихся цифровой фильтрацией.
Непереодические сигналы невозможно(без введения граничных условий) разложить в ряд Фурье и Вейвлет. Поэтому мы и придумали фильтрацию со скользящим окном; нас результат устраивает. Сейчас думаем о дальнейшей адаптации этого метода к реальным сигеналам.
сорри, если невежливо я изъясняюсь,
я свой пост к первоначальному относил, где у Лесника уже все измерения на компе! т.е. и отрезок времени можно выбрать как хотите, и, теоретически, в вычислительной мощности ограничений нет. ИМХО, для обработки таких данных у вас есть все, чтобы делать разложение Фурье и получать спектр сигнала.
насчет реального сигнала - я для некоторых задач реализовывал 2 метода (в моем случае полезные сигналы были медленные, порядка 1 Гц - измерение потока воздуха, нагнетаемого вентилятором, измерения с периодом 1 мс). Замкнутый буфер по типу FIFO, в одном случае в буфер загоняются реальные значения (классическая реализация скользящего окна), в другом уже сглаженные (по нескольким последним значениям буфера) и сглаживаем еще раз по всему буферу.
Смысл второго способа - отсекаем отдельные пики, что у вас на картинке, и уже потом фильтруем остальные частоты. Для моего медленного сигнала работало на ура (но у меня было достаточно точек для этого). Были еще вариации, типа двойного скользящего окна - вычисляем 1 значение по 10 замерам и именно это значение и идет в буфер. Т.е. реальную кривую делим на куски, усредняем кусок и усредняем всю кривую по усредненным кускам. Результаты примерно такие же.
Единственное ограничение - иметь достаточно точек. Ну и размеры окна важны, если динамику сигнала отследить хотите. Приходится искать компромис между качеством сглаживания и запаздыванием сглаженного сигнала.
_________________ Я просто верю в то, что рушить догмы - лучший способ не стареть.
Карма: 46
Рейтинг сообщений: 236
Зарегистрирован: Чт окт 27, 2005 18:50:07 Сообщений: 11169 Откуда: из мест не столь отдалённых
Рейтинг сообщения:0 Медали: 2
спасибо за ссылку; к сожалению, ничего интересного для себя не нашёл. У нас обработка зарегистрированного сигнала, примерно раз в секунду, всего 3000...6000 точек.Параметры скользящего окна вычисляются программно в зависимости от уровня шума(тоже программно).Наш алгоритм построен несколько иначе-не среднее значение в окне, а адаптивное;результат очень хороший для небольшой скорости изменения
сигнала.Если эти вопросы- в сфере Ваших профессиональных интересов, можно продолжить дискуссию.
не совсем понятна ваша задача.
фильтрация происходит раз в секунду по 6000 точек? на входе у вас 6000 точек, на выходе сколько, те же 6000? отфильтрованый сигнал используется для процесса какого-то, или просто для отображения?
полезный сигнал с какой скоростью может меняться?
интересно как оцениваете количество шума? по амплитуде, частоте?
я в своей работе пользую цифровые фильтры по мере надобности. иногда приходится довольно глубоко залезать.
_________________ Я просто верю в то, что рушить догмы - лучший способ не стареть.
1замер в секунду( не принципиально).Фильтрация после окончания регистрации. Шум оценивается по среднему значению между масимальными и минимальными значениями сигнала за весь период регистрации ( что-то вроде "трубы", в которой находтся сигнал).Отфильтрованный сигнал используется для определения точек перегиба ( момент, когда сигнал начинает возрастать или падать). Количество точек- не меняется.Сглаживание по нашей методике приводит к смещению момента перегиба на 1\2 величины окна; это можно учесть-если надо для обработки.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения