from MELP source code by Oleg Basov
MELP encoder and decoder in Matlab

[fp,fr]=fpr(sig,T)
function [fp,fr]=fpr(sig,T) 
%      
% :   sig - 240 : 180  
                                    %   60   
%  : 
%   sig -   
%   T   -     
% Output: 
%   fp  -    
%   fr  -   

k=fix(T/2); 
%  
c0_tm1=sig(100-k:259-k)*sig(100-k+T-1:259-k+T-1)'; % c(0,t-1) 
c0_t1=sig(100-k:259-k)*sig(100-k+T+1:259-k+T+1)';  % c(0,t+1) 
c0_t=sig(100-k:259-k)*sig(100-k+T:259-k+T)';       % c(0,t) 
if c0_tm1>c0_t1 %  fp 
    c0_t1=c0_t; 
    c0_t=c0_tm1; 
    T=T-1; 
end 
ct_t=sig(100-k+T:259-k+T)*sig(100-k+T:259-k+T)';            % c(t,t) 
c0_0=sig(100-k:259-k)*sig(100-k:259-k)';                    % c(0,0) 
ct_t1=sig(100-k+T:259-k+T)*sig(100-k+T+1:259-k+T+1)';       % c(t,t+1) 
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) 

%  
den=c0_t1*(ct_t-ct_t1)+c0_t*(ct1_t1-ct_t1); % delta
if abs(den)>0.01 
    delta=(c0_t1*ct_t-c0_t*ct_t1)/den; %   
else
    delta=0.5;
end 
%      
if delta<-1 
    delta=-1; 
end 
if delta>2 
    delta=2; 
end 

fp=T+delta; %      
%   
den=c0_0*(ct_t*(1-delta)^2+2*delta*(1-delta)*ct_t1+delta^2*ct1_t1); 
den=sqrt(den); 
if den>0.01 
    fr=((1-delta)*c0_t+delta*c0_t1)/den; 
else
    fr=0;
end 
%      
if fp<20 
    fp=20; 
end 
if fp>160 
    fp=160; 
end

Contact us at files@mathworks.com