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

 
 
> Фильтр из Matlab'a не компилируется в quartus'е
S.Mishutina
сообщение Aug 27 2011, 17:03
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 20-08-11
Из: Санкт-Петербург
Пользователь №: 66 795



С помощью Matlab сделала БИХ-фильтр нижних частот (фильтр Баттерворта). Matlab сгенерировал Verilog HDL, который прекрасно компилируется и работает в ModelSim. Но verilog-код не компилируется в quartusII: "real variable data type are not suppotred", также не поддерживаются директивы $bitstoreal и $realtobits.
Правильно я понимаю, что такой код в реальном устройстве работать не будет и следует написать другой код?
Где найти примеры (книги, коды) IIR фильтров, которые скомпилируются в квартусе и смогут работать в реальном устройстве?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
des00
сообщение Aug 31 2011, 05:52
Сообщение #2


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



все так, но БИХ фильтры крайне не любят грубого усечения. лучше посчитать в матлабе БЧХ фильтр на фиксед поинт и увидеть что с ним да как. Ну а сгенерировать рабочий код дело времени.


--------------------
Go to the top of the page
 
+Quote Post
S.Mishutina
сообщение Aug 31 2011, 11:13
Сообщение #3





Группа: Участник
Сообщений: 10
Регистрация: 20-08-11
Из: Санкт-Петербург
Пользователь №: 66 795



Цитата(des00 @ Aug 31 2011, 09:52) *
все так, но БИХ фильтры крайне не любят грубого усечения. лучше посчитать в матлабе БЧХ фильтр на фиксед поинт и увидеть что с ним да как. Ну а сгенерировать рабочий код дело времени.

des00, расчет в матлабе на фиксед пойнт делается так?




Цитата(Hoodwin @ Aug 30 2011, 23:59) *
Я не думаю, что все так радужно. 16 младших битов придется выкинуть, потому что нужно согласовывать типы данных. В приведенном тексте сигналы представлены 16-разрядными числами без дробных частей. Умножение на 13107 делает из 16 битного числа 32-битное, которое затем вновь становится 16-битным после откидывания младших битов. Чтобы повысить точность, нужно в целом перейти к вычислению с большей разрядностью, только зачем?


Hoodwin, но если при сдвиге на 16 отсчетов откидываются младшие биты, то выходной отсчет
y(n)=0.6*x(n)+0.6*x(n-1)-0.2*y(n-1)
будет вычислен с некоторой ошибкой, которая сохранится при вычислении следующего отсчета y(n+1), который тоже будет вычислен с ошибкой. Не получится ли так, что AЧХ недопустимо исказится из-за грубого округления?
Какие проблемы есть при переходе к вычислению с большей разрядностью? Быстродействие?
Частота дискретизации фильтра 32 Гц, с той же частотой поступают входные отсчеты.


Цитата(Hoodwin @ Aug 30 2011, 23:59) *
при более сложных коэффициентах, по-видимому, придется делать аппаратный умножитель. Записать его можно так же, но нужно помнить, что для получения хорошего быстродействия аппаратного умножителя и вход и выход должны быть регистрами, что потребует некоторой структурной переработки данного кода. Если частота будет приемлемой, то можно ничего не менять.

Hoodwin, что значит делать аппаратный умножитель? При записи умножения со * и при сложных коэффициентах квартус сам сделает умножение на аппаратных умножителях, а мне остается только улучшить быстродействие?
записать коэффициенты b0, b1, a1 в регистры таким образом годится?
reg [15:0] a1=13107 ?




Цитата(Hoodwin @ Aug 30 2011, 23:59) *
Еще из структурных соображений я бы выдал на выход не data_out, а sample_out, так как это выходы регистров, которые легко таскать по кристаллу не снижая быстродействия.

Насколько я понимаю, data_out и sample_out - оба регистры, и мне казалось, что безразлично, какой из них подавать на выход. почему если sample_out, а не data_out будет на выходе быстродействие будет выше?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- S.Mishutina   Фильтр из Matlab'a не компилируется в quartus'е   Aug 27 2011, 17:03
- - Methane   Цитата(S.Mishutina @ Aug 27 2011, 20:03) ...   Aug 27 2011, 17:20
- - Гяук   Цитата(S.Mishutina @ Aug 27 2011, 21:03) ...   Aug 28 2011, 11:57
- - Чиповод   Цитата(S.Mishutina @ Aug 27 2011, 21:03) ...   Aug 28 2011, 15:45
|- - Methane   Цитата(Чиповод @ Aug 28 2011, 18:45) Матл...   Aug 28 2011, 15:59
- - Чиповод   Цитата(Methane @ Aug 28 2011, 19:59) Но з...   Aug 28 2011, 17:20
|- - Methane   Цитата(Чиповод @ Aug 28 2011, 20:20) Ага,...   Aug 28 2011, 18:03
|- - Чиповод   Цитата(Methane @ Aug 28 2011, 22:03) Умно...   Aug 29 2011, 06:22
|- - ViKo   Цитата(Чиповод @ Aug 29 2011, 09:22) Инте...   Aug 29 2011, 06:46
|- - Чиповод   Цитата(ViKo @ Aug 29 2011, 10:46) В Quart...   Aug 29 2011, 07:31
||- - ViKo   Цитата(Чиповод @ Aug 29 2011, 10:31) А, п...   Aug 29 2011, 07:39
|- - S.Mishutina   Цитата(ViKo @ Aug 29 2011, 10:46) В Quart...   Aug 29 2011, 17:43
- - Hoodwin   Ну, например, как gcc поступает в таких случаях: ...   Aug 30 2011, 08:47
|- - S.Mishutina   Цитата(Hoodwin @ Aug 30 2011, 12:47) Ну, ...   Aug 30 2011, 18:07
- - Hoodwin   Я не думаю, что все так радужно. 16 младших битов ...   Aug 30 2011, 19:59
|- - des00   Цитата(S.Mishutina @ Aug 31 2011, 05:13) ...   Aug 31 2011, 11:26
- - Hoodwin   S.Mishutina Вот в Filter Designer есть такой инстр...   Sep 7 2011, 09:15


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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 15:40
Рейтинг@Mail.ru


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