[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
миниатюрный аудио-видеорекордер mAVR

Отправлено ВН 30 июля 2002 г. 21:24
В ответ на: Опять про фильтры - где я неправ? отправлено VVT 30 июля 2002 г. 17:04

Неточности у Вас есть.
for(i=0; i<=Order; i++) OutputData[i]=InputData[i]; -зачем?
for (k=0; k<=Order; k++) s1=s1+a[k]*InputData[i-k]; - надо бы что-нибудь:
for (k=0; k<=Order; k++)
{
if((i-k)<0) continue;
s1=s1+a[k]*InputData[i-k];
}
Или это у Вас есть, а в сообщении просто не написано ?
Впрочем к гудежу не приведет, хотя результат малость попортится.
for (k=1;k<= Order; k++) s2=s2+b[k-1]*OutputData[i-k]; - аналогично,
надо бы вставить if((i-k)<0) continue;
Но тоже гудежа не будет.
Явных ошибок, приводящих к гудежу, в Вашем тексте не видно.
Дело или в коэффициентах - рассчитаны/округлены-усечены неправильно,
особенно b и при целочисленной арифметике. Или с разрядностью вычислений ошиблись. То есть, например, s2,b,OutputData об'явлены как 16-ти разрядные. Но, при этом, произведение b*OutputData должно быть 32-х разрядным, соответственно и s2 тоже 32-х разрядным.
Другая ситуация, но из этого же ряда, s2 после ORDER суммирований не убирается в отведенную ему сетку. Т.е. переполнения.
Есть еще одна тонкость при использовании чисел с фиксированной запятой. Умножение в C выполняются над целыми, тогда как числа с фикс. запятой не обязательно целые, они могут быть по модулю и меньше 1, или вообще иметь вид n.m. n разрядов на целую часть, оставшиеся m -на дробную.
Форматы чисел нужно учитывать при умножении. У Вас же написано обычное умножение.
В первую очередь касается коэффициентов, особенно b.
М.б. Вы форматы и учитываете, а может вообще плавающие к-ты используете, но из текста этого не видно.
Причина, мне кажется, где-то здесь.
Или у Вас не гудеж, а просто слабо затухающий процесс, но все таки затухающий.


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru