doa

Microphone Array Post-Filtering

微笑、不失礼 提交于 2020-03-01 13:04:30
Abstract 摘要 High level of noise reduces the perceptual quality and intelligibility of speech. Therefore, enhancing the captured speech signal is important in everyday applications such as telephony and teleconferencing. Microphone arrays are typically placed at a distance from a speaker and require processing to enhance the captured signal. Beamforming provides directional gain towards the source of interest and attenuation of interference. It is often followed by a single channel post-filter to further enhance the signal. Non-linear spatial post-filters are capable of providing high noise

7、线程、进程、协程进阶篇

纵饮孤独 提交于 2020-02-22 15:08:09
1.1.继上一讲,知道了如何创建多线程和GIL的原理,接下来要说的是线程锁,那为什么需要线程锁呢? 先看下图,此图来自:http://www.cnblogs.com/alex3714/articles/5230609.html,我就不自己动手画了,比我画得好 分析: (1)线程1拿到count=0并获得GIL,依次执行1,2,3,4,5,然后执行时间到了释放GIL (2)线程2拿到count=0并获得GIL,依次执行6,7,8,9,10,11,修改count的值,此时count的值由0变成1,并释放GIL (3)线程1再次拿到GIL并继续执行12,13,修改count的值,count的值还是1 问题出现了:线程1和线程2都把count+1,但是最后count的值还是1 线程锁:cpu在执行任务时,在线程之间是进行随机调度的,并且每个线程在执行一段时间之后会切换到另外一个线程,但是由于线程之间堆数据是共享的,所以就会有可能出现上述问题。 没加锁时的代码: # -*- coding: utf-8 -*- #__author:jiangjing #date:2018/2/4 #!/usr/bin/env python # -*- coding:utf-8 -*- import threading import time NUM = 0 def func(): global NUM

C# new,Virtual,abstract,sealed,Override的簡單理解

前提是你 提交于 2020-01-03 23:11:32
new new 关键字可以显式隐藏从基类继承的成员。隐藏继承的成员意味着该成员的派生版本将替换基类版本。 也就说在使用派生类的方法是调用的方法是 New 关键字 新定义 出来的方法,而不是基类的方法。 在不使用 new 修饰符的情况下隐藏成员是允许的,但会生成警告。使用 new 显式隐藏成员会取消此警告,并记录代之以派生版本这一事实。 Virtual Virtual 关键字允许在派生类中重写这些对象,默认情况下,方法是非虚拟的,不可以重写非虚方法, virtual 关键字不可以与 static 、 abstract 、 private 、 override 一起使用。 Virtual 关键字又是和 override 紧密不可分的,如果要实现 Virtual 方法就必须要使用 override 或 new 关键字( new 和 override 产生的机理不同)。 abstract 在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。 抽象类不能实例化。 抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ }) 。 sealed 密封方法会重写基类中的方法,但其本身不能在任何派生类中进一步重写。 密封类不能被继承。 当应用于方法或属性时,