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

 
 
> Простейший БИХ-фильтр, Не пойму как коэффиценты сделать целочисельными
condor
сообщение Jul 26 2006, 13:39
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 93
Регистрация: 18-06-05
Из: Kyiv, Ukraine
Пользователь №: 6 126



Надо на 16-разрядном контроллере сделать ФНЧ.
Пытаюсь в МАТЛАБе смоделировать хотя бы фильтр второго порядка в виде канонического звена.
Коэффициенты получил с помощью fdatool.
С дробными коэффициентами все правильно работает, а как сделать их челочисельными?
Везде в литературе об этом вскользь упоминается как о само собой разумеющемся.
Если их просто умножить на 2^14, то из-за рекурсии при вычислении
w(n) = x(n) - a1*w(n-1) - a2*w(n-2)
w(n) быстро уходит в бесконечность. (На всякий случай: w - это промежуточное значение в каноническом звена; x - входной сигнал; ai - коэф.).
Подскажите, а то я сегодня туго соображаю smile.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
condor
сообщение Jul 26 2006, 15:34
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 93
Регистрация: 18-06-05
Из: Kyiv, Ukraine
Пользователь №: 6 126



Я все это делал.
Квантовал в fdatool.
Написано Stable: Yes

Quantized Numerator:
1
1.99591064453125
1
Quantized Denominator:
1
0.06439208984375
0.3143310546875
Quantized Gain:
0.3074951171875

С этими квантованными коэффициентами все работает отлично.
Но если их умножить на 2^14, то получим.
a1 = 0,0644*2^14 = 1055;
a2 = 0,3143*2^14 = 5150;
b1 = 1.99591*2^14 = 32701;
b2 = 1*2^14 = 16384;
sk = 0,3075*2^14 = 5038
Такие же коэффициенты генерятся в Сишном хедере.

w(n) = sk*x(n) - a1*w(n-1) - a2*w(n-2) ;
w(n) = 5038*x(n) - 1055*w(n-1) - 5150*w(n-2);
Начальные w я принял равными 0, а x(n) - какое-нибудь постоянное значение.
Теперь даже проделав вручную нескольно итераций видно, что w(n) нестабильно.
Думал что в формуле опечатка, но ведь с дробными кавантованными все работает, и даже АЧХ примерно совпадает.

Вот МАТЛАБовский код. Может я где-то ошибся, но кажется тут особо не где.

Nsamp = 2000;
wk = 0;
w1 = 1;
w2 = 1;
sk = 0.3075 * 2^14;
a1 = 0.0644 * 2^14;
a2 = 0.3143 * 2^14;
b0 = 1;
b1 = 1.996;
b2 = 1;

freq = 10;
t = 0:0.0005:1;
t (end) = [];

x = sin (2*pi*freq*t);

for n = 1:Nsamp
xn = x(n);
wk = sk*x(n) - a1*w1 - a2*w2;
y(n) = b0*wk + b1*w1 + b2*w2;
w2 = w1;
w1 = wk;
end
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 13th August 2025 - 21:53
Рейтинг@Mail.ru


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