数学与应用数学就业前景(数学与应用数学专业就业方向)

1、T业职员

就业分析:数学与应用数学专业属于基础专业,是其他相关专业的母专业。该专业的毕业生如欲转行进入科研数据分析、软件开发、三维动画制作等职业,具备先天的优势。在改进一个软件的速度、效率,需要新的思想和方法方面,数学高手创新能力比一般计算机专业的学生还要强。在一项针对IT行业230名成功人士的抽样调查表明,其中200名属于以数学专业或其相关专业为依托实现职业再选择的人。

2、商务人员

就业分析:金融数学家已经是华尔街最抢手的人才之一。最简单的例子是,保险公司中地位和收入最高的,可能就是总精算师。在美国,芝加哥大学、加州伯克利大学、斯坦福大学、卡内基、梅隆大学和纽约大学等著名学府,都已经设立了金融数学相关的学位或专业证书教育。

3、保险精算师

就业分析:作为一名精算师,不仅需要有扎实的数学基础,能熟练地运用现代数学方法和数据对未来变化的趋势做出分析、判断,同时也需要具有坚实的经济理论基础,对法律、税务制度、财务会计、投资有透析的了解,特别是对风险具有敏锐的洞察力和处理各种可控风险的能力。由普通的精算人员最终成长为精算师,道路漫长艰苦,一般要花上5-7年时间。在美国很吃香的保险精算师,很多都是数学专业出身。

4、教师

就业分析:据国家教育部预测,今后5年内,我国高中教师缺口达到116万人,其中对数学、语文等基础学科的教师需求量最大。广东省许多市县甚至出现数学教师荒。全国37个大中城市人才市场的统计分析表明,数学教师十分抢手。拓宽师资渠道,面向社会招聘教师,已成为教育人事制度改革的重要举措。这无疑为报考综合院校数学与应用数学专业毕业生就业提供了很大的发展空间。

中国刑警学院警犬专业分数线

中国刑事警察学院警犬技术系

按照今年的招生政策,从2011年开始,刑警学院升格为一本类公安院校。要考警犬技术系,你要达到本省、自治区、直辖市的一本分数线。由于警犬技术比较偏,加之公安院校分配体制改革,报考的人不是很多,相对于刑警学院其它专业来说较容易。警犬技术系属于挂靠在刑警学院的专业,非常特殊,说是一个系吧,由于我国特殊的警犬管理体制,该系保留有公安部警犬技术学校和公安部沈阳警犬基地的牌子,有独立的人事权和财权,属于单列的公直单位。说是一个独立学院吧,也不是,独立学院的毕业证学位证加盖的是独立学院的章,而警犬技术系毕业证学位证加盖的是刑警学院的章。关于就业,根据公务员法的规定,学员毕业后要想成为公务员(人民警察)必需参加省级人保部门组织的公务员考试。由于分配体制改革要在2012年施行,目前尚不清楚讲对公安部属院校(指公安大学与刑警学院)毕业生有何具体政策,结合各省实践来看,就是两种,一是在招考试与其它职务混在一起也就是说不限制考生的毕业院校,二是单独设立职务,就是该职务仅限公安部属院校报考。由于警犬技术的特殊性,我国绝大多数的警犬技术力量在地市级以上公安机关,且招录人数较少,但本专业属于公安专业,就是说你毕业完全可以考其它职位。此外,海关缉私部门也会招录警犬技术专业的学生。希望对你能有所帮助。

中国刑警学院警犬专业分数线

中国刑事警察学院警犬专业录取分数是多少 我是文科妹子

分数一般为一本分数线以上 而且前期的体检和提前批检查很严格
2013年警犬技术专业文史类男生505;警犬技术专业 理工类男生466分,女生449分。你确定招文科女生

怎么才能进中国刑警学院警犬技术系

我是警院的,首先要问一下你是男生还是女生,两者不一样。如果男生,高考分数超一本线30左右选的专业为此专业就行,如果女生比较难,招生比例太少,学文的更惨,最好家里有关系。高考分数超一本线50分左右,还有政审,体能测试,体检,面试。我是女生,文科,刑事犯罪侦查专业。在我省招生时只收了3名,2名理一名文

中国刑事警察学院 这个警犬专业如何?

