coefficient.m
上传用户:luvkyhj
上传日期:2013-06-25
资源大小:3k
文件大小:1k
源码类别:

屏幕保护

开发平台:

Matlab

  1. %clear all;%计算共振峰参数的仿真
  2. function [f2,f3,q2,q3]=coefficient(x)
  3. x=double(x);
  4. x=x/max(abs(x));
  5. x=filter([1 -0.9375],1,x);
  6. w=1/6+sin(pi*[1:12]./12);
  7. w=w/max(w);
  8. w=w*0.375;
  9. [x1,x2]=vad(x);
  10. y=enframe(x,160,80);
  11. x2=floor(x2);
  12. f=zeros(1,500);
  13. q=1;
  14. for m=x1:x2
  15.     xs=y(m,:);
  16.     a=lpc(xs,12);
  17.     a=real(a(2:13));
  18.     lpcc=lpc2lpcc(a);
  19.     lpcc=lpcc'.*w;
  20.     formant=fft(lpcc,64);
  21.     for p=2:33
  22.         if ((abs(formant(p-1))<abs(formant(p)))&&(abs(formant(p))>abs(formant(p+1))))
  23.             f(q)=8000*(p-1)/64;
  24.             q=q+1;
  25.         else
  26.             continue;
  27.         end
  28.     end
  29. end
  30. q2=1;
  31. q3=1;
  32. %f2=zeros(1,q);
  33. %f3=zeros(1,q);
  34. for q1=1:q
  35.     if (800<f(q1))&&(f(q1)<1300)
  36.         f2(q2)=f(q1);
  37.         q2=q2+1;
  38.     elseif (1300<f(q1))&&(f(q1)<2650)
  39.         f3(q3)=f(q1);
  40.         q3=q3+1;
  41.     else
  42.         continue;
  43.     end
  44. end
  45. q2=length(f2);
  46. q3=length(f3);
  47. temp=f2(1);
  48. %去除毛刺
  49. for i=2:q2-1
  50.     temp1=(temp+f2(i)+f2(i+1))/3;
  51.     temp=f2(i);
  52.     f2(i)=temp1;
  53. end
  54. temp=f3(1);
  55. for i=2:q3-1
  56.     temp1=(temp+f3(i)+f3(i+1))/3;
  57.     temp=f3(i);
  58.     f3(i)=temp1;
  59. end
  60. %subplot(2,1,1),plot(f2),axis([1 q2 800 1300]),title('第二共振峰轨迹');
  61. %subplot(2,1,2),plot(f3),axis([1 q3 1300 2650]),title('第三共振峰轨迹');