谈音频算法技术研发团队建立
从工作流程上分,对于音频算法工程师(其实不只限于音频算法工程师)的任务工作分配在国外通常分为3层,人员需求也分为三类(杜比公司,德国的fraunhofor ,skype都是这样)
第一层是算法开发层,通常要求起码是博士,一般是完成对算法的建模,代码输出有可能是matlab或是c代码,代码可读性和结构性未必很好,目的是实现算法的功能,比如回声消除,编解码设计,去噪等等。
第二层是算法重写和接口层,通常要求起码是硕士,一般完成C或是matlab代码的重写,写成可读性好结构性好的代码并完成接口设计。目的是从工程的角度能很方便的使用内部算法,并便于调试,由于是代码重写要求对信号处理能力有一定了解。
第三层是应用Demo开发层,调用第二层的接口设计Demo应用,完成对算法的演示。该层的目的是更好的演示算法的效果。Demo更炫。
但是在国内,这种情况几乎无法发生,因为国内音频工程师太少和公司需求的问题,一般的情况是一个人从头到尾的开发,要求工程师能覆盖第一到第二层,第三层有时也要做。这样的结果是工程师无法把精力放到算法开发上,代码效率也不高。但是要承认,这是国内的普遍现状,暂时无法改变。
从工程师的能力看,可以分成以下两级能力。
第一种能力:算法架构能力,要求对一个功能模块或复杂应用模块有一定的掌控能力,能够正向设计复杂结构的算法,要求对信号处理的各个方面多一定的了解,并也对该应用有一定的认识。
以AEC举例:要求能对AEC的原理和结构框架有清晰的认识(起码要有几年的专门算法经验和工作经验)。并且对AEC的主流框架,超前框架,落后框架都有了解。了解各种框架中的细节模块算法有一定了解,比如时频分析(FCT,QMF,FFT,小波等),对参数模型,分类模型有一定了解,对基因跟踪有一定了解,再结合综合经验才能从有从正向上解决问题的能力。
第二种能力:从问题结果出发的算法解决能力,通常是单模型算法或是bug fix类算法需求。具有这种能力的工程师的特点通常是对某一个专项问题(单一算法或简单框架)有较高的认识,有一定的算法能力,能够从正向上解决一般的算法问题,并能从结果出发,针对特定结果找到问题,修改原来的错误或是提出改进方案。
以丢包补偿算法为例,要求对丢包的原因进行分析,想办法弥补丢包造成的损伤,对原来的简单丢包模型进行改进,而丢包补偿算法从算法本身看不算是复杂算法(不排除可以用复杂算法实现)。
其他的类似动态音量调整,音乐语音的区分,啸叫抑制等问题都算该问题内。
一般对第一种能力的需求的要求要高于第二种,经验积累的时间也要更多。其实这种分类方法和一般软件工程师的分类方法差不多,也分构架师和普通工程师。只不过在算法开发内,因为从业人员相对较少的原因,缺少这样的总结(至少我认为,或者说国内是这样的)。
当然其他能力要求也是需要的。一般工程师必备的一些要求是要有的。
个人的一点点总结。