lpc.m
上传用户:doudz874
上传日期:2007-03-30
资源大小:792k
文件大小:1k
源码类别:

语音合成与识别

开发平台:

Matlab

  1. function [A,C,F]=lpc(s);
  2. P=12;
  3. N=160;
  4. L=16;
  5. sw=s.*hamming(N);
  6. %A
  7. for i=1:P+1
  8.     R(i)=0;
  9.     for n=1:N-i
  10.         R(i)=R(i)+sw(n+i-1)*sw(n);
  11.     end;
  12. end;
  13. k(1)=-R(2)/R(1);
  14. flag=1;
  15. a(flag,1)=k(1);
  16. sigma(1)=(1-k(1)^2)*R(1);
  17. for m=2:P
  18.     k(m)=-R(m+1);
  19.     for i=1:m-1
  20.         k(m)=k(m)-a(flag,i)*R(abs(i-m)+1);
  21.     end;
  22.     k(m)=k(m)/sigma(m-1);
  23.     flag=~(flag-1)+1;
  24.     a(flag,m)=k(m);
  25.     for i=1:m-1
  26.         a(flag,i)=a(~(flag-1)+1,i)+k(m)*a(~(flag-1)+1,m-i);
  27.     end;
  28.     sigma(m)=(1-k(m)^2)*sigma(m-1);
  29. end;
  30. A=a(flag,:);
  31.  
  32. %C
  33. %ha(1)=0;
  34. %ha(2)=A(1);
  35. %for n=3:P+1
  36.  %   ha(n)=A(n-1);
  37.   %  for i=1:n-2
  38.    %     ha(n)=ha(n)-i/(n-1)*ha(i+1)*a(n-i);
  39.    % end;
  40.    %end;
  41. C(1)=-A(1);
  42. for n=2:P
  43.     C(n)=-A(n);
  44.     for m=1:n-1
  45.         C(n)=C(n)-(1-m/n)*A(m)*C(n-m);
  46.     end;
  47. end;
  48. for n=P+1:L
  49.     C(n)=0;
  50.     for m=1:P
  51.         C(n)=C(n)-(1-m/n)*A(m)*C(n-m);
  52.     end;
  53. end;
  54.         
  55. spec=fft(sw,512);
  56. scep=log(abs(spec));
  57. E=ifft(scep,512);
  58. F=real(E(1:16)');
  59.  
  60.     
  61. %for i=1:L
  62.  %   C(i)=ha(i+1);%%%%%%%%
  63.  %end;
  64.     
  65.         
  66.     
  67.