|
Цифровые фильтры, помогите разобраться |
|
|
|
Nov 10 2010, 13:33
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 1-12-06
Пользователь №: 23 016

|
Все вроде понятно по фильтрам. Задаешь частоты расчитываешь коэффициенты. Поэтому вопросы у меня как обычно чисто практические...
x(n)=входной массив выборок АЦП (n=0…1023) y(n)=выходной массив
стандартная формула Баттерворта на которую натыкаешься всюду:
y(n)=( a0*x(n)+a1*x(n-1)+a2*x(n-2) - (b1*y(n)+b2*y(n-1)) )
так вот не могу понять как при начальном значении первого(нулевого) значения выборки по адресу x(0) может быть a1*x(n-1) запрашивается значение из массива x(0-1) этот же выход из диапазона массива? Массив от 0 до 1023 –> 1024 выборки сделал значения по порядку:
y(n)=( a0*x(n)+a1*x(n+1)+a2*x(n+2) - (b1*y(n)+b2*y(n+1)) )
все заработало для ФВЧ, а для ПФ не работает толи коэффициенты не правильно подставляю, толи формула другая для ПФ там просто коэффициентов больше 5 вроде поэтому делаю так
y(n)=( a0*x(n)+a1*x(n+1)+a2*x(n+2)+ a3*x(n+3)+ a4*x(n+4) - (b1*y(n)+b2*y(n-1)+ b3*y(n+2)+b3*y(n+3)))
видел и такую формулу где-то:
y(n)=( a0*x(n)+2*a1*x(n-1)+a2*x(n-2) - (b1*y(n)+b2*y(n-1)) )
В общем полная каша в голове, может для Чебышева иначе делается, подскажите плиз…
Сообщение отредактировал TViT - Nov 10 2010, 13:34
|
|
|
|
|
 |
Ответов
|
Nov 14 2010, 13:56
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 1-12-06
Пользователь №: 23 016

|
В том то и дело что Матлаб не купленый... Мне покупать Матлаб только чтоб пару раз коэффициенты посчитать нет смысла я один ради интересса разбираюсь, выйдет что путное можно дальше о деньгах думать... вот код переписан из DSPlib AVR32: Код size = 1023 ' //1024 выборки For n = 0 To (size) sum1 = 0: sum2 = 0 For m = 0 To (ComboNum.ListCount - 1) ' кол-во коэф. "А" в списке 5-1 потому что в массиве от 0 sum1 = sum1 + (num(m) * Xn(n - m)) Next m For m = 0 To (ComboDen.ListCount - 1) 'коэф. "B" sum2 = sum2 + ((den(m) * Yn(n - m - 1)))
' //Yn(n) = (num(0) * Xn(n) + num(0) * Xn(n - 1) + num(0) * Xn(n - 2)) - (den(0) * Yn(n)+ den(1) * Yn(n-1) и т.д.) раньше так работало
Next m Yn(n) = sum1 - sum2 Next n коэффициенты из ciirf1 семплирование - 11025Гц ПФ - 800-900Гц: Код секция 1 A: 0.000780 0.000000 -0.001561 0.000000 0.000780 B: 1.000000 -3.469910 4.930680 -3.332800 0.922566
Сообщение отредактировал TViT - Nov 14 2010, 14:02
|
|
|
|
|
Nov 14 2010, 14:32
|

Местный
  
Группа: Участник
Сообщений: 240
Регистрация: 20-09-08
Пользователь №: 40 347

|
Код понять не могу, т.к. на VB не пишу. Но одно кидается в глаза. У фильтра принято обозначать к-ты числителя ПФ через b, а к-ты знаменателя через A. У вас обозначения наоборот, потому что A[0] должно быть равно 1. Возможно в этом ваша ошибка. Построил в матлабе АЧХ фильтра с приведенными к-тами: Код B=[0.000780 0.000000 -0.001561 0.000000 0.000780]; A=[1.000000 -3.469910 4.930680 -3.332800 0.922566];
h = zeros(1,1024); h(2) = 1; h = filter(B,A,h);
H = fft(h); Fs = 11025; f = Fs*(0:1023)/1024; plot(f,20*log10(H)); фильтр как фильтр, только В с А местами поменял.
|
|
|
|
|
Nov 16 2010, 21:40
|

Участник

