@Wayne-Z
2017-11-17T21:25:27.000000Z
字数 2301
阅读 2474
语音处理
本文对韵母进行了另一次梳理,将分析的频率主要集中在了0-2500HZ的区间,同时对程序解析的窗口进行了二分,使得处理更加精细。
代码如下:
fs=44000; %语音信号采样频率为44100
file = 'a-1.wav';
wavelength = length(audioread(file));
term = floor(wavelength/1100);
samples = [1, 2200];
T = 1:term;
P = zeros(2048,term);
for id = 1:term
x = audioread(file,samples);
t = (0:length(x)-1)/fs;
y = fft(x,4096); %对信号做2048点FFT变换
f = fs*(0:2047)/4096;
p= abs(y(1:2048));
[pks,locs,widths,proms] = findpeaks(p,'SortStr','descend');
s = widths.*pks;
idx = 1;
Sum =s(1);
%P(locs(1),id) = s(1);
for j = 2 : length(s)
if s(j)/Sum > 0.10
Sum = Sum + s(j);
idx = [idx , j];
%P(locs(j),id) = s(j);
end
end
% for k = 1 : 2048
% if any(k == idx)
% P(k,id) = p(k);
% end
% end
% 用于显示单纯的振幅峰值
% 筛选出0-1000,1000-2000,2000-3000的频率
ids = [];idm = [];idl = [];
for i = 1:length(idx)
if f(idx) <=1000
ids = [ids,idx(i)];
elseif f(idx) <= 2000;
idm = [idm,idx(i)];
else
idl = [idl, idx(i)];
end
end
%将各个区间内的多条化为一条
As = sum(s(ids));
Am = sum(s(idm));
Al = sum(s(idl));
Fs = floor(dot( s(ids),locs(ids))/As);
Fm = floor(dot( s(idm),locs(idm))/Am);
Fl = floor(dot( s(idl),locs(idl))/Al);
Ps = dot(s(ids),pks(ids))/As;
Pm = dot(s(idm),pks(idm))/Am;
Pl = dot(s(idl),pks(idl))/Al;
if ~isnan(Fs)
P(Fs,id) = Ps;
end
if ~isnan(Fm)
P(Fm,id) = Pm;
end
if ~isnan(Fl)
P(Fl,id) = Pl;
end
if 1100*(id+2) <= wavelength
samples = [1100*id, 1100*(id+2)];
else
samples = [1100*id,wavelength];
end
end
surf(T,f,P,'edgecolor','none'); axis tight;
view(0,90); % 通常看时谱图时都采用这个角度,若需要可以采用
set(gca, 'YLim',[0 3000])
xlabel('Time (0.025s)'); ylabel('Hz');
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
ê不作为音节使用, 不与任何辅音声母相拼,只构成复韵母ie、üe,并在书写时省去上面的附加符号“ˆ”。
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
中响复韵母的声纹符合其名称特点,呈现出中间的元音能量大,前后一个能量小的特性。能量图呈现出工字型。
归一化处理后
归一化处理后
归一化处理后
归一化处理后!
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后
归一化处理后