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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Расчет БИХ фильтра, Зачем расчитывать фильтры высоких порядков Баттерворта или Чебышева, е
nsemenoff
сообщение Feb 12 2007, 20:05
Сообщение #16


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

Группа: Свой
Сообщений: 88
Регистрация: 12-02-07
Из: СПб
Пользователь №: 25 280



Цитата(ChipMicro @ Dec 31 2006, 19:02) *
Переходной участок можно сделать близким к ступеньке, но толку от этого не будет если пп/пз сущевственно неравномерна.


Можно сделать проще - БПФ+обрезание спектра+ОБПФ. Для сложных случаев АЧХ такой алгоритм намного предсказуемее, проще и надежнее. А главное, АЧХ потом можно будет подстраивать практически без переделки кода smile.gif
Go to the top of the page
 
+Quote Post
blackswan
сообщение Oct 6 2007, 09:18
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 4-02-07
Пользователь №: 25 046



передо мной стояла задача сделать полосовой фильтр для 14КГц... получил коэффициенты с помощью следующего в Матлабе:
[n14,Wn14]=cheb1ord(Wp14,Ws14,Rp,Rs);
[b14,a14]=cheby1(n14,Rp,Wn14);
получил фильтр 4 порядка по 9 коэффициентов А и В.... далее мне необходимо было промоделировать в проге на С++ этот процесс фильтрации, для этого использовал формулу y(n) = b(1) * x(n) + b(2) * x(n - 1) + ... + b(9) * x(n - 9) - a(1) * y(n - 1) - ... - a(9) * y(n - 9), ... в С++ всё работает и фильтрует... теперь мне то же самое необходимо сделать с помощью разбиения на секции 2 порядка (и проквантовать)... в МатЛабе это было сделано с помощью:
hq14=qfilt('df2', {b14, a14}, 'quantizer', [Pn Fl]);
hq1_14=sos(hq14,'up', 'inf');
получил 4 секции, и в Матлабе функцией filter всё фильтрует, но теперь мне надо то же самое повторить самому,но метаматической формулы для их реализации на С++ не получается составить... в чем-то ошибаюсь, но не могу понять, в чем.... помогите с этим вопросом...
Go to the top of the page
 
+Quote Post
SIA
сообщение Oct 6 2007, 17:51
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 462
Регистрация: 26-06-07
Пользователь №: 28 723



Цитата(Stanislav @ Jul 26 2006, 20:34) *
А почему ? Разве два БИХ фильтра соединеных последовательно не увеличат суммарную крутизну ? Частота среза также сдвинется. Получится, что для фильтра с бесконечным числом одинаковых звеньев при не равной нулю частоте среза (или полосе пропускания для ПФ) крутизна спада АЧХ будет конечной и вполне определённой величиной.

Неверно. Крутизна спада АЧХ как раз будет пропорционально расти по мере роста числа звеньев, но будет портиться вид полосы пропускания. Фильтр высокого порядка тем и отличается от каскадного соединения звеньев низких порядков, что обеспечивает хорошую АЧХ в полосе пропускания и резкий переход к полосе заграждения.
Go to the top of the page
 
+Quote Post
Stanislav
сообщение Oct 8 2007, 17:31
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987



Цитата(SIA @ Oct 6 2007, 21:51) *
Неверно. Крутизна спада АЧХ как раз будет пропорционально расти по мере роста числа звеньев, но будет портиться вид полосы пропускания. Фильтр высокого порядка тем и отличается от каскадного соединения звеньев низких порядков, что обеспечивает хорошую АЧХ в полосе пропускания и резкий переход к полосе заграждения.
Да что Вы говорите?
Не прошло и полутора лет, так сказать...
Поясните мысль, как это Вы с помощью одинаковых звеньев 2-го порядка получите чебышевскую АЧХ, скажем, с частотой среза в 1 кГц. Можете взять не чебышевскую, а любую другую "хорошую АЧХ в полосе пропускания и резкий переход к полосе заграждения."
А ещё почитайте учебники по данной тематике. На местном ФТП их есть несколько. Тогда, возможно, поймёте свою ошибку.

