六年⼯龄数字信号处理⼯程师的不完全职场进阶计划(专业技能
篇)
我已经在美国⼀家科技公司⼯作快六年了。
在这六年中,我由⼀名刚刚从学校毕业的研究⽣,经过多个⼤⼩项⽬的洗礼,从普通的电⼦⼯程师,做到了公司研究部门的研究⼯程师。我的技术⽔平,在这期间得到了极⼤的锻炼和扩展;我的交流能⼒和表达⽔平,在这期间也得到了不⼩的提升;我的情商和⼈际交往能⼒,通过公司提供的培训课程和⾃⼰的实践,也在稳步有计划地进展。
爱因斯坦曾经说过:
当我们的知识之圆扩⼤之时,我们所⾯临的未知的圆周也⼀样。
随着技术⽔平的提升,我发现⾃⼰需要在技术上扩展和深挖的地⽅越来越多;⽽随着在公司⼯作年份的增加,我所要承担的责任也越来越多,相应的需要学习的通⽤技能也越来越多。我曾经在这两篇⽂章(《新时代的职业规划》以及《个⼈计划,这么理解就对了》)中叙述了职业规划和个⼈计划的重要性。那么作为理论之上的实践,我就在这⾥描述⼀下我的职场进阶计划。
专业技能篇
我是⼀名信号处理算法⼯程师(Digital Signal Processing (DSP) Algorithm Engineer)。在所在公司,我主要负责的是数字信号处理的算法设计与验证,现有产品算法的维护和性能提升,以及新产品和新算法的研究和设计。在研究⽣期间,我的研究⽅向是数字图像处理(Digital Image Processing (DIP))以及模式识别(Pattern Recognition)。本来在毕业时,我想去数字图像处理相关的⼯作,但是机缘巧合我到了现在所在的公司,开始做信号处理相关的⼯作。
虽然数字图像处理的本质也是数字信号处理,但是在具体的算法设计和应⽤上还是有极⼤的不同,这就导致了我必须不断学习才能尽快融⼊⼯作的要求中。久⽽久之,持续学习的习惯就养成了。我觉得⾃⼰应该在未来的⼀两年将下⾯的技术吃透或者充分了解,从⽽在保持核⼼技术竞争⼒的同时,兼顾未来的技术发展。
数字信号处理
数字信号处理其实是所有平台的本质,不论是语⾳、视频、光波、还是雷达波,想要被计算机处理,都需要通过模数转换器转换成数字信号。那么深⼊理解数字信号处理的本质,以及相应的算法和套路,就是作为⼀个DSP⼯程师混饭吃的根本技能了。
在研究⽣阶段学习的课程,我使⽤的教科书是John G. Proakis的这本《Digital Signal Processing (4th Edition)》。既然作为教科书,那么它必然就是兼容并包,理论描述⾮常翔实和清晰。但是它的问题同样也在与此,也就是说这本书作为参考书是⾮常好的,可以随时查阅相关的理论和信息,但是作为⼀个DSP⼯程师来说,仅仅有扎实的理论基础是必要的但是不⾜够的。
在数字信号处理领域,通过MATLAB来做系统设计和模拟,以及算法原型的设计,是常见的⼯作⼿段和⽅法。那么学习和练习MATLAB的编程⽅法和技巧,以及应⽤在数字信号处理的基础理论上,就是DSP⼯程是的看家本领了。最近⼀段时间Python语⾔⾮常⽕,甚⾄盖过了同样作为脚本语⾔的MATLAB的风头,但是在数字信号处理领域,MATLAB⽬前依然是⾸先被许多公司采⽤的⼯具,也是我这六年以来⼀直在使⽤的顺⼿⼯具。在我之前的学习中,使⽤过的Vinay K. Ingle的这本《Digital Signal Processing Using MATLAB》是⼀本⾮常棒的,将经典理论和具体代码应⽤相结合的好书,我
曾经跟着书把所有的代码都敲了⼀遍,⾮常有收获。
除此之外,还有⼏本数字信号处理的书籍⾮常推荐:
Steven Smith - 《Digital Signal Processing: A Practical Guide for Engineers and Scientists》
Richard G. Lyons - 《Understanding Digital Signal Processing》
Alan V. Oppenheim - 《Oppenheim: Discret Signal Process》
数字信号处理的理论是⾮常经典的,应该在相当长的时间⾥不会有太⼤的变化,⽽不断巩固⾃⼰的信号处理知识,其实就是练功者在训练⾃⼰的内功⼼法,或者是健⾝爱好者在锻炼⾃⼰的核⼼⼒量。⽽作为信号处理领域的从业者,我所要做的就是将基础不断夯实,并且结合MATLAB将理论通过代码从容实现,然后结合项⽬⾥具体的应⽤,将这些理论充分在项⽬中展现出来。
传感器应⽤
最近⼏年,随着物联⽹(Internet of Things (IoT))热度的迅速提升,以及以特斯拉等⾃动驾驶汽车公司的迅速兴起,传感器的应⽤就变得⾮常重要了。总的来说,我们每天都在跟⽆数的传感器打交道:到处都是的摄像头,是⼀种光学传感器;最新的iPhone X使⽤的是近红外点阵投影技术,同样是⼀种光学传感器;⼿机上还有各种各样的传感器,⽐如距离传感器、陀螺仪、磁⼒计、加速度传感器等等。⽽⾃动驾驶汽车上,更是需要强⼤的光学摄像头+电波雷达+激光雷达三者强⼒融合的系统来作为汽车的感知单元。如果说数字信号处理系统是⼤脑,那么各种各样的传感器
就是眼睛和⽿朵。雷锋⽹有⼀篇⽂章《⾃动驾驶汽车到底需要哪些类型的传感器?看完这篇你就懂了》很好地总结了这些传感器在⾃动驾驶汽车上的应⽤。
我很幸运,在⼤学本科的时候就主攻数字图像处理的算法,在研究⽣阶段接触了激光雷达,并且设计了⼀些图像数据和激光雷达数据融合的算法和应⽤。在毕业之后的⼯作岗位上,我有充分沉浸在电波
雷达相关的信号处理和算法设计上。总体来说,我已经具备了⾃动驾驶汽车所需要的光学摄像头+电波雷达+激光雷达的相关知识和技能,⽽且我对⾃动驾驶汽车的传感器应⽤⾮常感兴趣。
嵌入式多线程编程那么接下来要做的,就是深⼊了解和实践这些传感器在⾃动驾驶场景的应⽤,让⾃⼰的经验和认知能够紧跟⾏业技术发展;⽽且我并不擅长设计这些传感器,我需要提升的是数据融合的能⼒,因为在单位时间内⼤量数据的到来,如何更好地将这些数据整合以及做出低误检率的算法设计,就是核⼼技能了。
在提到传感器数据处理的时候,不得不提的是卡尔曼滤波这项技术。因为传感器总是包含噪声的和不完全准确的,那么如何得到有效的系统状态估计和参数值预估就变得⾮常重要。卡尔曼滤波是⼀种⾼效率的递归滤波器,它的主要⽤途就是通过处理包含噪声的输⼊数据,来对所在系统的内部参数进⾏动态估计,以及根据系统之前的状态和当前观测数值,预估下⼀时刻的可能的观测数值。我⾮常喜欢研究卡尔曼滤波和各种⾮线性变种,以及具体的项⽬应⽤,因为我认为这是⼀种理论模型和现实应⽤的完美结合,是算法设计的终极⽬标。Paul Zarchan的这⼀本《Fundamentals of Kalman Filtering》是⼀本关于卡尔曼滤波的经典著作,⽽且配有详尽的MATLAB源代码。如果对Python更感兴趣,那么可以关注Roger R. Labbe在Github上的《Kalman and Bayesian Filters in Python》,我觉得他对卡尔曼滤波的讲解⾮常深⼊浅出,适合初学者从基本概念⼊⼿,由浅⼊深进⾏学习。这两本书都是我正在努⼒攻读的,⽽且应该会和数字信号处理的书籍⼀起,终⾝学习和应⽤。
机器学习/深度学习
从⼤约2012年,吴恩达教授在⾕歌⼤脑部门通过⼤规模分布式集计算机开发超⼤规模神经⽹络,来让计算机⾃动学习识别猫,这⼀个项⽬开始,以深度学习为代表的⼈⼯智能应⽤就在近⼏年飞速地发展开来。在这期间,国内诞⽣了诸如旷视科技、商汤科技为代表的视觉⼈⼯智能公司,以及诸如寒武纪、深鉴科技为代表的深度学习芯⽚公司;传统的⼤型科技公司阿⾥巴巴、腾讯、百度都通过深度学习,在数据智能、语⾳图像识别、⾃动驾驶汽车等领域收获了巨⼤的技术进步。
其实现在⼤家谈论最多的深度学习,只是机器学习这个领域的⼀个⼩的分⽀:深度学习基于的是以神经⽹络为基础的,通过多层次神经元结构的⾮线性结合,来对数据进⾏由浅⼊深的多层次抽象的算法。⽽机器学习,分成三个⼤⽅向:有监督学习、⽆监督学习、以及增强学习。现在应⽤最多的深度学习,属于机器学习⾥⾯的有监督学习,也就是说我们需要给深度学习模型提供⼤量的带标注的真实数据,然后通过对模型的建⽴,以及对模型结果的对错的⽬标函数的设计和优化,来实现整个深度学习系统的不断完善。
CS231n 视觉识别卷积神经⽹络
我2017年花了不少时间学习深度学习和机器学习的基础知识,总的来说还是收获⾮常⼤的,主要是通过学习让⾃⼰形成了⼀个机器学习的思维⽅式。我主要是通过斯坦福⼤学的两门公开课进⾏学习的:吴恩达教授的《CS229: Machine Learning 机器学习》以及李飞飞教授的《cs231n: Convolutional Ne
ural Networks for Visual Recognition 视觉识别卷积神经⽹络》。前者主要是对经典机器学习⾥诸如线性回归、⽀持向量机、混合⾼斯EM算法、主成分分析等等算法进⾏讲解和描述,⽽后者则将重⼼放在卷积神经⽹络在图像识别、分割、解析上的应⽤。这两门课太经典了,以⾄于我已经学了不⽌两遍,⽽且对机器学习课程⾥的每⼀个公式,我都跟随吴恩达教授的讲解进⾏了推导,收获⾮常⼤。
提到深度学习,就不能不提到现在流⾏的各种软件框架:经典的Caffe,流⾏的Tensorflow、PyTorch等等。我现在的主要任务,就是在夯实了机器学习以及深度学习的基础知识之后,通过Tensorflow框架来做⼀些⾃⼰的⼩项⽬,从⽽打通理论到实践的通络。这样⼀来,在未来的某个时间,也许我就可以通过⾃⼰设计的⼩项⽬的锻炼,达到⼤公司需要的深度学习从业者所需要的能⼒,给⾃⼰未来的发展多开拓出⼀条道路。
嵌⼊式平台/并⾏处理平台
我在本科的时候,通过电⼦设计⼤赛接触了凌阳公司的单⽚机;在研究⽣的时候,通过选择的电⼦系统设计课程,接触了FPGA和Verilog硬件描述语⾔;现在通过对深度学习的认识,我知道GPU在深度学习中的⼤规模应⽤以及其重要性。总⽽⾔之,对嵌⼊式平台和并⾏处理平台的认识和应⽤,在现在就显得⾮常重要了。
我学习和使⽤过下⾯这些平台:
单⽚机/嵌⼊式:
KST-51 单⽚机开发板:适合单⽚机⼊门,配套教程很好
韦东⼭ JZ2440:韦东⼭⽼师的开发板,重点是配套的经典驱动编写教程
ODROID-XU4:三星Exynos5422处理器,6核CPU加上Mali-T628GPU,性能⾮常强劲
FPGA:
Digilent Nexys 2 Sprtan-3E FPGA Trainer Board: Xilinx经典的Spartan-3E系列FPGA
⽶联客 MIZ702N: 学习Xilinx Zynq SoC的优秀硬件平台
⼩梅哥 AC620:配套教程⾮常棒
CrazyBingo的VIP_Board:图像处理算法的FPGA实现独⼀⽆⼆
GPU:
英伟达 GTX 1080:英伟达10系列的显卡,深度学习训练必备
英伟达 Jetson TX2:英伟达的GPU嵌⼊式平台,⾮常适合⽆⼈机、机器⼈、⾃动驾驶汽车等等应⽤
Jetson TX2 模块和开发板
在这⼏年,通过这些平台的学习和练习,对各个系统都有了不少的认识。我认为在未来,FPGA和GPU会是应⽤的主要战场,那么我就应该将学习和练习的重⼼,放到他们⾝上。对于FPGA,我现在正在做⾃⼰设计的摄像头、SDRAM、FPGA、VGA这样⼀个图像采集和显⽰的⼩项⽬,让⾃⼰理顺这个数据通路,同时巩固⾃⼰对FPGA设计流程的理解。对于GPU,我在讨论深度学习的时候已经指出,⾃⼰会设计⼀些图像识别的项⽬,在建⽴数据库之后,通过Tensorflow框架在GPU上进⾏⽹络的训练。同时我也要对GPU的架构和硬件结构进⾏学习,以及英伟达的CUDA平台,通过软硬件的完美结合,让数据处理更快更有效率。Tolga Soyata的这本《GPU Parallel Program Development Using CUDA》是⼀本⾮常有意思的书,虽然题⽬是GPU编程,但是它从CPU多线程开始讲起,结合具体案例和代码层层深⼊,让我看完之后收获⾮常多。
总结
还记得在⼤学刚⼊学的时候,我们电⼦信息⼯程学院的院长在新⽣见⾯会上说:
你们将来从事的会是“IT⾏业”,谐⾳就是“挨踢⾏业”,这意味着你们必须不断前进,否则就要被后来的⼈踢屁股了。
当然这是玩笑话,但是也道出了作为电⼦⾏业从业者的现实:我必须在技术上不断充实⾃我,不断拓展⾃⼰的技术和能⼒上的边界,不断扩⼤⾃⼰技术视野的宽⼴程度,这样才能在激烈竞争中站稳脚跟,不断前进。
希望在⽂中出现的书籍和资料等信息对你有⽤。下⼀次我会谈谈我在通⽤技能上对⾃⼰的展望。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论