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

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

Замените Чебышева на Бесселя. При той же длине ПХ не будет переколебаний, но порядок фильтра возрастет.
Насколько я понимаю, для БИХ Бессель будет приближенный, но ПХ без переколебаний получить можно. А вот нулевой длины - нельзя даже теоретически.
Да, это мысль. Но как в MATLAB рассчитать цифровой фильтр Бесселя ? Так как список доступных в fdatool БИХ фильтров:
buterwort
chebishev1
chebishev2
elliptic
max flat
least P-norm
const least P-norm
Нет там Бесселя...
Цитата(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 для преобразования прототипа в ФВЧ.
MSP430F
Nov 25 2013, 17:56
Цитата(andyp @ Nov 25 2013, 19:28)

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

Как-то все так не просто... Баттерворт я пробовал - хвост ничуть не меньше, чем у Чебышева. А еще мне нужна практически плоская АЧХ в полосе пропускания, а тут какой-то пузырь, говорите, будет. И что с ним делать ? И разве с Бесселем удастся добиться крутизны 48 дБ/октаву ?
Пузырь будет. (ИХ, а соответственно и ЧХ Бесселя ближе к гауссу). На счет 48 dB на октаву не знаю. В первом же ответе написал, что требования противоречивые - охота чтобы АЧХ была прямоугольной, а ИХ не звенела. Тут компромисс надо искать
Alex11
Nov 25 2013, 22:34
Посмотрите на такое шаманство:
Код
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;
}
}
На картинке выглядит прилично, хотя совсем без колебаний не получается. Это только Бессель, но там с крутизной проблемы.
MSP430F
Nov 27 2013, 11:03
Цитата(andyp @ Nov 25 2013, 19:28)

Рассчитайте аналоговый прототип с besself а затем натравите билинейное преобразование bilinear. Болтанки в ИХ не будет, но будет пузырь, похожий на гауссовский колокол. Используйте tf2sos для того, чтобы получить секции 2-го порядка. Можете еще butterworth попробовать - он дребезжит, но слабо.
Забыл, еще потребуется lp2hp для преобразования прототипа в ФВЧ.
Попробовал и в MATLAB, и в Nuhertz рассчитать фильтр Бесселя. Плохо все. Крутизна спада никакая даже у 20 порядка, хотя MATLAB не рекомендует и выше 20-го. Самый прикол, что реакция на ступеньку у такого фильтра ничуть не лучше, чем на картинке в первом посте темы.
soldat_shveyk
Nov 27 2013, 11:20
Ну, не надо так фатально и безысходно.
Не стоит зацикливаться на "типовых" фильтрах Чебышев-Баттерворт-Бессель и компания. Они мало чем отличаются друг от друга.
Основное достоинство этих фильтров в том, что они достаточно легко проектируются и есть много доступных программ расчета.
Попробуйте отстраниться от этого ширпотреба и задать себе вопрос - существует ли передаточная функция, которая бы удовлетворяла ваши требования:
имела минимальную длительность переходной характеристики при заданной АЧХ.
Если заказчик требует - еще не факт, что она такая передаточная функция существует. А если существует, то ее еще надо получить.
Задачу можно решить либо традиционным математическим методом, либо тупым перебором - благо сейчас у каждого в кармане практически неограниченная вычислительная мощь.
Matlab Вам в помощь.
Нужно следить за сигналом, и если он резко изменился, пропускать его в обход фильтра (или через какой-то более простой фильтр). А потом уже фильтровать по-полной. Это "типа идея такая".
MSP430F
Nov 27 2013, 12:23
Цитата(soldat_shveyk @ Nov 27 2013, 15:20)

Не стоит зацикливаться на "типовых" фильтрах Чебышев-Баттерворт-Бессель и компания. Они мало чем отличаются друг от друга.
Мне всегда казалось, что они охватывают весь диапазон возможных стабильных фильтров от находящихся на гране стабильности (эллиптический) до почти "незвенящих" (Бесселя).
Цитата(MSP430F @ Nov 27 2013, 21:03)

