Попробовал рассчитать 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