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

 
 
> Цифровые фильтры, помогите разобраться
TViT
сообщение Nov 10 2010, 13:33
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
TViT
сообщение Nov 14 2010, 13:56
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
bahurin
сообщение Nov 14 2010, 14:32
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 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));


фильтр как фильтр, только В с А местами поменял.
Go to the top of the page
 
+Quote Post
AlikM
сообщение Nov 16 2010, 21:40
Сообщение #4


Участник
*

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



Цитата(bahurin @ Nov 14 2010, 17:32) *
Но одно кидается в глаза. У фильтра принято обозначать к-ты числителя ПФ через b, а к-ты знаменателя через A. У вас обозначения наоборот, потому что A[0] должно быть равно 1.


Интересно, это где же так принято и по каким книгам Вас учат (учили)?
Вот ссылка на "библию начинающего радиоинженера" РтЦиС Гоноровского (в простонародии Гоноревич): Гоноровский
И если взлянуть на страницу 500, то увидите что там как раз наоборот.
Хотя это совсем не принципиально, а вот что принципиально- это если бы автор темы не поленился и взял и синтезировал этот фильтр 2-го порядка на бумажке собственными руками, то у него и для более сложных фильтров вопросов больше бы не возникло.
А если надо быстро расчитать фильтр и получить его программную реализацию причем в С коде, тогда вам сюда FilterSolut
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


RSS Текстовая версия Сейчас: 17th June 2025 - 22:16
Рейтинг@Mail.ru


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