Генерация С/c++ кода из matlab

Обсуждение вопросов связанных с компиляцией, созданием GUI приложений.

Модератор: Admin

pepper_ln
Пользователь
Сообщения: 4
Зарегистрирован: Пн июн 12, 2017 3:16 am

Генерация С/c++ кода из matlab

Сообщение pepper_ln » Пн июн 12, 2017 3:24 am

было прочитано куча информации, просмотрено море видео-уроков и посещены все форумы, но понять как перевести матлаб в С с помощью matlab coder так и не понятно.
есть программа, которая детектирует данные, делает быстрое преобразование фурье и выводит графики, как перевести ее в С код?? Помогите кто-нибудь

Код: Выделить всё

clc; close all; clear;
%% Чтение данных
% Указываем необходимый файл
[FileName, PathName, ix] = uigetfile('D:\Tugikov\Буркун\red.txt',...
    'Выберите файл данных...');
if ix==0
    msgbox('Файл не выбран', '', 'warn')
    return
end
% Читаем данные из указанного файла по указанному адресу. Разделитель -
% табулятор
data = dlmread([PathName FileName], '\t');
% Первый столбец - время
t = data(:, 1);
% Второй сигнал - сигнал
y = data(:, 2);
%yrs=resample(y,8192,200074);

%% Расчет параметров
% Частота дискретизации
fs = 1/(mean(diff(t)));
% Длина сигнала (кол-во отсчетов)
L = length(y);
% Размерность БПФ
nfft = 2^nextpow2(L);%That is, p that satisfies 2^p >= abs(A)
% Вектор частот (для построения графика)
freq = fs/2*linspace(-1, 1, nfft);
% Комплексный спектр сигнала
S = fft(y, nfft)/nfft;
yabs=abs(y);
Sabs=fft(yabs, nfft)/nfft;
% Нормировка постоянной составляющей
S(1) = S(1)/2;
Sabs(1)=Sabs(1)/2;
% Модуль спектра
mag = 2*abs(S);
magabs=2*abs(Sabs);
% Модуль спектра (в дБ)
mag_dB = 10*log10(mag);
%% Графики
% Создаем две графических оси для построения сигнала и его спектра
hA(1) = axes('Position', [.1 .53 .875 .4]);
hA(2) = axes('Position', [.1 .12 .875 .3]);

% Сигнал
set(gcf, 'CurrentAxes', hA(1))
plot(t, y); grid on
xlim([t(1) t(end)])
xlabel('t, с')
ylabel('U(t)')

%plot(mag_dB(1:12000));

% Спектр
set(gcf, 'CurrentAxes', hA(2))
plot(freq/1e3, fftshift(mag_dB), 'Color', [.85 .330 .1]); grid on
xlim([0 fs/2]/1e3)
xlabel('f, кГц')
ylabel('|S(f), дБ|')
figure;
plot(mag(3250:3300));
figure;
plot(magabs(1:300));
figure;
plot(yabs);
% Программно разворачиваем окно (не обязательно)
pause(.1)
warning('off','MATLAB:HandleGraphics:ObsoletedProperty:JavaFrame');
set(get(handle(gcf),'JavaFrame'), 'Maximized', true);

sandy
Эксперт
Сообщения: 5601
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: Генерация С/c++ кода из matlab

Сообщение sandy » Пн июн 12, 2017 11:09 am

А вы пробовали это сделать-то? Я имею в виду, набрать в командной строке слово coder и в запустившейся оболочке создать проект? Попробуйте, после этого у вас появятся более конкретные вопросы.

Ради чего вы хотите создать C-код в данном случае? Хочу сразу предупредить - сгенерировать код вам просто так не удастся, в вашей программе слишком много неподдерживаемых вещей.
С уважением

Александр Сергиенко

pepper_ln
Пользователь
Сообщения: 4
Зарегистрирован: Пн июн 12, 2017 3:16 am

Re: Генерация С/c++ кода из matlab

Сообщение pepper_ln » Пн июн 12, 2017 5:09 pm

Пробовала, вопросов еще больше
каким образом адаптировать этот код для генерации, какой тип данных выбрать, функцию...???
а вообще ошибка "All entry-point files must be functions. task_1.m is a script."

sandy
Эксперт
Сообщения: 5601
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: Генерация С/c++ кода из matlab

Сообщение sandy » Пн июн 12, 2017 5:59 pm

"All entry-point files must be functions. task_1.m is a script."

Вот вам и первая проблема - код генерируется только для функций, а ваш код функцией не является. Как все-таки сделать exe-файл, описано, например, здесь:
https://www.mathworks.com/help/coder/ug/standalone-c-c-executables-from-matlab-code.html
каким образом адаптировать этот код для генерации, какой тип данных выбрать, функцию

Не в типах данных проблема. Вся графика не поддерживается.

Ради чего все-таки предполагается генерировать код?
С уважением



Александр Сергиенко

pepper_ln
Пользователь
Сообщения: 4
Зарегистрирован: Пн июн 12, 2017 3:16 am

Re: Генерация С/c++ кода из matlab

Сообщение pepper_ln » Пн июн 12, 2017 6:14 pm

В идеале, для установки приложения на портативные устройства.
Из этого громоздкого кода мне нужно сделать функцию, и ее генерировать?

sandy
Эксперт
Сообщения: 5601
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: Генерация С/c++ кода из matlab

Сообщение sandy » Пн июн 12, 2017 7:31 pm

для установки приложения на портативные устройства

Еще раз повторяю - MATLAB coder не умеет генерировать код для всего, что связано с пользовательским интерфейсом, графикой и т.п. Фактически сгенерировать код можно только для расчетных процедур. Возможно, для "портативных устройств" вам стоит пойти другим путем?
С уважением



Александр Сергиенко

pepper_ln
Пользователь
Сообщения: 4
Зарегистрирован: Пн июн 12, 2017 3:16 am

Re: Генерация С/c++ кода из matlab

Сообщение pepper_ln » Пн июн 12, 2017 9:33 pm

То есть, если в коде есть графики, то я не смогу сгенерировать код?
Или смогу, но он не будет работать?

sandy
Эксперт
Сообщения: 5601
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: Генерация С/c++ кода из matlab

Сообщение sandy » Пн июн 12, 2017 10:03 pm

Не сможете.
С уважением



Александр Сергиенко

Kardo
Пользователь
Сообщения: 1
Зарегистрирован: Вт мар 26, 2019 11:36 pm

Re: Генерация С/c++ кода из matlab

Сообщение Kardo » Ср мар 27, 2019 12:01 am

Здравствуйте ребята.За сколько часов можно этот код перевести на c++? И сколько приблизительно строк будет в коде?
Спрашиваю чтобы сориентироваться с ценой фриланса.