按照今年的招生政策,从2011年开始,刑警学院升格为一本类公安院校。要考警犬技术系,你要达到本省、自治区、直辖市的一本分数线。由于警犬技术比较偏,加之公安院校分配体制改革,报考的人不是很多,相对于刑警学院其它专业来说较容易。警犬技术系属于挂靠在刑警学院的专业,非常特殊,说是一个系吧,由于我国特殊的警犬管理体制,该系保留有公安部警犬技术学校和公安部沈阳警犬基地的牌子,有独立的人事权和财权,属于单列的公直单位。说是一个独立学院吧,也不是,独立学院的毕业证学位证加盖的是独立学院的章,而警犬技术系毕业证学位证加盖的是刑警学院的章。关于就业,根据公务员法的规定,学员毕业后要想成为公务员(人民警察)必需参加省级人保部门组织的公务员考试。由于分配体制改革要在2012年施行,目前尚不清楚讲对公安部属院校(指公安大学与刑警学院)毕业生有何具体政策,结合各省实践来看,就是两种,一是在招考试与其它职务混在一起也就是说不限制考生的毕业院校,二是单独设立职务,就是该职务仅限公安部属院校报考。由于警犬技术的特殊性,我国绝大多数的警犬技术力量在地市级以上公安机关 ,且招录人数较少,但本专业属于公安专业,就是说你毕业完全可以考其它职位。此外,海关缉私部门也会招录警犬技术专业的学生。希望对你能有所帮助。

有那些本科有警犬技术专业或者相关专业,目前只知道中国刑警学院,那么请问...

中国刑2113事警察学院2017年本科生招生章程
一、5261学校自然情况
1.学院全4102称:中国刑事警察学院
2.办学1653地点及校址:辽宁省沈阳市皇姑区塔湾街83号
3.办学类型:普通高等学校(公办)
4.办学层次:本科(提前批录取本科院校)
5.学习年限:学制为4年专业,学习年限为4年
6.办学形式:全日制
二、招生计划
1.编制招生计划原则及办法
招生计划按照《关于公安院校公安专业人才招录培养制度改革的意见》(人社部发[2015]106号)的规定要求,根据各省、市、自治区公安机关会同编制、人力资源社会保障、教育、财政、公务员局等政策主管部门提出的由我校进行培养的公安专业人才需求,经公安部、教育部审批后,结合我校历年生源状况编制。2.贫困专项计划
按照教育部、公安部的具体要求面向河北、山西、内蒙古、吉林、黑龙江、安徽、江西、河南、湖北、湖南、广西、海南、重庆、四川、贵州、云南、西藏、陕西、甘肃、青海、宁夏及新疆共22个省、市、自治区的贫困县招收99人。3.南疆单列计划
我校面向新疆南疆地区招收1人。4.语种
本校公共外语课及相关专业课不具备非英语语种开设条件,请非英语语种的考生谨慎填报。5.有男女生比例要求的专业及限制比例
我校开设的各专业均有男女比例的要求,女生比例不超过15%。三、专业设置
序号专业代码专业名称学制科类授予学位门类1030602K侦查学4公安学类法学2030610TK公安情报学4公安学类法学3030601K治安学4公安学类法学4030606TK经济犯罪侦查4公安学类法学5030604TK禁毒学4公安学类法学6030613TK涉外警务4公安学类法学7030605TK警犬技术4公安学类法学8083101K刑事科学技术4公安技术类工学9083108TK网络安全与执法4公安技术类工学10083105TK公安视听技术4公安技术类工学
注:警犬技术专业的学生前两年在校本部培养,后两年在公安部沈阳警犬基地培养。四、毕业证书与学位证书
本科学业学习期满,成绩合格颁发中国刑事警察学院本科毕业证书,达到中国刑事警察学院学位授予标准的颁发中国刑事警察学院学士学位证书。五、就业
按照《关于公安院校公安专业人才招录培养制度改革的意见》(人社部发[2015]106号)的有关规定,学生毕业时可参加公安机关面向公安院校公安专业毕业生招警统一考试。六、学费收、退费等
1.学费、住宿费标准
学费4800元/年,住宿费1000元/年。2.学费、住宿费的退费办法
学生因故退学,我校根据学生实际学习时间,按月计退剩余学费。3.对于家庭困难学生的扶困助学措施
家庭经济困难...

