Перейти к содержанию
    

Проблеммы с цифровым фильтром.

Доброго времени суток всем!!!

 

Нужда заставила заняться меня цифровыми фильтрами. Скачал я програмку для расчёта фильтров "Filter Solutions V8" она ещё и генерирует код на С для реализации фильтра, который я и использовал для экспериментов.

 

Режекторные фильтры на 50 и 100 Гц работают просто замечательно. А вот с полосовым проблемма.

 

Вот фильтр:

 

Butterworth 1 порядка, с центральной частотой 20 Гц, полосой пропускания 10 Гц. Частота дискретизации 1024 Гц. программа расчитала мне следующую передаточную функцию:

post-21547-1179744150_thumb.jpg

 

Получилась вот такая расчётная АЧХ:

post-21547-1179744559_thumb.jpg

 

Код фильтра:

####################################################################

double sumnum, sumden; int i;

static double delay[4] = {0.0,0.0,0.0,0.0};

static double znum[4] = {

0.0,

-3.453957173e-02,

0.0,

3.453957173e-02

};

static double zden[3] = {

.1504718423,

.6323120647,

-1.765855935

};

 

float Loop(float invar)

{

sumden=0.0;

sumnum=0.0;

for (i=0;i<=2;i++){

delay = delay[i+1];

sumden += delay*zden;

sumnum += delay*znum;

}

delay[3] = invar-sumden;

sumnum += delay[3]*znum[3];

return sumnum;

}

 

###################################################################

 

При проверке на Atmega128 в Протеусе получил вот такое:

 

post-21547-1179744842_thumb.jpg

 

Входная синусойда 20 Гц - резонансная частота фильтра (вверху), внизу выходной сигнал фильтра.

 

В чём может быть причина такого поведения фильтра?

Помогите пожалуйста, сам пока не додумался. :(

 

Спасибо!

Изменено пользователем FisherVet

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

такое складывается впечатление что разрядности для выходного сигнала не хватает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сегодня ночью разобрался в чём проблемма. :yeah:

Оказывается дело не в фильтре. Фильтр исправно выдаёт вполне приличную синусойду вот только без постоянной составляющей и отсчёты одной из полуволн имеют отрицательные значения. А при выводе на ЦАП эти отсчёты рассматриваются как беззнаковая величина. И как результат такая интересная картинка. :)

 

Всем спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...