只谈跟软件开发关系大的。
目前关注点主要是语音。
1 采样(sampling)的重要性常常被忽视,它直接涉及编码,采样率和编码方式是可以动态变化的。
2 线性特征和流式特征。同时音乐里存在递归特征,90年代就有人用神经网络研究音乐。
3 通讯(包括网络传输)中的很多东西可以视作广义的信号。Web的数据流也是广义的信号,这个方面编码似乎没有特别多的研究。
4 信号处理多用线性代数方法,线性操作子(linear operator)是非常有趣而且对软件开发非常重要的东西,它设计编程语言的功能和抽象。比如常见的线性代数运算,可实现累加、线性拆分分解,这对探索出一个基本的信号处理的“精简指令集”有益。
ps 这两天经过初步考虑,我决定推迟小项目里程序流本身的设计,先开展针对信号处理的“精简指令集”探索,我如此考虑是基于更深层广大的部分要优先的原则,正如一个人想做芝麻大饼,应该先研究怎么做饼和需要的原料,然后再去买工具、锅什么的。
这个地方应该是有一层窗户纸,复杂的信号采样编码处理算法应该可以在编程语言里找到非常精巧的抽象,后者为前者提供非常有力且表达力强的工具,正如APL之于常见科学计算。
5 一般认为视频/图像比音频复杂,其实不然,二者各有特点交叉点也很多。
6 (抽象)计算机中的控制流(control flow)和数据流可以视作信号处理系统(source-sink-monitor-processor,有人讲sink放到最后)与信号的关系。整个操作系统可以是做一个面对复杂信号和许多自带控制流数据/信号的信号处理系统。从这个角度看,现在流行的操作系统设计都是比较糟糕的。
7 基本的信号处理对编程语言的要求:
a 对连续流的抽象 b多层次数据结构(单纯的浮点数组表示音频太过简单原始)c合适数据结构基础上表达力强的基本算法/“指令”。