Группа: Участник
Сообщений: 26
Регистрация: 5-10-09
Пользователь №: 52 767

|
Цитата(bahurin @ Nov 14 2010, 17:32)  Но одно кидается в глаза. У фильтра принято обозначать к-ты числителя ПФ через b, а к-ты знаменателя через A. У вас обозначения наоборот, потому что A[0] должно быть равно 1. Интересно, это где же так принято и по каким книгам Вас учат (учили)? Вот ссылка на "библию начинающего радиоинженера" РтЦиС Гоноровского (в простонародии Гоноревич): ГоноровскийИ если взлянуть на страницу 500, то увидите что там как раз наоборот. Хотя это совсем не принципиально, а вот что принципиально- это если бы автор темы не поленился и взял и синтезировал этот фильтр 2-го порядка на бумажке собственными руками, то у него и для более сложных фильтров вопросов больше бы не возникло. А если надо быстро расчитать фильтр и получить его программную реализацию причем в С коде, тогда вам сюда FilterSolut
|
|
|
|
Сообщений в этой теме
TViT Цифровые фильтры Nov 10 2010, 13:33 Джеймс Алгоритм одинаковый что для ФВЧ, что для ПФ. Меняю... Nov 10 2010, 18:07 TViT Джеймс Да вобщем и у меня так там последовательно ... Nov 10 2010, 19:53 DRUID3 Цитата(TViT @ Nov 10 2010, 15:33) так вот... Nov 11 2010, 02:11 TViT ...Понимаю что гдето моя ошибка... Продумаю по вни... Nov 11 2010, 08:05 TViT Все разобрался просто игнорирую ошибку выход из ди... Nov 11 2010, 10:45 TSerg Занятное решение. Nov 11 2010, 11:39 TViT TSerg Это если быстро сказать. На самом деле приве... Nov 12 2010, 07:34 bahurin Цитата(TViT @ Nov 12 2010, 10:34) TSerg Э... Nov 13 2010, 06:40 TSerg Я - пас.
Мой мозг отказался перевести сообщение №8... Nov 13 2010, 08:20 TViT Вам язык почесать негде? Или я что-то грубое сказа... Nov 13 2010, 08:24 bahurin Цитата(TViT @ Nov 13 2010, 11:24) Вам язы... Nov 13 2010, 11:36  DRUID3 Цитата(bahurin @ Nov 13 2010, 13:36) беги... Nov 14 2010, 06:02   bahurin Цитата(DRUID3 @ Nov 14 2010, 09:02) ...а ... Nov 14 2010, 06:31    DRUID3 Цитата(bahurin @ Nov 14 2010, 08:31) Непр... Nov 14 2010, 07:17     bahurin Цитата(DRUID3 @ Nov 14 2010, 10:17) Давай... Nov 14 2010, 08:01 TViT ЦитатаЭто что еще за агрессия? Вообще то это у вас... Nov 14 2010, 12:35 bahurin Цитата(TViT @ Nov 14 2010, 15:35) А что м... Nov 14 2010, 13:17 TViT вот тот же код на Си из AVR32 DSPlib:
Код {
int... Nov 14 2010, 15:02 bahurin Не видел таких конструкций.
не понятен смысл
Код... Nov 14 2010, 15:21 TViT Как ни странно все работает. Думаю так для произво... Nov 15 2010, 16:01 bahurin NUM[MWSPT_NSEC][3] это B (числитель)
DEN[MWSPT_NS... Nov 15 2010, 16:27 PetrovichKR ЦитатаИнтересно, это где же так принято и по каким... Nov 17 2010, 04:44 TViT Ребят кто разбирается в Scilab помогите еще, нужно... Dec 18 2010, 05:55 lisstret ЦитатаУ фильтра принято обозначать к-ты числителя ... Dec 19 2010, 20:52 TViT Все понятно с коэффициентами. Подскажите по сущест... Dec 20 2010, 13:24 TViT Нашел функцию casc — cascade realization of filter... Dec 22 2010, 04:17 PetrovichKR ЦитатаМне кажется что он писал так, как было приня... Dec 22 2010, 07:38 bahurin Цитата(PetrovichKR @ Dec 22 2010, 13:38) ... Dec 23 2010, 05:01 TViT Вот описание функции:
Кодfunction cels=casc(x,... Dec 23 2010, 16:48
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|