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

Помогите сделать цифровой фильтр на AVR микроконтроллере

Помогите с алгоритмом, либо любой другой информацией по реализации цифрового фильтра на AVR микроконтроллере. Есть программатор STK500 и микроконтроллеры ATMega16 и ATTiny26.

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


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

Помогите с алгоритмом, либо любой другой информацией по реализации цифрового фильтра на AVR микроконтроллере. Есть программатор STK500 и микроконтроллеры ATMega16 и ATTiny26.

поможем. НО не умалчивайте

1) характеристики сигналов: динамический диапазон, частота сэмплов

2) что вы хотите добиться фильтром. фильтр частотный?

3) точность фильтра.

практика показывает что помочь будет проще, зная изначальную задачу. а может вам вообще фильтр как таковой не нужен......

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


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

Если тебе нужен неважно какой, лишь бы цифровой фильтр на AVR рекомендую почитать

атмеловский Application Notes "AVR222: 8-Point Moving Average Filter". Прикрепляю его здесь.

avr222.rar

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


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

Если тебе нужен неважно какой, лишь бы цифровой фильтр на AVR рекомендую почитать

атмеловский Application Notes "AVR222: 8-Point Moving Average Filter". Прикрепляю его здесь.

avr222.rar

Хорошая вещь. Сам работаю с ней. Но вот вопросов много по этой штуке. В примере фильтр рассчитан на определённую частоту и определённую частоту выборок. Коэффициенты я рассчитываю в MatLab и в QED2000. Результаты получаются разные. Но не суть важно. Если кто работал с этим примером то просьба помочь разобраться вот с чем. Есть такая штука, называется - Scaling. Вот в этом месте я не очень понял суть. После того как вышеупомянутые программы выдают результат коэффициентов, они так же выдают значения сдвига выходных данных. Вопрос: Например QED2000 выдаёт значение сдвига 1 или -1, что они обозначают и как применить их в примере от Atmel?

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


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

Спасибо за помощь, попробую разобраться с AVR222.

Мне нужен обычный цифровой фильтр, обрабатывающий речь 300-3400Гц, выходной сигнал записывается на компьютер, потом нужно сравнить исходный файл и преобразованный сигнал.

Можно еще поподробнее написать о том, как расчитать коэффициенты фильтра по заданным характеристикам сигнала.

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


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

Спасибо за помощь, попробую разобраться с AVR222.

Мне нужен обычный цифровой фильтр, обрабатывающий речь 300-3400Гц, выходной сигнал записывается на компьютер, потом нужно сравнить исходный файл и преобразованный сигнал.

Можно еще поподробнее написать о том, как расчитать коэффициенты фильтра по заданным характеристикам сигнала.

 

Не бывает "обычных" цифровых фильтров, по типу обычных стиральных порошков.

Сформулируйте полностью задачу, поскольку вопрос у вас не получается задать.

Что вы имеете на входе и что хотите получить на выходе?

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


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

Мне нужен обычный цифровой фильтр, обрабатывающий речь 300-3400Гц, выходной сигнал записывается на компьютер, потом нужно сравнить исходный файл и преобразованный сигнал.

 

Imho если полоса сигнала неизменна, и сдвиг фазы не важен, может быть для такой задачи целесообразнее и проще реализовать аналоговый(ые) фильтр(ы). С выхода фильтра пропустить сигнал через опер с требуемым коэффициентом усиления и на АЦП AVR-ки.

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


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

Спасибо за ответы. Мне нужен КИХ фильтр, число коэффициентов от 5-10. Должно быть хорошее быстродействие. Результатом должен быть аналоговый сигнал, который можно прослушать, и увидеть разницу между начальным не обработанным сигналом.

 

Еще кто-нибудь может подсказать как производить перемножение с помощью перемножающей матрицы.(Просто у меняесть пример фильтра, где умножение на коэффициенты заменено перемножающей матрицей)

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


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

Спасибо за ответы. Мне нужен КИХ фильтр, число коэффициентов от 5-10. Должно быть хорошее быстродействие. Результатом должен быть аналоговый сигнал, который можно прослушать, и увидеть разницу между начальным не обработанным сигналом.

 

Еще кто-нибудь может подсказать как производить перемножение с помощью перемножающей матрицы.(Просто у меняесть пример фильтра, где умножение на коэффициенты заменено перемножающей матрицей)

 

делать умножение с помошью матрицы(таблицы) безсмысленно. т.к. АВР делает умножение не медленнее адресации. только память израсходуете.

 

как я понимаю ваша задача разделяется на

1) А-Ц преобразование

2) реализация цифрового фильтра

3) Ц-А преобразование

 

собственно интересует точность. 8 бит хватит? вроде для звука худо-бедно подходит. скорость работы фильтра при количестве коэффициентов некритична, т.к. АВРка справится с примерно 200000 умножениями достаточно просто. (это из расчёта 1 умножение на коэффициент при частоте выборок 20кГц).

