语音信号LPC谱估计

matlab自带了LPC计算函数 http://www.mathworks.cn/cn/help/signal/ref/lpc.html 

为了验证LPC谱与短时傅里叶谱的逼近程度,首先计算STFT,再计算LPC谱,最后在一张图上画出来

matlab代码片段如下:

    frameData = z_frame(idx,:);
    [ar,g] = lpc(frameData,p);
    fft_mag = abs(fft(frameData, n));
    lpc_mag = abs(fft(ar,n));    
    plot(20*log10(sqrt(g)./lpc_mag(1:81)),'--r');hold on;
    plot(20*log10(fft_mag(1:81)));hold off;
    legend('LPC spectrum','STFT');

得到如下图所示的谱,LPC谱的形状倒是与STFT一致,只是增益gain貌似差的有点大,百思不得其解…… 抓狂


再用voicebox里面的lpcauto函数试试 http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/doc/voicebox/lpcauto.html

matlab代码中的lpc函数替换成lpcauto,得到如下结果,哈哈,差不多就是了得意


matlab自带的lpc函数和voicebox的lpcauto函数均是采用自相关法实现的,怎会有这么大的差距?

到lpc函数里面去看个究竟,原来有这么一行尴尬

X = fft(x,2^nextpow2(2*size(x,1)-1));
R = ifft(abs(X).^2);
R = R./m; % Biased autocorrelation estimate !!!

[a,e] = levinson(R,N);
m不就是帧长么,那就将该函数得到的g乘m就得到想要的结果

通过对比发现,matlab自带的lpc函数和voicebox的lpcauto函数计算的LPC系数存在一定的误差,但将阶数p增加到50可以看到lpc函数得到的LPC谱貌似更逼近STFT。


  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值