|
Цифровой фильтр, Можно ли получить исходник на С с помощью MathLab? |
|
|
|
Apr 24 2007, 06:01
|
Местный
  
Группа: Свой
Сообщений: 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. А надо получить исходник с вычислениями, а не с обращениями к библиотечным функциям
|
|
|
|
|
Apr 24 2007, 13:52
|
Местный
  
Группа: Участник
Сообщений: 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), и хотелось бы, чтобы исходный код содержал вычисления подобно этим. Если это возможно получить, то каким образом? Или хочу очень многого?  А какие могут быть проблемы с реализацией на Си приведенной формулы???? Особенно если все вычисления выполняются с плавующей точкой  .
|
|
|
|
|
Apr 25 2007, 05:20
|
Местный
  
Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304

|
Цитата(Самурай @ Apr 24 2007, 17:52)  А какие могут быть проблемы с реализацией на Си приведенной формулы???? Особенно если все вычисления выполняются с плавующей точкой  . Да дело не в проблеме написать на Си. Вопрос больше относится к возможностям Matlabа и моего не знания данного пакета. Я предполагал, что Matlab сгенерит код фильта в подобной форме, ан такого в исходниках на Си после конвертации м-файла я не увидел. Вот и возник вопрос: может я что-то не так делаю?
|
|
|
|
|
Apr 25 2007, 10:46
|

Частый гость
 
Группа: Свой
Сообщений: 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) не должно составить труда.
|
|
|
|
|
Jun 1 2007, 05:39
|

Местный
  
Группа: Свой
Сообщений: 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) - и вообще автономно работает без матлаба.
|
|
|
|
|
Jun 1 2007, 06:31
|
Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jun 1 2007, 06:42
|
Местный
  
Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020

|
Цитата(Realking @ Jun 1 2007, 10:34)  Интересно а кому нибудь удалось дешифровать исходники MATLABа? Может быть это вариант. Не пробовал. Пока, если есть необходимость из matlab получить C, я иду другим путем: иерархия проекта в matlab вся есть (исходники библиотечных функций matlab находятся в директории toolbox), поэтому анализирую, что написано в интересующих меня библиотеках (до уровня элементарных операций) и руками пишу это на C.
|
|
|
|
|
Jun 1 2007, 06:50
|
Местный
  
Группа: Свой
Сообщений: 498
Регистрация: 4-10-04
Из: Нижний Новгород
Пользователь №: 771

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

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

|
Вариант в котором некодированный С из Матлаба точно есть и виден(по способу о котором уже писал Tue). Приложенный файл открыть в matlab и для получения С нажать левую нижнюю иконку(Generate code using Real time).
Прикрепленные файлы
litv.rar ( 11.19 килобайт )
Кол-во скачиваний: 104
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|