Самый прикол, что реакция на ступеньку у такого фильтра ничуть не лучше, чем на картинке в первом посте темы.
Да, я ошибался, переколебаний нет у ФНЧ Бесселя, но не у ФВЧ.
Сравнил ФВЧ Чебышева 11 порядка и Бесселя 20 порядка с одинаковыми частотами среза. При подаче ступеньки длительность переколебаний у второго короче раз в 5, так что это совсем не ничуть.
При подаче ступеньки на ФВЧ переколебания будут присутствовать принципиально у любого фильтра, задача их минимизировать.
Теоретически наличие переколебаний объясняется следующим образом.
ПХ является интегралом от импульсной характеристики (ИХ). Переколебаний в ИХ ФВЧ и любого фильтра с нулевым коэффициентом передачи на постоянном токе не избежать: сумма коэффициентов любого цифрового фильтра равна коэффициенту передачи на постоянном токе. Т.е. отрицательных и положительных коэффициентов будет примерно поровну. При интегрировании (получении ПХ из ИХ) ситуация изменится мало.
Возможно, вам следует сосредоточиться на других характеристиках фильтра, почему зацепились за переходную?
ЗЫ. Всего одно переколебание будет давать ФВЧ аналог фильтра со скользящим средним (CIC). Он будет иметь дурную ЧХ, но считаться очень легко: 3 или 4 операции сложения-вычитания на отсчет, независимо от интервала усреднения.
MSP430F
Nov 27 2013, 16:47
Цитата(V_G @ Nov 27 2013, 18:12)

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

Просто есть такое пожелание у руководителя проекта. Похоже, что невыполнимое. А у фильтра Бесселя 20-го порядка у меня получилось на 0,5 Гц -3 дБ, а на 0,25 Гц (октава вниз) аж целых -13 дБ. Да, конечно, на частотах ниже все в порядке, теоретические 6 дБ на порядок выполняются, но там они уже и не нужны. У Бесселя очень плохой (плавный) переход АЧХ от полосы пропускания к полосе задерживания.
rudy_b
Nov 28 2013, 06:38
Цитата(soldat_shveyk @ Nov 27 2013, 15:20)

Ну, не надо так фатально и безысходно.
Не стоит зацикливаться на "типовых" фильтрах Чебышев-Баттерворт-Бессель и компания. Они мало чем отличаются друг от друга...
Совершенно справедливо. Например идеальная переходная характеристика получится если вы из входного сигнала вычтете тот же сигнал, но задержанный на 0.5 секунды (и даже 0.25 сек). Но частотка в полосе 0.5-300 Гц станет кривой.
Другой вариант, обеспечивающий быстрый экспоненциальный спад - вычитание из входного сигнала сигнала после интегрирующей RC цепочки (ее цифрового аналога). Ну и т.п.
Стандартные цифровые фильтры формируются из "близколежащих" отсчетов. А оптимальный фильтр получается комбинацией как "близколежащих", так и "далеко отстоящих" (в данном случае - до 0.5 сек) отсчетов. Обобщенных стандартных методов расчета нет,по крайней мере мне не попадались. Но можно найти некоторые частные случаи или сообразить самому (метод синтеза формы импульса из задержанных ступенек). Это используется при формировании импульсов заданной формы (гаусс, тругольник и т.п.) при обработке сигналов детекторов. Например экспоненциальное дифференцирование (к производной добавляется часть сигнала) позволяет резко сократить экспоненциальный спад у импульсов с экспоненциальным затуханием. Ну и т.п.
Цитата(rudy_b @ Nov 28 2013, 10:38)

Совершенно справедливо.
. Например экспоненциальное дифференцирование (к производной добавляется часть сигнала) позволяет резко сократить экспоненциальный спад у импульсов с экспоненциальным затуханием. Ну и т.п.
Можно я опять глупость скажу... Скажу, что линейный фильтр не даст ТС того, что он хочет. А вот нелинейное преобразование... Например, ограничиваем скорость нарастания до максимальной скорости "нормального" сигнала для борьбы со ступенькой. До фильтра. Или и после.
rudy_b
Nov 28 2013, 10:08
Вы получите разное поведение системы при ступеньках с разными перепадами. Но ТС недостаточно точно описал задачу, поэтому трудно сказать что-то конкретное.
Нелинейные методы всегда дают побочные эффекты, которые непросто учесть. Их применение оправдано в весьма ограниченных классах задач. Например если известен момент появления сигнала (интеграл заданной длительности с весовой функцией) или его форма (корреляция) или его полярность (укорочение обратного выброса) и т.п.
В данном случае, если точно известна форма ступеньки (помехи), то можно измерить ее амплитуду и момент прихода и, затем, просто вычесть ее из сигнала. Т.е. нелинейные методы разумно использовать при наличии каких-то специфических свойств сигналов или помех.
В данном случае, чтобы дать какие-то рекомендации, нужно более точно понимать общую задачу и знать свойства сигнала и помех. Приведенный конкретный метод ее решения (частотная фильтрация) недостаточен для серьезного анализа и, возможно, не оптимален.
MSP430F
Nov 28 2013, 12:07
Цитата(rudy_b @ Nov 28 2013, 14:08)

