Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Подскажите по цифровым фильтрам, ни как не разберусь с fixed point
Отправлено
bt1024 23 октября 2009, г. 15:52
Что такое Num.State и Den.State, ну понятно что это состояние нумераторов и денумераторов, но какое именно?
Я про первую прямую форму фильтра. Коэф. считаю в матлабе.
Вот код секции второго порядка.
Скажите правильно ли выбрано масшабирование
Number of Sections : 1
Stable : Yes
Arithmetic : fixed
Numerator : s8,6 -> [-2 2)
Denominator : s8,6 -> [-2 2)
Scale Values : s8,7 -> [-1 1)
Input : s8,7 -> [-1 1)
Output : s8,0 -> [-128 128)
Numerator State : s18,12 -> [-32 32)
Denominator State : s18,12 -> [-32 32)
Numerator Prod : s26,18 -> [-128 128)
Denominator Prod : s26,18 -> [-128 128)
Numerator Accum : s24,16 -> [-128 128)
Denominator Accum : s24,16 -> [-128 128)
Round Mode : convergent
Почему Numerator Prod и Denominator Prod имеют 26 разрядов, в матлабе я выбирал режим "полная разрядность" умножителя, и получил такой результат. Но по сути умножаются две 8 битные величины, должно быть 16, а аккумулятор должен быть на 2 бита больше. К слову, аккумулятор был выбран 24 бита специально.
b = [64, 0, -64]
a = [64, -112, 49]
scale = [15, 127]
base = 7
x = [0, 0, 0]
y = [0, 0, 0]
Acc = 0
out = []
for i in range(len(s)):
y[2] = y[1]
y[1] = y[0]
x[2] = x[1]
x[1] = x[0]
x[0] = s[i]
Acc = x[0] * b[0]
Acc += x[2] * b[2]
Acc *= scale[0]
Acc >>= base
Acc -= y[1] * a[1]
Acc -= y[2] * a[2]
Acc *= scale[1]
Acc >>= base
y[0] = (Acc/b[0])
out.append( y[0])
Где сдесь Num.State и Den.State? Это состояние аккумулятора Acc перед масшабированием?
Составить ответ | Вернуться на конференцию.
Ответы