MATLAB 是一个桌面计算环境,旨在使批量数学变得容易。如果您能够访问 MATLAB 源代码,您会发现,当您深入研究它时,实际的计算位是用 C++、C 或(很可能)Fortran编写的。
然而,它与底层数学包的接口又大又慢,而且不是可以轻松实时运行的东西*
与信号处理相关的开发工作的一般过程或多或少如下:
首先,有人进行基础研究,看看所提议的是否可行。这将涉及混合基础数学和实验数学。基本的数学部分是 - 数学。输出是一系列研究论文或白皮书。实验数学部分很可能包括 MATLAB,但可能涉及再次使用 Python 和数值包(在我看来,MATLAB 最适合总行数不超过 500 行的程序;除此之外,该语言的笨拙程度超过了 Python 及其可用的软件包对数学的集成不太彻底)。
然后,有人使用上述步骤的输出进行初始系统设计(有时这两个步骤可能同时发生;有时,在简单的SDR的情况下,基础研究已经建立了几十年)。如果您对自己的设计方法进行系统化,您也可以在这里使用 MATLAB 或 Python,但您也会知道处理器(使用 C/C++ 编写的代码)和/或任何数字处理器上可以进行哪些处理逻辑(FPGA或ASIC)。
这个初始系统设计的输出是一个完整详细的算法描述,一直到 C/C++ 中可用的已建立函数(因此,如果没有可用的数学包,则为算术,如果有,则为包的操作)。该初始设计将包括处理器负载的估计,并将分析需要使用哪些处理器,以及如果使用数字逻辑,如何在处理器和数字逻辑之间分配工作。
(请注意,这里的另一种方法是为您提供可以使用的硬件的处方,您的工作是确定可以将多少功能挤入其中。它使用相同的知识库,但通常涉及很多技术工作,以及与非技术利益相关者的大量会议以解释事情并协商每个人都可以接受的解决方案)。
最后得到或设计端点硬件,实现实际设计。这部分在处理器中用 C 或 C++ 完成,在数字逻辑位中用VHDL或Verilog完成(可能为了好玩而将一些SystemC放入其中)。这最后一步是最费力的。它不仅需要了解信号处理数学,还需要深入了解数值方法(因为您通常不能只在 64 位浮点中做所有事情:您通常会将您的设计压缩成更小的浮点字,或者入固定基数算术)和一般嵌入式编程的良好做法。
在工作世界中,您要么从最底层开始,实施设计,然后(也许)在工作中学到足够多的知识,可以信任您进行详细的系统设计,然后进入该步骤。或者,你获得了一个具有绝对炸药论文的博士学位,该论文基本上针对有钱人想要解决的某个问题进行了第一个基础研究部分,然后你在余下的职业生涯中进行研究,因为这是知道如何解决问题的唯一方法做初步的系统设计就是要知道如何做详细的设计。
如果您是一名使用 MATLAB 的顶级 DSP 从业者,并且您想实际编写代码,那么您需要确保具备以下技能:
- 了解所有这些 MATLAB 库调用的实际作用。我已经看到很多人认为 DSP 开始和结束于知道要调用哪些 MATLAB 函数的帖子——事实并非如此。如果您只知道要调用哪些 MATLAB 函数,那么首先要弄清楚它们在算术上和信号上的作用。
- 了解如何在 C/C++ 中实现数学。首先学习如何做到这一点,使其完全有效,然后学习如何在减少数据宽度和固定点的情况下做到这一点。然后学习如何做到这一点,以便它运行得很快。如果您没有数值方法文本,请至少获取一个;如果您还在上学,请参加数值方法课程。
- 学习如何进行嵌入式编程,或者至少开始学习它。这意味着学习如何编写代码以使其不依赖于任何更高级别的操作系统函数,并学习如何注意使用的内存量,以及至少了解处理器上线程间通信的基础知识没有MMU。
* 如果您不知道“实时”在嵌入式系统编程环境中的含义——请学习。