Какой из КИХ фильтров Вы хотите реализовать? режекторный фильтр? полосовой? НЧ? ВЧ? при каких частотах пропускания/задержания?

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


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

Мне нужен полосовой фильтр, полосы пропускания fн=2000 Гц , fв=2800 Гц(полоса должна изменяться в зависимости от выбранных коэффициентов фильтра). Подскажите пожалуйста алгоритм, может быть есть код на ассемблере.

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


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

Мне нужен полосовой фильтр, полосы пропускания fн=2000 Гц , fв=2800 Гц(полоса должна изменяться в зависимости от выбранных коэффициентов фильтра). Подскажите пожалуйста алгоритм, может быть есть код на ассемблере.

 

если знаете Си, то вот Вам шаблончик на Ваш фильтр.

 

double coeff[9] = {0.0,2.181e-02,7.557e-04,-.3226,.2943,.2943,-.3226,7.557e-04,2.181e-02};
double delay[9] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};

double KIH(double input){
    double summ=0;
    int i;

    for (i=0;i<=7;i++){
        delay[i] = delay[i+1];
        summ += delay[i]*coeff[i];
    }
    delay[8] = input;
    summ += delay[8]*coeff[8];

    return summ;
}

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


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

Мне нужен полосовой фильтр, полосы пропускания fн=2000 Гц , fв=2800 Гц(полоса должна изменяться в зависимости от выбранных коэффициентов фильтра). Подскажите пожалуйста алгоритм, может быть есть код на ассемблере.

 

Даю хороший совет.

Почитайте книгу по ЦОС, например Айфичера (читается легко, хотя есть досадные ошибки перевода). В магазинах должна быть.

Поймёте хотя бы что и к чему, какие бывают и как синтезируются фильтры.

Потом поставьте матлаб, и посмотрите как фильтры там работают.

Сейчас складывается такое ощущение, что вы стоите в чистом поле и просто не знаете в какую сторону бежать.

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


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

Честно говоря несколько раз просматривал эту тему из любопытства. :) Т.е. насколько человеческий альтруизм может быть распространён. Похоже другие думают также как я, только не хотят огорчать тебя. :)

Итак попробую подытожить.

Тебе всегда помогут (сужу по себе) если у тебя конкретный вопрос, или нюанс какой-то, или упёрся и двигаться некуда! Но взять РАСЧИТАТЬ и НАПИСАТЬ за тебя ...

Ты хоть вопрос изучи!

У меня стоял когда-то такой вопрос. Поискал по поисковикам. Нашёл похожее на сайте TI. Изучил. Скачал программу QED2000. Кой чего разобрал. (явно меньше 10%) Написал, переписал 10 раз и в конце-концов добился результата! Конечно проще написать в форум и попросить написать за тебя. Но тогда следующий раз придётся поступать так-же... Да и в форум писать надо хотябы исходные данные подготовить (например частоту выборок не написал). Пойми даже если два фильтра по характеристикам весьма похожи, то всё равно прогу не заимствуешь. Надо выбрать тип фильтра, крутизну, коэффициенты, и т.д. и т.п. Это же не академическое программирование когда подпрограмме задаётся 150 параметров. Здесь в зависимости от задачи человек минимизирует/оптимизирует прогу и лишнее не пишет. Я например коэффициенты такие выбирал, чтобы сдвигами можно было. Ну и т.д.

 

Короче давай напрягись хоть немного. :)

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


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

Спасибоза помощь, за советы, я действительно раньше не занимался программированием ЦФ, тем более на микроконтроллере. Просто у меня задание по диплому сделать три Лабораторных работы(для следующег поколения студентов): ЦФ, Реверс, Перестройка по спектру(надо обрабатывать звук, а потом полученное воспроизвести в динамике компьтера). Необходимо наглядно продемонстрировать как на микроконтроллере можно реализовать Цифровую обработку сигнала - Задание руководителя. Я вообще то хотел на Delphi что-нибудь сделать. взял тему по прогаммированию - оказалось микроконтроллер. Подписался под дипломом, надо делать, делаю, но уже времени маловато остается, я хотел взять за основу эксперимент DSP на AVR http://elm-chan.org/works/vp/report.html. но не могу понять как там происходит умножение на заданные коэффициенты, и как с внешней памятью там работают. Там написано что нужно записать в память микроконтроллера два файла основной и переможающую таблицу, но ведь там память всего 2к, а файлы весят 1,5 и 2,4 кбайта. Извините я новичок, может задаю глупые вопросы, но до защиты диплома остается мало времени, а делать надо, я пытаюсь разобраться, но куда ни посмотри везде примеры на Си, а просто не понимаю как этот язык устроен. Хотел в дипломе попрограммировать, придется программировать, самому придумывать. Спасибо еще раз, что по крайней даете хорошие и правильные советы.

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


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

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

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

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

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

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

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

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

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

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