FisherVet 0 21 мая, 2007 Опубликовано 21 мая, 2007 (изменено) · Жалоба Доброго времени суток всем!!! Нужда заставила заняться меня цифровыми фильтрами. Скачал я програмку для расчёта фильтров "Filter Solutions V8" она ещё и генерирует код на С для реализации фильтра, который я и использовал для экспериментов. Режекторные фильтры на 50 и 100 Гц работают просто замечательно. А вот с полосовым проблемма. Вот фильтр: Butterworth 1 порядка, с центральной частотой 20 Гц, полосой пропускания 10 Гц. Частота дискретизации 1024 Гц. программа расчитала мне следующую передаточную функцию: Получилась вот такая расчётная АЧХ: Код фильтра: #################################################################### 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 в Протеусе получил вот такое: Входная синусойда 20 Гц - резонансная частота фильтра (вверху), внизу выходной сигнал фильтра. В чём может быть причина такого поведения фильтра? Помогите пожалуйста, сам пока не додумался. :( Спасибо! Изменено 21 мая, 2007 пользователем FisherVet Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Realking 0 21 мая, 2007 Опубликовано 21 мая, 2007 · Жалоба такое складывается впечатление что разрядности для выходного сигнала не хватает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FisherVet 0 22 мая, 2007 Опубликовано 22 мая, 2007 · Жалоба Сегодня ночью разобрался в чём проблемма. :yeah: Оказывается дело не в фильтре. Фильтр исправно выдаёт вполне приличную синусойду вот только без постоянной составляющей и отсчёты одной из полуволн имеют отрицательные значения. А при выводе на ЦАП эти отсчёты рассматриваются как беззнаковая величина. И как результат такая интересная картинка. :) Всем спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться