天天看点

吴军,信息论40讲,20,去除噪音:如何获得更多更准确的信息?

上一讲说了噪音,以及它和信息的相伴关系,并且知道了用信噪比来度量和还原信息。我们讲了,当信噪比非常低的时候,我们是无法从噪音中分离出信息的。因此很多时候我们要通过过滤噪音,提高信噪比。

在日常学习和工作中,去除噪音提取有效信息的原则也很重要。今天我们就来谈谈消除噪音的问题。

噪音通常可以根据产生的原因以及表现形式作如下的分类:

1.能够找到噪音来源的 vs 不清楚来源的。

比如说开车时汽车马达的声音,就是已知来源的噪音,而你打电话时,觉得对方的声音不清楚,有噪音,那些噪音常常原因不明,或者说来源太多,讲不清楚。

去除知道来源的噪音,最简单的方法就是屏蔽它们,比如把汽车里面的隔音做好,车厢内就会显得很安静。如果你坐过直升机,就会发现它的发动机和螺旋桨的噪音巨大,任何隔音材料都不可能把舱内的噪音降到你能听清楚说话的程度,因此坐直升机大家都是戴耳罩,用麦克风讲话。

还有很多时候你即使知道了噪音的来源,也有方法消除它们,但是无法实施。比如晚上10点钟楼下一群跳广场舞的,搞出很大动静,但是你显然没有本事让他们不跳,甚至没有本事让他们降低噪音。这种时候就要采用我们后面提到的方式降噪了。

至于来源不清楚的噪音,去除时,常常比清楚噪音的来源要更困难。

2.有规律的噪音 vs 随机的噪音,固定频率的噪音 vs 白噪音。

汽车的马达声其实是有规律的噪音,它的频率比较固定。集市上的就是随机噪音了。显然前一种比后一种好去除。

有些噪音频率比较固定,比如鸟叫,这很容易从背景中去除,但是如果是各种频率都有的噪音,也就是白噪音,那就很难去除了。

了解了噪音的分类,我们就来谈谈怎么去除它们。不过这里我们先强调一点,下面的内容大多是介绍利用计算机如何去除噪音的,而不是我们的耳朵怎么做。事实上我们的耳朵很缺乏抗噪的能力。

第一个常用的方法就是利用信息的冗余。

如果我们受到来源已知、规律性比较强的噪音的干扰,比如汽车发动机的声音,很容易去除。比如在汽车中进行语音识别时,当麦克风接收到人说话的声音后,在进行信号处理之前,会先减去马达的声音。

这件事很容易做,增加一个专门接收发动机噪音的麦克风即可。事实上在汽车里,哪怕发动机的噪音能量极高,完全淹没了我们说话的声音,人可能听不清,但是计算机识别起来并不难。

类似的,如果一个领导在大会场作报告,在不同角度安装几个麦克风即可(它们通常也被称为麦克风阵列),通过对比几个麦克风收到的语音,就可以判断哪些是信号,哪些是噪音。这种方法,从本质上讲,利用了信息的冗余度,也就是说,利用多余的信息,减少误差。

对于知道来源,但是没有规律性的噪音,处理起来难度加大了不少。通常解决方案会和应用场景有关。比如在卡拉OK厅使用的麦克风,对距离非常敏感,这样不会将几米以外喝酒划拳的声音收进去。

第二个方法就是换一个角度看问题。

在一个维度分不开的两件事,换个角度看就分得清清楚楚了。比如下面这张图,从正面看蓝色的长方体和红色的椭球重叠了,分不开,但是从侧面看,它们之间的距离其实很大。

当然这只是打了一个比方,我们不妨看一些真实的例子。

比如说一个剧组在拍外景,有一堆鸟在叽叽喳喳叫,那些就是噪音。但是这种噪音其实很容易过滤掉,因为使用我们前面说的傅里叶变换可以将所有的音频信号变成频率信号,鸟的叫声在特定的频率上,只要将那个频率的信号过滤掉就可以了。

音乐会现场录音时,会通过这种办法把类似咳嗽声处理干净。如果照相机的感光器上有了灰尘,Photoshop也会用类似的方法进行过滤。

不过,如果噪音分布在各个频率,也就是所谓的白噪音,这一招就不灵了,实际上最初香农研究信息论,就源于往语音中加入白噪音。

那是二战时候的事情,当时贝尔实验室的研究员香农接受了美国政府一项秘密任务。那时候英国首相丘吉尔时常会和美国方面通电话,但是由于电话是模拟信号,不是数字信号,很难加密。

更要命的是,当时的电话都是通过电话线打出去的,是实实在在的物理连线。如果德国人找到了电话线,中间实施监听,那么英国首相和美国方面讲的内容就都被窃取了。

于是美军想到一个可能的解决办法,就是将丘吉尔的电话变成数字化的,中间混入白噪音,这样德国人听起来像一些噪音。

由于白噪音产生的算法是美国人想出来的,德国人如果不知道这个算法,是无法过滤掉噪音的。美国军方就想知道这个想法是否可行可靠,而香农的任务就是研究这个课题。

