微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > DSP学习交流 > + Matlab与DSP程序开发

+ Matlab与DSP程序开发

时间:10-02 整理:3721RD 点击:
      Matlab具有强大的分析、计算和可视化功能,利用Matlab提供的数十个专业工具箱,可以方便、灵活地实现对自动控制、信号处理、通信系统等的算法分析和仿真,是算法设计人员和工程技术人员必不可少的软件工具。      数字信号处理器(DSP)作为一种可编程专用芯片,是数字信号处理理论实用化过程的重要技术工具,在语言处理、图像处理等技术领域得到了广泛的应用。但对算法设计人员来讲,利用汇编语言或C语言进行DSP功能开发,对于具有周期长、效率低的缺点,不利于算法验证和产品的快速开发。
      由MathWorks公司和TI公司联合开发的Matlab Link for CCS Development Tools(CCSLink)是Matlab6.5版本(Release13)中增加的一个全新的工作箱,它提供了Matlab、CCS和DSP目标板的接口,利用此工具箱可以像操作Matlab变量一样来操作DSP器件的存储器和寄存器,使开发人员在Matlab环境下完成对DSP的操作,从而极大提高DSP应用系统的开发进程。
      1 安装Matlab
              安装流程与常见的Windows下的软件安装没有什么不同,需要注意的是请安装完整版本或者在组件选择的时候安装Matlab Coder组件。安装完成后可在Matlab应用程序标签找到Matlab Coder组件
              如下图:
                           


      2  编写函数 M文件
在Matlab下有两种常用的M文件--脚本及函数,需要注意的是函数M文件才是能够生成C/C++代码。所以,第一步是讲我们写的算法写成函数形式的M文件。
         这里我以   y = 2x + 5 这个一次函数为例。
         新建函数 M文件
                           


       3  印证算法
        在命令窗口输入 y = fun(5),理论上我们会得到结果  y = 15.
        在Matlab命令行窗口,除了可以执行内置函数,M文件等,还可以执行一些命令,例如在Windows版本下,可以使用md、cd、dir 等命令,也可以通过这些命令却换工作状态。
                             


                              


          在Matlab中我们不需要申明变量,但是在C/C++ 中必须显示制定变量类型。在我们的函数M文件fun.m中只有一个输入变量,在这里制定它的类型为32-bit 无符号类型变量。
          选择输出类型为C/C++静态库,并勾选只生成代码复选框,因为在这里我们只需要得到生成的原文件,不需要Matlab为我们编译成可执行文件。
         接着点击编译开始生成文件,编译文件后还可以查看报告,在报告窗口中可以获取更为详细的信息。
         至此我们就用Matlab Coder 组件,将我们编写的Matlab程序代码生成C/C++程序代码。可以简单看一下Matlab Coder生成的主要代码(位于fun.c),可以发现生成的代码还是比较注重效率的,比如乘法计算使用移位来提高效率(左移一位等同于数值乘以二,右移一位等同于数值除以二,不过对于DSP来说支持硬件乘法运算,效率还是很高的)。
      下面附上DSP与Matlab相关代码
     

  1. #include
  2. #include
  3. #include "fun.h"
  4. #include "fun_initialize.h"
  5. #include "fun_terminate.h"



  6. int main(void)
  7. {

  8.         fun_initialize();


  9.         fun(5);

  10.         // 打印计算结果
  11.         // 注意:一定不要忘记加上 "\n"
  12.         printf("y = %d\n", fun(5));
  13.         printf("y = %d\n", fun(50));
  14.         printf("y = %d\n", fun(500));
  15.         printf("y = %d\n", fun(5000));
  16.         printf("y = %d\n", fun(50000));


  17.         // 断点
  18.         // 防止出现找不到出口错误
  19.         asm(" SWBP 0 ");
  20.         
  21.         return 0;
  22. }

复制代码


学习了 感谢小编分享

不知,支持simlink?

把光盘里的资料用来发帖真的好吗?

这个真是不怎么样啊

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top