|
|
  |
Расчет БИХ фильтра, Зачем расчитывать фильтры высоких порядков Баттерворта или Чебышева, е |
|
|
|
Oct 6 2007, 09:18
|
Участник

Группа: Участник
Сообщений: 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 всё фильтрует, но теперь мне надо то же самое повторить самому,но метаматической формулы для их реализации на С++ не получается составить... в чем-то ошибаюсь, но не могу понять, в чем.... помогите с этим вопросом...
|
|
|
|
|
Oct 6 2007, 17:51
|
Местный
  
Группа: Свой
Сообщений: 462
Регистрация: 26-06-07
Пользователь №: 28 723

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

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

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

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

|
а почему меня игнорируют?... я не в той теме вопрос задал?... или он слишком глупый?
|
|
|
|
|
Oct 24 2007, 18:53
|

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

|
Цитата(blackswan @ Oct 24 2007, 21:26)  а почему меня игнорируют?... я не в той теме вопрос задал?... или он слишком глупый? Каждая секция - это фильтр второго порядка. Коэфф-ты его даются при расчёте. Фильтруйте сигнал последовательно этими фильтрами, и всё будет ОК.  Цитата(GinGreen @ Jan 13 2007, 14:55)  Кстати от сюда следует, что при бесконечном числе одинаковых звеньев АЧХ Чебышевского фильтра превращается в конечную последовательность единиц (не ступенька !), а АЧХ фильтр Баттерворта во что- то похожее на дельта функцию... Раз уж подняли тему... Попробуйте рассчитать, во что выродится АЧХ бесконечного числа звеньев 2-го порядка, если потребовать для Чебышева пульсации в полосе пропускания, скажем, 1 дБ, а для Баттерворта полосу пропускания по -3 дБ, скажем, 1 кГц. Ведь эти критерии и лежат в основе расчёта данных фильтров.
--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
|
|
|
|
|
Oct 25 2007, 05:30
|
Участник

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

|
Цитата(Stanislav @ Oct 24 2007, 21:53)  Каждая секция - это фильтр второго порядка. Коэфф-ты его даются при расчёте. Фильтруйте сигнал последовательно этими фильтрами, и всё будет ОК.  это я понял... и коэффициенты у меня есть... мне не до конца понятно, что является входными параметрами для каждой секции.... допустим у меня был простой фильтр 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 для полноты формулы?...
|
|
|
|
|
Oct 25 2007, 14:46
|
Участник

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

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

Группа: Участник
Сообщений: 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 перепробовал...
|
|
|
|
|
Oct 26 2007, 05:18
|
Знающий
   
Группа: Свой
Сообщений: 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); }
|
|
|
|
|
Oct 26 2007, 19:48
|
Участник

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

|
сделал... не получается.... при амплитуде сигнала в 60 после фильтрации получаются очень маленькие дроби... и на синусоиду не похоже вроде... хочется узнать, что такое L8-норма и какие коэффициенты усиления при этом формируются...
|
|
|
|
|
Oct 27 2007, 10:17
|
Участник

Группа: Участник
Сообщений: 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 во входном сигнале?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|