当时香农经常和图灵一起喝咖啡,吃饭,两个人谈论了很多东西,但就是不谈彼此的工作。其实他们所从事的研究有很大的相似性,图灵的任务是破译德国人的秘密,而香农其实是给盟军加密。如果他们能够进行学术交流,其实对各自的工作都大有益处。但是在战争期间他们被要求严格保守秘密,他们也做到了这一点。

最后香农证实,这种想法是可行的,因为噪音分布在各个频率,任何算法都无法过滤掉。但这有一个前提,就是对方不可能知道你产生白噪音的算法,否则他们可以复制这种白噪音,然后从信号噪音相混的信息中将噪音滤除。

香农也就是在这个课题的基础上,发展起来了信息论。因此信息论的出现,在一定程度上要感谢噪音。

当然,很多人会想,我不搞通信,是否有必要了解这些知识呢?其实,正如我们上一讲讲到的,噪音存在于各种信号中,不仅仅在通信中才会遇到,比如说历史上的记录,就混杂了很多的噪音,而我们平时听到的消息,常常也是如此。

有意思的是,生活中的噪音和通信中的一样,有些能找到源头,有些则不能,有些能找到规律,有些则没有。于是,过滤信息中的噪音最简单有效的方法,其实也不外乎上面两种。

第一种是通过信息的冗余和比对,过滤噪音。

举一个例子,如果今天美国总统特朗普发表了一番言论,当然媒体对此有记录和报道。但是,各种媒体可能记录有误差,而且可能还有意无意加入自己的看法,把不是特朗普意思的内容加到他头上,这样就主观或客观地引入了噪音。

如果你只从一个信息源了解信息,你其实很难判断所获得的是噪音还是信号。如果你从多个信息源了解信息,虽然它们各自都有噪音,但是由于报道的角度不同,很多噪音彼此可以抵消掉,获得的则是信息,或者说是信噪比很高的信息。

这就和在会场的不同地方摆置好几个麦克风是同样的道理。当然,如果所有的媒体都站在同一个位置,读再多媒体的内容都不可能将噪音过滤掉。

我在《Google方法论》中讲到过,最可贵的意见不是所谓客观的,而是真正反映自己想法的主观的意见。因为那种看似唯一客观的理论,其实是有偏差的,当一个企业,只有领导一个人的意见时,那些原本不大的噪音就被放大,以至于会淹没信号。

相反,如果每一个人都把自己主观的意见说出来,虽然每一个人有偏见,也就是说噪音,但是合在一起我们就得到了大众想法的轮廓。

第二种,将有噪音的信息分解到不同的维度过滤噪音,这个方法可以怎么用呢?

比如,中国人常常很纠结一个问题,就是老婆和妈妈掉到水里后先救谁。这个问题两难的重要原因在于,要考虑的因素太多,以至于大家越想越糊涂。其实在这个问题上解套并非难事,关键是分清楚什么是我们该考虑的信息,什么是噪音,或者说你最看重哪方面。

比如,如果你觉得孝道是第一位的,或者觉得以后谁和我生活更长时间是第一位的,作出选择就没有什么难的。这时,你其实是将这个信息混杂着噪音的问题,投射到了某些你能够区分的维度,比如孝道维度,或者和你未来一起生活的时间。

在这两个维度上比较,就很容易区分大小。这就如同将声音从能量的高低,投射到频率的维度后,就能简单地从频率高低识别出鸟的噪音,然后过滤掉一样。

当然,如果你反过来思考去利用噪音,想将一些信息隐藏在噪音中不被别人发现,最好的办法就是制造毫无规律的白噪音。

Google信息安全部门曾经为了防止偷盗账号的人反复试验密码,增加了一个输入验证码的要求,这样反复猜测密码的人就无法使用计算机试错了。为了对视觉有障碍的人使用这种验证码的功能,Google提供了语音提示。

但是这样一来就出现了一个漏洞,因为盗号者可以使用语音自动识别。于是,开发这项服务的工程师就往语音提示中加入了一些噪音,降低语音识别率。但是除了前两天给盗号者增加了难度,两天后,情况又像以前那么糟糕了,于是他们找到我询问原因。

我就问他们语音是哪里来的,他们说是在饭厅里录了些噪音加进去的。我说问题就出在这里,由于他们录的噪音就那么几分钟来回使用,盗号者很快发现了这一点,他只要对比每天不同语音提示的差异,很容易找到加进去的噪音,然后就像过滤鸟叫声那样过滤掉即可。

如果想让盗号者过滤不掉噪音,就要在语音的各个频率加入随机的噪音,也就是白噪音。后来他们这么做了,果然盗号的成功率就降低了很多。

要点总结

我们介绍了噪音的种类和来源,并且介绍了两种去除噪音的方法,即利用冗余度去除噪音,以及从不同维度看问题去除噪音。

我们介绍了生活中的噪音,并且强调了去除通信中的噪音和去除生活中的噪音,其实是同样的原理。

可能会有读者朋友好奇,我们这一模块明明是讲信息传输的,那么为什么要先讲噪音呢?它和信息传输有关系么?下一讲我们就来谈这个问题。

继续阅读