function [envelope] = envelope_lpc( signal, fft_size , p, fth )
%ENVELOPE_LPC Calculate the spectrum envelope of input signal using LPC 
%
%   Input:
%       signal: signal to calculate envelope for
%       fft_size: FFT size
%       p: LPC prediction coefficient
%       fth: threshold for normalization (optional)
%
%   Output:
%       envelope: log signal envelope
%
%--------------------------------------------------------------------------
% 23.07.2012 - initial version (TM)
%--------------------------------------------------------------------------

% Calculate envelope
[a, e] = lpc(signal,p);
A = fft(a,fft_size);
%A = sqrt(e*fft_size)./A(1:fft_size/2+1);
envelope = 20*log10(abs(A).^2+eps);

if nargin > 3
    % Normalize by low frequency power
    S = fft(signal,fft_size);
    power = sum(abs(S(1:fth)).^2);
    envelope = envelope./power;
end

end