Но ТС недостаточно точно описал задачу, поэтому трудно сказать что-то конкретное.
Ну не знаю, какой смысл Вы вкладываете в слово "недостаточно" ?

Если интересует физика, то это вибродатчик. Выделение полосы частот обязательно и обсуждению не подлежит. Также нужен крутой спад на границах полосы пропускания. А борьба с реакцией на ступеньку - это желание уменьшить время "колебательности" на выходе датчика при резком, например, прекращении вибрации. Вибрации уже нет, а на выходе напряжение еще колеблется несколько секунд. Может, и правда, надо оценивать уровень на входе (например, пик-пик), и если он упал, то надо с задержкой, например, в 1-2 секунды, уменьшать коэффициент передачи. А потом надо его когда-то обратно поднимать... Что-то нелинейное получается. А может, как-то все проще можно сделать.
rudy_b
Nov 28 2013, 19:54
Цитата(MSP430F @ Nov 28 2013, 16:07)

...Если интересует физика, то это вибродатчик. Выделение полосы частот обязательно и обсуждению не подлежит. Также нужен крутой спад на границах полосы пропускания...
Этой информации также недостаточно. Но, если вы считаете, что этого хватит... Продолжайте строить крутые фильтры.
Edashkin
Nov 30 2013, 15:04
Если бы такая задача стояла передо мной, недолго думая, употребил бы 6 фильтров 2-го порядка: 3 НЧ, 3 ВЧ. Причем частоты среза и типы фильтров сделал бы чуть-чуть различными, на модельке подобрал бы минимальный "хвостик"
MSP430F
Nov 30 2013, 16:11
Цитата(Edashkin @ Nov 30 2013, 19:04)

Если бы такая задача стояла передо мной, недолго думая, употребил бы 6 фильтров 2-го порядка: 3 НЧ, 3 ВЧ. Причем частоты среза и типы фильтров сделал бы чуть-чуть различными, на модельке подобрал бы минимальный "хвостик"
Что-то я Вас не понял... Хвост от ФНЧ на 300 Гц совершенног незначительный в моем случае. Так что речь, по сути, идет только про ФВЧ с частотой среза 0,5 Гц. Нужен спад 48 дБ на октаву, то есть на 0,25 Гц нужно иметь ослабление -48 дБ. Кстати, на 0,5 Гц стандартные -3 дБ мне тоже много, допустимо иметь не более -1 дБ. Вот такие строгости и при этом еще минимильный хвост колебаний.
Объясните, что Вы имели в виду, когда писали про 6 фильтров.
polyakovav
Nov 30 2013, 17:53
Может отфильтровать 0.5 Гц CIC-фильтром с корректором, и вычесть из входного? Матлаба под рукой нет, но вроде сильно звенеть не должен.
MSP430F
Nov 30 2013, 19:29
Цитата(polyakovav @ Nov 30 2013, 21:53)

Может отфильтровать 0.5 Гц CIC-фильтром с корректором, и вычесть из входного? Матлаба под рукой нет, но вроде сильно звенеть не должен.
Очень интересно! То есть вместо ФВЧ сделать ФНЧ с частотой среза те же 0,5 Гц, а затем вычесть из входного сигнала ? Что-то в этом есть! А почему Вы предложили именно CIC-фильтр для этого ?
Я писал именно про это на предыдущей странице: ФВЧ для фильтра с линейной фазой как раз делается из ФНЧ методом вычитания из входного сигнала. И пришел к выводу (как и Tanya, как и другие), что задача в том виде, как она поставлена, линейной обработкой не решается.
Для нелинейной обработки исходных данных недостаточно, об этом тоже писали. Нужен диапазон входных сигналов, нужно определение помехового сигнала и допустимого отклика на него на выходе. Если вы сами (хотя бы для себя) не сформулируете эти требования, задачи вы не решите.
Ну, ежели человеку так уж нужна частотка, то есть стандартный способ, который очень нравится новичкам. Берем фурье, урезаем в нем ненужные частоты (грубо зануляем или спец методами), затем обратным преобразованием восстанавливаем сигнал. Но уж про форму импульса полученного результата спрашивать не стоит. ТС будет интересно посмотреть на результат - многое поймет.
ТС, советую Вам почитать про эффект Гиббса, станет понятно, почему у сигнала, имеющего исходно в своем спектре "много" частот и так стремительно теряющего их внутри фильтра появляются выбросы.
например
http://physics.mipt.ru/S_III/Metod_3/G_t_a...txt-arph8mld9gbкак уже сказано ранее, никакой аналоговый(цифровой на основе аналогового) фильтр с относительно равномерной АЧХ в полосе пропускания и резким спадом АЧХ не даст ПХ без колебаний.
для вашей задачи скорее всего и ненужна такая "крутая" фильтрация с резкой АЧХ, может быть, Вам стоит посмотреть в сторону вейвлет преобразований?
Цитата(shf_05 @ Dec 3 2013, 08:23)

