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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Цифровой фильтр, Можно ли получить исходник на С с помощью MathLab?
KSN
сообщение Apr 23 2007, 13:00
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304



Начал осваивать Mathlab и возник вопрос.
Надо сделать простой узкополосный фильтр. В Filter Design Tools выбираем характеристики фильтра и генерим его, соответственно получаем коэффициенты. Можно с помощью Mathlab-а получить исходный код на Си для этого фильтра? Предполагается, что фильтр описывается уравнением y(n) = k1*y(n-2)-k2*y(n-1)+x(n), и хотелось бы, чтобы исходный код содержал вычисления подобно этим. Если это возможно получить, то каким образом? Или хочу очень многого?smile.gif
Go to the top of the page
 
+Quote Post
Realking
сообщение Apr 23 2007, 14:02
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 498
Регистрация: 4-10-04
Из: Нижний Новгород
Пользователь №: 771



В Filter Design Tools делаешь так: File -> Generate M-File

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


--------------------
Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается.
Go to the top of the page
 
+Quote Post
KSN
сообщение Apr 24 2007, 06:01
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304



Цитата(Realking @ Apr 23 2007, 18:02) *
В Filter Design Tools делаешь так: File -> Generate M-File

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


Компилятор с ключом -с отказывается запускаться, требует дополнительно ключ -m или -l. При добавлении данных ключей, генерится файл си файл, в котором идет вызов функций библиотек Mathlaba. А надо получить исходник с вычислениями, а не с обращениями к библиотечным функциям
Go to the top of the page
 
+Quote Post
Самурай
сообщение Apr 24 2007, 13:52
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 468
Регистрация: 4-03-05
Пользователь №: 3 066



Цитата(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.
Go to the top of the page
 
+Quote Post
KSN
сообщение Apr 25 2007, 05:20
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304



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

Да дело не в проблеме написать на Си. Вопрос больше относится к возможностям Matlabа и моего не знания данного пакета. Я предполагал, что Matlab сгенерит код фильта в подобной форме, ан такого в исходниках на Си после конвертации м-файла я не увидел. Вот и возник вопрос: может я что-то не так делаю?
Go to the top of the page
 
+Quote Post
KostyanPro
сообщение Apr 25 2007, 10:46
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 160
Регистрация: 30-01-07
Из: Minsk
Пользователь №: 24 870



Цитата(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) не должно составить труда.
Go to the top of the page
 
+Quote Post
Tue
сообщение May 29 2007, 05:27
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 7-09-05
Из: Москва
Пользователь №: 8 340



Можно фильтр, полученный в Filter Design Tool, реализовать в Симулинке, а дальше из Симулинка при помощи мастерской реального времени (Real-Time Workshop) сгенерировать С-код вашего фильтра.
Go to the top of the page
 
+Quote Post
Alex11
сообщение May 29 2007, 07:58
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Возьмите Filter Solutions, он напрямую генерит C-код. Это, конечно, если у Вас задача - фильтр получить, а не Матлаб добить.
Go to the top of the page
 
+Quote Post
AVL
сообщение May 29 2007, 11:58
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020



Как-то пробовал преобразовать проект matlab в си код. Ничего полноценного не получилось - только файлы заголовков и откомпилированный код в виде библиотек. Исходников извлечь не удалось. Для фильтров, конечно, это не актуально, а для больших проектов очень даже актуально.
Go to the top of the page
 
+Quote Post
litv
сообщение Jun 1 2007, 05:39
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 6-10-04
Из: Воронеж
Пользователь №: 806



Попробовал - получилось. См книжку Программирование в среде 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) - и вообще автономно работает без матлаба.
Go to the top of the page
 
+Quote Post
AVL
сообщение Jun 1 2007, 06:31
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020



Цитата(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
Go to the top of the page
 
+Quote Post
Realking
сообщение Jun 1 2007, 06:34
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 498
Регистрация: 4-10-04
Из: Нижний Новгород
Пользователь №: 771



Интересно
а кому нибудь удалось дешифровать исходники MATLABа?


--------------------
Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается.
Go to the top of the page
 
+Quote Post
AVL
сообщение Jun 1 2007, 06:42
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020



Цитата(Realking @ Jun 1 2007, 10:34) *
Интересно
а кому нибудь удалось дешифровать исходники MATLABа?


Может быть это вариант. Не пробовал. Пока, если есть необходимость из matlab получить C, я иду другим путем: иерархия проекта в matlab вся есть (исходники библиотечных функций matlab находятся в директории toolbox), поэтому анализирую, что написано в интересующих меня библиотеках (до уровня элементарных операций) и руками пишу это на C.
Go to the top of the page
 
+Quote Post
Realking
сообщение Jun 1 2007, 06:50
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 498
Регистрация: 4-10-04
Из: Нижний Новгород
Пользователь №: 771



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


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

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


--------------------
Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается.
Go to the top of the page
 
+Quote Post
litv
сообщение Jun 1 2007, 07:34
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 6-10-04
Из: Воронеж
Пользователь №: 806



Вариант в котором некодированный С из Матлаба точно есть и виден(по способу о котором уже писал Tue).
Приложенный файл открыть в matlab и для получения С нажать левую нижнюю иконку(Generate code using Real time).
Прикрепленные файлы
Прикрепленный файл  litv.rar ( 11.19 килобайт ) Кол-во скачиваний: 104
 
Go to the top of the page
 
+Quote Post

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

 


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


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