请问报考中国刑警学院警犬技术系有哪些要求呢?分数需要达到多少?那

中国刑警学院警犬技术系就是单独在外的一个校区,离沈阳航天航空学院航不太远,离本部有段距离.
中国刑事学院简称中国刑警学院,始建于1948年5月,前身是东北公安干部学校,是公安部直属的本科高等院校.

深度学习用于工业参数优化(基于深度学习的单通道语音增强)

本文代码请见: https://github.com/Ryuk17/SpeechAlgorithms

作者:凌逆战

博客地址(转载请指明出处): https://www.cnblogs.com/LXP-Never/p/14142108.html

传统的语音增强方法基于一些设定好的先验假设,但是这些先验假设存在一定的不合理之处。此外传统语音增强依赖于参数的设定,人工经验等。随着深度学习的发展,越来越多的人开始注意使用深度学习来解决语音增强问题。由于单通道使用场景较多,本文就以单通道语音增强为例。

目前基于深度神经网络单通道语音增强方法大致可以分为两类:

第一种基于 映射 的方法 第二种基于 mask 的方法

基于映射的语音增强

基于映射的语音增强方法通过训练神经网络模型直接学习带噪语音和纯净语音之间的映射关系,有两种映射方案:

频谱映射 :使用模型预测语音的时频域表示,之后再将语音的时频域表示通过波形合成技术恢复成时域信号。使用最多的时频域表示特征是短时傅里叶变换谱,利用人耳对相位不敏感的特性,一般只预测短时傅里叶变换幅度谱,并使用混合语音的相位合成预测语音的波形。

波形映射 :直接将带噪语音波形输入到模型,模型直接输出纯净语音波形的方法。

我们以频谱映射举例说明一下:

训练阶段

输入:这里采用较为简单地特征,即 带噪声语音信号的幅度谱 ,也可以采用其他的特征。值得一提的是,如果你的输入是一帧,对应输出也是一帧的话效果一般不会很好。因此一般采用 扩帧 的技术,如下图所示,即每次输入除了当前帧外还需要输入当前帧的前几帧和后几帧。这是因为语音具有短时相关性,对输入几帧是为了更好的学习这种相关性

Label: 数据的 label为纯净语音信号的幅度谱 ,这里只需要一帧就够了。 损失函数: 学习噪声幅度谱与纯净语音信号的幅度谱类似于一个回归问题,因此损失函数采用回归常用的损失函数,如均方误差(MSE)、均方根误差(RMSE)或平均绝对值误差(MAE)等…. 最后一层的激活函数 :由于是回归问题,最后一层采用线性激活函数 其他 :输入的幅度谱进行 归一化 可以加速学习过程和更好的收敛。如果不采用幅度谱可以采用功率谱,要注意的是功率谱如果采用的单位是dB,需要对数据进行预处理,因为log的定义域不能为0,简单的方法就是在取对数前给等于0的功率谱加上一个非常小的数

增强阶段

输入: 输入为噪声信号的幅度谱,这里同样需要扩帧。对输入数据进行处理可以在语音信号加上值为0的语音帧,或者舍弃首尾的几帧。如果训练过程对输入进行了归一化,那么这里同样需要进行归一化 输出: 输入为估计的纯净语音幅度谱 重构波形: 在计算输入信号幅度谱的时候需要保存每一帧的相位信息,然后用保存好的相位信息和模型输出的幅度谱重构语音波形,代码如下所示。

spectrum = magnitude * np.exp(1.0j * phase)

基于Mask的语音增强

Mask这个单词有的地方翻译成掩蔽有的地方翻译成掩膜,我个人倾向于翻译成“掩蔽”,本文就用掩蔽作为Mask的翻译。

时频掩蔽

我们都知道语音信号可以通过时域波形或者频域的各种频谱表示,此外语谱图可以同时展示时域和频域的信息,因此被广泛应用,如下图所示。语谱图上的像素点就可以称为 时频单元

现在我们假设有两段语音信号,一段是纯净信号,另一段是噪声,他们混合在一起了,时域波形和对应的语谱图分别如下图所示:

