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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Как можно уменьшить реакцию на ступеньку в цифровом фильтре ?
MSP430F
сообщение Nov 25 2013, 12:29
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 20-05-13
Пользователь №: 76 911



Всем доброго времени суток!
Вот такая задача, коллеги.
Спроектрировал цифровой БИХ ФВЧ. Частота дискретизации 800 Гц, частота среза 0,5 Гц. Полоса частот 0,5 - 300 Гц. Крутизна спада - 48 дБ/октава. Чебышев II рода 6-го порядка. Коэффициенты и вся арифметика будет с двойной точностью (double), так что с устойчивостью, думаю, будет все в порядке. По любому, полюса - внутри единичной окружности. Пытался КИХ-фильтр посмотреть, там получается порядок 6500, отношение коэффициентов 8 порядков (десятичных !), так что опять только double, а контроллер нужен небольшой, вобщем, не прокатило.

Речь, собственно, вот о чем. Переходная характеристика фильтра (реакция на ступеньку) получилась весьма затянутая. А заказчик требует, чтобы ее в идеале вообще не было. Короче, надо как-то ее задавить. Типа сдемпфировать. Только как ? Репу чешу, ничего путного в голову не приходит. Но допускается сделать задержку сигнала. Типа оценили за 1-2 секунды текущее временное окно, скорректировали, и потом выдали на выход с той же частотой 800 Гц. И так непрерывно. Вот только это и придумал пока. А что же это должен быть за хитрый такой алгоритм демпфирования, не соображу ?



На графике - реакция фильтра на ступеньку.
Go to the top of the page
 
+Quote Post
andyp
сообщение Nov 25 2013, 13:33
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Длина ИХ и крутизна спада АЧХ - взаимосвязанные параметры. Получить одно без другого при синтезе фильтра нереально. Остается только шаманизм, основанный на знании того, что фильтруется (детекторы спада сигнала на входе фтльтра и регулировки уровня сигнала на выходе фильтра). Все это, разумеется, сугубо нелинейно.
Go to the top of the page
 
+Quote Post
V_G
сообщение Nov 25 2013, 14:04
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Замените Чебышева на Бесселя. При той же длине ПХ не будет переколебаний, но порядок фильтра возрастет.
Насколько я понимаю, для БИХ Бессель будет приближенный, но ПХ без переколебаний получить можно. А вот нулевой длины - нельзя даже теоретически.
Go to the top of the page
 
+Quote Post
MSP430F
сообщение Nov 25 2013, 14:28
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 20-05-13
Пользователь №: 76 911



Цитата(V_G @ Nov 25 2013, 18:04) *
Замените Чебышева на Бесселя. При той же длине ПХ не будет переколебаний, но порядок фильтра возрастет.
Насколько я понимаю, для БИХ Бессель будет приближенный, но ПХ без переколебаний получить можно. А вот нулевой длины - нельзя даже теоретически.


Да, это мысль. Но как в MATLAB рассчитать цифровой фильтр Бесселя ? Так как список доступных в fdatool БИХ фильтров:
buterwort
chebishev1
chebishev2
elliptic
max flat
least P-norm
const least P-norm

Нет там Бесселя...
Go to the top of the page
 
+Quote Post
andyp
сообщение Nov 25 2013, 15:28
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(MSP430F @ Nov 25 2013, 18:28) *
Да, это мысль. Но как в MATLAB рассчитать цифровой фильтр Бесселя ? Так как список доступных в fdatool БИХ фильтров:
buterwort
chebishev1
chebishev2
elliptic
max flat
least P-norm
const least P-norm

Нет там Бесселя...


Рассчитайте аналоговый прототип с besself а затем натравите билинейное преобразование bilinear. Болтанки в ИХ не будет, но будет пузырь, похожий на гауссовский колокол. Используйте tf2sos для того, чтобы получить секции 2-го порядка. Можете еще butterworth попробовать - он дребезжит, но слабо.
Забыл, еще потребуется lp2hp для преобразования прототипа в ФВЧ.

Сообщение отредактировал andyp - Nov 25 2013, 15:40
Go to the top of the page
 