PS. Вы вообще поняли, о чём здесь речь, уважаемый? Или родили свой пост "от балды", лишь бы написать что-нибудь?


--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
Go to the top of the page
 
+Quote Post
blackswan
сообщение Oct 24 2007, 17:26
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 4-02-07
Пользователь №: 25 046



а почему меня игнорируют?... я не в той теме вопрос задал?... или он слишком глупый?
Go to the top of the page
 
+Quote Post
Stanislav
сообщение Oct 24 2007, 18:53
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987



Цитата(blackswan @ Oct 24 2007, 21:26) *
а почему меня игнорируют?... я не в той теме вопрос задал?... или он слишком глупый?
Каждая секция - это фильтр второго порядка. Коэфф-ты его даются при расчёте. Фильтруйте сигнал последовательно этими фильтрами, и всё будет ОК. smile.gif

Цитата(GinGreen @ Jan 13 2007, 14:55) *
Кстати от сюда следует, что при бесконечном числе одинаковых звеньев АЧХ Чебышевского фильтра превращается в конечную последовательность единиц (не ступенька !), а АЧХ фильтр Баттерворта во что- то похожее на дельта функцию...
Раз уж подняли тему...
Попробуйте рассчитать, во что выродится АЧХ бесконечного числа звеньев 2-го порядка, если потребовать для Чебышева пульсации в полосе пропускания, скажем, 1 дБ, а для Баттерворта полосу пропускания по -3 дБ, скажем, 1 кГц. smile.gif
Ведь эти критерии и лежат в основе расчёта данных фильтров.


--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
Go to the top of the page
 
+Quote Post
blackswan
сообщение Oct 25 2007, 05:30
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 4-02-07
Пользователь №: 25 046



Цитата(Stanislav @ Oct 24 2007, 21:53) *
Каждая секция - это фильтр второго порядка. Коэфф-ты его даются при расчёте. Фильтруйте сигнал последовательно этими фильтрами, и всё будет ОК. smile.gif

