Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Цифровой фильтр
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Вопросы системного уровня проектирования
KSN
Начал осваивать Mathlab и возник вопрос.
Надо сделать простой узкополосный фильтр. В Filter Design Tools выбираем характеристики фильтра и генерим его, соответственно получаем коэффициенты. Можно с помощью Mathlab-а получить исходный код на Си для этого фильтра? Предполагается, что фильтр описывается уравнением y(n) = k1*y(n-2)-k2*y(n-1)+x(n), и хотелось бы, чтобы исходный код содержал вычисления подобно этим. Если это возможно получить, то каким образом? Или хочу очень многого?smile.gif
Realking
В Filter Design Tools делаешь так: File -> Generate M-File

потом в командной строке: mcc -c "имя созданного M-файла"
KSN
Цитата(Realking @ Apr 23 2007, 18:02) *
В Filter Design Tools делаешь так: File -> Generate M-File

потом в командной строке: mcc -c "имя созданного M-файла"


Компилятор с ключом -с отказывается запускаться, требует дополнительно ключ -m или -l. При добавлении данных ключей, генерится файл си файл, в котором идет вызов функций библиотек Mathlaba. А надо получить исходник с вычислениями, а не с обращениями к библиотечным функциям
Самурай
Цитата(KSN @ Apr 23 2007, 14:00) *
Начал осваивать Mathlab и возник вопрос.
Надо сделать простой узкополосный фильтр. В Filter Design Tools выбираем характеристики фильтра и генерим его, соответственно получаем коэффициенты. Можно с помощью Mathlab-а получить исходный код на Си для этого фильтра? Предполагается, что фильтр описывается уравнением y(n) = k1*y(n-2)-k2*y(n-1)+x(n), и хотелось бы, чтобы исходный код содержал вычисления подобно этим. Если это возможно получить, то каким образом? Или хочу очень многого?smile.gif


А какие могут быть проблемы с реализацией на Си приведенной формулы???? Особенно если все вычисления выполняются с плавующей точкойsmile.gif.
KSN
Цитата(Самурай @ Apr 24 2007, 17:52) *
А какие могут быть проблемы с реализацией на Си приведенной формулы???? Особенно если все вычисления выполняются с плавующей точкойsmile.gif.

Да дело не в проблеме написать на Си. Вопрос больше относится к возможностям Matlabа и моего не знания данного пакета. Я предполагал, что Matlab сгенерит код фильта в подобной форме, ан такого в исходниках на Си после конвертации м-файла я не увидел. Вот и возник вопрос: может я что-то не так делаю?
KostyanPro
Цитата(KSN @ Apr 25 2007, 05:20) *
Да дело не в проблеме написать на Си. Вопрос больше относится к возможностям Matlabа и моего не знания данного пакета. Я предполагал, что Matlab сгенерит код фильта в подобной форме, ан такого в исходниках на Си

Все верно , Matlab может генерировать header файл , в котором прописываются коэффициенты фильтра, причем можно выбирать из float , signed , unsigned.
Ну а дописать на си вычмсление выражения вида
y(n) = k1*y(n-2)-k2*y(n-1)+x(n) не должно составить труда.
Tue
Можно фильтр, полученный в Filter Design Tool, реализовать в Симулинке, а дальше из Симулинка при помощи мастерской реального времени (Real-Time Workshop) сгенерировать С-код вашего фильтра.
Alex11
Возьмите Filter Solutions, он напрямую генерит C-код. Это, конечно, если у Вас задача - фильтр получить, а не Матлаб добить.
AVL
Как-то пробовал преобразовать проект matlab в си код. Ничего полноценного не получилось - только файлы заголовков и откомпилированный код в виде библиотек. Исходников извлечь не удалось. Для фильтров, конечно, это не актуально, а для больших проектов очень даже актуально.
litv
Попробовал - получилось. См книжку Программирование в среде Borland C++ Builder с математическими библиотеками MATLABC++.(all-ebooks.com) стр 341.

файл mrank.m

function r = mrank(m)
f = [0 0.6 0.6 1]; m = [1 1 0 0];
b = fir2(30,f,m);
[h,w] = freqz(b,1,128);
plot(f,m,w/pi,abs(h))
legend('Ideal','fir2 Designed')
title('Comparison of Frequency Response Magnitudes')

команда

mcc -m mrank

получились и exe и С.

exe (вместе с какимто ctf) - и вообще автономно работает без матлаба.
AVL
Цитата(litv @ Jun 1 2007, 09:39) *
команда
mcc -m mrank
получились и exe и С.
exe (вместе с какимто ctf) - и вообще автономно работает без матлаба.


Проблема как раз в том, что ничего не получилось. Задача - получить исходники на C. А формируется C файл с функцией main(), которая использует все функции из библиотеки. Библиотека эта находится как раз в архиве *.ctf. Так что все самое интересное скрыто в архиве. "All M-files are encrypted in the CTF archive..." - см.help, ключ. слово CTF archive
Realking
Интересно
а кому нибудь удалось дешифровать исходники MATLABа?
AVL
Цитата(Realking @ Jun 1 2007, 10:34) *
Интересно
а кому нибудь удалось дешифровать исходники MATLABа?


Может быть это вариант. Не пробовал. Пока, если есть необходимость из matlab получить C, я иду другим путем: иерархия проекта в matlab вся есть (исходники библиотечных функций matlab находятся в директории toolbox), поэтому анализирую, что написано в интересующих меня библиотеках (до уровня элементарных операций) и руками пишу это на C.
Realking
Цитата(AVL @ Jun 1 2007, 10:42) *
Может быть это вариант. Не пробовал. Пока, если есть необходимость из matlab получить C, я иду другим путем: иерархия проекта в matlab вся есть (исходники библиотечных функций matlab находятся в директории toolbox), поэтому анализирую, что написано в интересующих меня библиотеках (до уровня элементарных операций) и руками пишу это на C.


не понял
где эта иерархия находится?

просто не понятно какие библиотеки использует fdatool для вычисления коеффициентов, например для FIR фильтра ...
litv
Вариант в котором некодированный С из Матлаба точно есть и виден(по способу о котором уже писал Tue).
Приложенный файл открыть в matlab и для получения С нажать левую нижнюю иконку(Generate code using Real time).
Realking
Цитата(litv @ Jun 1 2007, 11:34) *
Вариант в котором некодированный С из Матлаба точно есть и виден(по способу о котором уже писал Tue).
Приложенный файл открыть в matlab и для получения С нажать левую нижнюю иконку(Generate code using Real time).


спасибо, попробую
AVL
Цитата(Realking @ Jun 1 2007, 10:50) *
не понял
где эта иерархия находится?

просто не понятно какие библиотеки использует fdatool для вычисления коеффициентов, например для FIR фильтра ...


исходники инструмента fdatool находятся в toolbox\signal\sigtools\fdatool.m

fdatool.m содержит вызовы необходимых для его работы функций matlab, исходники этих функций так же находятся в директории toolbox.

Более простой вариант в случае fdatool, прямо в запущенном fdatool после разработки фильтра, как Вы сами указывали ранее, нажимаем "Generate M-file", получаем к примеру файл filter.m, в нем к примеру есть вызов функции remezord(). Файл remezord.m находится в директории toolbox\signal\signal . В файле remezord.m есть вызов функции firpmord(). Файл firpmord.m находится в той же директории. В файле firpmord.m есть вызовы других функций и т.д. Вот иерархия, о которой я говорил.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.