+Quote Post
MSP430F
сообщение Nov 25 2013, 17:56
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 20-05-13
Пользователь №: 76 911



Цитата(andyp @ Nov 25 2013, 19:28) *
Рассчитайте аналоговый прототип с besself а затем натравите билинейное преобразование bilinear. Болтанки в ИХ не будет, но будет пузырь, похожий на гауссовский колокол. Используйте tf2sos для того, чтобы получить секции 2-го порядка. Можете еще butterworth попробовать - он дребезжит, но слабо.
Забыл, еще потребуется lp2hp для преобразования прототипа в ФВЧ.


Как-то все так не просто... Баттерворт я пробовал - хвост ничуть не меньше, чем у Чебышева. А еще мне нужна практически плоская АЧХ в полосе пропускания, а тут какой-то пузырь, говорите, будет. И что с ним делать ? И разве с Бесселем удастся добиться крутизны 48 дБ/октаву ?
Go to the top of the page
 
+Quote Post
andyp
сообщение Nov 25 2013, 18:35
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(MSP430F @ Nov 25 2013, 21:56) *
Как-то все так не просто... Баттерворт я пробовал - хвост ничуть не меньше, чем у Чебышева. А еще мне нужна практически плоская АЧХ в полосе пропускания, а тут какой-то пузырь, говорите, будет. И что с ним делать ? И разве с Бесселем удастся добиться крутизны 48 дБ/октаву ?

Пузырь будет. (ИХ, а соответственно и ЧХ Бесселя ближе к гауссу). На счет 48 dB на октаву не знаю. В первом же ответе написал, что требования противоречивые - охота чтобы АЧХ была прямоугольной, а ИХ не звенела. Тут компромисс надо искать

Сообщение отредактировал andyp - Nov 25 2013, 18:37
Go to the top of the page
 
+Quote Post
Alex11
сообщение Nov 25 2013, 22:34
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Посмотрите на такое шаманство:
Код
double DigFil(invar, initval, setic)
double invar, initval; int setic;
/******************************************************************************/
/* Filter Solutions Version 2009                 Nuhertz Technologies, L.L.C. */
/*                                                            www.nuhertz.com */
/*                                                            +1 602-279-2448 */
/* 6th Order Low Pass Chebyshev II                                            */
/* Bilinear Transformation with no Prewarping                                 */
/* Sample Frequency = 800.0 Hz                                                */
/* Cascade Form                                                               */
/* Arithmetic Precision = 8 Digits                                            */
/*                                                                            */
/* Pass Band Frequency = 500.0 mHz                                            */
/* Pass Band Attenuation = 3.010 dB                                           */
/*                                                                            */
/* Stop Band Ratio = 4                                                        */
/* Stop Band Frequency = 2.000 Hz                                             */
/* Stop Band Attenuation = 101.5 dB                                           */
/* Equalization Order = 1,  Equalized to 5 dB                                 */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* Input Variable Definitions:                                                */
/* Inputs:                                                                    */
/*   invar    double      The input to the filter                             */
/*   initvar  double      The initial value of the filter                     */
/*   setic    int         1 to initialize the filter to the value of initvar  */
/*                                                                            */
/* Option Selections:                                                         */
/* Standard C;   Initializable;            Internal States;   Optimized;      */
/*                                                                            */
/* There is no requirement to ever initialize the filter.                     */
/* The default initialization is zero when the filter is first called         */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* This software is automatically generated by Filter Solutions               */
/* no restrictions from Nuhertz Technologies, L.L.C. regarding the use and    */
/* distributions of this software.                                            */
/*                                                                            */
/******************************************************************************/

