matlab代码_matlab代码分享 - CSDN
精华内容
参与话题
  • MATLAB 经典程序源代码大全

    千次下载 热门讨论 2020-07-30 23:33:08
    本资源经过数模之后总结的一些经典代码。其中函括 1、中国大学生数学建模竞赛题解 2、演示程序 3、微积分和微分方程 4、图形 5、随机模拟和统计分析 6、数学规划 7、数据拟合 8、离散优化 9、方程求根 10、时间序列...
  • MatLab代码大全

    热门讨论 2020-07-30 23:32:36
    MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗...
  • Matlab有趣代码

    万次阅读 多人点赞 2016-10-07 15:52:36
    Matlab有趣代码标签: Matlab彩蛋xpbombs; %扫雷vibes; %振膜teapotdemo; %茶壶logo; %Matlab logotravel; %路线问题life; %Convay的人生小游戏makevase; %造花瓶truss; %弹弹弹codec; %编码fifteen; %拼图xpquad; %...

    一、彩蛋

    xpbombs; %扫雷
    
    vibes; %振膜
    
    teapotdemo; %茶壶
    
    logo; %Matlab logo
    
    travel; %路线问题
    
    life; %Convay的人生小游戏
    
    makevase; %造花瓶
    
    truss; %弹弹弹
    
    codec; %编码
    
    fifteen; %拼图
    
    xpquad; %超二次曲面
    
    wrldtrv; %坐飞机
    
    spy;  %不加参数就画个狗
    
    earthmap; %地图
    
    cplxdemo; %复杂的XYZ立体图形~黎曼曲面的平面效果
    
    lorenz; %Lorenz吸引子动画显示

    二、代码段

    % 画爱心
    [X, Y] = meshgrid(0.01:0.01:1, 0.01:0.01:1); 
    Zfun =@(x,y)12.5*x.*log10(x).*y.*(y-1)+exp(-((25 ... 
    *x - 25/exp(1)).^2+(25*y-25/2).^2).^3)./25; 
    Z = Zfun(X,Y); 
    figure; 
    surf(Y,Z,X,'FaceColor',[1 0.75 0.65],'linestyle','none'); 
    hold on 
    surf(Y+0.98,Z,X,'FaceColor',[1 0.75 0.65],'linestyle','none'); 
    axis equal; 
    view([116 30]); 
    camlight; 
    lighting phong; % 设置光照和光照模式
    % 说话
    function wav = matlabspeech(txt,voice,pace,fs)
    % matlabspeech('I Love Maple and Matlab')
    % matlabspeech('I Love Maple')
    % matlabspeech('I Love Matlab')
    if ~ispc, error('要求使用Microsoft Win32 SAPI .'); end
    if ~ischar(txt), error('第一个参数是字符串.'); end
    SV = actxserver('SAPI.SpVoice');
    TK = invoke(SV,'GetVoices');
    if nargin > 1
    
    for k = 0:TK.Count-1
    if strcmpi(voice,TK.Item(k).GetDescription)
    SV.Voice = TK.Item(k);
    break;
    elseif strcmpi(voice,'list')
    disp(TK.Item(k).GetDescription);
    end
    end
    
    if nargin > 2
    if isempty(pace), pace = 0; end
    if abs(pace) > 10, pace = sign(pace)*10; end
    SV.Rate = pace;
    end
    end
    if nargin < 4 || ~ismember(fs,[8000,11025,12000,16000,22050,24000,32000,...
    44100,48000]), fs = 16000; end
    if nargout > 0
    
    MS = actxserver('SAPI.SpMemoryStream');
    MS.Format.Type = sprintf('SAFT%dkHz16BitMono',fix(fs/1000));
    SV.AudioOutputStream = MS;
    end
    invoke(SV,'Speak',txt);
    if nargout > 0
    
    wav = reshape(double(invoke(MS,'GetData')),2,[])';
    wav = (wav(:,2)*256+wav(:,1))/32768;
    wav(wav >= 1) = wav(wav >= 1)-2;
    delete(MS);
    clear MS;
    end
    delete(SV);
    clear SV TK;
    pause(0.2);
    end
    % 最炫民族风
    fs = 44100; % sample rate
    dt = 1/fs;
    T16 = 0.125;
    t16 = [0:dt:T16];
    [temp k] = size(t16);
    t4 = linspace(0,4*T16,4*k);
    t8 = linspace(0,2*T16,2*k);
    [temp i] = size(t4);
    [temp j] = size(t8);
    % Modification functions
    mod4=(t4.^4).*exp(-30*(t4.^0.5));
    mod4=mod4*(1/max(mod4));
    mod8=(t8.^4).*exp(-50*(t8.^0.5));
    mod8=mod8*(1/max(mod8));
    mod16=(t16.^4).*exp(-90*(t16.^0.5));
    mod16=mod16*(1/max(mod16));
    f0 = 2*146.8; % reference frequency
    ScaleTable = [2/3 3/4 5/6 15/16 ...
    1 9/8 5/4 4/3 3/2 5/3 9/5 15/8 ...
    2 9/4 5/2 8/3 3 10/3 15/4 4 ...
    1/2 9/16 5/8];
    % 1/4 notes
    do0f = mod4.*cos(2*pi*ScaleTable(21)*f0*t4);
    re0f = mod4.*cos(2*pi*ScaleTable(22)*f0*t4);
    mi0f = mod4.*cos(2*pi*ScaleTable(23)*f0*t4);
    fa0f = mod4.*cos(2*pi*ScaleTable(1)*f0*t4);
    so0f = mod4.*cos(2*pi*ScaleTable(2)*f0*t4);
    la0f = mod4.*cos(2*pi*ScaleTable(3)*f0*t4);
    ti0f = mod4.*cos(2*pi*ScaleTable(4)*f0*t4);
    do1f = mod4.*cos(2*pi*ScaleTable(5)*f0*t4);
    re1f = mod4.*cos(2*pi*ScaleTable(6)*f0*t4);
    mi1f = mod4.*cos(2*pi*ScaleTable(7)*f0*t4);
    fa1f = mod4.*cos(2*pi*ScaleTable(8)*f0*t4);
    so1f = mod4.*cos(2*pi*ScaleTable(9)*f0*t4);
    la1f = mod4.*cos(2*pi*ScaleTable(10)*f0*t4);
    tb1f = mod4.*cos(2*pi*ScaleTable(11)*f0*t4);
    ti1f = mod4.*cos(2*pi*ScaleTable(12)*f0*t4);
    do2f = mod4.*cos(2*pi*ScaleTable(13)*f0*t4);
    re2f = mod4.*cos(2*pi*ScaleTable(14)*f0*t4);
    mi2f = mod4.*cos(2*pi*ScaleTable(15)*f0*t4);
    fa2f = mod4.*cos(2*pi*ScaleTable(16)*f0*t4);
    so2f = mod4.*cos(2*pi*ScaleTable(17)*f0*t4);
    la2f = mod4.*cos(2*pi*ScaleTable(18)*f0*t4);
    ti2f = mod4.*cos(2*pi*ScaleTable(19)*f0*t4);
    do3f = mod4.*cos(2*pi*ScaleTable(20)*f0*t4);
    blkf = zeros(1,i);
    % 1/8 notes
    do0e = mod8.*cos(2*pi*ScaleTable(21)*f0*t8);
    re0e = mod8.*cos(2*pi*ScaleTable(22)*f0*t8);
    mi0e = mod8.*cos(2*pi*ScaleTable(23)*f0*t8);
    fa0e = mod8.*cos(2*pi*ScaleTable(1)*f0*t8);
    so0e = mod8.*cos(2*pi*ScaleTable(2)*f0*t8);
    la0e = mod8.*cos(2*pi*ScaleTable(3)*f0*t8);
    ti0e = mod8.*cos(2*pi*ScaleTable(4)*f0*t8);
    do1e = mod8.*cos(2*pi*ScaleTable(5)*f0*t8);
    re1e = mod8.*cos(2*pi*ScaleTable(6)*f0*t8);
    mi1e = mod8.*cos(2*pi*ScaleTable(7)*f0*t8);
    fa1e = mod8.*cos(2*pi*ScaleTable(8)*f0*t8);
    so1e = mod8.*cos(2*pi*ScaleTable(9)*f0*t8);
    la1e = mod8.*cos(2*pi*ScaleTable(10)*f0*t8);
    tb1e = mod8.*cos(2*pi*ScaleTable(11)*f0*t8);
    ti1e = mod8.*cos(2*pi*ScaleTable(12)*f0*t8);
    do2e = mod8.*cos(2*pi*ScaleTable(13)*f0*t8);
    re2e = mod8.*cos(2*pi*ScaleTable(14)*f0*t8);
    mi2e = mod8.*cos(2*pi*ScaleTable(15)*f0*t8);
    fa2e = mod8.*cos(2*pi*ScaleTable(16)*f0*t8);
    so2e = mod8.*cos(2*pi*ScaleTable(17)*f0*t8);
    la2e = mod8.*cos(2*pi*ScaleTable(18)*f0*t8);
    ti2e = mod8.*cos(2*pi*ScaleTable(19)*f0*t8);
    do3e = mod8.*cos(2*pi*ScaleTable(20)*f0*t8);
    blke = zeros(1,j);
    % 1/16 notes
    do0s = mod16.*cos(2*pi*ScaleTable(21)*f0*t16);
    re0s = mod16.*cos(2*pi*ScaleTable(22)*f0*t16);
    mi0s = mod16.*cos(2*pi*ScaleTable(23)*f0*t16);
    fa0s = mod16.*cos(2*pi*ScaleTable(1)*f0*t16);
    so0s = mod16.*cos(2*pi*ScaleTable(2)*f0*t16);
    la0s = mod16.*cos(2*pi*ScaleTable(3)*f0*t16);
    ti0s = mod16.*cos(2*pi*ScaleTable(4)*f0*t16);
    do1s = mod16.*cos(2*pi*ScaleTable(5)*f0*t16);
    re1s = mod16.*cos(2*pi*ScaleTable(6)*f0*t16);
    mi1s = mod16.*cos(2*pi*ScaleTable(7)*f0*t16);
    fa1s = mod16.*cos(2*pi*ScaleTable(8)*f0*t16);
    so1s = mod16.*cos(2*pi*ScaleTable(9)*f0*t16);
    la1s = mod16.*cos(2*pi*ScaleTable(10)*f0*t16);
    tb1s = mod16.*cos(2*pi*ScaleTable(11)*f0*t16);
    ti1s = mod16.*cos(2*pi*ScaleTable(12)*f0*t16);
    do2s = mod16.*cos(2*pi*ScaleTable(13)*f0*t16);
    re2s = mod16.*cos(2*pi*ScaleTable(14)*f0*t16);
    mi2s = mod16.*cos(2*pi*ScaleTable(15)*f0*t16);
    fa2s = mod16.*cos(2*pi*ScaleTable(16)*f0*t16);
    so2s = mod16.*cos(2*pi*ScaleTable(17)*f0*t16);
    la2s = mod16.*cos(2*pi*ScaleTable(18)*f0*t16);
    ti2s = mod16.*cos(2*pi*ScaleTable(19)*f0*t16);
    do3s = mod16.*cos(2*pi*ScaleTable(20)*f0*t16);
    blks = zeros(1,k);
    % Melody by Schau_mal 
    part0 = [mi1f la0e la0e do1f mi1f ...
    re1e re1s mi1s re1e do1e re1e do1e la0f ...
    mi1f la0e la0e do1f mi1f ...
    so1e re1s mi1s re1e do1e re1e do1e ti0e so0e ...
    mi1f la0e la0e do1f mi1f ...
    re1e re1s mi1s re1e do1e re1e do1e la0e so0e ...
    mi1f la0e la0e do1f mi1f ...
    so1e mi1e blkf blkf blkf ...
    ];
    part1 = [la0f la0e so0e la0f la0e do1e ...
    do1f re1e do1e la0f la0f ...
    do1f do1e so0e do1e re1e mi1e so1e ...
    so1e mi1e re1f mi1f mi1f ...
    la1e la1e la1e so1e mi1e mi1f do1e ...
    la0e la0e la0e mi1e re1s mi1s re1e re1f ...
    mi1e mi1e so1e mi1e re1e mi1e re1e do1e ...
    la0f so0f la0f la0f ...
    ];
    part2 = [mi1e mi1e so1e mi1e mi1e so1e so1e la1e ... 
    do2e la1e so1f la1s do2s la1e la1f ...
    la0f la0e so0e la0f do1f ...
    re1e mi1s re1s do1e re1e mi1f mi1f ...
    la0e la1e la1e so1e re1e mi1s re1s do1e re1e ...
    mi1f mi1f blke blke blkf ...
    do1e la0e la0e do1e re1f so0e so0e ...
    mi1e so1e mi1e re1e do1f do1f ...
    la0e do1e re1e mi1e re1e do1e so0e mi0e ...
    la0f la0f blke blke blkf ...
    ];
    part3 = [la0f la0e so0e la0f do1f ...
    re1e mi1s re1s do1e re1e mi1f mi1f ...
    la0e la1e la1e so1e re1e mi1s re1s do1e re1e ...
    mi1f mi1f blke blke blkf ...
    do1e la0e la0e do1e re1f so0e so0e ...
    mi1e so1e mi1e re1e do1f do1e do1e ...
    la0e do1e re1e mi1e so1e mi1e mi1e so1e ...
    la1f la1f la1f la1f ...
    ];
    part4 = [la1e la1s la1s la1e la1e la1e la1s so1s mi1e re1e ...
    re1e re1s re1s mi1e mi1s so1s mi1e mi1s re1s do1e do1s la0s ...
    la0f la0e so0e la0f la0e do1e ...
    re1e mi1s re1s do1e re1e mi1f mi1f ...
    la1e so1e mi1e re1e so1e mi1e re1e do1e ...
    do1f do1f la0s do1s re1s mi1s re1s do1s la0s do1s
    ];
    part5 = [do2e do2s do2s la1e la1s la1s so1e so1s so1s mi1e mi1s mi1s ...
    re1e mi1s re1s do1e la0s so0s la0s so0s do1s re1s mi1s so1s la1s re2s ...
    do2f do2f blks blks blks blks do1e re1e ...
    mi1f mi1f mi1f so1e mi1e ...
    la1f la1f la1e do1e so1e mi1e ...
    re1f re1e re1s re1s re1e re1e do1e re1e ...
    mi1f mi1e mi1s mi1s mi1e re1s do1s ti0e do1s re1s ...
    mi1f mi1f mi1f so1e mi1e ...
    do2f la1f la1f la1e do1e ...
    re1f so1f so1f la1f ...
    ti1f ti1f ti1f ti1f ...
    ];
    part6 = [blkf blkf mi1e so1e mi1e so1e ...
    mi1f la0e la0s la0s do1f la0e mi1s la0s ...
    do1e do1s do1s re1e do1s re1s mi1f mi1f ...
    mi1f la0e la0s la0s so1f re1e re1s re1s ...
    mi1f mi1f mi1s re1s do1s la0s mi0s re0s mi0s so0s ...
    do1f la0e la0s la0s re1f so0e so0s so0s ...
    mi0f so0e so0s so0s do1f do1f ...
    la0f do1e do1s la0s mi1e mi1s mi1s re1e re1s mi1s ...
    ];
    % Combination, v1 is complete version, v2 is simple version.
    v1 = [part0 part1 part1 part2 part3 part4 part0 part1 part1 part2 part3 part5 part3 part6 part3];
    v2 = [part0 part1 part1 part2 part3 part5 part3 part6 part3];
    % Let's rock ^_^
    s = v1;
    s = s/max(s);
    sound(s,fs);
    % 画囧
    syms x;
    g=1/(x^2+2*x-3);
    ezplot(g,-10,10);
    % 2D 爱心
    [x,y]=meshgrid(-10:0.01:10);
    z=-(17*x.^2-16*y.*abs(x)+17.*y.^2);
    [c,h]=contourf(z,100);set(h,'linestyle','none')
    % 五星红旗
    function varargout=saxplaxliu(varargin)
    x=[0 0 40 40 0];
    y=[0 13 13 0 0];
    k=40/13;
    fill(x,y,'r')
    hold on
    plot(x,y,'r')
    axis([0 40 0 13])
    seta=pi/6;
    R=1.5;R2=0.55;x0=7;y0=9;seta=0;
    fliu(R,R2,x0,y0,seta,k)
    R=0.6;R2=0.23;x0=15;y0=11.6;seta=-pi/20;
    fliu(R,R2,x0,y0,seta,k)
    R=0.6;R2=0.23;x0=20;y0=10;seta=pi/20;
    fliu(R,R2,x0,y0,seta,k)
    R=0.6;R2=0.23;x0=19;y0=7;seta=pi/25;
    fliu(R,R2,x0,y0,seta,k)
    R=0.6;R2=0.23;x0=16;y0=5;seta=-pi/10;
    fliu(R,R2,x0,y0,seta,k)
    axis off 
    function fliu(R,R2,x0,y0,seta,k)
    x=zeros(1,10);
    y=x;
    for i=1:5
        x(2*(i-1)+1)=R*cos(pi/2+2*pi/5*(i-1)+seta);
        x(2*i)=R2*cos(pi/2+2*pi/5*(i-1)+pi/5+seta);
        y(2*(i-1)+1)=R*sin(pi/2+2*pi/5*(i-1)+seta);
        y(2*i)=R2*sin(pi/2+2*pi/5*(i-1)+pi/5+seta);
    end
    x(11)=x(1);
    y(11)=y(1);
    x=x*k+x0;
    y=y+y0;
    fill(x,y,[1 0.7 0])
    plot(x,y,'y')
    % 光盘
    t = (0:.02:2)*pi;
    r = 0:.02:1; %r = 0.3:.02:1; 
    pcolor(cos(t)'*r,sin(t)'*r,t'*(r==r))
    colormap(hsv(256)), shading interp, axis image off
    %ezsurf('r*cos(t)','r*sin(t)','t',[0 1 0 2*pi])
    %colormap(hsv(256)),shading interp,view(2), axis image off
    展开全文
  • MATLAB发布代码---生成文档pdf

    千次阅读 2019-03-12 22:23:12
    发布MATLAB®代码文件 (.m) 可创建包括您的代码、注释和输出的格式化文档。发布代码的常见原因是与其他人共享文档以用于教学或演示,或者生成您代码的可读外部文档。要在 MATLAB 编辑器中创建同时包含您的代码、格式...

    1、前记:

    发布 MATLAB® 代码文件 (.m) 可创建包括您的代码、注释和输出的格式化文档。发布代码的常见原因是与其他人共享文档以用于教学或演示,或者生成您代码的可读外部文档。要在 MATLAB 编辑器中创建同时包含您的代码、格式化内容和输出的交互式文档,请参阅在实时编辑器中创建实时脚本

    2、步骤----打开要发布的代码文件(m文件)-----点击发布----选择编辑发布选项。如下:

    点击输出文件,选择格式和修改地址,点击发布

    如:源代码为 Robotics System Toolbox中的机器人运动 (3)中的例子

    %% Waypoint tracking demonstration using Robotics System Toolbox
    % This demonstration performs inverse kinematics of a
    % robot manipulator to follow a desired set of waypoints.
    % Copyright 2017-2018 The MathWorks, Inc.
    %% Load and display robot
    clear
    clc
    robot = importrobot('irb_140.urdf');
    axis([-0.6 0.8 -0.6 0.65 0 1.2]);
    show(robot);
    axes.CameraPositionMode = 'auto';
    %% Create a set of desired wayPoints
    wayPoints = [0.5 0.1 0.6;0.5 0.4 0.5]; % Alternate set of wayPoints
    %wayPoints = [0.2 -0.2 0.02;0.15 0 0.28;0.15 0.05 0.2; 0.15 0.09 0.15;0.1 0.12 0.1; 0.04 0.1 0.2;0.25 0 0.15; 0.2 0.2 0.02];
    exampleHelperPlotWaypoints(wayPoints);
    %% Create a smooth curve from the waypoints to serve as trajectory
    trajectory = cscvn(wayPoints');%在点之间创建轨迹
    % Plot trajectory spline and waypoints
    hold on
    fnplt(trajectory,'r',2);
    
    %% Perform Inverse Kinematics for a point in space
    % Add end effector frame, offset from the grip link frame
    eeOffset = 0.01;
    eeBody = robotics.RigidBody('end_effector');
    setFixedTransform(eeBody.Joint,trvec2tform([eeOffset 0 0]));
    addBody(robot,eeBody,'link_6');
    ik = robotics.InverseKinematics('RigidBodyTree',robot);
    weights = [0.1 0.1 0 1 1 1];
    initialguess = robot.homeConfiguration;
    % Calculate the inverse kinematic solution using the "ik" solver 
    % Use desired weights for solution (First three are orientation, last three are translation)
    % Since it is a 4-DOF robot with only one revolute joint in Z we do not
    % put a weight on Z rotation; otherwise it limits the solution space
    numTotalPoints =40;
    % Evaluate trajectory to create a vector of end-effector positions
    eePositions = ppval(trajectory,linspace(0,trajectory.breaks(end),numTotalPoints));
    % Call inverse kinematics solver for every end-effector position using the
    % previous configuration as initial guess
    for idx = 1:size(eePositions,2)
        tform = trvec2tform(eePositions(:,idx)');
        configSoln(idx,:) = ik('end_effector',tform,weights,initialguess);
        initialguess = configSoln(idx,:);
    end
    %% Visualize robot configurations
    title('Robot waypoint tracking visualization')
    hold on
    axis([-0.6 0.8 -0.6 0.65 0 1.3]);
    for idx = 1:size(eePositions,2)
        show(robot,configSoln(idx,:), 'PreservePlot', false,'Frames','off');
        pause(0.1)
    end
    %% Plot joints values
    A = cat(1,configSoln.JointPosition);
    clf
    figure
    stem(A)%overview
    %% Joints
    joint1=A(1:40,1);
    joint2=A(41:80,1);
    joint3=A(81:120,1);
    joint4=A(121:160,1);
    joint5=A(161:200,1);
    joint6=A(201:240,1);
    figure
    stem(joint1,'LineStyle','none','MarkerFaceColor','r','MarkerEdgeColor','g')
    title('Joint关节的值变化')
    hold on
    stem(joint2,'LineStyle','none','MarkerFaceColor','g','MarkerEdgeColor','b')
    stem(joint3,'LineStyle','none','MarkerFaceColor','b','MarkerEdgeColor','y')
    stem(joint4,'LineStyle','none','MarkerFaceColor','y','MarkerEdgeColor','m')
    stem(joint5,'LineStyle','none','MarkerFaceColor','c','MarkerEdgeColor','w')
    stem(joint6,'LineStyle','none','MarkerFaceColor','m','MarkerEdgeColor','b')
    

    发布后生成的PDF文档效果为:

    3、后记:figure图框的利用---打印图窗、点击箭头修改图占框大小、插入图例修改data标签,以便给论文提取所需的图。

     

     

                                                                                                           ----------己亥年二月初六晚

    展开全文
  • 2018数学建模matlab代码

    2020-07-30 23:31:54
    2018数学建模matlab代码
  • Matlab生成stm32代码

    千次阅读 热门讨论 2019-12-18 14:42:13
    利用Matlab的simulink搭建模型生成C代码,通过stm32cubemx生成工程,最后在KEIL或者IAR等工具里面编译生成代码下载至MCU中执行。 本文以流水灯建立模型和简单使用定时器为例进行演示。 二、开发环境 1、安装Matlab ...

    一、整体思路

    利用Matlab的simulink搭建模型生成C代码,通过stm32cubemx生成工程,最后在KEIL或者IAR等工具里面编译生成代码下载至MCU中执行。
    本文以流水灯建立模型和简单使用定时器为例进行演示。

    二、开发环境

    1、安装Matlab

    Matlab版本建议在2013B以上,本文使用Matlab 2016a。
    setup.png

    2、安装STM32硬件支持包

    下载地址(https://www.stmcu.org.cn/document/detail/index/id-216053)
    安装完成后重启MATLAB。官网文档中提到,当前只支持F4和F3部分系列,F1系列生成代码后编译可能会报错,本文使用STM32-MAT版本V4.3.0。
    setup.png

    3、安装STM32CUBEMX

    用于配置单片机硬件资源,下载地址(https://www.stmcu.org.cn/document/detail/index/id-214984)

    4、安装KEIL或者IAR等IDE

    用于配置工程文件。

    三、STM32硬件资源配置

    1、打开STM32CUBEMX

    选择“access to MCU selector”
    在这里插入图片描述

    2、选择STM32芯片

    以STM32F103R6为例。如果搜索不到,那么可能需要下载安装库文件
    setup.png
    下载对应的库文件即可。
    setup.png
    搜索到芯片后,选中点击“Start Project”,进入配置界面。
    setup.png

    3、首先选择时钟

    这里选择HSE,使用外部晶振
    setup.png

    4、再配置GPIO

    选择PA1-5作为LED灯。引脚状态选择为输出。
    setup.png
    setup.png
    再根据硬件设计,配置IO上拉还是下拉。
    setup.png
    setup.png

    5、最后配置时钟

    选择最大72MHz。

    在这里插入图片描述

    6、保存工程

    输入工程文件信息
    setup.png
    选择生成的工程文件,如果是KEIL,那么选择“MDK-ARM V5”。
    setup.png
    最后保存即可。
    setup.png

    四、SIMULINK配置

    1、配置MATLAB搜索路径

    打开MATLAB,首先配置MATLAB搜索路径。
    setup.png
    将STM32-MAT的安装路径添加进来。
    setup.png
    添加完成后将MATLAB当前工作路径修改为第三步中IOC文件位置,默认是在Matlab安装位置,不修改的话后面生成代码的时候会报错。
    setup.png
    最后建议重启一下MATLAB。

    2、打开SIMULINK

    新建一个空白模型。
    setup.png
    打开配置界面
    setup.png

    3、选择STM32配置文件

    setup.png
    选择stm32.tlc。
    setup.png
    解算器(Solver)选项默认为固定步长,即“Fixed-step”,然后修改步长为1/10000,即0.1ms。也可以根据实际情况修改,默认为auto可能会导致程序运行时无法显示出效果。
    setup.png
    添加代码注释
    setup.png

    4、选择cubeMX路径

    setup.png

    五、模型搭建

    Simulink配置完成后就可以自己搭建模型。

    1、配置芯片

    选择MCU config,将右侧模块拖动至刚刚新建的空白模型。
    setup.png
    setup.png
    双击刚刚拖出来的模块,进入配置界面,选择第三步生成的IOC文件。
    setup.png
    setup.png

    2、选择GPIO模块

    setup.png
    同样拖动至SIMULINK,双击该模块配置IO引脚,可以看到我们在cubemx里面配置的IO,勾选要打开的IO,点击确认即可。
    setup.png

    3、模型设计

    使用”Counter Free-Running”模块进行计数,参数配置如下
    setup.png
    此配置的意思为每0.5秒计数一次,计数的最大值为2^Nbits – 1,其中Nbits为所填的2,所以这里最大值为3。
    示波器显示和预期值一致。
    setup.png
    然后通过一个关系比较符,当计数值分别等于0,1,2,3,时,相应的GPIO输出为1。
    setup.png
    示波器仿真结果如图
    setup.png
    最后模型如图所示
    setup.png

    六、代码生成

    模型设计完成后,仿真结果无误,就可以进行代码生成。按“Ctrl+B”或者如图所示点击,进行代码生成。
    setup.png
    setup.png
    setup.png
    最后生成工程目录如下
    setup.png
    “stmDemo_stm32”目录为matlab生成的原始代码。
    IOC文件为stm32cubemx工程文件。
    Slx文件为simulink模型文件。
    其他的为KEIL工程中的代码。

    七、编译下载验证

    1、仿真验证

    打开工程,代码编译完成后,下载程序到目标板。
    setup.png
    setup.png
    这里使用proteus进行仿真,仿真中流水灯切换速度为5秒,比预定的时间0.5秒慢了10倍,仿真提示” Simulation is not running in real time due to excessive CPU load.”,说明仿真时单片机运行速度不是实时的。
    setup.png
    setup.png
    为了进一步验证,再使用一个定时器进行让LED5以1Hz的频率闪烁。配置如下:
    setup.png
    模型如下:
    setup.png
    setup.png
    setup.png

    生成代码后编译报错,原因为F1系列的库函数中”__HAL_TIM_SetAutoreload”该函数未定义成” __HAL_TIM_SET_AUTORELOAD”。
    而在F4系列的库函数中是有该定义的,编译不会报错。
    setup.png
    因此生成的代码无法正常使用定时器,除非修改生成后的代码,这样并不是我们想要的。

    2、开发板验证

    最后以F429单片机为例,重新生成代码下载到单片机进行验证。IOC文件中,时钟配置为180MHz,其他步骤同第三~六步。
    setup.png
    代码生成完成后对工程进行配置,设置程序下载完成后重置运行,下载器根据实际情况设置为”CMSIS-DAP-Debugger”。
    setup.png
    setup.png
    编译完成下载至单片机中,看是否满足设计要求。
    经过验证该代码无误。

    八、注意事项

    1、代码生成后的处理

    生成代码后,由于使用了systick(系统定时器),但是生成的代码中没有对其进行调用,所以需要在stm32f4xx_it.C中手动添加一行代码,否则程序可能无法正常运行。添加的代码为:HAL_SYSTICK_IRQHandler();
    该问题具体原因未知,可能和stm32cubemx配置或者版本有关。
    setup.png

    2、Matlab工作路径

    建议生成代码之前,将matlab工作路径指定到IOC文件位置,同时将SLX文件也放在同一个文件夹下,这样方便工程管理。

    3、参考文档

    在STM32-MAT安装路径下还有更多示例以及使用说明。
    setup.png

    4、Invalid index问题

    Invalid index. Component:Simulink | Category:Block diagram error

    matlab2018b中生成代码时出现上述问题
    解决方法如下:
    在simulink设置选项“hardware implementation”中把设备STM改为“custom processor”
    matlab2018b

    九、小结

    总的来说该方法生成底层代码较复杂,而且配置繁琐。当然优点是基本不需要修改生成的代码,但实际上未能节省太多时间。

    MATLAB自动生成的代码是标准的C代码,支持所有的MCU。因此建议在实际开发中能在Simulink环境下仿真的部分,通过Simulink实现;对于单片机底层这类没法在Simulink下仿真的软件,不应该打包到Simulink环境下。

    展开全文
  • 随机森林用于分类matlab代码

    热门讨论 2020-07-30 23:51:45
    根据随机森林的原理实现的matlab代码,里面有非常详细的注释,几乎每行都有,针对分类问题,可以运行,可以根据需要,修改到自己的算法中。
  • MATLAB/Simulink自动代码生成(一)

    万次阅读 2019-06-10 15:11:39
    Simulink自带了种类繁多、功能强大的模块库,在基于模型设计的开发流程下,Simulink不仅通过仿真可以进行早期设计的验证,还可以生成C/C++、PLC等代码直接应用于PC、MCU、DSP等平台。在嵌入式软件开发中发挥着...

            Simulink自带了种类繁多、功能强大的模块库,在基于模型设计的开发流程下,Simulink不仅通过仿真可以进行早期设计的验证,还可以生成C/C++、PLC等代码直接应用于PC、MCU、DSP等平台。在嵌入式软件开发中发挥着重要的作用,本文以Simulink模型生成嵌入式C代码为例分析代码生成的原理及应用。

    一、根据需求建立系统框图

         低通滤波:又叫一阶惯性滤波,或一阶低通滤波,是使用软件编程实现普通硬件RC低通滤波器的功能。适用于单个信号有高频干扰信号的情形。

        一阶低通滤波的算法公式为:

        式中:是滤波系数;是本次采样值;是上次滤波输出值;是本次滤波输出值。

    根据以上计算公式可以建立如下图所示模型:

    二、代码生成

     SimulinkSimulink Coder工具箱提供了将模型转换为可优化的嵌入式C代码的功能。 

    Configuration Parameter中集中管理着模型的代码生成方法、格式等约束条件。为了生成嵌入式代码,至少需要配置三部分:模型的解算器solver,模型的系统目标文件(如ert. tlc或其他自定义的嵌入式系统目标文件),硬件实现规定(Hardware Implenmatation)。

           按下Ctrl+E打开模型的Configuration Parameter对话框,如下图所示:

     

    2.1 solver页面的设置 

             solver页面如下图所示:

     解算器类型必须选择固定点解算器。固定点solver中提供了多种算法,此模型由于没有连续状态,可以选择discrete方法。步长默认auto在简单的通用嵌入式代码生成过程中此参数没有实际作用,可以采用默认或设置0.01s。而在针对目标芯片定制的代码生成过程中,硬件驱动具箱往往会将步长step size作为其外设或内核中定时器的中断周期,使得生成的算法代码在硬件芯片中以同样的时间间隔执行。并且由于解算器步长为整个模型提供了一个基础采样频率,故被称为基采样率(base-rate)。

    2.2 Optimization页面的设置

    当模型中使用参数变量,如Gain模块的增益值,在生成代码时,如果希望使用该参数的值直接展开到代码中就需要设置参数内联选项,如下图所示框中选项:

             Inline parameters选项决定是否将参数内联到代码中去。勾选此选项后,代码生成时模型的参数将以常数方式直接生成到代码逻辑中,不再以一个参数变量的形式生成。当模型中的参数需要作为实时可调的参数生成到代码中时,不勾选Inline parameter,参数将作为变量生成;如果不需要实时调整参数,可以选择节省存储空间的方式,勾选Inline parameter将参数以数值常数的形式生成到代码中。

     

    2.3 Hardware Implenmatation页面的设置

          Hardware Implenmatation选项是规定目标硬件规格的选项。在这个选项卡中可以配置芯片的厂商和类型,设置芯片的字长、字节顺序等。学习使用通用嵌入式芯片为目标的代码生成流程及原理,选择32位嵌入式处理器作为芯片类型,如下图所示框中部分:

        另外一个关键的设置选项是控制整个代码生成过程的系统目标文件System Target Fileert. tlc文件是Embedded Coder提供的能够生成专门用于嵌入式系统C代码的系统目标文件。在Code Generation页面中,单击下图所示右上角Browse按钮可以弹出对话框以选择系统目标文件:

    在选择框中选择ert. tlc之后Code Generation标签页下面的子标签也会发生变化,提供更多的功能选项标签,如下图所示,方框内为新增子标签:

    (1)Report子标签能够打开设置关于生成代码报告的页面,可以选择是否创建HTML格式的代码生成报告,并通过勾选框选择是否在模型编译结束后自动打开。其对话框页面如下图7所示:

     

          Metrics 组的 Static code metrics 选择框,勾选时将会在代码生成报告中包含静态代码的参数指标。

         推荐勾选 Create Code Generation Report Open report automatically 两个选项,模型生成代码完毕后会自动弹出报告列表,而不需要到文件夹中逐一将源文件手动查找并打开。 

    (2)Comments子标签中包含对生成代码中注释内容的配置,其对话框如下图所示:

            Include comments选项的勾选决定是否在生成代码中添加Simulink自带的注释。
          启动此选项后Auto Generated comments组及Custom comments组的选项便被使能,我们可以根据需要选择希望生成的注释内容。

     

     

     

          推荐启动 Include comments 选项并勾选 Simulink block Stateflow object comments 选项以生成注释,注释中带有可以从代码跳转到对应模型的超链接,方便追溯模块与代码的对应关系。

        (3)Symbol子标签页面用于设置ert.tlc—族系统目标文件控制下的代码生成不变定义规则,如下图所示:

     

     

    这些符号包括数据变量和数据类型定义、常量宏、子系统方法、模块的输出变量、局部临时变量及命名的最长字符数等。

    Identifier format control 参数组里默认使用标示符 $R$N$M$TEmbedded Coder 内部使用的标示符,如下图所示:

     

    这些标示符的具体意义如下表所列:

     

     通过上表各种标示符的不同组合,即可规定生成代码中各部分(变量、常量、函数名、结构 体及对象)的名称的生成规则。

     

             Simulink提供的这些标示符生成的变量名虽然可读性不强,但是不会引起代码编译错误。推荐使用默认设置,不要为了提高生成代码可读性轻易进行修改,以免造成不必要的错误。以后会学习更好更安全的提高代码可读性的优化方法。

        (4)Custom Code子标签页面主要用于添加用户自定义的或者编译模型时必需的源文件、头文件、文件夹或者库文件等,其页面如下图所示:

        

     

        (5)Interface 子标签页面中包含3组参数Software EnvironmentCode Interface、Data Exchange其对话框如下图所示:

     Software Envirionment 组的参数中提供 CPL(Code Placement Library)的选择,CPL 中 定义一个表,根据表格将Simulink模块与所对应目标语言的数学函数及操作函数库挂接,以便从模型生成代码。Embedded Coder提供默认的CPL

    Support参数组由7个选择框构成,如下:

     

     每个选择框代表一种嵌人式编码器对代码生成的支持功能,其中一些功能是需要Simulink供的头文件来支持才能编译为目标文件的,这些头文件一部分存储在路径为MATLABroot\ simulink\include的文件夹中,一部分是在模型生成代码过程中自动生成的(rt开头的头文)。具体参考下表:

     Code Interface与Data Exchange参数组用来配置生成代码的接口及数据记录的方式,如无特殊要求建议使用默认配置。

    (6)Code Style子标签页面提供了一些关于生成代码风格的选择框选项,如if else分支的完整性确保,if else与switch case语句的选用,生成括号的频度,是否保留函数声明中extern关键字等,如下所示:

       (7)Template子标签页面内嵌入式编码器提供了一组默认的代码生成模版,如下图所示:

     

         ert_code_template.cgt 中使用TLC变量方式规定了文件生成的顺序及添加模型信息注释的位置。模型生成的源文件、头文件及全局数据存储和外部方法声明文件的生成可以使用统一模板。

     

     

         ert_code_template.cgt中主要规定了代码段的顺序,section包含了源文件从注释到变量再到函数体各种分 段,如下图所示:

         顺序从上到下,依次为:文件 说明的注释(File Banner)、头文件包含(Includes)、宏定义 (Defines)、数据结构类型的定义(Types)和枚举类型的定义(Enum)、各种变量的定义(Definitions),以及函数体的声明(Declarations)和闲数体定义(Functions)。我们在相邻的段中插人自定义内容,但是不要打乱既存段的对顺序。

       (8)Code Placetnem子标签提供的选项将影响生成代码的文件组织方式和数据存储方式及头文件包含的分隔符选择等,其页面如下图所示:

     

    常用的选项是File packaging format,表示生成文件的组织方式,对应的生成文件个数不同,内容紧凑程度也不同。具体如下表所列:

     

     

    省去的只是文件个数,其内容被合并到了其他文件中,内容的转移如下表所列:

     我们可以使用默认设置,如果希望减少生成代码列表中文件的个数,可以考虑使用Compact 的组织方式

    (9)Data Type Replacement子标签默认情况下仅提供一个选择框选项:

     

     

     勾选之后则弹出3列数据类型类表,分别是Simulink Name,Code Generation Name Replacement勾选 Replace data选项之后界面如下图所示:

    前两列按照数据类型的对应关系给出了每种数据类型在Simulink和嵌入式编码器生成代码中的类型名,第3列则供用户设置,填人自定义的类型名之后,生成代码时将使用自定义的类型名替换Code Generation Name。

    用户填人的自定义类型名不仅是一个别名字符串,还必须在Base Workspace中定义其作为Simulink .AliasType类型对象才可以。

    如定义U16数据别名对象来替换uint16_T这个内部类型。第3列的edit框不必全部填入自定义类型名,可以根据应用场合选择部分或全部来使用。并且可以使用同一个数据类型名替代多个内建数据类型,如使用U8同时替换uint8_T和Boolean_T类型。

    (10)  Memory section子标签中设置函数、常数、输人/输出、数据和参数的存储段。如无须生成pragma等存储段指定命令则此子标签页面下使用默认设置即可。

     

    Code Generation标签页下提供的子标签页功能说明均已完成。

     

    2.3 启动编译

     当这些配置好以后,我们就可以启动模型编译:

    或者按下ctrl+B,模型左下角从ready显示为building:

     

    片刻后弹出Code Generation Report界面,如下图所示:

     

     

    与模型名相同的.c若模型配置无误,则文件中包含model_step()函数,这里的代码表示模型所搭建的逻辑:

     

     

    1. rtb_Delay += (rtU.In1 - rtb_Delay) * rtU.In2;
    2. rtY.Out1 = rtb_Delay;

    未经优化的代码可读性较差,但是从四则运算关系中及结构体的成员名上可以看出每一个变量所代表的意义。

     

    除此之外,生成的代码还提供了 Code to Model追踪功能,单击下图方框中的超链接,可以直接跳转到模型中对应的模块,该模块或子系统将会以蓝色显示。如下所示:

        我们单击<Root/In2>来演示这个超链接,这个追踪功能提示用户模型与代码的对应关系,即直接跳转到模型中对应的模块,该模块或子系统将会以蓝色显示。如下所示:

    转发自:https://blog.csdn.net/weixin_41695564/article/details/80751543

    展开全文
  • matlab代码转换成C代码

    千次阅读 2018-11-29 22:47:15
    MATLAB Coder可以从MATLAB代码生成独立的、可读性强、可移植的C/C++代码。本文基于matlab2015a编制,但是也适用于matlab 2014~2016的版本。 1. 使用MATLAB Coder产生C代码的4个步骤: (1) 开发实现特定算法功能的...
  • 基于MATLAB的拼图游戏设计 内容摘要:MATLAB强大的运算和图形展示功能,使图像...本博文基于MATLAB编程语言,详细介绍了如何利用MATLAB及其图像处理函数进行经典拼图游戏设计,并通过具体方法步骤及相应代码逐...
  • 1、代码功能 输入:一个字符串 输出:  codeword(码值)  codeword所占的位数 2、代码框图 3、代码超详解  统计字符串中的字符种类,调用函数,放入数组b中。 b=unique(str1); 统计每种字符的个数...
  • Matlab线型、标记、颜色表示代码

    万次阅读 2018-01-25 14:00:43
    最近要用到Matlab画图,学到 plot 函数这里,觉得表示 线型、标记、颜色 的表示代码很容易忘,故在此记下来以便查阅。 Matlab共有5种不同的线型 线型代号 表示线型 - 实线 – 虚线 -. 点画线 ...
  • Matlab里怎么注释掉一段(多行)代码?你可以这样做,先选好你需要注释的那几行,单击右键,选择COMMENT。就可以了。如果要取消就同样选择要取消注释的那几行、依上述同样的操作选择Uncomment.就行了。
  • http://blog.csdn.net/chenbang110/article/details/7604975
  • 算法例子 ... 原理 ... 1.定义 遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。 主要特点 ......
  • Latex 中插入 Matlab 代码

    万次阅读 多人点赞 2015-07-24 22:21:20
    功能效果主要有如下排版功能: 语法高亮 自动添加边框 自动添加行号 先上图,大家感受一下效果————————————————————开始...\lstset{language=Matlab}\begin{lstlisting} % Plot function f(x) = 2
  • 如何将Matlab代码带颜色无乱码粘贴到word或网页中  由于经常使用Matlab编程,并需要撰写报告,这就需要将代码附在后面。可是当代码中含有中文时,粘贴到微软的Ofiice的word里会出现乱码,在网上搜索了好长时间...
  • 几种查看Matlab函数源代码的方法

    万次阅读 2014-03-03 14:49:28
    查看源码是学习写代码的一种好方法,这里介绍几种查看Matlab软件自带函数的方法: 1、type函数 在命令窗口输入“type+函数名”,则命令窗口会显示函数的源代码,例如type regress(其中regress是用来做线性回归的...
  • MATLAB整理代码快捷键

    千次阅读 2014-10-29 13:00:51
     选中要整理的代码,按下 CTRL+I;或者是选中要整理的代码后,点击菜单栏text下的smart indent (2)手动缩进。  选中要缩进的代码,按TAB键(或者CTRL+[ )可向后缩进;按SHIFT+TAB键(或者CTRL+] )可向前缩进...
  • cmd.exe命令行方式执行matlab代码

    万次阅读 2012-09-05 09:26:13
    matlab代码的命令行运行方式 当你安装完matlab时,matlab会自动将matlab.exe的路径注册到系统的环境变量。如下图: [图1] 这个时候,打开cmd.exe(附件中的命令行)。首先可以验证一下,在cmd中输入matlab,...
1 2 3 4 5 ... 20
收藏数 133,226
精华内容 53,290
关键字:

matlab代码