语音加噪,网上类似的教程有很多,其中绝大多数都是固定的加入一种等长噪音,最近跑TIMIT数据,需要随机不等长的噪音来训练数据。
具体要求是有语音1000条(记为X1),随机噪音有50条(记为X2),都是不等长的往这1000条语音中随机加入50条噪音中的一条,产生随机噪音的话用rand+round函数,其中rand函数产生随机数是从0开始的,记得最后加上1.使之产生的随机数可以从1开始
- noise=round(rand(1,1)*(len1-1))+1; %
len1是噪音的数
语音的批量处理这里就不讲了哈,下面说一下我的加噪思想,判读语音的长度,是X1长还是X2长。如果x1长,曾需要判断是噪音的几倍,然后增加噪音长度,如果是噪音长度长,则截取噪音长度使之与语音长度等长,代码如下
-
- lx1=length(x1); %求语音长度,x1是读取的语音数据
- lx2=length(x2); %求噪音长度,x2是读取的噪音数据
- if (lx1>=lx2) %如果语音的长度大于噪音的长度
- stem=[] %每次循环之后数组要置空
- a=fix(lx1/lx2)+1; %求得语音长度是噪音的整数倍
- for f=1:a
- stem=[stem;x2]; %增加噪音的长度,使噪音长度比语音长度长
- end
- b=stem(1:lx1,1); %截取增加后的噪音长度 其长度等于正常语音的长度
- x11=x1+b; %语音加噪,本质就是两条语音能量的叠加
- else %如果噪音长度大于语音长度
- c=x2(1:lx1,1); %截取造成程度等于正常语音长度
- x11=x1+c; %语音加噪
- end
加噪完成