{
    double sumnum=0.0, sumden=0.0, newin=0.0; int i=0, j=0, iz=0;
    static double states[4][2] = {
        {0.0,0.0},
        {0.0,0.0},
        {0.0,0.0},
        {0.0,0.0}
    };
    static double znum[4][2] = {
        {1.0,-1.99632},
        {1.0,-1.9995066},
        {1.0,-1.9997356},
        {-1.0023878,1.0}
    };
    static double zden[4][2] = {
        {.99222992,-1.9922136},
        {.99446461,-1.9944487},
        {.99802545,-1.99801},
        {-.9976179,1.0}
    };
    if (setic==1){
        for (j=0;j<2;j++) states[0][j] = j] = j] =*initval;
        for (j=0;j<2;j++) states[1][j] = j] = j] = *initval;
        for (j=0;j<2;j++) states[2][j] = j] = j] = *initval;
        for (j=0;j<1;j++) states[3][j] = j] = j] = *initval;
        return initval;
    }
    else{
        newin = invar*-8.3241881e-06;
        for (i=0;i<4;i++){
            sumnum = sumden = 0.0;  iz=(i==3?1:2);
            for (j=0;j<iz;j++){
                sumden += states[i][j]*zden[i][j];
                sumnum += states[i][j]*znum[i][j];
                if (j<iz-1) states[i][j] = states[i][j+1];
            }
            states[i][iz-1] = (newin-sumden);
            sumnum += states[i][iz-1];
            newin = sumnum;
        }
        return newin;
    }
}

На картинке выглядит прилично, хотя совсем без колебаний не получается. Это только Бессель, но там с крутизной проблемы.
Go to the top of the page
 
+Quote Post
MSP430F
сообщение Nov 27 2013, 11:03
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 20-05-13
Пользователь №: 76 911



Цитата(andyp @ Nov 25 2013, 19:28) *
Рассчитайте аналоговый прототип с besself а затем натравите билинейное преобразование bilinear. Болтанки в ИХ не будет, но будет пузырь, похожий на гауссовский колокол. Используйте tf2sos для того, чтобы получить секции 2-го порядка. Можете еще butterworth попробовать - он дребезжит, но слабо.
Забыл, еще потребуется lp2hp для преобразования прототипа в ФВЧ.


Попробовал и в MATLAB, и в Nuhertz рассчитать фильтр Бесселя. Плохо все. Крутизна спада никакая даже у 20 порядка, хотя MATLAB не рекомендует и выше 20-го. Самый прикол, что реакция на ступеньку у такого фильтра ничуть не лучше, чем на картинке в первом посте темы.
Go to the top of the page
 
+Quote Post
soldat_shveyk
сообщение Nov 27 2013, 11:20
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 3-07-07
Из: С-Петербург
Пользователь №: 28 859



Ну, не надо так фатально и безысходно.
Не стоит зацикливаться на "типовых" фильтрах Чебышев-Баттерворт-Бессель и компания. Они мало чем отличаются друг от друга.
Основное достоинство этих фильтров в том, что они достаточно легко проектируются и есть много доступных программ расчета.
Попробуйте отстраниться от этого ширпотреба и задать себе вопрос - существует ли передаточная функция, которая бы удовлетворяла ваши требования:
имела минимальную длительность переходной характеристики при заданной АЧХ.
Если заказчик требует - еще не факт, что она такая передаточная функция существует. А если существует, то ее еще надо получить.
Задачу можно решить либо традиционным математическим методом, либо тупым перебором - благо сейчас у каждого в кармане практически неограниченная вычислительная мощь.
Matlab Вам в помощь.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 27 2013, 12:05
Сообщение #11


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Нужно следить за сигналом, и если он резко изменился, пропускать его в обход фильтра (или через какой-то более простой фильтр). А потом уже фильтровать по-полной. Это "типа идея такая".
Go to the top of the page
 
+Quote Post
MSP430F
сообщение Nov 27 2013, 12:23
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 20-05-13
Пользователь №: 76 911



Цитата(soldat_shveyk @ Nov 27 2013, 15:20) *
Не стоит зацикливаться на "типовых" фильтрах Чебышев-Баттерворт-Бессель и компания. Они мало чем отличаются друг от друга.


Мне всегда казалось, что они охватывают весь диапазон возможных стабильных фильтров от находящихся на гране стабильности (эллиптический) до почти "незвенящих" (Бесселя).

Сообщение отредактировал MSP430F - Nov 27 2013, 12:26
Go to the top of the page
 
