main.m
上传用户:shodew
上传日期:2014-10-29
资源大小:6k
文件大小:2k
源码类别:

语音合成与识别

开发平台:

Matlab

  1. clc;
  2. clear;
  3. %x=wavread('01.wav');                  %读取语音文件
  4. x=wavread('a.wav');
  5. N=200;                                %设定帧长
  6. M=80;                                 %设定个帧交叠部分的长度  
  7. xn=enframe(x,N,M);                    %按照指定的要求分帧
  8. %size(xn)
  9. s=xn(:,70);                           %取分帧后的某一帧进行分析
  10. n=length(s);
  11. p=18;
  12. num=512;                              %设定频谱的点数
  13. a=lpc_coefficients(s,p);              %按所要求阶数求线性预测系数
  14. a2 =lpc(s,p);                         %利用信号处理工具箱中的函数lpc求预测系数
  15. cm=cepstrum(s);                       %求语音信号的倒谱
  16. h_c=lpc_cepstrum(s,p);                %求lpc倒谱,即声道冲激响应h(n)的倒谱
  17. Hw=lpc_spectrum(s,p,num);             %求lpc的谱估计,num为频谱的点数
  18. [P_w,Q_w,H]=lsp(s,p,num);             %求语音信号的线谱对参数
  19. colordef black;                       %设置背景颜色为黑色
  20. choice=4;
  21. if choice==1
  22.     clf;                              %清除当前的图形窗口
  23.     subplot(2,1,1);
  24.     plot(a);
  25.     title('我程序求得的预测系数');
  26.     subplot(2,1,2);
  27.     plot(-a2(2:p+1),'y')
  28.     title('Matlab函数求得的预测系数');    
  29. elseif choice==2
  30.     clf;                              %清除当前的图形窗口
  31.     subplot(2,1,1);
  32.     plot(cm(2:n),'y');
  33.     title('语音信号的倒谱');
  34.     subplot(2,1,2);
  35.     plot(h_c,'y');
  36.     title('lpc倒谱');
  37. elseif choice==3
  38.     clf;                              %清除当前的图形窗口
  39.     subplot(2,1,1);
  40.     Sw=abs(fft(s,num));               %语音信号的短时谱
  41.     axis([0 256 0 1]);
  42.     hold on;
  43.     plot(Sw/max(Sw),'y');
  44.     title('语音信号的短时谱');
  45.     subplot(2,1,2);
  46.     axis([0 256 0 1]);
  47.     hold on
  48.     plot(Hw/max(Hw),'y');
  49.     
  50.     title('lpc谱估计');
  51. else
  52.     clf;                              %清除当前的图形窗口
  53.     subplot(3,1,1);
  54.     stem(Q_w,zeros(p/2,1),'r','fill');
  55.     hold on;
  56.     stem(P_w,zeros(p/2,1),'y','fill');
  57.     title('线谱对系数');
  58.     hold off;
  59.     subplot(3,1,2);
  60.     axis([0 256 0 1]);
  61.     hold on
  62.     plot(abs(Hw)/max(abs(Hw)),'y');
  63.     title('lpc谱估计');
  64.     subplot(3,1,3);
  65.     axis([0 256 0 1]);
  66.     hold on
  67.     plot(H/max(H),'y');               
  68.     title('由线谱对求得的谱估计');
  69. end