это я понял... и коэффициенты у меня есть... мне не до конца понятно, что является входными параметрами для каждой секции.... допустим у меня был простой фильтр 8-го порядка с 9-ю коэффициетами, чтоб получить 9-ый Y, надо использовать 9 входных отсчетов X и 8 предыдущих выходных отсчетов Y... теперь переходим к секциям... всё тот же 9-ый отсчет... в самую первую секцию я передаю уже Y8,Y7,X9,X8,X7 и провожу формулу Y9=B10*X9+B11*X8+B12*X7-A11*Y8-A12*Y7.... правильно?... а во вторую и последующие секции что я передаю в качестве трех X-ов и двух Y-ов...? если в качестве входного сигнала из трех X-ов передавать переменные отфильрованные три Y-ка (назовем их Y7',Y8',Y9'), то что передавать в качестве Y8,Y7 для полноты формулы?...
Go to the top of the page
 
+Quote Post
mse
сообщение Oct 25 2007, 06:42
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(blackswan @ Oct 25 2007, 09:30) *
это я понял... и коэффициенты у меня есть... мне не до конца понятно...

Посмотрите, какую структуру секций посчитал вам Матлаб: DF1, DF2, TDF... потом в хелпе посмотрите на эту структуру как на граф. И сразу "как солнце из-за тучь!!!" SOS-matrix вам должна быть разложена по секциям. Работы - с гулькин...
Go to the top of the page
 
+Quote Post
blackswan
сообщение Oct 25 2007, 14:46
Сообщение #24


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 4-02-07
Пользователь №: 25 046



у меня DF2 - каноническая... хелпа нет, но форму посмотрел в книге Сергиенко... и ничего не понял... то, что я увидел, это Yk=Xk*B0 + Xk-1*A1 + Xk-2*A2 - Xk-1*B1 - Xk-2*B2 ... но этого не может быть, так как нет предыдущих Y... я не умею читать графы... у вас есть программа на каком-нибудь языке программирования, я так лучше пойму...
Go to the top of the page
 
+Quote Post
blackswan
сообщение Oct 26 2007, 05:09
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 4-02-07
Пользователь №: 25 046



в одной книге я нашел объяснение... по нему получается вот такое...
//n-текущий отсчет, N- количество секций
xn=x[n];
w1=w2=0;
for (k=1;k<=N;k++)
{wk=xn - a[k][1]*w1 - a[k][2];
yk=b[k][0]*wk + b[k][1]*w1 + b[k][2]*w2;
w2=w1;
w1=wk;
xn=yk;
}
y[n]=yk;

выдает отсчеты, похожие на правду, но в формуле должны присутствовать еще коэффициент(ы) усиления G... и тут путаница... в книге он умножался на xn в формуле wk ... при описании разбиения функцией sos в MATLAB я использовал 'up' и 'inf' ... в книге Сергиенко написано, что inf - масштабирование коэффициентов bi производится исходя из L8-нормы АЧХ секций, а что это значит, не знаю... я многие варианты вставки G перепробовал...
Go to the top of the page
 
+Quote Post
mse
сообщение Oct 26 2007, 05:18
Сообщение #26


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(blackswan @ Oct 26 2007, 09:09) *
...я многие варианты вставки G перепробовал...

Вот код для SOS из QEDIT2000:

Код
static double     *m1,    /* intermediate storage */
        *m2;    /* intermediate storage */

static void cas_d1 () {
    int i;
    double *a, *b, s0, s1;
    
    a = den; b = num;  s0 = GAIN * get_input_data ();
    
    for (i = 0; i < SECTION; i++) {
          s1 = (s0 * b[0] + m1[i]) / a[0];
          m1[i] = m2[i] + s0 * b[1] - s1 * a[1];
          m2[i] = s0 * b[2] - s1 * a[2];
          s0 = s1; a += 3; b += 3;
    }
    send_output_data (s1);
}
Go to the top of the page
 
+Quote Post
blackswan
сообщение Oct 26 2007, 19:48
Сообщение #27


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 4-02-07
Пользователь №: 25 046



сделал... не получается.... при амплитуде сигнала в 60 после фильтрации получаются очень маленькие дроби... и на синусоиду не похоже вроде... хочется узнать, что такое L8-норма и какие коэффициенты усиления при этом формируются...
Go to the top of the page
 
+Quote Post
mse
сообщение Oct 27 2007, 09:21
Сообщение #28


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(blackswan @ Oct 26 2007, 23:48) *
сделал... не получается.... при амплитуде сигнала в 60 после фильтрации получаются очень маленькие дроби... и на синусоиду не похоже вроде... хочется узнать, что такое L8-норма и какие коэффициенты усиления при этом формируются...

Дык, понятно ;О) Плавуче надо. А на синус и не будет похоже. Треугольники-трапеццыи всякие...Скока точек на период?
Go to the top of the page
 
+Quote Post
blackswan
сообщение Oct 27 2007, 10:17
Сообщение #29


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 4-02-07
Пользователь №: 25 046



9 точек... только график несимметричен относительно Ох, и прыгает из + в - когда захочет... я посмотрел в другой книге - Ваш вариант из QEDIT2000 аналогичен моему, только это 3-я форма, а у меня 1-ая канонического представления, и они эквивалентны... я тоже вставлял Gain, который мне расчитал MATLAB вот так
xn=Gain*x[n];
и даже так уже в цикле
wk=Gain*xn - a[k][1]*w1 - a[k][2];
для всех секций и для одной... умножал все Bi на него для всех секций и для одной(в книге Сергиенко сказано , что L-бесконечная форма масштабирует Bi)... получаются очень маленькие дроби... разве такое может быть при задаваемой амплитуде в 60 во входном сигнале?
Go to the top of the page
 
+Quote Post
mse
сообщение Oct 27 2007, 10:44
Сообщение #30


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(blackswan @ Oct 27 2007, 14:17) *
... получаются очень маленькие дроби... разве такое может быть при задаваемой амплитуде в 60 во входном сигнале?

Для целочисленки есть такая проблема. Никуда не деться, увы. Пользуйте плывучку, если можете. Для напопробовать, загоните алгоритм в эксель или матлаб какой(чтобы формулы) и посчитайте. Если увидите что хотите, значит вот оно. Если нет, ищите ошибки.
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 Текстовая версия Сейчас: 24th July 2025 - 02:23
Рейтинг@Mail.ru


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