語音加噪,網上類似的教程有很多,其中絕大多數都是固定的加入一種等長噪音,最近跑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
加噪完成