如果我们想将纯净语音信号从混合信号中抽离在时域方面是很难做到的。现在我们从语谱图(语音的时频单元)角度入手去解决语音分离问题。首先我们提出两个假设:

1、我们假设信号能量稀疏的,即对于大多数时频区域它的能量为0,如下图所示,我们可以看到大多数区域的值,即频域能量为0。

2、我们假设信号能量不相交的,即它们的时频区域不重叠或者重叠较少,如下图所示,我们可以看到时频区域不为0的地方不重叠或者有较少部分的重叠。

基于以上两点假设,我们就可以分离我们想要的信号和噪声信号。给可能属于一个信号源的区域分配掩码为1,其余的分配掩码0,如下图所示。

我们通过0和1的二值掩码然后乘以混合信号的语谱图就可以得到我们想要喜好的语谱图了,如下图所示。

神经模型一般直接预测时频掩蔽M(t,f)M(t,f),之后再通过M(t,f)M(t,f)与混合语音Y(t,f)Y(t,f)相乘得到预测的纯净语音^S(t,f)=^M(t,f)\otimesY(t,y)S^(t,f)=M^(t,f)\otimesY(t,y),其中⊗⊗代表哈达玛乘积(Hadamard Product)。在语音增强研究的发展过程中,研究人员提出了一系列的时频掩蔽作为训练目标:

理想二值掩蔽(Ideal Binary Mask,IBM)

原理 :由于 语音在时频域上是稀疏分布 的,对于一个具体的时频单元,语音和噪声的能量差异通常比较大,因此大多数时频单元上的信噪比极高或极低。IBM 是对这种现实情况的简化描述,将连续的时频单元信噪比离散化为两种状态 1 和0, 在一个时频单元内:如果语音占主导(高信噪比),则被标记为 1;反之如果噪声占主导(低信噪比),则标记为 0 。最后将 IBM 和带噪语音相乘,实际上就是将低信噪比的时频单元置零,以此达到消除噪声的目的。

因此,IBM 的值由时频单元上的信噪比SNR(t,f)和设定的阈值比较之后决定:

