本文作者maxfiner,毕业于西安电子科技大学,拥有信号与信息处理专业硕士学位。maxfiner曾供职于华为通信技术公司 无线通信部门,拥有多年的工程项目研发经验,同时兼备算法理论研究,仿真验证,以及对应的硬件设计实现能力;具备通信物理层开发设计各个方面的实战经 验...
精通信号处理设计小Tips(2):数学的作用
对于工科专业的工程师来说,数学到底是否有用?有多大用?都干什么用?相信是很多人曾经考虑和关心的问题。结合电子工程方向,对此稍作讨论,跟大伙交流。
对于电子工程方向,一般在大学会先后学习这么几门数学课程:微积分,线性代数,概率论,复变函数,随机过程,矩阵论,数值分析等。但对于大多数人来说,参加工作后,大家都会感慨,大部分内容基本都忘光了。为什么呢?原因很简单,因为再也没有用到。对于很多具体的工程领域,这些课程的大部分的确不大用得着。就我个人工作经历来说,工作后,主要从事通信物理层的应用和实现。微积分很少直接应用,除了高等数学老师,还有谁会去关注柯西中值定理呢?复变函数更是多年未曾打过一次交道。这么些课程中,相对来说,用的较多的是两样,一个是傅里叶变换,一个是线性代数。最最频繁使用的,是高中学到的一些知识,比如复数,三角函数,初等函数等等。
就像从初中一年级就开始花费大量时间学习英语,至今仍是聋哑英语一样,大学的那么多课程,费了好些时间和力气学习,却没有怎么用得上,想想真是令人惋惜。现在回想起来,如果上大学只为了最终的一张文凭的话,我宁可不上。在现实中,一个单片机实用电路的设计经验,或者熟练的编写一段软件代码,远比泰勒定理的证明更来得实在。
照如此说,似乎大学的数学也没有啥用。这个结论先不必急于落下。先谈谈我在工作实践中中碰到的具体数学应用吧。频谱分析需要用到傅里叶变换,这算是大学数学诸多领域中应用最广泛的一个。采样定理的证明和更好的理解,也要用到傅里叶变换。数字上下变频会涉及到三角函数中的积化和差。电路阻抗分析中会用到复数的运算。FPGA实现中会涉及到一些逻辑运算。FIR滤波处理从实现上看就是一个乘累加运算,背后是对各种频谱分量的不同处理。应用广泛的相关累计运算也是乘累加运算。符号同步、频偏估计、信道补偿等处理会涉及到复数形式的乘累加运算。
从以上的典型应用来看,相当多的数字信号处理应用都离不开乘累加运算,比如相关、卷积、滤波等等,傅里叶变换的具体实现——离散傅里叶变换,其实现方式也是乘累加。这也是数字信号处理的魅力,一个简单的乘累加运算,解决了各种各样,各种形式的问题。一个成累加运算之所以能够发挥如此巨大的威力,其原理和本质都是基于线性时不变系统的前提。所以说,线性运算和与之紧密相连的线性系统,是我们必须好好理解的一个内容。
不得不提的是傅里叶变换,对于电子工程和从事通信信号处理的工程师来说,这算是大学数学在工程实践中最重要的一个应用吧。比如信号的时移和频移,信号的上下变频处理,实信号的共轭对称特性,复信号和实信号频谱的差异,模拟信号的数字采样,信号的带通采样,频谱的混叠和抗混叠,频谱的镜像,上采样中的内插处理,下采样中的抽取处理,等等等等,都可以从傅里叶变换的角度进行解释和分析。对连续和离散傅里叶变换的全方位理解,有助于我们更深刻的解释和分析具体应用中的各种问题。
当应用MATLAB来做一些信号处理算法的仿真时,我才真正体会到线性代数的应用价值和巨大威力。由于信号处理都是用离散的样点来处理的,因此信号处理算法和实现都可以用矢量和矩阵的方式来表达和分析。比如最简单的乘累加运算,可以看做是两个矢量的相乘。信号处理的最基本和最频繁的运算,诸如相关,卷积,滤波,傅里叶变换,所有的这些都可以用简洁的矢量和矩阵形式表达出来。
线性代数大概研究几个大方向:解方程,特征值分析,奇异值分析,稳定性分析。在具体工程应用最多的是基本的矢量运算和解方程。对矢量运算的理解非常有助于灵活运用MATLAB,因为MATLAB就是以矢量为处理对象的,矢量操作远比for循环高效的多得多。
当初学习特征值的时候,始终不明白这个特征值到底有什么用,工作多年来也没有看到它到底有什么用。但是,当我因工作需要去了解LMS自适应算法的原理时,我第一次强烈的感受到特征值的价值所在。稍微熟悉LMS算法的人都知道,LMS的每一步迭代,都涉及到一个步进常数,而这个常数该取多大,跟信号相关矩阵的特征值有密切联系。张贤达老师曾经写过一本专著,专门讨论线性代数在信号处理中的应用,从中可以看到非常多的特征值,范数,奇异值等概念在信号处理中的具体应用。
很多信号处理算法要解方程,解方程则涉及到形式多样的矩阵分解方法,基于DSP数字信号处理器来搞这些矩阵分解算法是再合适不过了。但是对于实时性要求更高的应用场景,更多的基于FPGA硬件实现,矩阵分解则用的不多,更多的是使用一些替代方法,比如基于迭代的方法。就像上面提到的LMS算法,就是替代需要矩阵分解的LS算法。因为迭代的方法用FPGA实现更为方便。
我个人的经历非常有限,只涉及信号处理在通信中的应用的一小部分,以我的鼠光来看,对于通常的电路设计,软件设计,逻辑设计等诸多领域,大学的数学实际应用的不是太多,关联不是很大,更多的是起到理论支撑和理解作用。但对于算法领域来说,比如通信信号处理,雷达信号处理,模式识别,数据挖掘,信息检索等等,大学的数学知识还是有相当多的用武之地的。
另外,也和我国当前的发展现状有很大关系,真正涉及大量数学知识的工程应用团体和公司还比较少,大多处于比较初级和粗浅的应用。试举两个例子,第一个,国内做视频监控方面的厂商可谓成百上千家,但大多处于图像采集,图像压缩编码,图像的传输和多种格式的显示等初级应用,涉及到图像目标检测,图像分割,图像目标识别等应用的产品还非常少。而这些才是真正涉及大量数学和信号处理算法的地方,体现算法魅力和价值的地方。第二例,当前市面上出现了家庭自动扫地机,可以自动充电,自动打扫地面,但是对于房间地面的遍历,大多数扫地机采用非常简单的随机搜索方式,效率很低,以至于有些扫地机时不时的发出如下语音:“我很笨,可是我很勤奋!”。或者说:“请不要一直盯着我”。这也是无奈之举。对于房间地面的高效遍历,肯定是需要一套检测和识别算法来有效支撑的,这些地方更能体现数学和算法的价值。
真正的工程实践中,物理、化学的实际用途更大,更广。对社会产生巨大影响,产生巨大推动力量的更多的是物理学家,化学家,生物学家,医学家等等,数学家相对要少些。有人说数学很美,描述的非常夸张,也许当事人的确有这种感觉。我个人的感觉是物理定律比纯粹的数学公式更美。对大多数工程实践人员来说,数学是有用,但也只是一种工具而已,远不是首要的,放到首位的始终是用简单高效的方法解决实际的具体问题。