как уже сказано ранее, никакой аналоговый
Хотели сказать - линейный?
MSP430F
Dec 3 2013, 06:41
Цитата(shf_05 @ Dec 3 2013, 08:23)

для вашей задачи скорее всего и ненужна такая "крутая" фильтрация с резкой АЧХ
К сожалению, нужна. Выше я об этом уже писал, возможно, слишком жестко, что некоторые даже вроде обиделись.

Просто есть живой аналогичный датчик (аналоговый) с крутым спадом АЧХ и небольшим выбросом-хвостом затухающих колебаний при прекращении вибрации. Возможно, там есть какие-то нелинейности, но схема неизвестна. Сейчас стоит задача реализовать такой же датчик в цифре. Отсюда и родилась эта тема, так как первые попытки моделирования цифрового фильтра с крутым спадом АЧХ показали, что затухания у него длятся заметно дольше, чем у аналогового конкурента.
Цитата(MSP430F @ Dec 3 2013, 10:41)

Возможно, там есть какие-то нелинейности, но схема неизвестна. Сейчас стоит задача реализовать такой же датчик в цифре.
Так проверьте, подавая ступеньки разной величины.
MSP430F
Dec 3 2013, 07:45
Цитата(Tanya @ Dec 3 2013, 11:07)

Так проверьте, подавая ступеньки разной величины.
Уж нет его у нас, показали и забрали.
ИМХО-
1. в аналоге получить 48дБ это слишком круто по крайней мере для таких частот, фильтры на линиях задержки думаю в аналоге там не могут быть, сами знаете почему.
2. если все же там такой крутой фильтр, который не выдает колебаний,значит там есть нелинейности либо фильтр имеет очень неравномерную АЧХ в полосе пропускания (что-то типа 50 RC фильтров каскадно ??? )
Вам важна амплитуда сигнала на выходе датчика или важно только только "есть/нет"? если 2-е, то
1. примените ограничитель максимальной амплитуды на входе и сигнал большой амплитуды не даст больших колебаний на выходе и "принимайте" на выходе сигнал с уровнем только выше чем уровень выбросов, или 2. примените динамическое ограничение амплитуды на входе или выходе (типа АРУ). или 3. можно много чего еще придумать.
кстати сигнал с датчика синус? меандр? труегольник, шум? - без знания этого алгоритм не придумать.
только теперь это не просто "фильтрация", а обработка сигнала.
Цитата(MSP430F @ Dec 3 2013, 12:41)

Сейчас стоит задача реализовать такой же датчик в цифре. Отсюда и родилась эта тема, так как первые попытки моделирования цифрового фильтра с крутым спадом АЧХ показали, что затухания у него длятся заметно дольше, чем у аналогового конкурента.
реализацию фильтра хотя бы 10-го порядка в аналогедавайте представим, если это только не спец ИС, которые имеют фильтр внутри - получается же нескольких штук ОУ + куча резисторов и конденсаторов..в принципе реализуемо, но все же врядли имеются крутые спады без колебаний ПХ.
ПС- ваше требование 0,5Гц весьма проблематично укладывается в программе расчета ПФ, подозреваю, что в аналоговом прототипе вашего изделия использован ФНЧ 0-300Гц + последовательно простой разделительный конденсатор, отсекающий постоянную составляющую.
Тогда фильтр становится много проще и возможно колебания в ФНЧ будут быстрее заканчиваться и/или иметь меньший уровень.
Цитата(MSP430F @ Dec 3 2013, 10:41)

...Просто есть живой аналогичный датчик (аналоговый) с крутым спадом АЧХ и небольшим выбросом-хвостом затухающих колебаний при прекращении вибрации. Возможно, там есть какие-то нелинейности, но схема неизвестна. Сейчас стоит задача реализовать такой же датчик в цифре. Отсюда и родилась эта тема, так как первые попытки моделирования цифрового фильтра с крутым спадом АЧХ показали, что затухания у него длятся заметно дольше, чем у аналогового конкурента.
А вы измеряли на этом датчике реальные значения крутизны спада АЧХ и ее равномерности в заданном диапазоне частот?
Уменьшить время затухания ПХ можно если снизить требования либо к крутизне спада, либо к равномерности АЧХ в полосе пропускания. Если при заданных крутизне спада и неравномерности АЧХ измеренное время затухания меньше, чем расчетное - думайте, кто-то вас надул.
В аналоге гораздо труднее сделать нужную АЧХ чем в цифре. И если у вас даже в цифре не получается - что-то не так.
Уменьшить выброс можно только каскадированием малоточечных КИХ-фильтров.
Цитата(Corner @ Dec 4 2013, 02:58)