公式1:IBM(t,f)={1,SNR(t,f)>LC0, else 公式1:IBM(t,f)={1,SNR⁡(t,f)>LC0, else

其中LC为阈值,一般取0,SNR计算公式为:

公式2:SNR(t,f)=10∗log10(|S(t,f)|2|N(t,f)|2)公式2:SNR⁡(t,f)=10∗log⁡10(|S(t,f)|2|N(t,f)|2)

优点 :IBM 作为二值目标,只需要使用简单的二分类模型进行预测,并且可以有效地提高语音的可懂度。 缺点 :IBM 只有 0 和 1 两种取值,对带噪语音的处理过于粗暴,处理过程中引入了较大的噪声,无法有效地改善语音质量。

我看到过很多种写法

def IBM(clean_speech, noise):
"""计算 ideal binary mask (IBM)
Erdogan, Hakan, et al. "Phase-sensitive and recognition-boosted speech separation using deep recurrent neural networks." ICASSP, 2015.
:param clean_speech: 纯净语音 STFT
:param noise: 噪声 STFT
:return: 纯净语音的理想二值掩膜 IBM
"""
mask = np.zeros(np.shape(clean_speech), dtype=np.float32)
mask[np.abs(clean_speech) >= np.abs(noise)] = 1.0
return mask

第二种

def IBM_SNR(clean_speech, noise_speech):
"""计算 ideal binary mask (IBM)
Erdogan, Hakan, et al. "Phase-sensitive and recognition-boosted speech separation using deep recurrent neural networks." ICASSP, 2015.
:param clean_speech: 纯净语音 STFT
:param noise_speech: 带噪语音 STFT
:return: 纯净语音的理想二值掩膜 IBM
"""
_eps = np.finfo(np.float).eps # 避免除以0
theta = 0.5 # a majority vote
alpha = 1 # ratio of magnitudes
mask = np.divide(np.abs(clean_speech) ** alpha, (_eps np.abs(noise_speech) ** alpha))
mask[np.where(mask >= theta)] = 1
mask[np.where(mask < theta)] = 0
return mask

第二种

第三种

def IBM_SNR(clean_speech, noise_speech,delta_size):
"""计算 ideal binary mask (IBM)
Erdogan, Hakan, et al. "Phase-sensitive and recognition-boosted speech separation using deep recurrent neural networks." ICASSP, 2015.
:param clean_speech: 纯净语音 STFT
:param noise_speech: 带噪语音 STFT
:return: 纯净语音的理想二值掩膜 IBM
"""
_eps = np.finfo(np.float).eps # 避免除以0
local_snr = 0
ibm = np.where(10. * np.log10(np.abs(clean_speech) ** 2 / np.abs(noise_speech) ** 2) >= local_snr, 1., 0.)

if delta_size > 0:
ibm = ibm[:, delta_size: -delta_size]
return ibm

View Code

理想浮值掩蔽(Ideal Ratio Mask,IRM)

原理 :基于语音和噪声正交,即不相关的假设下,即S(t,f)⋅N(t,f)=0S(t,f)⋅N(t,f)=0,IRM直接刻画了时频单元内纯净语音能量和带噪语音能量的比值,是目前使用非常广泛的一种掩蔽方法。

在这个假设下带噪语音的能量可以表示为:

公式2:|Y(t,f)|2=|S(t,f) N(t,f)|2=|S(t,f)|2 |N(t,f)|2公式2:|Y(t,f)|2=|S(t,f) N(t,f)|2=|S(t,f)|2 |N(t,f)|2

因此得到 IRM 为:

公式3:IRM(t,f)=(|S(t,f)|2|Y(t,f)|2)β=(|S(t,f)|2|S(t,f)|2 |N(t,f)|2)β公式3:IRM(t,f)=(|S(t,f)|2|Y(t,f)|2)β=(|S(t,f)|2|S(t,f)|2 |N(t,f)|2)β

其中ββ 为可调节尺度因子,一般取0.5。 IRM取值在 0 到 1 之间,值越大代表时频单元内语音占的比重越高。另外,IRM 的平方形式就是经典的维纳滤波器(Wiener Filter),它是均方误差意义上的最优滤波器。

优点 :IRM 是分布在 0 到 1 的连续值,因此 IRM 是对目标语音更加准确的刻画,这使得 IRM 可以有效地同时提升语音的质量和可懂度。 缺点 :使用未处理的相位信息进行语音重构(相位对于感知质量也很重要)

def IRM(clean_speech, noise):
"""计算Compute ideal ratio mask (IRM)
"Phase-sensitive and recognition-boosted speech separation using deep recurrent neural networks," in ICASSP 2015, Brisbane, April, 2015.
:param clean_speech: 纯净语音 STFT
:param noise: 噪音 STFT
:return: 在原始音频域中分离(恢复)的语音
"""
_eps = np.finfo(np.float).eps # 防止分母出现0
mask = np.abs(clean_speech) / (np.abs(clean_speech) np.abs(noise) _eps)
return mask

def Wiener_like(clean_speech, noise):
"""计算Wiener-like Mask
"Phase-sensitive and recognition-boosted speech separation using deep recurrent neural networks," in ICASSP 2015, Brisbane, April, 2015.
:param clean_speech: 纯净语音 STFT
:param noise: 噪音 STFT
:return: 在原始音频域中分离(恢复)的语音
"""
_eps = np.finfo(np.float).eps # 防止分母出现0
mask = np.divide((np.abs(clean_speech) ** 2 _eps),
(np.abs(clean_speech) ** 2 np.abs(noise) ** 2) _eps)
return mask

理想幅度掩蔽(Ideal Amplitude Mask,IAM)

原理 :IAM也称为Spectral Magnitude Mask(SMM),不对噪声和语音做出正交假设,IAM刻画的也是纯净语音和带噪语音的能量比值

公式4:IAM(t,f)=|S(t,f)||Y(t,f)|公式4:IAM⁡(t,f)=|S(t,f)||Y(t,f)|

由于在语音和噪声叠加的过程中,存在反相相消的情况,因此并不能保证带噪语音的幅值总是大于纯净语音的幅值,因此 IAM 的范围是[0, ∞][0, ∞]。如果目标中出现非常大的数值,会导致训练过程出现异常。为了稳定训练,一般会将 IAM 进行截断到一定的范围内。为了确定合适的截断范围,我们可以在训练数据上采样 100 句语音并计算 IAM,就可以对IAM 的数值范围得到一个近似的估计,得到如图 3.4 的结果。一般将 IAM 截断到[0, 1]或者[0, 2]即可,因为只有非常少部分的 IAM 落在了[2, ∞][2, ∞]的区间内。

图* IAM数值分布直方图

def IAM(clean_speech, noise_speech):
"""计算ideal amplitude mask (IAM)
"Phase-sensitive and recognition-boosted speech separation using deep recurrent neural networks," in ICASSP 2015, Brisbane, April, 2015.
:param clean_speech: 纯净语音 STFT
:param noise_speech: 带噪语音 STFT
:return:
"""
_eps = np.finfo(np.float).eps # 避免除以0
mask = np.abs(clean_speech) / (np.abs(noise_speech) _eps)
return mask

相位敏感掩蔽(Phase Sensitive Mask,PSM)

原理 :PSM考虑到相位误差的时频掩蔽

PSM在形式上是 IAM 乘上纯净语音和带噪语音之间的余弦相似度

公式5:PSM(t,f)=|S(t,f)||Y(t,f)|cos(θS−θY)公式5:PSM(t,f)=|S(t,f)||Y(t,f)|cos⁡(θS−θY)

式中θS−θYθS−θY表示纯净语音和带噪语音的相位差,不难看出,PSM 的取值范围是[−∞, ∞][−∞, ∞],因此也需要截断,我们同样使用直方图统计PSM的数值分布范围,从下图可以看出在0 和 1 附近出现两个明显的峰值,这也再次说明了 IBM 目标设计的合理性。为了方便,一般将 PSM 截断到[0, 1],或者是适当将截断的区间放大到[-1, 2]。

PSM数值分布直方图

优点 :纯净语音相位和带噪语音相位的差异,加入相位信息之后,PSM方法可以获得更高的SNR,因而降噪效果比IAM更好。

def PSM(clean_speech, noise_speech):
"""计算ideal phase-sensitive mask (PSM)
:param clean_speech: 纯净语音 STFT
:param noise_speech:带噪语音 STFT
:return:
"""
_eps = np.finfo(np.float).eps # 防止分母出现0
clean_speech_phase = np.angle(clean_speech)
noise_speech_phase = np.angle(noise_speech)
mask = np.abs(clean_speech) / np.abs(noise_speech) * np.cos(clean_speech_phase - noise_speech_phase)
# Truncated Phase Sensitive Masking
# Theta = np.clip(np.cos(clean_speech_phase-noise_speech_phase), a_min=0., a_max=1.)
# mask = np.divide(np.abs(clean_speech), _eps np.abs(noise_speech)) * Theta
return mask

复数理想浮值掩蔽(Complex Ideal Ratio Mask,cIRM)

参考文献:2015_ Complex ratio masking for monaural speech separation

原理 :在复数域的理想浮值掩膜,同时增强幅度谱和相位谱

条件:⎧⎪ ⎪ ⎪ ⎪⎨⎪ ⎪ ⎪ ⎪⎩Y=Yr iYiM=Mr iMiS=Sr iSiSt,f=Mt,f∗Yt,f条件:{Y=Yr iYiM=Mr iMiS=Sr iSiSt,f=Mt,f∗Yt,f==>Sr iSi=(Mr iMi)∗(Yr iYi)=(MrYr−MiYi) i(MrYi MiYr)Sr iSi=(Mr iMi)∗(Yr iYi)=(MrYr−MiYi) i(MrYi MiYr),

那么:{Sr=MrYr−MiYiSi=MrYi MiYr{Sr=MrYr−MiYiSi=MrYi MiYr解方程得:⎧⎪⎨⎪⎩Mr=YrSr YiSiY2r Y2iMi=YrSi−YiSrY2r Y2i{Mr=YrSr YiSiYr2 Yi2Mi=YrSi−YiSrYr2 Yi2

最终:McIRM=Mr iMi=YrSr YiSiY2r Y2i iYrSi−YiSrY2r Y2iMcIRM=Mr iMi=YrSr YiSiYr2 Yi2 iYrSi−YiSrYr2 Yi2

式中,YY是带噪语音,SS是纯净语音。

优点 :cIRM能够同时增强嘈杂语音的幅度和相位响应,cIRM是加性噪声假设下的最优掩蔽,可以从带噪语音中完美重构纯净语音信号

def cIRM(clean_speech, noise_speech):
"""使用复理想比率掩码将语音从源信号的短时傅里叶变换和混合源信号的短时傅里叶变换中分离出来
:param clean_speech:纯净语音
:param noise_speech:带噪语音
:return:
"""
cIRM_r = (np.real(noise_speech) * np.real(clean_speech) np.imag(noise_speech) * np.imag(clean_speech)) / \
(np.real(noise_speech) ** 2 np.imag(noise_speech) ** 2)

cIRM_i = (np.real(noise_speech) * np.imag(clean_speech) - np.imag(noise_speech) * np.real(clean_speech)) / \
(np.real(noise_speech) ** 2 np.imag(noise_speech) ** 2)

mask = cIRM_r cIRM_i * 1j
return mask

总结

语音增强中的大部分掩蔽类方法,都可以看成在 特定的假设条件下cIRM 的近似 。如果将 cIRM 在直角坐标系下分解,cIRM 在实数轴上的投影就是 PSM 。如果再将 cIRM在极坐标系下分解,cIRM 的模值就是 IAM 。而 IRM 又是 IAM 在噪声语音不相关假设下的简化形式, IBM 则可以认为是 IRM 的二值版本。

各种理想掩蔽的性能比较

度量IBMIRMIAMPSMcIRMPESQ2.473.333.453.714.49STOI0.910.940.970.971

从上表中我们可以看到 cIRM 可以实现对纯净语音几乎无损地重构,其他掩蔽由于进行了某些特定的假设,所以都会在一定程度上造成性能损失。虽然 cIRM 是最优掩蔽,但是使用其他简化的掩蔽方法可以降低预测的难度。这也是早期的语音增强研究选择使用 IBM 或者是 IRM 等简单掩蔽目标的原因。在模型容量有限的情况下,cIRM 经常并不是最好的选择,选择和模型建模能力匹配的目标才能获得最优的增强性能。

题外话

但是,这里存在一个问题,我们无法从语谱图中还原语音信号。为了解决这一问题,我们首先还原所有的频率分量,即对二值掩码做个镜像后拼接。假设我们计算语谱图时使用的是512点SFTF,我们一般去前257点进行分析和处理,在这里我们将前257点的后255做镜像,然后拼接在一起得到512点频率分量,如下图所示。

然后根据这个还原语音信号。这里指的一提的是,在进行STFT后的相位信息要保存,用于还原语音信号。

基于掩蔽的语音增强和基于映射的语音增强模型训练和增强过程类似,这里只提几个重要的地方,其余地方参考上面内容。

Label :数据的label为根据信噪比计算的IBM或者IRM,这里只需要一帧就够了 损失函数 :IBM的损失函数可以用交叉熵,IRM的损失函数还是用均方差 最后一层的激活函数 :IBM只有0和1两个值,IRM范围为[0,1],因此采用sigmoid激活函数就可以了 重构波形 :首先用噪声幅度谱与计算的Mask值对应位置相乘,代码如下,然后根据相位信息重构语音波形。

enhance_magnitude = np.multiply(magnitude, mask)

Demo效果以及代码

首先看下实验效果,首先是基于映射语音增强的结果:

基于IBM语音增强的结果:

基于IRM语音增强的结果:

训练代码:

"""
@FileName: IBM.py
@Description: Implement IBM
@Author: Ryuk
@CreateDate: 2020/05/08
@LastEditTime: 2020/05/08
@LastEditors: Please set LastEditors
@Version: v0.1
"""

import numpy as np
import librosa
from sklearn.preprocessing import StandardScaler
from keras.layers import *
from keras.models import Sequential


def generateDataset():
mix, sr = librosa.load("./mix.wav", sr=8000)
clean,sr = librosa.load("./clean.wav", sr=8000)

win_length = 256
hop_length = 128
nfft = 512

mix_spectrum = librosa.stft(mix, win_length=win_length, hop_length=hop_length, n_fft=nfft)
clean_spectrum = librosa.stft(clean, win_length=win_length, hop_length=hop_length, n_fft=nfft)

mix_mag = np.abs(mix_spectrum).T
clean_mag = np.abs(clean_spectrum).T


frame_num = mix_mag.shape[0] - 4
feature = np.zeros([frame_num, 257*5])
k = 0
for i in range(frame_num - 4):
frame = mix_mag[k:k 5]
feature[i] = np.reshape(frame, 257*5)
k = 1

snr = np.divide(clean_mag, mix_mag)
mask = np.around(snr, 0)
mask[np.isnan(mask)] = 1
mask[mask > 1] = 1

label = mask[2:-2]

ss = StandardScaler()
feature = ss.fit_transform(feature)
return feature, label


def getModel():
model = Sequential()
model.add(Dense(2048, input_dim=1285))
model.add(BatchNormalization())

model.add(LeakyReLU(alpha=0.1))
model.add(Dropout(0.1))

model.add(Dense(2048))
model.add(BatchNormalization())
model.add(LeakyReLU(alpha=0.1))
model.add(Dropout(0.1))

model.add(Dense(2048))
model.add(BatchNormalization())
model.add(LeakyReLU(alpha=0.1))
model.add(Dropout(0.1))

model.add(Dense(257))
model.add(BatchNormalization())
model.add(Activation('sigmoid'))
return model

def train(feature, label, model):
model.compile(optimizer='adam',
loss='mse',
metrics=['mse'])
model.fit(feature, label, batch_size=128, epochs=20, validation_split=0.1)
model.save("./model.h5")

def main():
feature, label = generateDataset()
model = getModel()
train(feature, label, model)


if __name__ == "__main__":
main()

增强代码:

"""
@FileName: Inference.py
@Description: Implement Inference
@Author: Ryuk
@CreateDate: 2020/05/08
@LastEditTime: 2020/05/08
@LastEditors: Please set LastEditors
@Version: v0.1
"""

import librosa
import numpy as np
from basic_functions import *
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from keras.models import load_model

def show(data, s):
plt.figure(1)
ax1 = plt.subplot(2, 1, 1)
ax2 = plt.subplot(2, 1, 2)
plt.sca(ax1)
plt.plot(data)
plt.sca(ax2)
plt.plot(s)
plt.show()


model = load_model("./model.h5")
data, fs = librosa.load("./test.wav", sr=8000)

win_length = 256
hop_length = 128
nfft = 512

spectrum = librosa.stft(data, win_length=win_length, hop_length=hop_length, n_fft=nfft)
magnitude = np.abs(spectrum).T
phase = np.angle(spectrum).T

frame_num = magnitude.shape[0] - 4
feature = np.zeros([frame_num, 257 * 5])
k = 0
for i in range(frame_num - 4):
frame = magnitude[k:k 5]
feature[i] = np.reshape(frame, 257 * 5)
k = 1

ss = StandardScaler()
feature = ss.fit_transform(feature)
mask = model.predict(feature)
mask[mask > 0.5] = 1
mask[mask <= 0.5] = 0

fig = plt.figure()
plt.imshow(mask, cmap='Greys', interpolation='none')
plt.show()
plt.close(fig)

magnitude = magnitude[2:-2]
en_magnitude = np.multiply(magnitude, mask)
phase = phase[2:-2]

en_spectrum = en_magnitude.T * np.exp(1.0j * phase.T)
frame = librosa.istft(en_spectrum, win_length=win_length, hop_length=hop_length)

show(data, frame)
librosa.output.write_wav("./output.wav",frame, sr=8000)

参考

【论文】2020_李劲东_基于深度学习的单通道语音增强研究

【博客文章】 DNN单通道语音增强(附Demo代码)

【博客文章】 基于Mask的语音分离

【github代码】 speech-segmentation-project/masks.py

【github代码】 ASP/MaskingMethods.py

【github代码】 DC-TesNet/time_domain_mask.py

【github代码】 ASC_baseline/compute_mask.py

本文代码请见: https://github.com/Ryuk17/SpeechAlgorithms

作者:凌逆战

博客地址(转载请指明出处): https://www.cnblogs.com/LXP-Never/p/14142108.html

,

本文Hash:56d98cec0b8d20d52f48348908f2c8743152db84

声明:此文由 jingling 分享发布,并不意味布布狗赞同其观点。文章内容仅供参考,此文如侵犯到您的合法权益,请联系我们。