FPR.m
Upload User: xxy784
Upload Date: 2015-01-28
Package Size: 726k
Code Size: 2k
Development Platform:

Matlab

  1. %FRACTIONAL PITCH REFINEMENT
  2. %PRECONDITION:   INTPITCH(T);signal(s)(240samples,180samples of current frame and
  3. %                60samples of next frame,cT_T-
  4. %POSTCONDITION:  Fractal pitch and corresponding autocorrelation
  5. %      fp is the fractional pitch;fr is the autocorrelation
  6. %Input:
  7. %                 sig(input signal)
  8. %                 T(input integer pitch)
  9. %Output:
  10. %                 fp(fractal pitch)
  11. %                 fr(corresponding correlation)
  12. function [fp,fr]=fpr(sig,T)
  13. k=fix(T/2);
  14. %autocorrelation 
  15. c0_tm1=sig(100-k:259-k)*sig(100-k+T-1:259-k+T-1)';    %c(0,t-1)
  16. c0_t1=sig(100-k:259-k)*sig(100-k+T+1:259-k+T+1)';     %c(0,t+1)
  17. c0_t=sig(100-k:259-k)*sig(100-k+T:259-k+T)';          %c(0,t)
  18. if c0_tm1>c0_t1                                       %judge the range of fp
  19.     c0_t1=c0_t;
  20.     c0_t=c0_tm1;
  21.     T=T-1;
  22. end
  23. ct_t=sig(100-k+T:259-k+T)*sig(100-k+T:259-k+T)';      %c(t,t)
  24. c0_0=sig(100-k:259-k)*sig(100-k:259-k)';              %c(0,0)
  25. ct_t1=sig(100-k+T:259-k+T)*sig(100-k+T+1:259-k+T+1)'; %c(t,t+1)
  26. ct1_t1=sig(100-k+T+1:259-k+T+1)*sig(100-k+T+1:259-k+T+1)';  %c(t+1,t+1)
  27. %correlation parameter
  28. den=c0_t1*(ct_t-ct_t1)+c0_t*(ct1_t1-ct_t1);
  29. if abs(den)>0.01
  30.     delta=(c0_t1*ct_t-c0_t*ct_t1)/den;
  31. else
  32.     delta=0.5;
  33. end
  34. if delta<-1
  35.    delta=-1;
  36.    end
  37. if delta>2
  38.    delta=2;
  39. end
  40. fp=T+delta;    %add the offset to the integer pitch
  41. den=c0_0*(ct_t*(1-delta)^2+2*delta*(1-delta)*ct_t1+delta^2*ct1_t1);
  42. den=sqrt(den);
  43. if den>0.01
  44.     fr=((1-delta)*c0_t+delta*c0_t1)/den;
  45. else
  46.     fr=0;
  47. end
  48. if fp<20
  49.    fp=20;
  50. end
  51. if fp>160
  52.    fp=160;
  53. end