|
IIR фильтр с помощью dsPIC FD Lite |
|
|
|
Jan 28 2009, 18:46
|
Участник

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

|
Попробовал рассчитать IIR фильтр 2го порядка для dsPICа с помощью dsPIC Filter Design Lite от микрочипа, хотя на самом деле это клон QED от Momentum, фильтр рассчитался, всё ок , даже эта программка выдаёт готовые *.s,h файла фильтра для добавления в проект, стало интересно как там реализован фильтр, я ожидал увидеть что то вроде: Y(n) = b0*Xn + b0*X(n-1) + b0*X(n-2) - a1*Y(n-1) - a2*Y(n-2) , собственно аналогичная формула и приведена в мануале на Filter Design, однако в исходнике основная часть кода следующая: Код DO w4, transposeSectionLoop MAC w5*w6, a, [w8]+=2, w5 LAC [w11], #1, b SAC.R a, #-1, w7 MAC w5*w6, b, [w8]+=2, w5 MAC w5*w7, b, [w8]+=2, w5 SAC.R b, #-1, [w10++] MPY w5*w6, b, [w8]+=2, w5 SAC.R a, #-1, w6 LAC [w10], #1, a MAC w5*w7, b, [w8]+=2, w5 transposeSectionLoop: SAC.R b, #-1, [w11++] Целиком файл во вложении, как я понял, этот кусок выполняется 1 раз для одного семпла, при условии, что фильтр 2го порядка. Разложив его по кусочкам ,не совсем понятно, что за алгоритм они применили, или как его перетасовали, коэффициенты используются все 5 штук, а вот входных семплов почему то у меня получилось только 2, с выходными тоже не всё ясно… или тут формула просто какаято другая??? неработает почему то вложение
Сообщение отредактировал Angelo - Jan 28 2009, 18:52
|
|
|
|
|
 |
Ответов
|
Jan 29 2009, 12:27
|
Частый гость
 
Группа: Свой
Сообщений: 95
Регистрация: 31-07-05
Из: Полоцк Беларусь
Пользователь №: 7 227

|
Цитата(Angelo @ Jan 28 2009, 20:46)  Попробовал рассчитать IIR фильтр 2го порядка для dsPICа с помощью dsPIC Filter Design Lite от микрочипа, хотя на самом деле это клон QED от Momentum, фильтр рассчитался, всё ок , даже эта программка выдаёт готовые *.s,h файла фильтра для добавления в проект, стало интересно как там реализован фильтр, я ожидал увидеть что то вроде: Y(n) = b0*Xn + b0*X(n-1) + b0*X(n-2) - a1*Y(n-1) - a2*Y(n-2) , собственно аналогичная формула и приведена в мануале на Filter Design, однако в исходнике основная часть кода следующая: Код DO w4, transposeSectionLoop MAC w5*w6, a, [w8]+=2, w5 LAC [w11], #1, b SAC.R a, #-1, w7 MAC w5*w6, b, [w8]+=2, w5 MAC w5*w7, b, [w8]+=2, w5 SAC.R b, #-1, [w10++] MPY w5*w6, b, [w8]+=2, w5 SAC.R a, #-1, w6 LAC [w10], #1, a MAC w5*w7, b, [w8]+=2, w5 transposeSectionLoop: SAC.R b, #-1, [w11++] Целиком файл во вложении, как я понял, этот кусок выполняется 1 раз для одного семпла, при условии, что фильтр 2го порядка. Разложив его по кусочкам ,не совсем понятно, что за алгоритм они применили, или как его перетасовали, коэффициенты используются все 5 штук, а вот входных семплов почему то у меня получилось только 2, с выходными тоже не всё ясно… или тут формула просто какаято другая??? неработает почему то вложение Это - Transposed Direct Form II biquad filter structure, в формуле ошибочка: Y(n) = b0*Xn + b1*X(n-1) + b2*X(n-2) - a1*Y(n-1) - a2*Y(n-2) - так должно быть.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|