+Quote Post
V_G
сообщение Nov 27 2013, 14:12
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Цитата(MSP430F @ Nov 27 2013, 21:03) *
Самый прикол, что реакция на ступеньку у такого фильтра ничуть не лучше, чем на картинке в первом посте темы.

Да, я ошибался, переколебаний нет у ФНЧ Бесселя, но не у ФВЧ.
Сравнил ФВЧ Чебышева 11 порядка и Бесселя 20 порядка с одинаковыми частотами среза. При подаче ступеньки длительность переколебаний у второго короче раз в 5, так что это совсем не ничуть.

При подаче ступеньки на ФВЧ переколебания будут присутствовать принципиально у любого фильтра, задача их минимизировать.

Теоретически наличие переколебаний объясняется следующим образом.
ПХ является интегралом от импульсной характеристики (ИХ). Переколебаний в ИХ ФВЧ и любого фильтра с нулевым коэффициентом передачи на постоянном токе не избежать: сумма коэффициентов любого цифрового фильтра равна коэффициенту передачи на постоянном токе. Т.е. отрицательных и положительных коэффициентов будет примерно поровну. При интегрировании (получении ПХ из ИХ) ситуация изменится мало.

Возможно, вам следует сосредоточиться на других характеристиках фильтра, почему зацепились за переходную?

ЗЫ. Всего одно переколебание будет давать ФВЧ аналог фильтра со скользящим средним (CIC). Он будет иметь дурную ЧХ, но считаться очень легко: 3 или 4 операции сложения-вычитания на отсчет, независимо от интервала усреднения.
Go to the top of the page
 
+Quote Post
MSP430F
сообщение Nov 27 2013, 16:47
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 20-05-13
Пользователь №: 76 911



Цитата(V_G @ Nov 27 2013, 18:12) *
Возможно, вам следует сосредоточиться на других характеристиках фильтра, почему зацепились за переходную?


Ну, если бы не переходная, то и темы бы не было. sm.gif Просто есть такое пожелание у руководителя проекта. Похоже, что невыполнимое. А у фильтра Бесселя 20-го порядка у меня получилось на 0,5 Гц -3 дБ, а на 0,25 Гц (октава вниз) аж целых -13 дБ. Да, конечно, на частотах ниже все в порядке, теоретические 6 дБ на порядок выполняются, но там они уже и не нужны. У Бесселя очень плохой (плавный) переход АЧХ от полосы пропускания к полосе задерживания.
Go to the top of the page
 
+Quote Post
rudy_b
сообщение Nov 28 2013, 06:38
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 888
Регистрация: 25-09-08
Из: Питер
Пользователь №: 40 458



Цитата(soldat_shveyk @ Nov 27 2013, 15:20) *
Ну, не надо так фатально и безысходно.
Не стоит зацикливаться на "типовых" фильтрах Чебышев-Баттерворт-Бессель и компания. Они мало чем отличаются друг от друга...

Совершенно справедливо. Например идеальная переходная характеристика получится если вы из входного сигнала вычтете тот же сигнал, но задержанный на 0.5 секунды (и даже 0.25 сек). Но частотка в полосе 0.5-300 Гц станет кривой.

Другой вариант, обеспечивающий быстрый экспоненциальный спад - вычитание из входного сигнала сигнала после интегрирующей RC цепочки (ее цифрового аналога). Ну и т.п.

Стандартные цифровые фильтры формируются из "близколежащих" отсчетов. А оптимальный фильтр получается комбинацией как "близколежащих", так и "далеко отстоящих" (в данном случае - до 0.5 сек) отсчетов. Обобщенных стандартных методов расчета нет,по крайней мере мне не попадались. Но можно найти некоторые частные случаи или сообразить самому (метод синтеза формы импульса из задержанных ступенек). Это используется при формировании импульсов заданной формы (гаусс, тругольник и т.п.) при обработке сигналов детекторов. Например экспоненциальное дифференцирование (к производной добавляется часть сигнала) позволяет резко сократить экспоненциальный спад у импульсов с экспоненциальным затуханием. Ну и т.п.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 15:12
Рейтинг@Mail.ru


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