前言
对语音信号的清音、浊音进行处理,把其中的声门激励信号和声道信息提取出来,采取的方法是同态滤波处理和参数解卷积两种方法
一、同态滤波方法
homomorphic filtering,大家都熟悉了,简单说:采用的原理如下
两个信号的卷积,可以先求fft,在fft上求log,卷积运算变成加法运算
real(log( abs(fft(x)) ) ) --->倒谱域,经过处理之后
反变换: ifft(exp(fft(cepstrum ))) 得到时域原始信号
读入原始信号,选择浊音部分
z=rceps(x); %MATLAB提供的倒频谱函数
figure(3)
plot(z(1:512))
得到倒谱信号
倒谱信号有明显的激励
这时候采用倒谱提升窗,分离声道信息和激励信息
%选择倒谱提升窗的边界点
mcep=40;
%声道信息
zz1 = zeros(size(z));
%激励信息
zz2 = zeros(size(z));
zz1(1:mcep) = z (1:mcep);
zz1(end - mcep +1 :end) = z (end - mcep +1 :end);
zz2(mcep+1:511) = z (mcep+1:511);
zz2(512:end-mcep) = z (512:end-mcep);
选用40的原因,在倒谱频域Quefrency轴上, 16000/40 = 320Hz,能cover -般的基频信息
%声道信息
% z1=real(ifft(exp(fft(zz1))));
z1= fft(real(ifft(exp(fft(zz1)))));
%激励信息
z2=real(ifft(exp(fft(zz2))));
figure
subplot(211)
plot(abs(z2(1:512)));
title('激励信号');
xlabel('时域');
ylabel('幅度');
% ylim([0 5]);
subplot(212)
plot(20*log10(abs(z1(1:512))));
title('声门信号');
xlabel('频域');
ylabel('分贝');
画出声门(时域)和声道信息(频域)
二、参数解卷积
使用自相关的办法求基频
x = voice_x;
% 最小频率点50hz
ms20=fs/50;
% 计算自相关
r=xcorr(x,ms20,'coeff');
%最大频率点
ms2=fs/500 ;
%最小频率点
ms20=fs/50 ;
%确定delay
r=r(ms20+1:2*ms20+1);
[rmax,tx]=max(r(ms2:ms20));
f0 = fs/(ms2+tx-1);
调用LPC函数求LPC系数
%得到线性预测LP系数
ncoeff=2+fs/1000;
%lpc估计
a=lpc(x,ncoeff);
% [h t]= impz(1,a);
% figure
% plot(t,h);
%打印频谱
[h,f]=freqz(1,a,512,fs);
figure
subplot(211)
t = [0:length(x)-1]/fs;
% sim = A*sin(2*pi*f0*t);
f0 = fs/fix(fs/f0);
产生激励信号
%creating pulsetrain;
for i =1:1024
if i./((ms2+tx-1)) == floor(i./((ms2+tx-1)))
sim(i) = 1;
else
sim (i) = 0;
end
end
画出对应信号
plot(sim)
ylim([-2,2])
xlabel('时间');
ylabel('激励信号amp');
if (flag==0)
title('清音,激励信号不做参考');
else
title('浊音,激励信号');
end
% suptitle('参数提取方法');
subplot(2,1,2);
plot(f,20*log10(abs(h)+eps));
% plot(f,abs(h));
legend('LPC函数');
xlabel('频域');
ylabel('增益(dB)');
if (flag==0)
title('清音,参数LPC声道不做参考');
else
title('浊音,LPC声道信息');
end
的到声门和激励
总结
使用两种方法对比:
左:同态信号处理:
右:参数办法
另外对清音信号处理
倒谱基频信息不明显
清音激励和声道
资源已经上传
同态滤波处理和LPC参数解卷积资源-CSDN文库