Уменьшить выброс можно только каскадированием малоточечных КИХ-фильтров.
Каким образом это уменьшит выброс при сохранении требований к частоте среза и крутизне спада?
Не знаю, можно ли решить проблему нелинейной обработкой (надо думать и экспериментировать с реальной аппаратурой), но в свете проявившихся теней от новых обстоятельств, ТС стоит серьезнейшим образом обосновать требования к частоте среза и к крутизне спада ЧХ: простое повышение частоты среза с 0.5 до 1 Гц даст уменьшение длины ПХ в 2 раза. Про требования к амплитуде выбросов (в сравнении с амплитудой сигнала) мы не знаем до сих пор.
Иногда "прямые" или "нелинейные" методы от "чисто" DSP не помогают.
Помогают методы, взятые от систем управления ( управление по модели, управление конечным состоянием, те же fuzzy )
Вспоминаю один из таких эпизодов.
Имелся очень точный и чувствительный датчик, связанный с механической системой и сам, являющийся ее подмножеством, но нам никак не удавалось победить его паразитную мех. составляющую.
Традиционная фильтрация не спасала, стоял звон.
В итоге, проблему удалось решить комплексированием точного, но "беспокойного" датчика и грубого, но без-инерционного.
В общем-то, стандартная ситуация аля "Фильтр Брауна"
Точный датчик был исследован и сняты динамические характеристики, создана мат. модель (2-3 порядка, колебательное затухающее звено), ну так - по памяти.
Грубый датчик заводил данные на мат. модель, а ее выход вычитался из данных точного датчика.
Остатки дофильтровывались.
До Калмана мы не докатились, он оказался лишним.
Цитата(V_G @ Dec 3 2013, 21:43)

Каким образом это уменьшит выброс при сохранении требований к частоте среза и крутизне спада?
Не знаю, можно ли решить проблему нелинейной обработкой (надо думать и экспериментировать с реальной аппаратурой), но в свете проявившихся теней от новых обстоятельств, ТС стоит серьезнейшим образом обосновать требования к частоте среза и к крутизне спада ЧХ: простое повышение частоты среза с 0.5 до 1 Гц даст уменьшение длины ПХ в 2 раза. Про требования к амплитуде выбросов (в сравнении с амплитудой сигнала) мы не знаем до сих пор.
Вы каскадируете много RC-цепочек. Выброса нет в принципе, а крутизна пропорциональна числу цепочек. Каждая RC-цепочка это мягкий интегратор с ограничением в цифре.
sifadin
Dec 4 2013, 21:35
Цитата(MSP430F @ Nov 25 2013, 16:29)

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

На графике - реакция фильтра на ступеньку.
Инициализировать фильтр первым отсчетом.
т.е начальные значения не нулевые, а такие какие установились бы при бесконечно долгой подаче первого отсчета
Цитата(Corner @ Dec 5 2013, 02:04)

Вы каскадируете много RC-цепочек. Выброса нет в принципе, а крутизна пропорциональна числу цепочек. Каждая RC-цепочка это мягкий интегратор с ограничением в цифре.
Не путайте ФНЧ и ФВЧ. Топикстартеру нужен ФВЧ, а интегратор - это ФНЧ.
ФВЧ принципиально имеет выброс ПХ, примерно равный величине ступеньки.
Цитата(V_G @ Dec 5 2013, 05:30)

Не путайте ФНЧ и ФВЧ. Топикстартеру нужен ФВЧ, а интегратор - это ФНЧ.
ФВЧ принципиально имеет выброс ПХ, примерно равный величине ступеньки.
Если сделать ФНЧ со срезом 200 Гц, то выброса не будет
blackfin
Dec 5 2013, 16:45
Цитата(Corner @ Dec 5 2013, 20:02)

Если сделать ФНЧ со срезом 200 Гц, то выброса не будет
Так если вообще не делать ФНЧ, то выброса тоже не будет..

Но у ТС, КМК, несколько иная задача..
>А что же это должен быть за хитрый такой алгоритм демпфирования,
Это уже не фильтрация и даже не обработка сигналов, это адаптивное управление динамической измерительной системой (вплоть до перестройки ее структуры) в переходных режимах.
Иногда это достигается управлением конечным состоянием с заданными ограничениями, а, в частных случаях - задача решается комплексированием датчиков, о чем говорил выше и пр.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.